Now throws UnimplementedError if there's a percentage cutoff and sorting is primarily by value - this has never been correctly supported and it's better to warn people than give incorrect results.

No longer needlessly copies the results internally.

When searching multiple databases, now recalculates the maximum attainable weight after each database which may allow it to terminate earlier. (ticket#336).

Fix inconsistent percentage scores when sorting primarily by value, except when a MatchDecider is also being used; document this remaining problem case. (ticket#216)

Enquire::set_sort_by_value() (and similar methods): Rename the wrongly named "ascending" parameter to "reverse", and note that its value should always be explicitly given since defaulting to "reverse=true" is confusing and the default will be deprecated in 1.1.0. (ticket#311)

Database::allterms_begin(): Fix memory leak when iterating all terms from more than one database.

Query::get_terms_begin(): Don't return "" from the TermIterator (happened when the query contained or was Query::MatchAll).

Add QueryParser::FLAG_DEFAULT to make it easier to add flags to those set by default.

testsuite:

The testsuite now reports problems detected by valgrind with newer valgrind versions. Drop support for running the testsuite under valgrind < 3.3.0 (well over a year old) as this greatly simplifies the configure tests.

Disable lockfileumask1 (regression testcase added in 1.0.10) on Cygwin and on OS/2.

flint backend:

The configure test for pread() and pwrite() got accidentally disabled in 0.8.4 and we've always been using llseek() followed by read() or write() since then. The configure test is now fixed, and gives a slight speedup (3% measured for searching).

The child process used to implement WritableDatabase locking now changes directory to / so that it doesn't block unmounting of any partitions and closes any open file descriptors which aren't relating to locking so that if those files are closed by our parent and deleted the disk space gets released right away.

We now reuse the same zlib zstream structures rather than using a fresh one for each operation. This doesn't make a measurable difference in our own tests on Linux but reportedly is measurably faster on some systems. (ticket #325)

Store the (non-normalised) document lengths as Xapian::termcount (unsigned int) rather than Xapian::doclength (double) which saves 4 bytes per document.

build system:

configure: The output of g++ --version changed format (again) with GCC 4.3 which meant configure got "g++" for the version. Instead use the (hopefully) more robust technique of using g++ -E to pull out __GNUC__ and __GNUC_MINOR__.

documentation:

API documentation:

WritableDatabase::flush() can't throw DatabaseLockError.

WritableDatabase's constructor can throw at least DatabaseCorruptError or DatabaseLockError.

Document how to get all matches from Enquire::get_mset().

Other minor improvements.

docs/sorting.html: Clarify meaning.

portability:

Fix "#line" directives in generated file queryparser/queryparser_internal.cc to give a relative path - previously they had a full path when generated by a VPATH build (as release tarballs are), and this confused GCC 2.95 and depcomp.

Fix for compiling with Sun's compiler (untested as we no longer have access to it).

Omega 1.0.11:

documentation:

cgiparams.html: Note the technique of using a stub database file to allow a default of searching over multiple databases.

Fix "-l" which would previously always cause a segmentation fault if used ("--depth-limit" wasn't affected).

build system:

configure: The output of g++ --version changed format (again) with GCC 4.3 which meant configure got "g++" for the version. Instead use the (hopefully) more robust technique of using g++ -E to pull out __GNUC__ and __GNUC_MINOR__.

configure: Turn on _FORTIFY_SOURCE where available (as we do in xapian-core).

portability:

Fix to compile when RLIMIT_AS isn't available (as on NetBSD and OpenBSD). Instead use RLIMIT_VMEM or RLIMIT_DATA if either is available, else don't try to limit the memory the filter process can use.

Xapian-bindings 1.0.11:

Documentation:

README: Note that 1.0.x doesn't (and isn't currently planned to) support Python 3, and possible current issues with Ruby 1.9.

Portability:

Merge fixes from Cygwin Ports, so bindings should build out of the box on Cygwin.

Python:

python/docs/examples/: Use str(obj) rather than obj.get_description() (the latter is deprecated, and support was removed in 1.0.0).

Add support for using the new name ("reverse") for the second argument of set_sort_by_key() and set_sort_by_value() and friends as a named parameter. The old name ("ascending") is still supported, but will be deprecated in 1.1.0.

Keep Python references to Sorter, Stopper, and ValueRangeProcessor objects which get set on other objects to avoid segmentation faults if they go out of scope before the object they are set on does. (ticket#341)

Ruby:

Fixes for Ruby 1.9 compatibility (ticket#323). The test harness currently fails so "make check" doesn't pass, but code using the bindings should work.