Update for 1.4.26
[xapian.git] / xapian-core / NEWS
blob30e53b725514b79a6ea940ae121eb183a299221f
1 Xapian-core 1.4.26 (2024-07-18):
3 API:
5 * Weight: Document that Weight statistics DOC_LENGTH_MIN, DOC_LENGTH_MAX and
6   WDF_MAX are for the shard rather than the whole database.  Usually this is
7   what we want as with a sharded database it gives tighter bounds and so better
8   match optimisation, but it does make them unsuitable for uses such as
9   calculating a suitable offset to add to every get_sumextra() to allow
10   implementing a weighting formula which can give a negative term independent
11   weight contribution.  This case will be addressed in the next release series
12   which also provides bounds such as DB_DOC_LENGTH_MIN which are for the whole
13   database.
15 * LMWeight: This class was meant to implement the "Language Model" Weighting
16   scheme, but we've discovered the implementation was incorrect and fixing it
17   requires ABI-incompatible changes.  For 1.4.x we need to leave it in place so
18   as not to break existing code, but it's now deprecated and we recommend
19   avoiding using it.  It will be removed in the next release series and
20   replaced with new separate classes implementing Language Model weighting with
21   each smoothing.  Thanks to Sourav Saha for reporting this problem.
23 * PL2PlusWeight: Fix bug in implementation of formula.  Our variable mean is
24   1/lambda_t from the PL2+ paper, so we need to check mean>1 for lambda_t<1 but
25   we were actually checking mean<1 instead.  The result of this is that PL2+
26   actually returned a zero weight unless the term occurred frequently enough in
27   the collection.
29 * TradWeight::get_maxpart() no longer forces the wdf_max value to be at least
30   one.  We used to do this so that a non-existent term in the query would cause
31   it not to achieve 100%, but now we calculate percentages based on the number
32   of matching subqueries, and it is more natural for a non-existent term to get
33   zero weight (ditto for a term which always has wdf 0).  This was already
34   addressed for BM25Weight in 1.2.1 back in 2010.
36 * Enquire::set_expansion_scheme(): Add "prob" as new preferred name for
37   probabilistic query expansion, with the previous "trad" still being accepted
38   for now.
40 * QueryParser::set_prefix() and set_boolean_prefix(): Allow an optional
41   trailing `:` on the field name.  This makes the API here more consistent with
42   ranges, where you need to include the `:` if you want one.  See #720.
44 testsuite:
46 * Catch and report if a testcase causes signal SIGPIPE.
48 * Suppress valgrind errors about calling memmove() with overlapping source and
49   destination (which is valid, valgrind is just confused when memcpy() and
50   memmove() share an implementation).
52 * Add more testing of weighting schemes.
54 * Mark checkstatsweight3 with a sharded database as XFAIL (expected to fail).
55   This testcase was previous not run for sharded databases, with a FIXME
56   comment noting this.  Investigating shows it's due to a bug where we use the
57   shard's termfreqs rather than those for the whole database for an expanded
58   wildcard, but this seems complex to fix.
60 matcher:
62 * Fix minor wildcard weighting bug spotted while reading the code.  We were
63   returning too high a value from the first call to get_maxpart() in some
64   cases.  Mostly this just means the matcher continue working when it could
65   have stopped, but it will also cause MSet::get_termweight() to return a
66   higher value than the actual known upper bound.
68 glass backend:
70 * Simplify file descriptor handling for lock files on Unix-like platforms
71   which don't support OFD locks.  This eliminates corner cases where we
72   could end up with file descriptors without close-on-exec set in the main
73   process.
75 remote backend:
77 * xapian-tcpsrv: Use _exit() instead of exit() to end child processes which
78   avoids the risk of duplicated output from stdio buffers getting copied by
79   fork() then flushed in both processes.
81 * Simplify file descriptor handling when launching prog remote.
83 inmemory backend:
85 * Fix bug adding posting entries.
87 build system:
89 * Improve probe for -Bsymbolic-functions.  MSVC doesn't support this flag, but
90   it only emits a warning when it is used and that warning didn't match any of
91   the patterns we already check for so we were detecting it as supported.
93 * Report result of probe to determine compiler support for -Werror or
94   equivalent.
96 documentation:
98 * Improve MSVC build instructions.  Thanks to Baran Demir for feedback.
100 * Improve formatting of stat_flags API documentation.
102 * sorting.rst: Replace custom weighting scheme documentation with a link to the
103   more complete equivalent in "Getting Started with Xapian".
105 * remote.rst: Update to reflect that user metadata is fully supported (since
106   1.2.4).
108 portability:
110 * Fix to compile as C++20 and C++23.
112 * Resolve SIGPIPE issues on NetBSD, which were causing testcase keepalive1 to
113   fail.  These seem to be due to SO_NOSIGPIPE not working correctly there so
114   we now use MSG_NOSIGNAL instead for NetBSD.
116 * Include <errno.h> for sys_errlist.  We already do this for the configure
117   check but were failing to when actually using sys_errlist, which probably
118   affects at least NetBSD.
120 * configure: Fix clang detection which wasn't working when configure determined
121   a -std=X option was needed to get C++11 support.  The obvious symptom was
122   that --enable-werror wouldn't add -Werror.
124 * configure: NetBSD automatically pulls in library dependencies, so set
125   link_all_deplibs_CXX=no there.
127 * Avoid using sprintf() if snprintf() is available, even in cases where the
128   output size is bounded, to avoid deprecation warnings on macOS.  For 1.4.x
129   we still fall back to sprintf() to avoid a point release breaking support
130   for any platform still lacking snprintf().
132 * Stop linking with --enable-runtime-pseudo-reloc.  We were requiring this for
133   cygwin and mingw, but from the documentation it should only be needed for a
134   library which exports data symbols, which we don't do, and the build works
135   without it.
137 * Use `override` for subclassing functors.  This is good practice as it gives a
138   clear compile error if we have to change the signature of an virtual method
139   on such a functor.  See #830.
141 * Avoid redefining MSVC-specific macros if they are already defined.  This
142   avoids an MSVC warning and potential for the code to be ill-formed if the
143   user defines these macros with a value other than 1.  Patch from A. Jiang
144   (https://github.com/xapian/xapian/pull/334).
146 Xapian-core 1.4.25 (2024-03-08):
148 API:
150 * MSet::get_eset(): Don't fetch the collection frequency for each term unless
151   we're using the Bo1EWeight expansion scheme which actually needs it.  In a
152   simple test this reduced the time taken to do a search and generate expand
153   terms by a third.  Partly addresses #264.
155 * QueryParser::parse_query(): Fix parse error when using FLAG_CJK_NGRAM (aka
156   FLAG_NGRAMS) with a query string which has non-CJK followed by whitespace,
157   CJK, and more non-CJK.  Patch from Robert Stepanek
158   (https://github.com/xapian/xapian/pulls/331).
160 testsuite:
162 * unittest: Improve sparse file detection by using SEEK_HOLE, which is
163   specified by POSIX and seems to be widely supported.  On platforms without it
164   or on an FS with a > 128K block size we will skip the tests involving a 4GB
165   file, but that's acceptable.  On ZFS st_blocks reports the number of blocks
166   after compression and also lags behind when data has only been committed to
167   the journal, which means our previous check based on st_blocks couldn't be
168   made to work without potentially falsely detecting sparse file support.
169   Fixes #823, reported by someplaceguy.
171 * apitest: Enable adddoc2 and adddoc5 testcases for sharded databases.  We
172   now just skip the TermIterator::get_termfreq() checks in this case.
174 glass backend:
176 * Check Btree level value from disk is in range, which avoids potential out of
177   range access on corrupt database.  Fixes #824, reported by group13.
179 * Reject invalid blocksize read from corrupted version file.  Throw
180   DatabaseCorruptError if value is out of range or not a power of two.
182 * Optimise allterms iteration.  Most terms don't contain any zero bytes, and
183   for such terms the key for the first chunk in the termlist table is just the
184   termname so no decoding is needed when advancing the iterator.  This
185   optimisation is 8.4% faster in a simple test of iterating allterms via
186   xapian-delve.
188 * Compaction of an empty non-optional table now gives an empty output, whereas
189   previous it was one block in size (8K by default).  This isn't important in
190   general as the non-optional tables are not likely to be empty in a real
191   database, but it's helpful for making small test database and it seems weird
192   that compaction would make a database much larger in percentage terms in this
193   edge case.
195 chert backend:
197 * Check Btree level value from disk is in range, which avoids potential out of
198   range access on corrupt database.  Fixes #824, reported by group13.
200 build system:
202 * configure: DragonflyBSD automatically pulls in library dependencies, so set
203   link_all_deplibs_CXX=no there.
205 documentation:
207 * Document allterms_begin() and termlist_begin() iteration order.  Thanks to
208   Eric Wong for querying this.
210 * Document TermIterator::get_termfreq() quirk.  In the case of a TermIterator
211   from termlist_begin() on a Document from a sharded database, you get term
212   frequencies from just the shard.  Fixes #423
214 portability:
216 * Support building on platforms without AI_NUMERICSERV (e.g. macOS 10.5).
217   Patch from Sergey Fedorov.
219 Xapian-core 1.4.24 (2023-11-06):
221 testsuite:
223 * apitest: Add coverage that docids generated by replace_document() don't wrap
224   to nomoredocids1 testcase.
226 * unittest: Improve block file functions unit test which were (unintentionally)
227   trying to test with a 4TB sparse file, which not all platforms support.  A
228   file just over 4GB is enough to test what we want, and if we trying to create
229   one fails with errno EFBIG, indicating the file size is too large, we now
230   skip the rest of the testcase.
232 * unittest: Catch Xapian::Error exceptions and rethrow the std::string returned
233   by get_description() as the utestsuite harness doesn't know about
234   Xapian::Error so was confusingly reporting it as "UNKNOWN EXCEPTION".
236 * The testsuite no longer reports NULL as the address associated with a
237   signal when running on a platform without both sigaction() and SA_SIGINFO.
239 matcher:
241 * Reorder fields in each MSet entry to avoid structure padding on x86-64
242   probably other 64-bit platforms.  This reduces the memory needed to hold an
243   MSet by 8 bytes per entry on such platforms.
245 glass backend:
247 * Eliminate unnecessary memory allocations.  When committing changes, we were
248   allocating blocks for all possible levels of the built-in cursor in each
249   writable table, even those levels that weren't in use.
251   The worst case is a really small database with all optional tables existing
252   which would have 54 unused allocations of blocksize + 8 bytes, which with the
253   default 8K block size is ~432KB per WritableDatabase; if you explicitly ask
254   for 64K block size it'll be ~3.4MB.
256   For a more typical WritableDatabase it's probably going to be more like half
257   these numbers.
259 build system:
261 * Add --enable-werror configure option.
263 * configure: Only auto-enable -D_FORTIFY_SOURCE=2 if it works without
264   additional libraries and remove the hard-coded block against using it
265   on mingw.  Mingw-w64 v11.0.0 eliminated the requirement to link with -lssp
266   and with this change we now auto-enable -D_FORTIFY_SOURCE=2 for it.
268 portability:
270 * We now avoid triggering SIGPIPE in library code on most platforms.
272   On Unix-like platforms we want to avoid generating SIGPIPE when writing to a
273   socket when the other end has been closed since signals break the
274   encapsulation of what we're doing inside the library - either user code would
275   need to handle the SIGPIPE, or we set a signal handler for SIGPIPE but that
276   would handle *any* SIGPIPE in the process, not just those we might trigger,
277   and that could break user code which expects to trigger and handle SIGPIPE.
279   We don't need SIGPIPE since we can check errno==EPIPE instead (which is
280   actually simpler to do).
282   It seems all current Unix-like platforms now support SO_NOSIGPIPE or
283   MSG_NOSIGNAL, so currently we just fall back to setting SIGPIPE to SIG_IGN.
284   If there are actually current platforms which have SIGPIPE without
285   SO_NOSIGPIPE or MSG_NOSIGNAL then we can look at other ways to avoid
286   generating the signal.
288 * Avoid MSVC warning C4312 which is a reasonable warning in general, but in
289   this case we checked that the value wasn't truncated when cast to an int.
291 * Use TEST_EQUAL_DOUBLE in netstats1 testcase which fixes testcase failure on
292   FreeBSD.
294 * Address GCC13 -Wredundant-move warnings.  In 1.4.10 we added std::move()
295   here to address clang warnings from -Wreturn-std-move (enabled by -Wall).
296   Just removing the std::move() reintroduces those warning with clang 8 and
297   clang 11 (but not clang 13 or later) but changing to apply a static_cast
298   to the returned type seems to make all versions of both compilers happy.
300 * Fix build with UCRT64 variant of mingw-w64 by stopping defining
301   __MSVCRT_VERSION__ by default.  It looks like doing so hasn't been needed
302   since 2015.
304 * Add workaround for testsuite failures under Wine where attempting to unlink a
305   stub file sometimes fails with errno == EACCES and _doserrno ==
306   ERROR_SHARING_VIOLATION.  This is what you'd get if the file was still open,
307   but we've already closed it.  Sleeping for a second and retrying makes it
308   work, so we now do that.  It'd be better to get to the bottom of what's going
309   on, but I've run out of ideas and this workaround is only in the testharness
310   at least.
312 debug code:
314 * xapian-inspect:
316   + `goto` and `until` now go to the entry *after* the specified key if there's
317     no exact match, which seems more natural.
319   + New `count` command.  This is actually just the same as `until` which
320     already reports a count of the number of entries advanced by, except that
321     `count` suppresses printing each entry.
323 Xapian-core 1.4.23 (2023-07-07):
325 API:
327 * Add `FLAG_NGRAMS` as a preferred new alias for `FLAG_CJK_NGRAM` and
328   `SNIPPET_NGRAMS` as a preferred new alias for `SNIPPET_CJK_NGRAM`.
329   In the next release series these features have been expanded to cover many
330   more languages so the "CJK" in the name has become inaccurate as it stands
331   for "Chinese, Japanese and Korean").
333 * Database::check(): Improve the exception message for an empty filename from
334   "Failed to rewind file descriptor -1 (Bad file descriptor)" to "Couldn't find
335   Xapian database or table to check (No such file or directory)".
337 testsuite:
339 * The test harness now supports generated databases for all backends and
340   all testcases which can use generated databases now do, which together
341   improve test coverage as we now run many testcases under more backends.
342   Generated databases can also be cached, which helps speed up the test
343   suite.
345 * Remove some testcases which are now redundant with other testcases or
346   no longer useful for other reasons.
348 * Add regression test for #781, reported by Germán M. Bravo.  This bug was
349   fixed 4 years in 1.4.12 but a clean regression test only became possible
350   thanks to changes in this release.
352 * The test harness would attempt to throw a Xapian::Database (rather than
353   Xapian::DatabaseError) if it failed to rename a temporary database to its
354   final name.  This would fail because there wasn't a database called "rename
355   failed".  Reported by stark3y on #xapian.
357 * apitest: Fix exceed32bitcombineddb1 testcase (which only runs with
358   --enable-64bit-docid).
360 * apitest: Fix nomoredocids1 when configured with --enable-64bit-docid.
362 * Add testcase for removal of positions for replaced doc (regression test for
363   bug in git master not present in 1.4.x).
365 * unittest: Unit test block file functions
367 * Stop using std::endl in tests since this seems to be C++ best practice
368   as it causes a flush of the stream, which is rarely actually wanted.  Also
369   often the replacement \n can be combined with a string literal.
371 * Use Xapian::docid for document ids in testcases.  Using `int` or `size_t`
372   works, but is less correct and can trigger compiler warnings because not all
373   values are representable.
375 matcher:
377 * BM25PlusWeight: With some parameter combinations we were requesting stats we
378   didn't actually need.  Confirmed with Vivek Pal on IRC.
380 glass backend:
382 * Avoid unnecessary copying of data when adding an item to a B-tree table which
383   should speed up indexing a bit.
385 * xapian-check: If the first chunk for a term is a continuation chunk, the
386   affected term was missing from the error message.
388 * xapian-check: We now report the document id as context in many more error
389   messages.
391 chert backend:
393 * Fix wdf upper bounds used when search a modified chert-format
394   WritableDatabase object.  A bug introduced in 1.4.19 meant we were using the
395   wdf upper bounds from the last committed version of the database.  This bug
396   could cause assertion failures when configured with --enable-assertions.
398 remote backend:
400 * Fix thread-safety issue starting remote prog server.  Previously we did some
401   memory allocation in the child process after fork() but before we exec-ed the
402   specified program, but in a multi-threaded program (which libxapian might be
403   used in) it's only safe to call async-signal-safe functions in the child
404   process after fork() until exec, and malloc, etc aren't async-signal-safe.
406 * If we failed to open /dev/null in the child process while starting a remote
407   prog server, we would try to throw an exception.  That's not going to work
408   well so now we just call `_exit(-1)`.
410 inmemory backend:
412 * Throw exception on docid overflow like we do in other backends.
414 build system:
416 * configure: When probing for socklen_t or equivalent include the same headers
417   as we do in the code to reduce the risk of configure deciding to use
418   socklen_t but it not getting defined in the code.
420 * configure: When probing if a particular compiler or linker option is
421   supported, we were relying on the compiler exit status but some compilers
422   only warn about unknown options.  We now inspect the compiler's stderr
423   output to try to detect such cases.
425 * configure: Avoid compiler warning during GCC version check when compiler
426   needs an option to enable C++11 support.
428 * Avoid running pwd since the directories we need are available in automake
429   variables.
431 documentation:
433 * Suggest protocol buffers for structured document data.  Fixes #53.
435 * Clarify documentation for release() methods.
437 * Fix typo "shared database" to "sharded database" in API docs.
439 * Document that transactions aren't atomic across shards.
441 tools:
443 * xapian-progsrv,xapian-tcpsrv: Support multiple DBs with --writable.
445 * xapian-tcpsrv: Fix default timeouts in --help output which have been reported
446   as the name of the constant rather than its value since 1.3.3.
448 * xapian-tcpsrv: When --one-shot is specified, don't do the usual test open of
449   the specified database(s) as it doesn't really seem useful in this case.  The
450   test harness uses --one-shot so this reduces overhead when running remote
451   tests.
453 * Stop using std::endl in tools since this seems to be C++ best practice
454   as it causes a flush of the stream, which is rarely actually wanted.  Also
455   often the replacement \n can be combined with a string literal.
457 portability:
459 * Don't pass mode to open when it's unused as this triggers "missing O_CREAT or
460   O_TMPFILE?" warnings when compiling for Android.
462 * Stop using INFINITY macro.  If the implementation supports floating point
463   infinities then HUGE_VAL gives us infinity as a double directly.  If not,
464   then it's the maximum finite value of a double.
466 * Don't auto-enable _FORTIFY_SOURCE on mingw or mingw-w64.  Enabling
467   _FORTIFY_SOURCE on newer mingw-w64 requires linking with -lssp so we
468   attempted to stop automatically enabling it there in 1.4.19 but this fix
469   didn't actually work.  Trying to get this to work automatically has proved
470   difficult and I couldn't find evidence that _FORTIFY_SOURCE was actually
471   supported on mingw.  If it is, enabling manually will still work.
473 * Fix mingw32 build with C++17 compiler, which ends up with std::byte
474   conflicting with byte typedefs in system headers, due to us having `using
475   namespace std;` in some of our internal headers.  Switch the ones which
476   are causing problems to more targetted `using std::string;`, etc instead.
478 * Fix WIN32 build with --disable-backend-remote which was failing because we
479   were always trying to build common/socket_utils.cc which fails because
480   SOCKLEN_T hasn't been probed.  Fixes #821, reported by mgautier.
482 * soaktest: Use C++11 <random> which is more portable than random().
484 * In WIN32 builds, pass the program pathname separately to CreateProcess()
485   which is apparently more robust if the program pathname contains spaces.
487 * Stop trying to set Microsoft-specific SO_EXCLUSIVEADDRUSE option on our
488   listening sockets.  It's not possible to set both SO_REUSEADDR and
489   SO_EXCLUSIVEADDRUSE so this call will always fail with WSAEINVAL, but we
490   were ignoring these errors because SO_EXCLUSIVEADDRUSE required admin
491   privileges in older OS versions.
493 * Suppress MSVC deprecation warning for GetVersionEx since none of the
494   suggested replacements seems to actually provide the functionality we are
495   using from it.
497 * Fix some warnings from MSVC in the fallback code for overflow-checked
498   arithmetic.
500 * Support Enquire::set_time_limit() on GNU Hurd since Hurd now implements
501   timer_create().
503 * Remove lingering traces of IRIX support as it's been dead for many years.
505 debug code:
507 * Fix build failure with --enable-assertions due to incorrect variable name in
508   assertion.  Patch from Alexei Kharchev in
509   https://github.com/xapian/xapian/pull/327.
511 * Fix GCC warning with --enable-log.
513 * Fix debug logging for 3 GlassDatabase methods to log their parameter.
515 * Add a mechanism to support debug logging templated return types containing
516   commas.  This was added to fix a build failure on master with --enable-log
517   reported by ttyS3.
519 Xapian-core 1.4.22 (2023-02-02):
521 testsuite:
523 * Expand canceltransaction1 to test value changes are rolled back.
525 matcher:
527 * Minor optimisations to DPHWeight and TfIdfWeight weighting formulae
528   calculations.
530 * Optimise LatLongDistancePostingSource to avoid pow() call on each document
531   with default k2 setting.
533 glass backend:
535 * Fix bug in recovery from WritableDatabase::commit() failing.
537   If renaming to switch the new version file live fails (e.g. due to the disk
538   being full) we discard the changes, try to write and switch to a different
539   new version file with an increased revision (on failure of this too we close
540   the database), then throw DatabaseError.
542   Unfortunately the roll-back of state is not complete, and if we successfully
543   switch to the different new version file then that bad state persists on
544   disk.
546   In order for this bug to manifest, repeating essentially the same operation
547   which just failed needs to succeed which seems more likely to be a happen
548   when using a filing system which has more sophisticated freespace handling
549   (the reporter was using btrfs), though it's possible with any FS if another
550   process frees up disk space in the small window between the two operations.
552   Thanks to Uwe Kleine-König for reporting and especially for coming up with an
553   easy way to reproduce.
555 build system:
557 * configure: Enable -fno-math-errno if supported.  We don't make use of maths
558   function setting errno and if we tell the compiler that it can optimise them
559   better in some cases.
561 documentation:
563 * INSTALL: Document assumptions about platform features
565 * INSTALL: Add section on clang version requirements.
567 Xapian-core 1.4.21 (2022-09-22):
569 glass backend:
571 * Avoid throwing InvalidArgument when searching for overlong terms in some
572   cases.  Such terms can't match, but are valid to query for.  Patch from
573   Robert Stepanek in https://github.com/xapian/xapian/pull/313.
575 chert backend:
577 * Avoid throwing InvalidArgument when searching for overlong terms in some
578   cases.  Such terms can't match, but are valid to query for.
580 build system:
582 * Clean up cygwin and mingw configure checks.  When we check $host_os, always
583   anchor at the start (e.g. cygwin* not *cygwin*), and check for msys* as well
584   since that's a derivative of cygwin and behaves similarly for the things
585   we're checking here.
587 * Update to use AX_CXX_COMPILE_STDCXX which is a replacement for
588   AX_CXX_COMPILE_STDCXX_11 (which we were using) which also supports newer C++
589   standards versions which will be useful.  For C++11 the only difference seems
590   to be that the macro now checks for attribute support - we use C++11
591   attributes so that seems a good thing.
593 documentation:
595 * INSTALL: Restructure MSVC section for clarity.
597 * INSTALL: Mention -D_FORTIFY_SOURCE=3 too (fairly new - requires GCC 12).
599 * Consistently say "macOS" not "Mac OS X", "OS X", etc.
601 * admin_notes.rst:
603   + Update locking section to cover Open File Description locks
605   + Add some discussion of block sizes (fixes #819, reported by mgautier)
607   + Fix cut-and-paste error - we were suggesting that the docdata table only
608     exists if there's positional data.  Noted by Gaurav Arora.
610   + Improve markup
612 examples:
614 * Stop using std::endl in examples since this seems to be C++ best practice
615   as it causes a flush of the stream, which is rarely actually wanted.  Also
616   often the replacement \n can be combined with a string literal.
618 portability:
620 * Stop trying to check for incompatible C++ ABI between the compiler used to
621   build xapian-core and the compiler used to build code using xapian-core.
623   This check was helpful in the GCC 3 days, but ABI versions 2 and up are
624   compatible aside from obscure corner cases, and GCC now defaults to using the
625   latest ABI version it supports.  The result is that this check is no longer
626   useful enough to justify the noise.
628   We still check for incompatible _GLIBCXX_DEBUG between the library and
629   application builds, since that will cause things not to work, and the normal
630   error message doesn't make it clear what's wrong.
632   Reported by David Bremner.
634 * Fix new warnings from GCC 12.
636 * Avoid undefined value use when unpacking a key in a corrupted glass docdata
637   table.  We now skip further checks on the entry in this case.
639 * Merge allocations in MSVC directory reading compatibility code so we can
640   allocate in a single malloc() call.
642 * Add accept() wrapper which checks an assumption that Microsoft's SOCKET type
643   only actually holds 32 bit values even in 64 bit platforms and throws an
644   exception if violated.
646 * Eliminate a use of sprintf.
648 * Squash some unhelpful MSVC deprecation warnings.
650 * Declare dummy invalid parameter handler noexcept to fix a warning from MSVC.
652 * Include <stdlib.h> in configure check for sys_errlist as that's where it is
653   with mingw and MSVC.
655 debug code:
657 * Fix debug logging for Xapian::Internal::intrusive_ptr<const T>.
659   GCC 12.2 warned about infinite recursion in the old version, and this seems
660   to be the case.  This code has been there a long time, but is only used when
661   debug logging is enabled.  It does seem to be used, so presumably nobody's
662   tried to log something which triggered it.
664 Xapian-core 1.4.20 (2022-07-04):
666 API:
668 * Throw DatabaseNotFoundError when the database directory doesn't exist or
669   when it doesn't contain a Xapian database.  Patch from Germán Méndez Bravo
670   in https://github.com/xapian/xapian/pull/258
672 * Improve exception message for attempting to remove an empty term (the
673   exception type is still InvalidArgumentError).  Reported by David Bremner.
675 testsuite:
677 * Enable queryparser testcase for OR under NEAR, which has been supported since
678   1.4.3.
680 * Expand some query-related testcases.
682 matcher:
684 * Optimise when a value range is a superset of the slot bounds but the value
685   slot frequency is not equal to the document count by replacing the lower
686   bound with an empty string to make the bounds check very cheap.
688 * Avoid creating a PostList tree for an empty shard.  This avoids pointless
689   work in an uncommon case, but also by handling this up front the code in
690   PostList subclasses for query operators can assume the shard isn't empty
691   which simplifies the code in several places.
693 * Remove lingering handling for database backends without slot bounds since
694   all backends have been required to support these since 1.4.11.
696 * Fix collection frequency estimates for positional operators.  This affects
697   the weighting of positional operators in subqueries of OP_SYNONYM with
698   weighting schemes which use the collection frequency.
700 glass backend:
702 * xapian-check: Test decompress data in the spelling and synonym tables.
703   We don't have structure checking for these tables, but we can at least fetch
704   each entry and check for decompression problems.
706 * Improve error if a block is detected as overwritten in WritableDatabase.
707   Drop "are there multiple writers?" as it's rarely a useful question to ask
708   since we started using fcntl() locking as it's now very hard to get multiple
709   concurrent writers on a database.  Instead suggest running xapian-check,
710   which is probably the best next step for a user who hits this problem.
712 documentation:
714 * Document precedence of NEAR and ADJ.
716 * INSTALL: Note that MSVS 2022 works.
718 tools:
720 * quest: Add --freqs option to show term frequencies.
722 * xapian-delve -v: Show value slot bounds and freq
724 portability:
726 * Fix to build with a C++20 compiler.
728 * configure now probes for a declaration of strerror_r() before using it, since
729   a declaration is required in C++ code.
731 * MSVC: Use intrinsics to implement addition with overflow check.
733 Xapian-core 1.4.19 (2021-12-31):
735 API:
737 * New QueryParser::FLAG_NO_POSITIONS flag.  With this flag enabled, any query
738   operations which would use positional information are replaced by the nearest
739   equivalent which doesn't (so phrase searches, NEAR and ADJ will result in
740   OP_AND).  This is intended to replace the automatic conversion of OP_PHRASE,
741   etc to OP_AND when a database has no positional information, which will no
742   longer happen in the release series after 1.4.
744 * Give a compile error for code which adds a Database to WritableDatabase.
746   Prior to 1.4.19, this compiled and effectively created a "black-hole" shard
747   which quietly discarded any changes made to it.
749   In 1.4.19 it's still possible to perform this operation by assigning the
750   WritableDatabase to a Database first, which is harder to fix.  This case
751   throws an exception on git master where it's easier to address.
753   Reported by David Bremner on #xapian.
755 * Fix TermIterator::skip_to() with sharded databases which sometimes was
756   failing to advance all the way to the requested term.  Uncovered while
757   addressing warning from GCC's -Wduplicated-cond, reported by dcb in #816.
759 * Clamp edit distance to one less than the length of the word we've been asked
760   to correct, which makes the algorithm we use more efficient.  We already
761   require suggestion to have at least one character in common, so the only
762   change to suggestions is we'll no longer suggest corrections which are
763   twice as long or longer even if the edit distance would allow it, which
764   seems like an improvement in itself.
766 * Minor optimisation expanding wildcards.
768 * PostingIterator::get_description(): For an all-docs iterator on a glass
769   database, get_description() would call get_docid() which isn't valid to
770   do once the iterator has reached the end.
772 testsuite:
774 * Expand allterms test coverage.
776 matcher:
778 * Fetch wdf upper bound from postlist which avoids an extra postlist table
779   cursor seek per weighted query term, and also means we now use a per-shard
780   wdf upper bound for local shards which will in typically give a tighter
781   weight upper bound which will tend to make various other matcher
782   optimisations more effective.  Eric Wong reported this speeds up a
783   particularly slow case from ~2 minutes to ~3 seconds.
785   With this change, OP_ELITE_SET can now select a different subset of terms for
786   each shard regardless of shard type (previously this only happened for remote
787   shards).
789 * Avoid triggering a pointless maximum weight recalculation if an unweighted
790   child of a MultiAndPostList prunes.
792 * Only check if the database has positional information when the query
793   uses positional information.  This should help improve notmuch delete
794   performance.  Thanks to andreas on #notmuch for analysis of the problem.
796 glass backend:
798 * Optimise Glass::Inverter::has_positions().  Use const auto& instead of just
799   auto for the loop variables.  Reported to be faster by andreas on #notmuch.
801 * Cache result of Glass::Inverter::has_positions() since calculating it is
802   potentially very expensive, while maintaining a cached answer is very cheap.
804 remote backend:
806 * Add missing closing parenthesis to reported remote prog context, which has
807   been missing since this code was first added over 20 years ago!  Spotted by
808   Gaurav Arora.
810 build system:
812 * Enable compiler option -fno-semantic-interposition if supported.
814   This GCC option allows the compiler to optimise essentially assuming
815   that functions/variables aren't replaced at dynamic link time.
817   Such replacement is not something that it's useful to do for Xapian
818   symbols, and we already turn on -Bsymbolic-functions by default which
819   prevents such replacement anyway by resolving references within the
820   library at build time.
822   Reduces the size of the stripped library on x86-64 Debian unstable by
823   ~1%, and likely makes it faster too.
825 * Avoid bogus deprecation warning when compiling with GCC without optimisation.
826   In this situation, GCC emits a deprecation warning for code in the definition
827   of QueryParser::add_valuerangeprocessor() which is provided for backwards
828   API compatibility even if this method is never used anywhere.
830   This isn't helpful, especially if the user is using -Werror, so disable the
831   -Wdeprecated-deprecations warning for this code.
833   Reported by starmad on #xapian.
835 * Fix GCC -Wmaybe-uninitialized warning.  The warning seems bogus as it's about
836   the this pointer being passed to a method which doesn't reference the object,
837   but we can just make the method static to avoid the warning, and that's
838   arguably cleaner for a method called from the object initialiser list.
840 * Automatically enable GCC warnings -Wduplicated-cond and -Wduplicated-branches
841   if using a GCC version new enough to support them.  The usefulness of
842   -Wduplicated-cond was highlighted by dcb in #816.
844 * Replace uses of obsolete autoconf macros, fixing warnings if configure is
845   regenerated with a recent release of autoconf.
847 * Simplify configure probe for sigsetjmp and siglongjmp.  Just probe
848   individually with AC_CHECK_DECLS and then check that both exist with a
849   preprocessor check.
851 * Update XO_LIB_XAPIAN to fix warning that AC_ERROR is obsolete with modern
852   autoconf.
854 * Support linking against static libxapian with cmake. Patch from Anonymous
855   Maarten in https://github.com/xapian/xapian/pull/317
857 * Clean up handling of libs we link libxapian with - previously any libraries
858   explicitly specified to configure by the user via LIBS=... as well as -lm
859   (if configure determined it was needed) could get added to XAPIAN_LIBS
860   multiple times, as well as also getting added to the libxapian link command
861   anyway by automake/libtool standard handling.
863   Specifying a library more than once on the link line is not a problem on
864   common platforms, but may be an issue somewhere (and it's on less common
865   platforms where the user is more likely to have to specify LIBS to configure
866   and/or where -lm may be needed).
868 documentation:
870 * configure: Add missing AC_ARG_VAR for all programs so that they are
871   documented in --help output, and so that autoconf knows they are "precious"
872   and preserves them if configure is rerun even when they're specified via an
873   environment variable.
875 * Don't use x^2 to mean x squared in API docs.  This is potentially confusing
876   since in C/C++ (and some other languages), ^ means exclusive-or.  Write x²
877   instead, which should be clear to all readers.
879 * Improve docs for Xapian::Stopper and SimpleStopper.
881 * docs/intro_ir.rst: Fixed an incorrect term index.  Patch from Jaak Ristioja
882   in https://github.com/xapian/xapian/pull/321.
884 * Update for the IRC channel move from freenode to libera.chat.
886 examples:
888 * quest: Don't enable spelling correction by default.  It was really only on by
889   default because the spelling correction support in quest was added before
890   --flags.  It seems more helpful for the default to match the
891   Xapian::QueryParser API, and also this fixes the weird situation that
892   `--flags default` isn't the default you get without any `--flags` option.
894 * quest: Multiple `--flags` options now get combined - previously only the last
895   was used.
897 portability:
899 * Don't automatically use _FORTIFY_SOURCE on mingw-w64.  Recent mingw-w64
900   versions require -lssp to be linked when _FORTIFY_SOURCE is enabled, so just
901   skip the automatic enabling.  Users who want to enable it can specify it
902   explicitly.
904   Fixes #808, reported by xpbxf4.
906 * Workaround NFS issue in test harness function for deleting test databases.
907   On NFS, rmdir() can fail with EEXIST or ENOTEMPTY (POSIX allows either)
908   due to .nfs* files which are used by NFS clients to implement the Unix
909   semantics of a deleted but open file continuing to exist.  We now sleep
910   and retry a few times in this situation to give the NFS client a chance
911   to process the closing of the open handle.  Problem mentioned in #631.
913 * configure: Drop -lm special case for Sun C++ as this no longer seems to
914   be required.  Tested with Sun C++ 5.13, which is the oldest version we
915   now support due to us now requiring C++11.
917 * Use strerrordesc_np() if available. This is a GNU-specific replacement for
918   sys_errlist and sys_nerr.  It was added in glibc 2.32 since which sys_errlist
919   and sys_nerr are no longer declared in the headers.
921 * Update debug logging to use std::uncaught_exceptions() under C++17 and later
922   since this allows the debug logging to detect a function without RETURN()
923   annotation which exits normally while there's an uncaught exception
924   (previously the debug logging would think the stack was being unwound through
925   the function).  This also avoids deprecation warnings - the old
926   std::uncaught_exception() (note: singular) function was deprecated by
927   C++17 and removed in C++20.
929 * Increase size of buffer passed to strerror_r() from 128 to 1024 bytes, which
930   is the size recommended by the man page on Linux.
932 * Fix -Wdeprecated-copy warning from clang 13.
934 Xapian-core 1.4.18 (2021-01-14):
936 API:
938 * QueryParser::FLAG_ACCUMULATE: New flag.  Previously the unstem and stoplist
939   data was always reset by a call to QueryParser::parse_query(), which makes
940   sense if you use the same QueryParser object to parse a series of independent
941   queries.  If you're using the same QueryParser object to parse several fields
942   on the same query form, you may want to have the unstem and stoplist data
943   combined for all of them, in which case you can use this flag to prevent this
944   data from being reset.
946 * QueryParser::unstem_begin(): Eliminate unnecessary copying of the data.
948 * Fix typo in Swedish stopword list, syncing change made to Snowball by Daniel
949   Gómez Villanueva.
951 * Remove some French stop words with other meanings, syncing change made to
952   Snowball by PhilippeOuellet.
954 testsuite:
956 * Run testcase testlock4 using backend chert, not just using glass
958 * Skip testcase testlock4 on platforms that don't allow us to implement
959   Database::locked() (which notably include GNU Hurd and Microsoft Windows).
961 documentation:
963 * List DB_NO_TERMLIST in the WritableDatabase constructor API documentation
964   where we already list the other DB_* constants.
966 portability:
968 * Eliminate single use of std::mem_fun() which was deprecated in C++11 and
969   removed in C++17.  Reported by Mateusz Pusz in #806.
971 * Add missing includes for std::numeric_limits<>.  Reported by stac47 in #805.
973 * Work around mingw.org header issue.  MSVC seems to implicitly include
974   <winerror.h> but mingw.org's headers don't, leading to ERROR_PIPE_CONNECTED
975   not being defined.  Fixes https://github.com/xapian/xapian/pull/318, reported
976   by Alex Sandro.
978 * Suppress MSVC warnings about possible loss of data.  The values involved are
979   the number of set bits in a value of integer type, so these warnings are
980   bogus.
982 * Include <sys/types.h> for size_t and off_t, which is the appropriate header,
983   and needed with Android's bionic libc.  Patch from Matthieu Gautier.
985 * Use a temporary file for the Doxygen configuration to work around Doxygen
986   1.8.19 bug which truncates a config file read from stdin to 4096 bytes
987   (https://github.com/doxygen/doxygen/issues/7975).
989 Xapian-core 1.4.17 (2020-08-21):
991 API:
993 * Database::get_average_length(): Add this as an alias for
994   Database::get_avlen().  In git master we've added this as a preferred new
995   name - adding it to 1.4.x too will make it easier for users to update to
996   using this.
998 * Database::get_spelling_suggestion(): Optimise edit distance initialisation
999   loop to significantly reduce the cost of a typical edit distance calculation.
1001 * Fix query expansion on sharded databases.  The mechanism for passing in which
1002   shard a TermList is from wasn't hooked up and as a result we'd always think
1003   it's from the first shard, meaning the statistics would be wrong and that our
1004   suggested terms may not have been as good as they should be in this
1005   situation.
1007 * Enquire::get_eset(): Use string::compare() to avoid 1/3 of the string compares
1008   on average.
1010 documentation:
1012 * Update doxygen HTML headers and footers to resolve issues with some
1013   interactive features of the API docs not working.  Reported by Enrico Zini.
1015 * Stop specifying obsolete doxygen settings PERL_PATH and MSCGEN_PATH.
1017 * Clarify API docs for MSet::get_termfreq() to make it clear that this
1018   considers all documents in the database, not only those that matched the
1019   searched (it would sometimes be useful to be able to report the number of
1020   occurrences of a term in the matched documents, but it's not something we
1021   currently keep track of).  Reported by Tadeusz Sośnierz and Peter Salomonsen.
1023 Xapian-core 1.4.16 (2020-06-08):
1025 API:
1027 * MSet::snippet(): The snippet now includes trailing punctuation which carries
1028   meaning or gives useful context.  See
1029   https://github.com/xapian/xapian/pull/180, reported by Robert Stepanek.
1031 * MSet::snippet(): Fix segfault generating snippet from default-constructed
1032   MSet.  This probably isn't something you'd typically do, but it shouldn't
1033   crash.  Found during extended testing of #803 (which only affected git
1034   master) which was reported by Robert Stepanek.
1036 * Remove trailing full stop from exception messages.  We conventionally don't
1037   include one, but a few cases didn't follow that convention.
1039 testsuite:
1041 * Replace direct use of ftime() which gives deprecation warnings with recent
1042   mingw.  Reported by srinivasyadav22.
1044 matcher:
1046 * Fix segfault in rare cases in the query optimiser.  We keep a pointer to the
1047   most recent posting list to use as a hint for opening the next posting list,
1048   but the existing mechanism to take ownership of this hint had a flaw.  We now
1049   invalidate the hint in situations where it might be indirectly deleted which
1050   is safe, but somewhat conservative.
1052 * Improve the optimisation of an always-matching OP_VALUE_GE to also take
1053   effect when the value slot's lower bound is equal to the limit of the
1054   OP_VALUE_GE.  Patch from boda sadalla.
1056 glass backend:
1058 * Report the correct errno value if commit() fails.  We were potentially
1059   reporting ENOENT from an unlink() call cleaning up a temporary file prior to
1060   throwing the exception instead.
1062 documentation:
1064 * Fix missing menus in API documentation.  Newer doxygen generates .js files
1065   which we also need to distribute and install.  Reported by sec^nd on #xapian.
1067 * Note OP_FILTER ignored subquery bug fixed in 1.4.15 as present in 1.4.14 and
1068   older.
1070 portability:
1072 * Use our own autoconf cache variable namespace (xo_cv_ prefix instead of
1073   ac_cv_) to avoid colliding with standard autoconf macro use if config.site or
1074   a shared config.cache is used.  The former case caused a build failure for
1075   the OpenBSD port with 1.4.15, reported by Lucas R.
1077 * Use clock_gettime() and nanosleep() under modern mingw as these allow higher
1078   precision than what we previously used.
1080 Xapian-core 1.4.15 (2020-02-24):
1082 API:
1084 * Database::check(): Fix checking of replication changesets.  This reverts a
1085   change incorrectly made in 1.3.7.
1087 * Database::locked(): Return false instead of true for a closed inmemory DB.
1089 * Database::commit(): If commit() failed with an exception while trying to add
1090   pending changes (e.g. InvalidArgumentError due to a long term containing zero
1091   bytes) then a subsequent commit() on the same object would throw the same
1092   exception.  Now we clear the pending changes in this situation (like we
1093   already did for failure at other stages in the commit).  This bug remains
1094   unfixed for the chert backend as it's harder to fix there and the effort to
1095   fix it and extra risk of breakage don't seem justified for a backend we
1096   recommend people migrate away from.
1098 * QueryParser::parse_query(): Optimise parsing of multi-word synonyms.
1100 testsuite:
1102 * Use 50-word synonym for qp_scale1 "large" case.  50 divides exactly into the
1103   number of repetitions we do for the "small" case, which 60 (as used before)
1104   doesn't.  This makes the two cases a little more comparable and should help
1105   make this testcase less flaky (see #764).
1107 * Adjust testcase matches1 to work with remote shards where the matcher can
1108   return slightly better bounds on the number of matches in some cases.
1109   Resolves 2 XFAILs.
1111 * The testharness get_remote_database() method is now supported for sharded
1112   databases.  This is needed for keepalive1 to run successfully under multi
1113   test backends.  Resolves 2 XFAILs of keepalive1.
1115 * Improved test coverage:
1117   + Test locked() on a closed WritableDatabase, which already returns false (as
1118     expected) in 1.4.x (but was broken on master).
1120   + Check multi databases in testsuite - this has been supported by
1121     Database::check() since 1.4.12.
1123   + Also test OP_SYNONYM and OP_MAX in emptydb1.
1125   + Backport testcases boolorbug1, emptynot1, emptymaybe1 and
1126     phraseweightcheckbug1 from git master - these are regression tests for
1127     fixed bugs which only affected git master, but it's useful to confirm that
1128     these bugs don't currently affect 1.4, and ensure they don't get introduced.
1130 * perftest: Store memory sizes as long long since on Microsoft Windows long is
1131   only 32 bits, which is less than common memory sizes.
1133 matcher:
1135 * Hoist positional check above OP_FILTER.
1137 * Handle OP_FILTER with more than two subqueries correctly.  Previously we'd
1138   only check the first two subqueries in some situations.
1140 remote backend:
1142 * For a remote WritableDatabase, the client now keeps track of whether there
1143   are pending changes, and if there aren't then we now do nothing for commit()
1144   or cancel() calls.  In particular this saves a message exchange when the
1145   WritableDatabase destructor is called when changes have already been
1146   committed with an explicit call to commit() (which is what we recommend
1147   doing, since with an explicit call to commit() you get to see any exception
1148   which gets thrown).
1150 * When closing a remote prog WritableDatabase, previously an exception could
1151   leave the remote connection open with the remote server running, and we'd
1152   then wait for the specified timeout before closing the connection.  Now we
1153   close the connection before letting the exception propagate.
1155 * Don't swallow exceptions from Database::close() on a remote database.  If
1156   we aren't in a transaction and so try to commit() and that fails then
1157   previously the caller would have no indication of the failure.
1159 * Fix handling the reported term weight when remote shards are searched.
1160   Fixes 5 XFAILs in the testsuite.
1162 * Add missing space to mismatching protocol versions error message.
1164 build system:
1166 * Fix to build when configured with --disable-backend-remote, broken by changes
1167   in 1.4.14.  Fixes #797, reported by Дилян Палаузов.
1169 * The clang and icc compilers both define __GNUC__, which led our ABI mismatch
1170   message to report them as "g++" with a bogus version (the version of GCC that
1171   these compilers advertise themselves as, which for clang is always 4.2.0) -
1172   now we report clang++ or icc along with the actual version of that compiler.
1174 documentation:
1176 * AUTHORS: Apply missed update to the thankyou list for 1.4.14.
1178 * INSTALL: Note that MSVC 2019 works.
1180 * INSTALL: Note that Xapian can use the system uuid.h on AIX and OpenBSD.
1182 portability:
1184 * Simplify probes for snprintf.  The broken snprintf in libbsd in Linux libc4
1185   is from ~25 years ago so way too ancient to matter now, and all callers
1186   already handle the pre-ISO semantics of returning -1 for an undersize buffer
1187   so we don't need to run a test program to probe for this at configure time,
1188   which is more cross-compile friendly.
1190 * Don't quote messages in #error - the quotes aren't required and appear in the
1191   compiler output (at least with GCC and clang) making it less readable.
1193 * Use a different approach for getting a 64-bit capable stat() for mingw32.
1194   This means we now use the same stat variant for mingw32 and MSVC, which
1195   seems a better plan.
1197 * Work around unhelpful config.status behaviour.  It comments out any #undef
1198   lines in config.h, even those added via AH_TOP and AH_BOTTOM.  Splitting
1199   these lines means they don't match the regex hammer config.status uses.
1201 * Avoid -Wdeprecated-copy warnings from clang 10.
1203 * Avoid deprecation warning on recent Linux.  We were including sys/sysctl.h if
1204   it existed, which it does on Linux but we don't actually use it there.
1205   Including it now warns that it is deprecated, so skip including it under
1206   Linux.  Reported on IRC by kumaran.
1208 * Suppress GCC -Wduplicated-branches warning from our API headers in a
1209   different way which avoids needing a compiler-specific #pragma.
1211 * Workaround closefrom1 failure on macOS.  It seems under macOS our fd tracking
1212   can end up using fd 10 so start from 13 when testing closefrom() so we don't
1213   close the fd which our fd tracking is using internally.
1215 debug code:
1217 * Log RemoteConnection::read_at_least() return value.
1219 Xapian-core 1.4.14 (2019-11-23):
1221 API:
1223 * Xapian::QueryParser: Handle "" inside a quoted phrase better.  In a quoted
1224   boolean term, "" is treated as an escaped ", so handle it in a compatible way
1225   for quoted phrases.  Previously we'd drop out of the phrase and start a new
1226   phrase.  Fixes #630, reported by Austin Clements.
1228 * Xapian::Stem: The constructor which takes a stemmer name now takes an
1229   optional second bool parameter - if this is true, then an unknown stemmer
1230   name falls back to using the "none" stemmer instead of throwing an exception.
1231   This allows simply constructing a stemmer from an ISO language code without
1232   having to worry about whether there's a stemmer for that language, and
1233   without having to handle an exception if there isn't.
1235 * Xapian::Stem: Fix a bug with handling 4-byte UTF-8 sequences which
1236   potentially affects most of the stemmers.  None of the stemmers work in
1237   languages where 4-byte UTF-8 sequences are part of the alphabet, but this
1238   bug could result in invalid UTF-8 sequences in terms generated from text
1239   containing high Unicode codepoints such as emoji, which can cause issues (for
1240   example, in some language bindings).  Fix synced from Snowball git post
1241   2.0.0.  Reported by Ilari Nieminen in
1242   https://github.com/snowballstem/snowball/issues/89.
1244 * Xapian::Stem: Add a new is_none() method which tests if this is a "none"
1245   stemmer.
1247 * Xapian::Weight: The total length of all documents is now made available to
1248   Xapian::Weight subclasses, and this is now used by DLHWeight, DPHWeight and
1249   LMWeight.  To maintain ABI compatibility, internally this still fetches the
1250   average length and the number of documents, multiplies them, then rounds the
1251   result, but in the next release series this will be handled directly.
1253 * Xapian::Database::locked() on an inmemory database used to always return
1254   false, but an inmemory Database is always actually a WritableDatabase
1255   underneath, so now we always report true in this case because it's really
1256   always report being locked for writing.
1258 testsuite:
1260 * Fix failing multi_glass_remoteprog_glass tests on x86.  When the tests are
1261   run under valgrind, remote servers should be run using the runsrv wrapper
1262   script, but this wasn't happening for remote servers in multi-databases - now
1263   it is.  Also, previously runsrv only used valgrind for the remote for an x86
1264   build that didn't use SSE, but it seems there are x87 instructions in libc
1265   that are affected by valgrind not providing excess precision, so do this for
1266   x86 builds which use SSE too.  Together these changes fix failures of
1267   topercent2, xor2, tradweight1 under backend multi_glass_remoteprog_glass on
1268   x86.
1270 * Fix C++ One-Definition Rule (ODR) violation in testsuite code.  Two different
1271   source files linked into apitest were each defining a different `struct
1272   test`.  Wrap each in an anonymous namespace to localise it to the file it is
1273   defined and used in.  This was probably harmless in practice, unless trying
1274   to build with Link-Time Optimisation or similar (which is how it was
1275   detected).
1277 * Test all language codes in stemlangs1.  The testsuite hardcodes a list of
1278   supported language codes which hadn't been updated since 2008.
1280 * Improve DateRangeProcessor test coverage.
1282 matcher:
1284 * Handle pruning under a positional check.  This used to be impossible, but
1285   since 1.4.13 it can happen as we now hoist AND_NOT to just below where we
1286   hoist the positional checks.  The code on master already handles pruning here
1287   so this bug is specific to the RELEASE/1.4 branch.  Fixes #796, reported by
1288   Oliver Runge.
1290 * When searching with collapsing over multiple shards, at least some of which
1291   are remote, uncollapsed_upper_bound could be too low and
1292   uncollapsed_lower_bound too high.  This was causing assertion failures in
1293   testcases msize1 and msize2 under test harness backends
1294   multi_glass_remoteprog_glass and multi_remoteprog_glass.
1296 * Internally we no longer calculate a bogus total_term_count as the sum of
1297   total_length * doc_count for all shards.  Instead we just use the sum of
1298   total_length, which gives the total number of term occurrences.  This change
1299   should improve the estimated collection_freq values for synonyms.
1301 * Several places where we might divide zero by zero in a database where wdf was
1302   always zero have been fixed.
1304 build system:
1306 * configure: Stop using AC_FUNC_MEMCMP.  The autoconf manual marks it as
1307   "obsolescent", and it seems clear that nobody's relying on it as we're
1308   missing the "'AC_LIBOBJ' replacement for 'memcmp'" which it would try to
1309   use if needed.
1311 documentation:
1313 * HACKING: Replace release docs with pointer to the developer guide where they
1314   are now maintained.
1316 portability:
1318 * Eliminate 2 uses of atoi().  These are potentially problematic in a
1319   multithreaded application if setlocale() is called by another thread at the
1320   same time.  See #665.
1322 * Don't check __GNUC__ in visibility.h as the configure probe before defining
1323   XAPIAN_ENABLE_VISIBILITY checks that the visibility attributes work.  This
1324   probably makes no difference in practice, as all compilers we're aware of
1325   which support symbol visibility also define __GNUC__.
1327 * Document Sun C++ requires --disable-shared.  Closes #631.
1329 Xapian-core 1.4.13 (2019-10-14):
1331 API:
1333 * Fix write one past end of std::vector on certain QueryParser parser errors.
1334   This is undefined behaviour, but the write was always into reserved space, so
1335   in practice we'd actually get away with it (it was noticed because it
1336   triggers an error when running under ubsan and using libc++).  Reported by
1337   Germán M. Bravo.
1339 * MSet::get_matches_estimated(): Improve rounding of result - a bug meant we
1340   would almost always round down.
1342 * Optimise test for UTF-8 continuation character.  Performing a signed char
1343   comparison shaves an instruction or two on most architectures.
1345 * Database::get_revision(): Return revision 0 for a Database with no shards
1346   rather that throwing InvalidOperationError.
1348 * DPHWeight: Avoid dividing by 0 when searching a sharded database when one
1349   shard is empty.  The result wasn't used in this case, but it's still
1350   undefined behaviour.  Detected by UBSan.
1352 testsuite:
1354 * The "singlefile" test harness backend manager now creates databases by
1355   compacting the corresponding underlying backend database (creating it first
1356   if need be) rather than always creating a temporary database to compact.
1358 * Enable compaction testcases for multi and singlefile test harness backends.
1360 * Add generated database support for remoteprog and remotetcp test harness
1361   backends.  Implemented by Tanmay Sachan.
1363 * Add test harness support for running testcases using a multi database
1364   comprised of one local and one remote shard, or two remote shards.
1365   Implemented by Tanmay Sachan.
1367 * Check if removing existing multi stub failed.  Previously if removing an
1368   existing stub failed, the test harness would create a temporary new stub and
1369   then try to rename it over the old one, which will always fail on Microsoft
1370   Windows.
1372 * Wait for xapian-tcpsrv processes to finish before moving on to the next
1373   testcase under __WIN32__ like we already do on POSIX platforms.
1375 matcher:
1377 * Optimise OP_AND_NOT better.  We now combine its left argument with other
1378   connected and-like subqueries, and gather up and hoist the negated subqueries
1379   and apply them together above the combined and-like subqueries, just below
1380   any positional filters.
1382 * Optimise OP_AND_MAYBE better.  We now combine its left argument with other
1383   connected and-like subqueries, and gather up and hoist the optional
1384   subqueries and apply them together above the combined and-like subqueries and
1385   any hoisted positional filters.
1387 * Treat all BoolWeight queries as scaled by 0 - we can optimise better if we
1388   know the query is unweighted.
1390 glass backend:
1392 * Allow zlib compression to reduce size by one byte.  We were specifying an
1393   output buffer size one byte smaller than the input, but it appears zlib won't
1394   use the final byte in the buffer, so we actually need to pass the input size
1395   as the output buffer size.
1397 * Only try to compress Btree item values > 18 bytes, which saves CPU time
1398   without sacrificing any significant size savings.
1400 remote backend:
1402 * Fix match stats when searching with collapsing over multiple shards and at
1403   least some shards are remote.  Bug discovered by Tanmay Sachan's test harness
1404   improvements.
1406 * Ignore orphaned remote protocol replies which can happen when searching with
1407   a remote shard if an exception is thrown by another shard.  Bug discovered
1408   by Tanmay Sachan's test harness improvements.
1410 * Wait for xapian-progsrv child to exit when a remote Database or
1411   WritableDatabase object is closed under __WIN32__ like we already do for
1412   POSIX platforms.
1414 documentation:
1416 * Correct documentation of initial messages in replication protocol.
1418 tools:
1420 * quest: Report bounds and estimate of number of matches.
1422 * xapian-delve: Improve output when database revision information is not
1423   available.  We now specially handle the cases of a DB with multiple shards
1424   and a backend which doesn't support get_revision().
1426 portability:
1428 * Fix warning from GCC 9 with -Wdeprecated-copy (which is enabled by -Wextra)
1429   if a reference to an Error object is thrown.
1431 * Suppress GCC warning in our API headers when compiling code using Xapian with
1432   GCC and -Wduplicated-branches.
1434 * Mark some internal classes as final (following GCC -Wsuggest-final-types
1435   suggestions to allow some method calls to be devirtualised).
1437 * Fix to build with --enable-maintainer-mode and Perl < 5.10, which doesn't
1438   have the `//=` operator.  It's unlikely developers will have such an old
1439   Perl, but the mingw environment on appveyor CI does.  The use of `//=` was
1440   introduced by changes in 1.4.10.
1442 Xapian-core 1.4.12 (2019-07-23):
1444 API:
1446 * Xapian::PostingSource: When a PostingSource without a clone() method is used
1447   with a Database containing multiple shards, the documented behaviour has
1448   always been that Xapian::InvalidOperationError is thrown.  However, since at
1449   least 1.4.0, this exception hasn't been thrown, but instead a single
1450   PostingSource object would get used for all the shards, typically leading to
1451   incorrect results.  The actual behaviour now matches what was documented.
1453 * Xapian::Database: Add size() method which reports the number of shards.
1455 * Xapian::Database::check(): You can now pass a stub database which will check
1456   all the databases listed in it (or throw Xapian::UnimplementedError for
1457   backends which don't support checking).
1459 * Xapian::Document: When updating a document use a emplace_hint() to make the
1460   bulk insertion O(n) instead of O(n·log(n)), and use std::move() to avoid
1461   copying OmDocumentTerm objects.
1463 * Xapian::Query: Add missing get_unique_terms_end() method.
1465 * Xapian::iterator_valid(): Implement for Utf8Iterator
1467 testsuite:
1469 * Fix keepalive1 failures on some platforms.  On some platforms a timeout
1470   gives NetworkTimeoutError and on others NetworkError - since 1.4.10 changed
1471   to checking the exact exception type, keepalive1 has been failing on the
1472   former set of platforms.  We now just check for NetworkError or a subclass
1473   here (since NetworkTimeoutError is a subclass of NetworkError).
1475 * Run cursordelbug1 testcase with multi databases too.
1477 matcher:
1479 * Ownership of PostingSource objects during the match now makes use of the
1480   optional reference-counting mechanism rather than a separate flag.
1482 remote backend:
1484 * Fix remote protocol design bug.  Previously some messages didn't send a reply
1485   but could result in an exception being sent over the link.  That exception
1486   would then get read as a response to the next message instead of its actual
1487   response so we'd be out of step.  Fixes #783, reported by Germán M. Bravo.
1488   This fix necessitated a minor version bump in the remote protocol (to 39.1).
1489   If you are upgrading a live system which uses the remote backend, upgrade the
1490   servers before the clients.
1492 * Fix socket leaks on errors during opening a database.  Fixes
1493   https://github.com/xapian/xapian/pull/237 and #781, reported by Germán M.
1494   Bravo.
1496 * Don't close remote DB socket on receiving EOF as the levels above won't
1497   know it's been closed and may try to perform operations on it, which would be
1498   problematic if that fd gets reused in the meantime.  Leaving it open means
1499   any further operations will also get EOF.  Reported by Germán M. Bravo.
1501 * We add a wrapper around the libc socket() function which deals with the
1502   corner case where SOCK_CLOEXEC is defined but socket() fails if it is
1503   specified (which can happen with a newer libc and older kernel).
1504   Unfortunately, this wrapper wasn't checking the returned value from socket()
1505   correctly, so when SOCK_CLOEXEC was specified and non-zero it would create
1506   the socket() with SOCK_CLOEXEC, then leak that one and create it again
1507   without SOCK_CLOEXEC.  We now check the return value properly.
1509 * Fix potential infinite loop in ValueCountMatchSpy::merge_results() if passed
1510   serialised results with extra data appended (which shouldn't happen in normal
1511   use).
1513 build system:
1515 * Current versions of valgrind result in false positives on current versions of
1516   macOS, so on this platform configure now only enables use of valgrind if it's
1517   specified explicitly.  Fixes #713, reported by Germán M. Bravo.
1519 * Refactor macros to probe for compiler flags so they automatically cache
1520   their results and consistently report success/failure.
1522 * Rename our custom TYPE_SOCKLEN_T macro to XAPIAN_TYPE_SOCKLEN_T.  The
1523   AX_TYPE_SOCKLEN_T macro defines an alias of TYPE_SOCKLEN_T for itself which
1524   means it can get used instead in some situations, but it isn't compatible
1525   with our macro.  We can't just switch to AX_TYPE_SOCKLEN_T as it doesn't
1526   handle cases we need, so just rename our macro to avoid potential problems.
1528 documentation:
1530 * Improve API documentation for Xapian::Query class.  Add missing doc
1531   comments and improve some of the existing ones.  Problems highlighted by
1532   Дилян Палаузов in #790.
1534 * Add Unicode consortium names and codes for categories from Chapter 4, Version
1535   11 of the Unicode standard.  Patch from David Bremner.
1537 * Improve configure --help output - drop "[default=no]" for --enable-*
1538   options which default off.  Fixes #791, reported by and patch from Дилян
1539   Палаузов.
1541 * Fix API documentation typo - Query::op (the type) not op_ (a parameter name).
1543 * Note which version Document::remove_postings() was added in.
1545 * In the remote protocol documentation, MSG_REPLACEDOCUMENTTERM was documented
1546   as not having a reply, but actually REPLY_ADDDOCUMENT is sent.
1548 * Update list of <xapian/iterator.h> users.
1550 tools:
1552 * copydatabase: A change in 1.4.6 which added support for \ as directory
1553   separator on platforms where that's the norm broke the code in copydatabase
1554   which removes a trailing slash from input databases.  Bug reported and
1555   culprit commit identified by Eric Wong.
1557 portability:
1559 * Resolve crash on Windows when using clang-cl and MSVC.  Reported by Christian
1560   Mollekopf in https://github.com/xapian/xapian/pull/256.
1562 * Add missing '#include <cstring>'.  Patch from Tanmay Sachan.
1564 * Fix str() helper function when converting the most negative value
1565   of a signed integer type.
1567 * Avoid calling close() on fd we know must actually be a WIN32 SOCKET.
1569 * Include <ios> not <iomanip> for std::boolalpha.
1571 * Rework setenv() compatibility handling.  Now that Solaris 9 is dead we can
1572   assume setenv() is provided by Unix-like platforms (POSIX requires it).  For
1573   other platforms, provide a compatibility implementation of setenv() which
1574   so the compatibility code is encapsulated in one place rather than replicated
1575   at every use.
1577 * Fix maintainer-mode builds on Solaris where /bin/tr is not POSIX compliant.
1578   We now use the simple workaround suggested by the autoconf manual.
1580 * Improve support for Sun C++ (see #631):
1582   + Suppress unhelpful warning for lambda with multiple return statements.
1584   + Enable reporting the tags corresponding to warnings, which we need
1585     to know in order to suppress any new unhelpful warnings.
1587   + Adjust our workaround for bug with this compiler's <cmath> header to avoid
1588     a compiler warning.
1590   + Use -xldscope=symbolic for Sun C++.  This flag is roughly equivalent to
1591     -Bsymbolic-functions which we've probed for with GNU ld since Xapian 1.0.0.
1593 Xapian-core 1.4.11 (2019-03-02):
1595 API:
1597 * MSet::SNIPPET_CJK_NGRAM - new flag for use with MSet::snippet() to enable
1598   support for selecting and highlighting snippets which works with the
1599   QueryParser and TermGenerator FLAG_CJK_NGRAM flags.  This mode can also be
1600   enabled by setting environment variable XAPIAN_CJK_NGRAM to a non-empty
1601   value.  (There was nominally already support for XAPIAN_CJK_NGRAM in
1602   MSet::snippet(), but it didn't work usefully - the highlighting added was all
1603   empty start/end pairs at the end of the span of CJK characters containing the
1604   CJK ngram terms, which to the user would typically look like it was selecting
1605   the end of the text and not highlighting anything).
1607 * Deprecate XAPIAN_CJK_NGRAM environment variable.  There are now flags which
1608   can be used instead in all cases, and there's sadly no portable thread-safe
1609   way to read an environment variable so checking environment variables is
1610   problematic in library code that may be used in multithreaded programs.
1612 * Query::OP_ELITE_SET currently incorrectly recursively flattens any OP_OR (or
1613   OP_OR-like) subqueries into the list of subqueries it selects from - until
1614   that's fixed, we now select from the full exploded list rather than the last
1615   n (where n is the number of direct subqueries of the OP_ELITE_SET).
1617 testsuite:
1619 * Testcases which need a generated database now get run with a sharded
1620   database.
1622 * Avoid using strerror() in the testsuite which removes an obstacle to running
1623   tests in parallel in separate threads.
1625 matcher:
1627 * Extend detection of cases of OP_SYNONYM with disjoint subqueries (which means
1628   we don't need document length) which was added in 1.4.8 - we now detect when
1629   all subqueries are different terms, or when all subqueries are
1630   non-overlapping wildcards.  The second case is what QueryParser produces for
1631   a wildcard or partial query with a query prefix which maps to more than one
1632   term prefix.
1634 glass backend:
1636 * Handle an empty value slot lower bound gracefully.  This shouldn't happen for
1637   a non-empty slot, but has been reported by a notmuch user so it seems there
1638   is (or perhaps was as the database was several years old) a way it can come
1639   about.  We now check for this situation and set the smallest possible valid
1640   lower bound instead, so other code assuming a valid lower bound will work
1641   correctly.  Reported by jb55.
1643 chert backend:
1645 * Handle an empty value slot lower bound gracefully, equivalent to the change
1646   made for glass.
1648 documentation:
1650 * HACKING: We no longer use auto_ptr<>.
1652 * NEWS: Correct factual error in old entry - the 0.4.1 release was Open Muscat
1653   not OmSee (the OmSee name was only applied after that final release was made,
1654   and only used internally to BrightStation).
1656 portability:
1658 * Suppress more clang -Wself-assign-overloaded warnings in testcases which are
1659   deliberately testing handling of self-assignment.
1661 * Add missing includes of <cerrno>.  Fixes #776, reported by Matthieu Gautier.
1663 debug code:
1665 * When configured with --enable-log, the O_SYNC flag was always specified when
1666   opening the logfile, with the intention that the most recent log entries
1667   wouldn't get lost if there was a crash, but O_SYNC can incur a significant
1668   performance overhead and most debugging is not of such crashes.  So we no
1669   longer specify O_SYNC by default, but you can now request synchronous logging
1670   by including %! anywhere in the filename specified with XAPIAN_DEBUG_LOG
1671   (the %! is replaced with the empty string).  We also now use O_DSYNC if
1672   available in preference to O_SYNC, since the mtime of the log file isn't
1673   important.
1675 Xapian-core 1.4.10 (2019-02-12):
1677 API:
1679 * DatabaseClosedError: New exception class thrown instead of DatabaseError when
1680   an operation is attempted which can't be completed because it involves a
1681   database which close() was previously called on.  DatabaseClosedError is a
1682   subclass of DatabaseError so existing code catching DatabaseError will still
1683   work as before.  Fixes #772, reported by Germán M. Bravo.  Patch from
1684   Vaibhav Kansagara.
1686 * DatabaseNotFoundError: New exception class thrown instead of
1687   DatabaseOpeningError when the problem is the problem is "file not found" or
1688   similar.  DatabaseNotFoundError is a subclass of DatabaseOpeningError so
1689   existing code catching DatabaseOpeningError will still work as before.  Fixes
1690   #773, reported by Germán M. Bravo.  Patch from Vaibhav Kansagara.
1692 * Query: Make &=, |= and ^= on Query objects opportunistically append to
1693   an existing query with a matching query operator which has a reference
1694   count of 1.  This provides an easy way to incrementally build flatter query
1695   trees.
1697 * Query: Support `query &= ~query2` better - this now is handled exactly
1698   equivalent to `query = query & ~query2` and gives `query AND_NOT query2`
1699   instead of `query AND (<alldocuments> AND_NOT query2)`.
1701 * QueryParser: Now uses &=, |= and ^= to produce flatter query trees.  This
1702   fixes problems with running out of stack space when handling Query object
1703   trees built by abusing QueryParser to parse very large machine-generated
1704   queries.
1706 * Stopper: Fix incorrect accents in Hungarian stopword list.  Patch from David
1707   Corbett.
1709 testsuite:
1711 * Test MSet::snippet() with small and zero lengths.  Fixes #759.  Patch from
1712   Vaibhav Kansagara.
1714 * Fix testcase stubdb4 annotations - this testcase doesn't need a backend.
1716 * Add PATH annotation for testcases needing get_database_path() to avoid having
1717   to repeatedly list the backends where this is supported in testcase
1718   annotations.
1720 * TEST_EXCEPTION helper macro now checks that the exact specified exception
1721   type is thrown.  Previously it would allow a subclass of the specified
1722   exception type, but in testcases we really want to be able to test for an
1723   exact type.  Issue noted by Vaibhav Kansagara on IRC.
1725 matcher:
1727 * Map OP_VALUE_GE/OP_VALUE_LE on an empty slot to EmptyPostList.  We already do
1728   this for OP_VALUE_RANGE, and it's a little more efficient than creating a
1729   postlist object which checks the empty value slot.
1731 glass backend:
1733 * We no longer flush all pending positional changes when a postlist, termlist
1734   or all-terms is opened on a modified WritableDatabase.  Doing so was
1735   incurring a significant performance cost, and the first of these happens
1736   internally when `replace_document(term, doc)` is used, which is the usual way
1737   to support non-numeric unique ids.  We now only flush pending positional
1738   changes when committing.  Reported and diagnosed by Germán M. Bravo.
1740 remote backend:
1742 * Use poll() where available instead of select().  poll() is specified by
1743   POSIX.1-2001 so should be widely available by now, and it allows watching any
1744   fd (select() is limited to watching fds < FD_SETSIZE).  For any platforms
1745   which still lack poll() we now workaround this select() limitation when a
1746   high numbered fd needs to be watched (for example, by trying a non-blocking
1747   read or write and on EAGAIN sleeping for a bit before retrying).
1749 * Stop watching fds for "exceptional conditions" - none of these are relevant
1750   to our usage.
1752 * Remove 0.1s timeout in ready_to_read().  The comment says this is to avoid a
1753   busy loop, but that's out of date - the matcher first checks which remotes
1754   are ready to read and then does a second pass to handle those which weren't
1755   with a blocking read.
1757 build system:
1759 * Stop probing for header sys/errno.h which is no longer used - it was only
1760   needed for Compaq C++, support for which was dropped in 1.4.8.
1762 documentation:
1764 * docs/valueranges.html: Update to document RangeProcessor instead of
1765   ValueRangeProcessor - the latter is deprecated and will be gone in the next
1766   release series.
1768 * Document RangeProcessor::operator()() returns OP_INVALID to signal it doesn't
1769   recognise a range.
1771 * Update some URLs for pages which have moved.
1773 * Use https for URLs where available.
1775 * HACKING: Update "empty()" section for changes in C++11.
1777 portability:
1779 * Suppress clang warnings for self-assignment tests.  Some testcases trigger
1780   this new-ish clang warning while testing that self-assignment works, which
1781   seems a useful thing to be testing - at least one of these is a regression
1782   test.
1784 * Add std::move to fix clang -Wreturn-std-move warning (which is enabled by
1785   -Wall).
1787 * Add casts to fix ubsan warnings.  These cases aren't undefined behaviour, but
1788   are reported by ubsan extra checks implicit-integer-truncation and/or
1789   implicit-conversion which it is useful to be able to enable to catch
1790   potential bugs.
1792 * Fix check for when to use _byteswap_ulong() - in practice this would only
1793   have caused a problem if a platform provided _byteswap_ushort() but not
1794   _byteswap_ulong(), but we're not aware of any which do.
1796 * Fix return values of do_bswap() helpers to match parameter types (previously
1797   we always returned int and only supported swapping types up to 32 bits, so
1798   this probably doesn't result in any behavioural changes).
1800 * Only include <intrin.h> if we'll use it instead of always including it when
1801   it exists.  Including <intrin.h> can result in warnings about duplicate
1802   declarations of builtin functions under mingw.
1804 * Remove call to close()/closesocket() when the argument is always -1 (since
1805   the change to use getaddrinfo() in 1.3.3).
1807 Xapian-core 1.4.9 (2018-11-02):
1809 API:
1811 * Document::add_posting(): Fix bugs with the change in 1.4.8 to more
1812   efficiently handle insertion of a batch of extra positions in ascending
1813   order.  These could lead to missing positions and corrupted encoded
1814   positional data.
1816 remote backend:
1818 * Avoid hang if remote connection shutdown fails by not waiting for the
1819   connection to close in this situation.  Seems to fix occasional hangs seen on
1820   macOS.  Patch from Germán M. Bravo.
1822 Xapian-core 1.4.8 (2018-10-25):
1824 API:
1826 * QueryParser,TermGenerator: Add new stemming mode STEM_SOME_FULL_POS.
1827   This stores positional information for both stemmed and unstemmed terms,
1828   allowing NEAR and ADJ to work with stemmed terms.  The extra positional
1829   information is likely to take up a significant amount of extra disk space so
1830   the default STEM_SOME is likely to be a better choice for most users.
1832 * Database::check(): Fetch and decompress the document data to catch problems
1833   with the splitting of large data into multiple entries, corruption of the
1834   compressed data, etc.  Also check that empty document data isn't explicitly
1835   stored for glass.
1837 * Fix an incorrect type being used for term positions in the TermGenerator API.
1838   These were Xapian::termcount but should be Xapian::termpos.  Both are
1839   typedefs for the same 32-bit unsigned integer type by default (almost always
1840   "unsigned int") so this change is entirely compatible, except that if you
1841   were configuring 1.4.7 or earlier with --enable-64bit-termcount you need to
1842   also use the new --enable-64bit-termpos configure option with 1.4.8 and up or
1843   rebuild your applications.  This change was necessary to make
1844   --enable-64bit-termpos actually useful.
1846 * Add Document::remove_postings() method which removes all postings in a
1847   specified term position range much more efficiently than by calling
1848   remove_posting() repeatedly.  It returns the number of postings removed.
1850 * Fix bugs with handling term positions >= 0x80000000.  Reported by Gaurav
1851   Arora.
1853 * Document::add_posting(): More efficiently handle insertion of a batch of
1854   extra positions in ascending order.
1856 * Query: Simplify OP_SYNONYM with single OP_WILDCARD subquery by converting to
1857   OP_WILDCARD with combiner OP_SYNONYM, which means such cases can take
1858   advantage of the new matcher optimisation in this release to avoid needing
1859   document length for OP_WILDCARD with combiner OP_SYNONYM.
1861 testsuite:
1863 * Catch and report std::exception from the test harness itself.
1865 * apitest: Drop special case for not storing doc length in testcase postlist5 -
1866   all backends have stored document lengths for a long time.
1868 * test_harness: Create directories in a race-free way.
1870 matcher:
1872 * Avoid needing document length for an OP_WILDCARD with combiner OP_SYNONYM.
1873   We know that we can't get any duplicate terms in the expansion of a wildcard
1874   so the sum of the wdf from them can't possibly exceed the document length.
1876 * OP_SYNONYM: No longer tries to initialise weights for its subquery, which
1877   should reduce the time taken to set up a large wildcard query.
1879 * OP_SYNONYM: Fix frequency estimates when OP_SYNONYM is used with a
1880   subquery containing OP_XOR or OP_MAX - in such cases the frequency
1881   estimates for the first subquery of the OP_XOR/OP_MAX were used for
1882   all its subqueries.  Also the estimated collection frequency is
1883   now rounded to the nearest integer rather than always being rounded
1884   down.
1886 glass backend:
1888 * Revert change made in 1.4.6:
1890     Enable glass's "open_nearby_postlist" optimisation (which especially helps
1891     large wildcard queries) for writable databases without any uncommitted
1892     changes as well.
1894   The amended check isn't conservative enough as there may be postlist changes
1895   in the inverter while the table is unmodified.  This breaks testcase
1896   T150-tagging.sh in notmuch's testsuite, reported by David Bremner.
1898 * When indexing a document without any terms we now avoid some unnecessary work
1899   when storing its termlist.
1901 build system:
1903 * New --enable-64bit-termpos configure option which makes Xapian::termpos a
1904   64-bit type and enables support for storing 64-bit termpos values in the
1905   glass backend in an upwardly compatible way.  Few people will actually want
1906   to index documents more than 4 billion words long, but the extra numbering
1907   space can be helpful if you want to use term positions in "interesting" ways.
1909 * Hook up configure --disable-sse/--enable-sse=sse options for MSVC.
1911 * Fix configure probes for builtin functions for clang.  We need to specify the
1912   argument types for each builtin since otherwise AC_CHECK_DECLS tries to
1913   compile code which just tries to take a pointer to the builtin function
1914   causing clang to give an error saying that's not allowed.  If the argument
1915   types are specified then AC_CHECK_DECLS tries to compile a call to the
1916   builtin function instead.
1918 documentation:
1920 * Fix documentation comment typo.
1922 tools:
1924 * xapian-delve: Test for all docs empty using get_total_length() which is
1925   slightly simpler internally than get_avlength(), and avoids an exact floating
1926   point equality check.
1928 examples:
1930 * quest: Support --weight=coord.
1932 * xapian-pos: New tool to show term position info to help debugging when using
1933   positional information in more complex ways.
1935 portability:
1937 * Fix undefined behaviour from C++ ODR violation due to using the same name
1938   two different non-static inline functions.  It seems that with current GCC
1939   versions the desired function always ends up being used, but with current
1940   clang the other function is sometimes used, resulting in database corruption
1941   when using value slots in docid 16384 or higher with the default glass
1942   backend.  Patch from Germán M. Bravo.
1944 * Suppress alignment cast warning on sparc Linux.  The pointer being cast is to
1945   a record returned by getdirentries(), so it should be suitable aligned.
1947 * Drop special handling for Compaq C++.  We never actually achieved a working
1948   build using it, and I can find no evidence that this compiler still exists,
1949   let alone that it was updated for C++11 which we now require.
1951 * Create new database directories in race-free way.
1953 * Avoid throwing and handling an exception in replace_document() when
1954   adding a document with a specified docid which is <= last_docid but currently
1955   unused.
1957 * Use our portable code for handling UUIDs on all platforms, and only use
1958   platform-specific code for generating a new UUID.  This fixes a bug with
1959   converting UUIDs to and from string representation on FreeBSD, NetBSD and
1960   OpenBSD on little-endian platforms which resulted in reversed byte order in
1961   the first three components, so the same database would report a different
1962   UUID on these platforms compared to other platforms.  With this fix, the
1963   UUIDs of existing databases will appear to change on these platforms
1964   (except in rare "palindronic" cases).  Reported by Germán M. Bravo.
1966 * Fix to build with a C++17 compiler.  Previously we used a "byte" type
1967   internally which clashed with "std::byte" in source files which use
1968   "using namespace std;".  Fixes #768, reported by Laurent Stacul.
1970 * Adjust apitest testcase stubdb2 to allow for NetBSD oddity: NetBSD's
1971   getaddrinfo() in IPv4 mode seems to resolve ::1 to an IPv4 address on the
1972   local network.
1974 * Avoid timer_create() on OpenBSD and NetBSD.  On OpenBSD it always fails with
1975   ENOSYS (and there's no prototype in the libc headers), while on NetBSD it
1976   seems to work, but the timer never seems to fire, so it's useless to us (see
1977   #770).
1979 * Use SOCK_NONBLOCK if available to avoid a call to fcntl().  It's supported by
1980   at least Linux, FreeBSD, NetBSD and OpenBSD.
1982 * Use O_NOINHERIT for O_CLOEXEC on Windows.  This flag has essentially the same
1983   effect, and it's common in other codebases to do this.
1985 * On AIX O_CLOEXEC may be a 64-bit constant which won't fit in an int.  To
1986   workaround this stupidity we now call the non-standard open64x() instead
1987   of open() when the flags don't fit in an int.
1989 * Add functions to add/multiply with overflow check.  These are implemented
1990   with compiler builtins or equivalent where possible, so the overflow check
1991   will typically just require a check of the processor's overflow or carry
1992   flag.
1994 Xapian-core 1.4.7 (2018-07-19):
1996 API:
1998 * Database::check(): Fix bogus error reports for documents with length zero
1999   due to a new check added in 1.4.6 that the doclength was between the stored
2000   upper and lower bounds, which failed to allow for the lower bound ignoring
2001   documents with length zero (since documents indexed only by boolean terms
2002   aren't involved in weighted searches).  Reported by David Bremner.
2004 * Query: Use of Query::MatchAll in multithreaded code causes problems because
2005   the reference counting gets messed up by concurrent updates.  Document that
2006   Query(string()) should be used instead of MatchAll in multithreaded code, and
2007   avoid using it in library code.  Reported by Germán M. Bravo.
2009 * Stem:
2011   + Stemming algorithms added for Irish, Lithuanian, Nepali and Tamil.
2013   + Merge Snowball compiler changes which improve code generation.
2015   + Merge optimisations to the Arabic and Turkish stemmers.
2017 testsuite:
2019   + Fix duplicate test in apitest closedb10 testcase.  Patch from Guruprasad
2020     Hegde.
2022 glass backend:
2024 * A long-lived cursor on a table in a WritableDatabase could get into
2025   an invalid state, which typically resulted in a DatabaseCorruptError
2026   being thrown with the message:
2028       Db block overwritten - are there multiple writers?
2030   But in fact the on-disk database is not corrupted - it's just that
2031   the cursor in memory has got into an inconsistent state.  It looks
2032   like we'll always detect the inconsistency before it can cause on-disk
2033   corruption but it's hard to be completely certain.
2035   The bug is in code to rebuild the cursor when the underlying table
2036   changes in ways which require that, which is a fairly rare occurrence
2037   to start with, and only triggers when a block in the cursor has been
2038   released, reallocated, and we tried to load it in the cursor at the
2039   same level - the cursor wrongly assumes it has the current version
2040   of the block.
2042   Reported with a reproducer by Sylvain Taverne.  Confirmed by David
2043   Bremner as also fixing a problem in notmuch for which he hadn't managed
2044   to find a reduced reproducer.
2046 documentation:
2048 * INSTALL: Document need to have MSVC command line tools on PATH.
2050 portability:
2052 * Cygwin: Work around oddity where unlink() sometimes seems to indicate failure
2053   with errno set to ECHILD.
2055 Xapian-core 1.4.6 (2018-07-02):
2057 API:
2059 * API classes now support C++11 move semantics when using a compiler which
2060   we are confident supports them (currently compilers which define
2061   __cplusplus >= 201103 plus a special check for MSVC 2015 or later).
2062   C++11 move semantics provide a clean and efficient way for threaded code to
2063   hand-off Xapian objects to worker threads, but in this case it's very
2064   unhelpful for availability of these semantics to vary by compiler as it
2065   quietly leads to a build with non-threadsafe behaviour.  To address this,
2066   user code can #define XAPIAN_MOVE_SEMANTICS before #include <xapian.h> to
2067   force this on, and will then get a compilation failure if the compiler lacks
2068   suitable support.
2070 * MSet::snippet():
2072   + We were only escaping output for HTML/XML in some cases, which would
2073     potentially allow HTML to be injected into output (this has been assigned
2074     CVE-2018-0499).
2076   + Include certain leading non-word characters in snippets.  Previously we
2077     started the snippet at the start of the first actual word, but there are
2078     various cases where including non-word characters in front of the actual
2079     word adds useful context or otherwise aids comprehension.  Reported by
2080     Robert Stepanek in https://github.com/xapian/xapian/pull/180
2082 * Add MSetIterator::get_sort_key() method.  The sort key has always been
2083   available internally, but wasn't exposed via the public API before, which
2084   seems like an oversight as the collapse key has long been available.
2085   Reported by 张少华 on xapian-discuss.
2087 * Database::compact():
2089   + Allow Compactor::resolve_duplicate_metadata() implementations to delete
2090     entries.  Previously if an implementation returned an empty string this
2091     would result in a user meta-data entry with an empty value, which isn't
2092     normally achievable (empty meta-data values aren't stored), and so will
2093     cause odd behaviour.  We now handle an empty returned value by interpreting
2094     it in the natural way - it means that the merged result is to not set a
2095     value for that key in the output database.
2097   + Since 1.3.5 compacting a WritableDatabase with uncommitted changes throws
2098     Xapian::InvalidOperationError when compacting to a single-file glass
2099     database.  This release adds similar checks for chert and when compacting
2100     to a multiple-file glass database.
2102   + In the unlikely event that the total number of documents or the total
2103     length of all documents overflow when trying to compact a multi-database,
2104     we throw an exception.  This is now a DatabaseError exception instead of a
2105     const char* exception (a hang-over from before this code was turned into a
2106     public API in the library).
2108 * Document::remove_term(): Handle removing term at current TermIterator
2109   position - previously the underlying iterator was invalidated, leading to
2110   undefined behaviour (typically a segmentation fault).  Reported by Gaurav
2111   Arora.
2113 * TermIterator::get_termfreq() now always returns an exact answer.  Previously
2114   for multi-databases we approximated the result, which is probably either a
2115   hang-over from when this method was used during Enquire::get_eset(), or else
2116   due to a thinking that this method would be used in that situation (it
2117   certainly is not now).  If the user creates a TermIterator object and asks it
2118   for term frequencies then we really should give them the correct answer - it
2119   isn't hugely costly and the documentation doesn't warn that it might be
2120   approximated.
2122 * QueryParser::parse_query():
2124   + Now adds a colon after the prefix when prefixing a boolean term which
2125     starts with a colon.  This means the mapping is reversible, and matches
2126     what omega actually does in this case when it tries to reverse the mapping.
2127     Thanks to Andy Chilton for pointing out this corner case.
2129   + The parser now makes use of newer features in the lemon parser generator to
2130     make parsing faster and use less memory.
2132 * Enquire::get_mset(): Fix bug with get_mset(0, 0, X) when X > 0 which was
2133   causing an attempt to access an element in an empty vector.  Reported by
2134   sielicki in #xapian.
2136 * Stem:
2138   + Add Indonesian stemming algorithm.
2140   + Small optimisations to almost all stemming algorithms.
2142 * Stopper:
2144   + Add Indonesian stopword list.
2146   + The installed version of the Finnish stopword list now has one word per
2147     line.  Previously it had several space-separated words on some lines, which
2148     works with C++'s std::istream_iterator but may be inconvenient for use from
2149     some other languages.
2151   + The installed versions of stopword lists are now sorted in byte order
2152     rather than whatever collation order is specified by LC_COLLATE or similar
2153     at build time.  This makes the build more reproducible, and also may be
2154     more efficient for loading into some data structures.
2156 * WritableDatabase::replace_document(term, doc): Check for last_docid wrapping
2157   when used on a sharded database.
2159 * Database::locked(): Consistently throw FeatureUnavailableError on platforms
2160   where we can't test for a database lock without trying to take it.
2161   Previously GNU Hurd threw DatabaseLockError while platforms where we don't
2162   use fcntl() locking at all threw UnimplementedError.
2164 * Database and WritableDatabase constructors: Fix handling of entries for
2165   disabled backends in stub database files to throw FeatureUnavailableError
2166   instead of DatabaseError.
2168 * Database::get_value_lower_bound() now works correctly for sharded databases.
2169   Previously it returned the empty string if any shard had no values in the
2170   specified slot.
2172 * PostingIterator was failing to keep an internal reference to the parent
2173   Database object for sharded databases.
2175 * ValueIterator::skip_to() and check() had an off-by-one error in their docid
2176   calculations in some cases with sharded databases.
2178 testsuite:
2180 * apitest:
2182   + Enable testcases flagged metadata, synonym and/or writable to run on
2183     sharded databases.
2185   + Enable testcases flagged writable to run on sharded databases.  Writing to
2186     a sharded WritableDatabase has been supported since 1.3.2, but the test
2187     harness wasn't running many of the tests that could be with a sharded
2188     WritableDatabase.  This uncovered three bugs which are fixed in this
2189     release.
2191   + Support "generated" testcases for the inmemory backend, which uncovered a
2192     bug which is fixed in this release.
2194   + Skip testcase testlock1 on platforms that don't allow us to implement
2195     Database::locked() (which notably include GNU Hurd and Microsoft Windows).
2197   + Disable testlock2 on sharded databases as it fails for platforms which
2198     don't actually support testing the lock.
2200   + Extend tests of behaviour after database close.  Patch from Guruprasad
2201     Hegde.  Fixes https://trac.xapian.org/ticket/337
2203   + Enable testcase closedb5 for remote backends.  This testcase failed for
2204     remote backends when it was added and the cause wasn't clear, but it turns
2205     out it was actually a bug in the disk based backends, which was fixed way
2206     back in 2010.  Reported by Guruprasad Hegde.
2208   + Check for select() failing in retrylock1 testcase.  Retry on EINTR or
2209     EAGAIN, and report other errors rather than trying the read() anyway.
2210     Previously the read() would likely fail for the same reason the select()
2211     did, but at best this is liable to make what's going on less clear if the
2212     testcase fails.
2214 * Report bool values as true/false not 1/0.
2216 * Assorted minor testcase improvements.
2218 * The test harness now supports testcases which are expected to fail (XFAIL).
2219   Based on patch from Richard Boulton in https://trac.xapian.org/ticket/156.
2221 * Fix demangling of std::exception subclass names which wasn't happening due
2222   to a typo in the preprocessor check for the required header.  This was broken
2223   by changes in 1.4.2.
2225 * Make TEST_EQUAL() arguments side-effect free.  The TEST_EQUAL() macro
2226   evaluates its arguments a second time if the test fails in order to report
2227   their values.  This isn't ideal and really ought to be addressed, but for now
2228   fix uses where the argument has side-effect (e.g. *i++) such that the
2229   reported value should match the tested value.
2231 * runtest: Show usage if first option starts '-'.  Previously we ended up
2232   passing such options to libtool, so putting -v on runtest instead of apitest
2233   would run the tests but -v would effectively do nothing (it would make
2234   libtool verbose, but that doesn't make any difference in this case):
2235   ./runtest -v ./apitest
2237 * Suppress output from xcopy on MS Windows.
2239 * The test harness machinery for detecting file descriptor leaks should now
2240   work on any platform which has /dev/fd.
2242 * Implement recursive delete of a database directory in the test harness
2243   using nftw() if available (and not buggy like mingw64's seems to be), rather
2244   than running "rm -rf" as an external command.  This avoids the overhead of
2245   starting a new process each time we clean up a test database, which happens a
2246   lot during a test run.
2248 * Speed up generated test databases a little by adding a stat() check to avoid
2249   throwing and catching an exception when the database doesn't yet exist.
2251 * Skip timed tests when configured with --enable-log.  The logging can easily
2252   turn O(1) operations into O(n), and that's hard to avoid.  Fixes
2253   https://trac.xapian.org/ticket/757, reported by Guruprasad Hegde.
2255 matcher:
2257 * OP_VALUE_*: When a value slot's lower and upper bound are equal, we know
2258   that exactly how many documents the subquery can match (either 0 or those
2259   bounds).  This also avoids a division by zero which previously happened
2260   when trying to calculate the estimate.
2262 * Speed up sorting by keys.  Use string::compare() to avoid having to call
2263   operator< if operator> returns false.
2265 * Fix clamping of maxitems argument to get_mset() - it was being clamped
2266   to db.get_doccount(), now it's clamped to db.get_doccount() - first.  In
2267   practice this doesn't actually seem to cause any issues.
2269 * If a match time limit is in effect, when it expires we now clamp
2270   check_at_least to first + maxitems instead of to maxitems.  In practice this
2271   also doesn't seem to actually cause any issues (at least we've failed to
2272   construct a testcase where it actually makes an observable difference).
2274 * Fix percentages when only some shards have positions.  If the final shard
2275   didn't have positions this would lead to under-counting the total number leaf
2276   of subqueries which would lead to incorrect positional calculations (and a
2277   division by zero if the top level of the query was positional.  This bug was
2278   introduced in 1.4.3.
2280 * OP_NEAR: Fix "phantom positions", where OP_NEAR would think a term without
2281   positional information occurred at position 1 if it had the lowest term
2282   frequency amongst the OP_NEAR's subqueries.
2284 * Fix termfreq used in weight calculations for a term occurring more than once
2285   in the query.  Previously the termfreq for such terms was multiplied by the
2286   number of different query positions they appeared at.
2288 * OP_SYNONYM: We use the doclength upper bound for the wdf upper bound of a
2289   synonym - now we avoid fetching it twice when the doclength upper bound is
2290   explicitly needed.
2292 * Short-cut init() when factor is 0 in most Weight subclasses.  This indicates
2293   the object is for the term-independent weight contribution, which is always 0
2294   for most schemes, so there's no point fetching any stats or doing any
2295   calculations.  This fixes a divide by zero for TfIdfWeight, detected by
2296   UBSan.
2298 * OP_OR: Fix bug which caused orcheck1 to fail once hooked up to run with the
2299   inmemory backend.
2301 glass backend:
2303 * Fix glass freelist bug when changes to a new database which didn't modify the
2304   termlist table were committed.  In this corner case, a block which had been
2305   allocated to be the root block in the termlist table was leaked.  This was
2306   largely harmless, except that it was detected by Database::check() and caused
2307   it to report an error.  Reported by Antoine Beaupré and David Bremner.
2309 * Fix glass freelist bug with cancel_transaction().  The freelist wasn't
2310   reset to how it was before the transaction, resulting in leaked blocks.
2311   This was largely harmless, except that it was detected by Database::check()
2312   and caused it to report an error.
2314 * Improve the per-term wdf upper bound.  Previously we used min(cf(term),
2315   wdf_upper_bound(db)) which is tight for any terms which attain that
2316   upper bound, and also for terms with termfreq == 1 (the latter are common
2317   in the database (e.g. 66% for a database of wikipedia), but probably
2318   much less common in searches).  When termfreq > 1 we now use
2319   max(first_wdf(term), cf(term) - first_wdf(term)), which means terms with
2320   termfreq == 2 will also attain their bound (another 11% for the same
2321   database) while terms with higher termfreq but below the global bound will
2322   get a tighter bound.
2324 * Fix Database::locked() on single-file glass db to just return false (such
2325   databases can't be opened as a WritableDatabase so there can't be a write
2326   lock).  Previously this failed with: "DatabaseLockError: Unable to get write
2327   lock on /flintlock: Testing lock"
2329 * Fix compaction when both the input and output are specified as a file
2330   descriptor.  Previously this threw an exception due to an overeager check
2331   that destination != source.
2333 * Use O_TRUNC when compacting to single file.  If the output already exists but
2334   is larger than our output we don't want to just overwrite the start of it.
2335   This case also used to result in confusing compaction percentages.
2337 * Enable glass's "open_nearby_postlist" optimisation (which especially helps
2338   large wildcard queries) for writable databases without any uncommitted
2339   changes as well.
2341 * Make get_unique_terms() more efficient for glass.  We approximate
2342   get_unique_terms() by the length of the termlist (which counts boolean terms
2343   too) but clamp this to be no larger than the document length.  Since we need
2344   to open the termlist to get its length, it makes more sense to get the
2345   document length from that termlist for no extra cost rather than looking it
2346   up in the postlist table.
2348 * Database::check() now checks document lengths against the stored document
2349   length lower and upper bounds.  Patch from Uppinder Chugh.  Fixes
2350   https://trac.xapian.org/ticket/617.
2352 * Fix bogus handling of most-recently-read value slot statistics.  It seems
2353   that we get lucky and this can't actually cause a problem in practice due
2354   to another layer of caching above, but if nothing else it's a bug waiting to
2355   happen.
2357 * If we fail to create the directory for a new database because the path
2358   already exists, the exception now reports EEXIST as the errno value rather
2359   than whatever errno value happened to be set from an earlier library call.
2361 remote backend:
2363 * xapian-tcpsrv --one-shot no longer forks.  We need fork to handle multiple
2364   concurrent connections, but when handling a single connection forking just
2365   adds overhead and potentially complicates process management for our caller.
2366   This aligns with the behaviour under __WIN32__ where we use threads instead
2367   of forking, and service the connection from the main thread with --one-shot.
2369 * Fix repeat call to ValueIterator::check() on the same docid to not always
2370   set valid to true for remote backend.
2372 inmemory backend:
2374 * Fix repeat call to ValueIterator::check() on the same docid to not always
2375   set valid to true for inmemory backend.
2377 build system:
2379 * configure: Fix potentially confusing messages suggesting snprintf was added
2380   in C90 - it was actually standardised in C99.
2382 * Eliminate configure probes related to off_t by using C++11 features.
2384 * The installed xapian-config script is now cleaned up by removing code to
2385   handle use before installation.  This extra code contained build paths
2386   which meant the build wasn't bit-for-bit reproducible unless the same
2387   build directory name was used.  This change also eliminates use of
2388   automake's $(transform) (which seems to be intended an internal mechanism)
2389   and fixes "make uninstall" to remove xapian-config when a program-prefix or
2390   -suffix is in use (e.g. there's a default -1.5 suffix for git master
2391   currently).
2393 * Directory separator knowledge is now factored out into configure, based on
2394   $host_os and __WIN32__ (it seems hard to probe for this in a way which works
2395   when cross-compiling).
2397 * Fix build with --disable-backend-remote.
2399 * In an out-of-tree build configured with --enable-maintainer-mode
2400   and --disable-dependency-tracking we would fail to create the
2401   "tests/soaktest" and "unicode" directories in the build directory.
2402   Patch from Gaurav Arora.
2404 * Improve handling of multitarget rule stamp files.  Clean them on "make
2405   maintainer-clean" and ship them so that --enable-maintainer-mode when
2406   building from a tarball doesn't needlessly rerun the multitarget rules.
2408 * Split out allsnowballheaders.h again to avoid include path issues with
2409   unittest in out-of-tree maintainer-mode builds.
2411 * xapian-core.pc: Both the Name and Description were too long compared to
2412   pkg-config norms, and the Description was trying to be multi-line which it
2413   seems pkg-config doesn't support.  Fixes
2414   https://github.com/xapian/xapian/pull/203, reported by orbea.
2416 documentation:
2418 * Stop describing Xapian as "Probabilistic" - we've also had non-probabilistic
2419   weighting schemes since 1.3.2.
2421 * Improve API docs for MSet::snippet().
2423 * Correct some class names in doxygen file documentation comments.
2425 * Mark up shell command as code-block:: sh.
2427 tools:
2429 * xapian-delve:
2431   + Document values can contain binary data, so escape them by default for
2432     output.  Other options now supported are to decode as a packed integer
2433     (like omindex uses for last modified), decode using
2434     Xapian::sortable_unserialise(), and to show the raw form (which was the
2435     previous behaviour).
2437   + Report current database revision.
2439 * xapian-inspect:
2441   + Report entry count when opening table
2443   + Support inspecting single file DBs via a new --table option (which can also
2444     be used with a non-single-file DB instead of specifying the path to the
2445     table).
2447   + Add "first" and "last" commands which jump to the first/last entry in the
2448     current table respectively.
2450   + "until" now counts and reports the number of entries advanced by.
2452   + Document "until" with no arguments - this advances to the end of the table,
2453     but wasn't mentioned in the help.
2455   + Commands "goto" and "until" which take a key as an argument now expect the
2456     key in the same escaped form that's used for display.  This makes it much
2457     simpler to interact with tables with binary keys.
2459   + Fix to expect .glass not .DB extension of glass tables.
2461 portability:
2463 * Sort out building using MSVC with the standard build system, and fix assorted
2464   problems.  MSVC 2015 or later is required for decent C++11 support.  Both 32-
2465   and 64-bit builds are now supported.
2467 * Remove code specific to old MSVC nmake build system.  The latter has been
2468   removed already.
2470 * Don't use WIN32 API to parse/unparse UUIDs.  So much glue code is needed that
2471   it's simpler to just do the parsing and unparsing ourselves, and we already
2472   have an implementation which is used when generating UUIDs using /proc on
2473   Linux.  We still use UuidCreate() to generate a new UUID.
2475 * Improve compiler visibility attribute detection to check that using the
2476   attributes doesn't result in a warning - previously we'd enable them even on
2477   platforms which don't support them, which would result in a compiler warning
2478   for every file compiled.  We now probe for -fvisibility=hidden and
2479   -fvisibility-inlines-hidden together as it seems all compilers implement both
2480   or neither, and it's faster to do one probe instead of two.
2482 * Don't pass the same FDSET twice in same select() - this appears not to be
2483   allowed by current POSIX, and causes warnings with GCC8.
2485 * Fix compacttofd testcases to specify O_BINARY so they pass on platforms
2486   where O_BINARY matters.
2488 * configure: Probe for declaration of _putenv_s.  It seems that the symbol is
2489   always present in the MSVCRT DLL, but older mingw may not provide a
2490   declaration for it.
2492 * Fix "may be used uninitialised" warning with GCC 4.9.2 and -Os.
2494 * Suppress mingw32 deprecation warning for useconds_t.  We've already switched
2495   away from useconds_t on git master, but it's not easy to do for 1.4.x without
2496   ABI breakage.
2498 * Fix signed vs unsigned warnings with assertions on.
2500 * Use $(SED) instead of hard-coding "sed".  The rules concerned are all ones
2501   that only maintainers currently need to run, but we're likely to enable
2502   maintainer-mode by default at some point and then portability here will
2503   matter more.
2505 * Add missing explicit <algorithm> for std::max()/std::min().
2507 * Check for EAGAIN as well as EINTR from select().  The Linux select(2) man
2508   page says: "Portable programs may wish to check for EAGAIN and loop, just as
2509   with EINTR" and that seems to be necessary for Cygwin at least.
2511 * Probe for exp10() declaration as Cygwin seems to have the symbol but lacks a
2512   declaration in the headers.  Just ignoring it is simplest and we'll use GCC's
2513   __builtin_exp10() instead.
2515 * Fix warnings when building Snowball compiler with recent GCC.
2517 * Fix Perl script used during maintainer builds to work with Perl < 5.10.  Such
2518   old perl versions shouldn't really be relevant for maintainer builds at this
2519   point, but appveyor's mingw install has such a Perl version.
2521 * Remove unused macro STATIC_ASSERT_TYPE_DOMINATES (unused, except by
2522   internaltest unit test for it, since the flint backend was removed in 2011)
2523   and replace uses of STATIC_ASSERT_UNSIGNED_TYPE with C++11 features
2524   static_assert and std::is_unsigned instead.
2526 * Don't retry on (errno == EINTR) when read() or pread() indicates end-of-file.
2527   This could potentially have put us into an infinite loop if we encountered
2528   this situation and errno happened to be EINTR from a previous library call.
2530 * Make read-only data arrays consistently static and const.
2532 * Avoid casting invalid value to enum reply_type if an invalid reply code is
2533   received from a remote server.  This is technically undefined behaviour,
2534   though in practice probably not a problem.
2536 * Eliminate an array of function pointers and some char* array members in
2537   library, reducing the number of relocations needed at shared library load
2538   time, which reduces the total time to load the library.
2540 packaging:
2542 * Use https for tarball URLs in .spec files.  This provides protection against
2543   MITM attacks on people building packages using these spec files, and is also
2544   slightly more efficient as the http: URLs redirect to the https: versions
2545   anyway.
2547 debug code:
2549 * Fix build when configured with --enable-log due to bugs in debug logging
2550   annotations.  Patch from Uppinder Chugh.
2552 * Fix assertion for value range on empty slot.
2554 * Use AssertEq() rather than Assert with ==, the former reports the two
2555   values if the assertion fails.
2557 Xapian-core 1.4.5 (2017-10-16):
2559 API:
2561 * Add Database::get_total_length() method.  Previously you had to calculate
2562   this from get_avlength() and get_doccount(), taking into account rounding
2563   issues.  But even then you couldn't reliably get the exact value when total
2564   length is large since a double's mantissa has more limited precision than an
2565   unsigned long long.
2567 * Add Xapian::iterator_rewound() for bidirectional iterators, to test if the
2568   iterator is at the start (useful for testing whether we're done when
2569   iterating backwards).
2571 * DatabaseOpeningError exceptions now provide errno via get_error_string()
2572   rather than turning it into a string and including it in the exception
2573   message.
2575 * WritableDatabase::replace_document(): when passed a Document object which
2576   came from a database and has unmodified values, we used to always read
2577   those values into a memory structure.  Now we only do this if the document
2578   is being replaced to the same document ID which it came from, which should
2579   make other cases a bit more efficient.
2581 * Enquire::get_eset(): When approximating term frequencies we now round to the
2582   nearest integer - previously we always rounded down.
2584 testsuite:
2586 * Improve Xapian::Document test coverage.
2588 * Pass --child-silent-after-fork=yes to valgrind which stops us creating a
2589   .valgrind.log.* file for every remote testcase run.  This option was added in
2590   valgrind 3.3.0 which is already the minimum version we support.
2592 * Open and unlink valgrind log before option parsing so we no longer leave a
2593   log file behind if there's an error parsing options or for options like
2594   --help which report and exit.
2596 * Delete .valgrind.log.* on "make clean" - if tests are run under valgrind and
2597   the test is killed at just the wrong moment then a log file may be left
2598   behind.
2600 * Fix the NetworkError with ECHILD check added in 1.4.4 - this will no longer
2601   segfault if the test harness catches a NetworkError without an error string.
2603 matcher:
2605 * Iterating of positions has been sped up, which means phrase matching is now
2606   faster (by a little over 5% in some simple tests).
2608 * Fix use after free of QueryOptimiser hint in certain cases involving
2609   multiple databases only some of which have positional information.
2610   This bug was introduced by changes in xapian-core 1.4.3.  Fixes #752,
2611   reported and analysed by Robert Stepanek.
2613 * An unweighted OP_AND_MAYBE is now optimised to just its left branch - the
2614   other branch or branches only contribute weight, so can be completely ignored
2615   when the operator is unweighted.
2617 inmemory backend:
2619 * Use binary chop instead of linear search in all places where we're searching
2620   for a term or document - we weren't taking advantage of the sorted order
2621   everywhere.
2623 build system:
2625 * xapian-core.pc: Specify Libs.private in pkgconfig file, which is needed for
2626   static linking, and probably also for shared libraries on platforms without
2627   DT_NEEDED or something equivalent.  Fixes #751, reported by Matthieu Gautier.
2629 documentation:
2631 * Document that QueryParser::set_default_op() supports OP_MAX - this
2632   has been the case since OP_MAX was added, but the API docs for
2633   set_default_op() weren't updated to reflect this.
2635 * Document OP_MAX and OP_WILDCARD.
2637 * Fix documentation of TermGenerator stop_strategy values STOP_ALL and
2638   STOP_STEMMED.  Reported by Matthieu Gautier in #750.  Thanks to Gaurav Arora
2639   for additional investigation.
2641 * net/remote_protocol.rst: Update the current version of the remote protocol
2642   version (39 not 38).  The differences between the two are only in the Query
2643   and MSet serialisations which aren't documented in detail here.
2645 * Link get_unique_terms_begin() and get_terms_begin() API documentation -
2646   the cross-referencing is useful in itself, but also helps to highlight
2647   the difference between the two.
2649 * Fix "IPv5" -> "IPv6" comment typo.  Noted by James Clarke
2651 * deprecation.html:
2653   + Add deprecated Enquire::get_eset() overload - this was marked as deprecated
2654     in the header file, but hadn't been added here.
2656   + Move deprecated typedefs to the "to be removed" list - they'd been
2657     accidentally added to the "removed" list.
2659   + Improve descriptions of several deprecated features.
2661 * QueryParser::set_max_expansion() is now discussed in the API documentation
2662   instead of the deprecated set_max_wildcard_expansion().
2664 * Clarify PostList::check() API documentation:  If valid is set to false, then
2665   NULL must be returned (pruning in this situation doesn't make sense) and
2666   at_end() shouldn't be called (because it implicitly depends on the current
2667   position being valid).
2669 * HACKING:
2671   + Update re -Wold-style-cast which we enabled and then had to disable again.
2673   + Update links to C++ FAQ and libstdc++'s debug mode.
2675   + Update several URLs to use https.
2677   + The 1.2 release branch has now been retired, so remove 1.2-specific
2678     backporting tips.
2680 portability:
2682 * Also check <errno.h> for sys_nerr and sys_errlist.  This is probably a more
2683   common location for them than Linux's <stdio.h> (even on Linux the man page
2684   says they're in <errno.h> but that doesn't match reality).
2686 * Use $(CC) not $(CC_FOR_BUILD) to build zlib-vg.so.  The test for whether we
2687   need it is based on the host OS, so it makes more sense to use the host
2688   compiler to build it when cross compiling.
2690 * On Hurd F_GETLK currently always fails with errno set to ENOSYS - treat this
2691   the same way as ENOLCK.  This fixes the testsuite on GNU Hurd, broken since
2692   the addition on Database::locked() in 1.4.3.
2694 * Add missing #include "safesyssocket.h", needed on at least FreeBSD to get
2695   AF_INET and SOCK_STREAM defined.  Fixes
2696   https://github.com/xapian/xapian/pull/154, reported by Po-Chuan Hsieh
2697   (alternative fix applied was suggested by James Aylett).
2699 * configure: Fixed the probe for whether the test harness can use RTTI with
2700   IBM's xlC compiler (which defaults to not generating RTTI).  Previously the
2701   probe would always think RTTI was available.
2703 debug code:
2705 * Fix some incorrect class/method names in debug logging.
2707 * Stop disabling ccache for coverage builds as ccache 3.2.2 now supports
2708   caching compilations with --coverage, and they work as far back as ccache 3.0
2709   (caching is automatically disabled by these older versions).
2711 * Drop --enable-quiet from in COVERAGE_CONFIGURE - this option no longer does
2712   anything since 1.3.1.
2714 Xapian-core 1.4.4 (2017-04-19):
2716 API:
2718 * Database::check():
2720   + Fix checking a single table - changes in 1.4.2 broke such checks unless you
2721     specified the table without any extension.
2723   + Errors from failing to find the file specified are now thrown as
2724     DatabaseOpeningError (was DatabaseError, of which DatabaseOpeningError is
2725     a subclass so existing code should continue to work).  Also improved the
2726     error message when the file doesn't exist is better.
2728 * Drop OP_SCALE_WEIGHT over OP_VALUE_RANGE, OP_VALUE_GE and OP_VALUE_LE in the
2729   Query constructor.  These operators always return weight 0 so OP_SCALE_WEIGHT
2730   over them has no effect.  Eliminating it at query construction time is cheap
2731   (we only need to check the type of the subquery), eliminates the confusing
2732   "0 * " from the query description, and means the OP_SCALE_WEIGHT Query object
2733   can be released sooner.  Inspired by Shivanshu Chauhan asking about the query
2734   description on IRC.
2736 * Drop OP_SCALE_WEIGHT on the right side of OP_AND_NOT in the Query
2737   constructor.  OP_AND_NOT takes no weight from the right so OP_SCALE_WEIGHT
2738   has no effect there.  Eliminating it at query construction time is cheap
2739   (just need to check the subquery's type), eliminates the confusing "0 * "
2740   from the query description, and means the OP_SCALE_WEIGHT object can be
2741   released sooner.
2743 testsuite:
2745 * Add more tests of Database::check().  Fixes #238, reported by Richard
2746   Boulton.
2748 * Make apitest testcase nosuchdb1 fail if we manage to open the DB.
2750 * Skip testcases which throw NetworkError with errno value ECHILD - this
2751   indicates system resource starvation rather than a Xapian bug.  Such failures
2752   are seen on Debian buildds from time to time, see:
2753   https://bugs.debian.org/681941
2755 matcher:
2757 * Fix incorrect results due to uninitialised memory.  The array holding max
2758   weight values in MultiAndPostList is never initialised if the operator is
2759   unweighted, but the values are still used to calculate the max weight to pass
2760   to subqueries, leading to incorrect results.  This can be observed with an OR
2761   under an unweighted AND (e.g. OR under AND on the right side of AND_NOT).
2762   The fix applied is to simply default initialise this array, which should lead
2763   to a max weight of 0.0 being passed on to subqueries.  Bug reported in
2764   notmuch by Kirill A. Shutemov, and forwarded by David Bremner.
2766 documentation:
2768 * Correct "Query::feature_flag" -> "QueryParser::feature_flag".  Fixes #747,
2769   reported by James Aylett.
2771 * Rename set_metadata() `value` parameter to `metadata`.  This change is
2772   particularly motivated by making it easier to map this case specially in SWIG
2773   bindings, but the new name is also clearer and better documents its purpose.
2775 * Rename value range parameters.  The new names (`range_limit` instead of
2776   `limit`, `range_lower` instead of `begin` and `range_upper` instead of `end`)
2777   are particularly motivated by making it easier to map them specially in SWIG
2778   bindings, but they're also clearer names which better document their
2779   purposes.
2781 * Change "(key, tag)" to "(key, value)" in user metadata docs.  The user
2782   metadata is essentially what's often called a "key-value store" so users
2783   are likely to be familiar with that terminology.
2785 * Consistently name parameter of Weight::unserialise() overridden forms.
2786   In xapian/weight.h it was almost always named `serialised`, but LMWeight
2787   named it `s` and CoordWeight omitted the name.
2789 * Fix various minor documentation comment typos.
2791 portability:
2793 * Fix configure probe for __builtin_exp10() to work around bug on mingw - there
2794   GCC generates a call to exp10() for __builtin_exp10() but there is no exp10()
2795   function in the C library, so we get a link failure.  Use a full link test
2796   instead to avoid this issue.  Reported by Mario Emmenlauer on xapian-devel.
2798 * Fix configure probe for log2() which was failing on at least some platforms
2799   due to ambiguity between overloaded forms of log2().  Make the probe
2800   explicitly check for log2(double) to avoid this problem.
2802 * Workaround the unhelpful semantics of AI_ADDRCONFIG on platforms which follow
2803   the old RFC instead of POSIX (such as Linux) - if only loopback networking is
2804   configured, localhost won't resolve by name or IP address, which causes
2805   testsuites using the remote backend over localhost to fail in auto-build
2806   environments which deliberately disable networking during builds.  The
2807   workaround implemented is to check if the hostname is "::1", "127.0.0.1" or
2808   "localhost" and disable AI_ADDRCONFIG for these.  This doesn't catch all
2809   possible ways to specify localhost, but should catch all the ways these might
2810   be specified in a testsuite.  Fixes https://bugs.debian.org/853107, reported
2811   by Daniel Schepler and the root cause uncovered by James Clarke.
2813 debug code:
2815 * Adjust assertion in InMemoryPostList.  Calling skip_to() is fine when the
2816   postlist hasn't been started yet (but the assertion was failing for a term
2817   not in the database).  Latent bug, triggered by testcases complexphrase1 and
2818   complexnear1 as updated for addition of support for OP_OR subqueries of
2819   OP_PHRASE/OP_NEAR.
2821 Xapian-core 1.4.3 (2017-01-25):
2823 API:
2825 * MSet::snippet(): Favour candidate snippets which contain more of a diversity
2826   of matching terms by discounting the relevance of repeated terms using an
2827   exponential decay.  A snippet which contains more terms from the query is
2828   likely to be better than one which contains the same term or terms multiple
2829   times, but a repeated term is still interesting, just less with each
2830   additional appearance.  Diversity issue highlighted by Robert Stepanek's
2831   patch in https://github.com/xapian/xapian/pull/117 - testcases taken from his
2832   patch.
2834 * MSet::snippet(): New flag SNIPPET_EMPTY_WITHOUT_MATCH to get an empty snippet
2835   if there are no matches in the text passed in.  Implemented by Robert
2836   Stepanek.
2838 * Round MSet::get_matches_estimated() to an appropriate number of significant
2839   figures.  The algorithm used looks at the lower and upper bound and where the
2840   estimate sits between them, and then picks an appropriate number of
2841   significant figures.  Thanks to Sébastien Le Callonnec for help sorting out a
2842   portability issue on OS X.
2844 * Add Database::locked() method - where possible this non-invasively checks if
2845   the database is currently open for writing, which can be useful for
2846   dashboards and other status reporting tools.
2848 testsuite:
2850 * Use terms that exist in the database for most snippet tests.  It's good to
2851   test that snippet highlighting works for terms that aren't in the database,
2852   but it's not good for all our snippet tests to feature such terms - it's
2853   not the common usage.
2855 matcher:
2857 * Improve value range upper bound and estimated matches.  The value slot
2858   frequency provides a tighter upper bound than Database::get_doccount().
2859   The estimate is now calculated by working out the proportion of possible
2860   values between the slot lower and upper bounds which the range covers
2861   (assuming a uniform distribution).  This seems to work fairly well in
2862   practice, and is certainly better than the crude estimate we were using:
2863   Database::get_doccount() / 2
2865 * Handle arbitrary combinations of OP_OR under OP_NEAR/OP_PHRASE, partly
2866   addressing #508.  Thanks to Jean-Francois Dockes for motivation and testing.
2868 * Only convert OP_PHRASE to OP_AND if full DB has no positions.  Until now the
2869   conversion was done independently for each sub-database, but being consistent
2870   with the results from a database containing all the same documents seems more
2871   useful.
2873 * Avoid double get_wdf() call for first subquery of OP_NEAR and OP_PHRASE,
2874   which will speed them up by a small amount.
2876 documentation:
2878 * INSTALL: Update section about -Bsymbolic-functions which is not a new
2879   GNU ld feature at this point.
2881 tools:
2883 * xapian-delve: Uses new Database::locked() method to report if the database
2884   is currently locked.
2886 portability:
2888 * Fix build failure cross-compiling for android due to not pulling in header
2889   for errno.
2891 * Fix compiler warnings.
2893 Xapian-core 1.4.2 (2016-12-26):
2895 API:
2897 * Add XAPIAN_AT_LEAST(A,B,C) macro.
2899 * MSet::snippet(): Optimise snippet generation - it's now ~46% faster in a
2900   simple test.
2902 * Add Xapian::DOC_ASSUME_VALID flag which tells Database::get_document() that
2903   it doesn't need to check that the passed docid is valid.  Fixes #739,
2904   reported by Germán M. Bravo.
2906 * TfIdfWeight: Add support for the L wdf normalisation.  Patch from Vivek Pal.
2908 * BB2Weight: Fix weights when database has just one document.  Our existing
2909   attempt to clamp N to be at least 2 was ineffective due to computing
2910   N - 2 < 0 in an unsigned type.
2912 * DPHWeight: Fix reversed sign in quadratic formula, making the upper bound a
2913   tiny amount higher.
2915 * DLHWeight: Correct upper bound which was a bit too low, due to flawed logic
2916   in its derivation.  The new bound is slightly less tight (by a few percent).
2918 * DLHWeight,DPHWeight: Avoid calculating log(0) when wdf is equal to the
2919   document length.
2921 * TermGenerator: Handle stemmer returning empty string - the Arabic stemmer
2922   can currently do this (e.g. for a single tatweel) and user stemmers can too.
2923   Fixes #741, reported by Emmanuel Engelhart.
2925 * Database::check(): Fix check that the first docid in each doclength chunk is
2926   more than the last docid in the previous chunk - this code was in the wrong
2927   place so didn't actually work.
2929 * Database::get_unique_terms(): Clamp returned value to be <= document length.
2930   Ideally get_unique_terms() ought to only count terms with wdf > 0, but that's
2931   expensive to calculate on demand.
2933 glass backend:
2935 * When compacting we now only write the iamglass file out once, and we write it
2936   before we sync the tables but sync it after, which is more I/O friendly.
2938 * Database::check(): Fix in SEGV when out == NULL and opts != 0.
2940 * Fix potential SEGV with corrupt value stats.
2942 chert backend:
2944 * Fix potential SEGV with corrupt value stats.
2946 build system:
2948 * Add XO_REQUIRE autoconf macro to provide an easy way to handle version checks
2949   in user configure scripts.
2951 tools:
2953 * quest: Support BM25+, LM and PL2+ weighting schemes.
2955 * xapian-check: Fix when ellipses are shown in 't' mode.  They were being shown
2956   when there were exactly 6 entries, but we only start omitting entries when
2957   there are *more* than 6.  Fix applies to both glass and chert.
2959 portability:
2961 * Avoid using opendir()/readdir() in our closefrom() implementation as these
2962   functions can call malloc(), which isn't safe to do between fork() and exec()
2963   in a multi-threaded program, but after fork() is exactly where we want to
2964   use closefrom().  Instead we now use getdirentries() on Linux and
2965   getdirentriesattr() on OS X (OS X support bugs shaken out with help from
2966   Germán M. Bravo).
2968 * Support reading UUIDs from /proc/sys/kernel/random/uuid which is especially
2969   useful when building for Android, as it avoids having to cross-build a UUID
2970   library.
2972 * Disable volatile workaround for excess precision SEGV for SSE - previously it
2973   was only being disabled for SSE2.
2975 * When building for x86 using a compiler where we don't know how to disable
2976   use of 387 FP instructions, we now run remote servers for the testsuite under
2977   valgrind --tool=none, like we do when --disable-sse is explicitly specified.
2979 * Add alignment_cast<T> which has the same effect as reinterpret_cast<T> but
2980   avoids warnings about alignment issues.
2982 * Suppress warnings about unused private members.  DLHWeight and DPHWeight
2983   have an unused lower_bound member, which clang warns about, but we need to
2984   keep them there in 1.4.x to preserve ABI compatibility.
2986 * Remove workaround for g++ 2.95 bug as we require at least 4.7 now.
2988 * configure: Probe for <cxxabi.h>.  GCC added this header in GCC 3.1, which
2989   is much older than we support, so we've just assumed it was available if
2990   __GNUC__ was defined.  However, clang lies and defines __GNUC__ yet doesn't
2991   seem to reliably provide <cxxabi.h>, so we need to probe for it.
2993 * Fix "unused assignment" warning.
2995 * configure: Probe for __builtin_* functions.  Previously we just checked for
2996   __GNUC__ being defined, but it's cleaner to probe for them properly -
2997   compilers other than GCC and those that pretend to be GCC might provide these
2998   too.
3000 * Use __builtin_clz() with compilers which support it to speed up encoding
3001   and especially decoding of positional data.  This speeds up phrase searching
3002   by ~0.5% in a simple test.
3004 * Check signed right shift behaviour at compile time - we can use a test on a
3005   constant expression which should optimise away to just the required version
3006   of the code, which means that on platforms which perform sign-extension
3007   (pretty much everything current it seems) we don't have to rely on the
3008   compiler optimising a portable idiom down to the appropriate right shift
3009   instruction.
3011 * Improve configure check for log2().  We include <cmath> so the check really
3012   should succeed if only std::log2() is declared.
3014 * Enable win32-dll option to LT_INIT.
3016 debug code:
3018 * xapian-inspect:
3020   + Support glass instead of chert.
3022   + Allow control of showing keys/tags.
3024   + Use more mnemonic letters than X for command arguments in help.
3026 Xapian-core 1.4.1 (2016-10-21):
3028 API:
3030 * Constructing a Query for a non-reference counted PostingSource object will
3031   now try to clone the PostingSource object (as happened in 1.3.4 and
3032   earlier).  This clone code was removed as part of the changes in 1.3.5 to
3033   support optional reference counting of PostingSource objects, but that breaks
3034   the case when the PostingSource object is on the stack and goes out of scope
3035   before the Query object is used.  Issue reported by Till Schäfer and analysed
3036   by Daniel Vrátil in a bug report against Akonadi:
3037   https://bugs.kde.org/show_bug.cgi?id=363741
3039 * Add BM25PlusWeight class implementing the BM25+ weighting scheme, implemented
3040   by Vivek Pal (https://github.com/xapian/xapian/pull/104).
3042 * Add PL2PlusWeight class implementing the PL2+ weighting scheme, implemented
3043   by Vivek Pal (https://github.com/xapian/xapian/pull/108).
3045 * LMWeight: Implement Dir+ weighting scheme as DIRICHLET_PLUS_SMOOTHING.
3046   Patch from Vivek Pal.
3048 * Add CoordWeight class implementing coordinate matching.  This can be useful
3049   for specialised uses - e.g. to implement sorting by the number of matching
3050   filters.
3052 * DLHWeight,DPHWeight,PL2Weight: With these weighting schemes, the formulae
3053   can give a negative weight contribution for a term in extreme cases.  We
3054   used to try to handle this by calculating a per-term lower bound on the
3055   contribution and subtracting this from the contribution, but this idea
3056   is fundamentally flawed as the total offset it adds to a document depends on
3057   what combination of terms that document matches, meaning in general the
3058   offset isn't the same for every matching document.  So instead we now clamp
3059   each term's weight contribution to be >= 0.
3061 * TfIdfWeight: Always scale term weight by wqf - this seems the logical
3062   approach as it matches the weighting we'd get if we weighted every non-unique
3063   term in the query, as well as being explicit in the Piv+ formula.
3065 * Fix OP_SCALE_WEIGHT to work with all weighting schemes - previously it was
3066   ignored when using PL2Weight and LMWeight.
3068 * PL2Weight: Greatly improve upper bound on weight:
3069   + Split the weight equation into two parts and maximise each separately as
3070     that gives an easily solvable problem, and in common cases the maximum is
3071     at the same value of wdfn for both parts.  In a simple test, the upper
3072     bounds are now just over double the highest weight actually achieved -
3073     previously they were several hundred times.  This approach was suggested by
3074     Aarsh Shah in: https://github.com/xapian/xapian/pull/48
3075   + Improve upper bound on normalised wdf (wdfn) - when wdf_upper_bound >
3076     doclength_lower_bound, we get a tighter bound by evaluating at
3077     wdf=wdf_upper_bound.  In a simple test, this reduces the upper bound on
3078     wdfn by 36-64%, and the upper bound on the weight by 9-33%.
3080 * PL2Weight: Fix calculation of upper_bound when P2>0.  P2 is typically
3081   negative, but for a very common term it can be positive and then we should
3082   use wdfn_lower not wdfn_upper to adjust P_max.
3084 * Weight::unserialise(): Check serialised form is empty when unserialising
3085   parameter-free schemes BoolWeight, DLHWeight and DPHWeight.
3087 * TermGenerator::set_stopper_strategy(): New method to control how the Stopper
3088   object is used.  Patch from Arnav Jain.
3090 * QueryParser: Fix handling of CJK query over multiple prefixes.  Previously
3091   all the n-gram terms were AND-ed together - now we AND together for each
3092   prefix, then OR the results.  Fixes #719, reported by Aaron Li.
3094 * Add Database::get_revision() method which provides access to the database
3095   revision number for chert and glass, intended for use by xapiand.  Marked
3096   as experimental, so we don't have to go through the usual deprecation cycle
3097   if this proves not to be the approach we want to take.  Fixes #709,
3098   reported by Germán M. Bravo.
3100 * Mark RangeProcessor constructor as `explicit`.
3102 testsuite:
3104 * OP_SCALE_WEIGHT: Check top weight is non-zero - if it is zero, tests which
3105   try to check that OP_SCALE_WEIGHT works will always pass.
3107 * testsuite: Check SerialisationError descriptions from Xapian::Weight
3108   subclasses mention the weighting scheme name.
3110 matcher:
3112 * Fix stats passed to Weight with OP_SYNONYM.  Previously the number of
3113   unique terms was never calculated, and a term which matched all documents
3114   would be optimised to an all-docs postlist, which fails to supply the
3115   correct wdf info.
3117 * Use floating point calculation for OR synonym freq estimates.  The division
3118   was being done as an integer division, which means the result was always
3119   getting rounded down rather than rounded to the nearest integer.
3121 glass backend:
3123 * Fix allterms with prefix on glass with uncommitted changes.  Glass aims to
3124   flush just the relevant postlist changes in this case but the end of the
3125   range to flush was wrong, so we'd only actually flush changes for a term
3126   exactly matching the prefix.  Fixes #721.
3128 remote backend:
3130 * Improve handling of invalid remote stub entries: Entries without a colon now
3131   give an error rather than being quietly skipped; IPv6 isn't yet supported,
3132   but entries with IPv6 addresses now result in saner errors (previously the
3133   colons confused the code which looks for a port number).
3135 build system:
3137 * XO_LIB_XAPIAN: Check for user trying to specify configure for XAPIAN_CONFIG
3138   and give a more helpful error.
3140 * Fix XO_LIB_XAPIAN to work without libtool.  Modern versions of GNU m4 error
3141   out when defn is used on an undefined macro.  Uncovered by Amanda Jayanetti.
3143 * Clean build paths out of installed xapian-config, mostly in the interests of
3144   facilitating reproducible builds, but it is also a little more robust as the
3145   "uninstalled tree" case can't then accidentally be triggered.
3147 * Drop compiler options that are no longer useful:
3148   + -fshow-column is the default in all GCC versions we now support
3149     (checked as GCC 4.6).
3150   + -Wno-long-long is no longer necessary now that we require C++11 where
3151     "long long" is a standard type.
3153 documentation:
3155 * Add API documentation comments for all classes, methods, constants, etc which
3156   were lacking them, and improve the content of some existing comments.
3158 * Stop hiding undocumented classes and members.  Hiding them silences doxygen's
3159   warnings about them, so it's hard to see what is missing, and the stub
3160   documentation produced is perhaps better than not documenting at all.
3161   Fixes #736, reported by James Aylett.
3163 * xapian-check: Make command line syntax consistent with other tools.
3165 * Note when MSet::snippet() was added.
3167 * deprecation.rst: Recommend unsigned over useconds_t for timeout values (but
3168   leave the API using useconds_t for 1.4.x for ABI compatibility.  The type
3169   useconds_t is now obsolete and anyway was intended to represent a time in
3170   microseconds (confusing when Xapian's timeouts are in milliseconds).  The
3171   Linux usleep man page notes: "Programs will be more portable if they never
3172   mention this type explicitly."
3174 portability:
3176 * Suppress compiler warnings about pointer alignment on some architectures.
3177   We know the data is aligned in these cases.
3179 * Fix replicate7 under Cygwin.
3181 debug code:
3183 * Add missing forward declaration needed by --enable-log build.
3185 Xapian-core 1.4.0 (2016-06-24):
3187 API:
3189 * Update to Unicode 9.0.0.
3191 portability:
3193 * Fix build on big-endian architectures.  The new unaligned word access
3194   functions expect WORDS_BIGENDIAN to be set, but configure.ac wasn't invoking
3195   AC_C_BIGENDIAN to arrange for this to be set.
3197 * Suppress compiler warnings about pointer alignment.  We know the data is
3198   suitably aligned, because the whole point of these functions is to allow
3199   reading an aligned word.
3201 Xapian-core 1.3.7 (2016-06-01):
3203 API:
3205 * Reimplement ESet and ESetIterator as we did for MSet and MSetIterator in
3206   1.3.5.  ESetIterator internally now counts down to the end of the ESet, so
3207   the end test is now against 0, rather than against eset.size().  And more of
3208   the trivial methods are now inlined, which reduces the number of relocations
3209   needed to load the library, and should give faster code which is a very
3210   similar size to before.
3212 * MSetIterator and ESetIterator are now STL-compatible random_access_iterators
3213   (previously they were only bidirectional_iterators).
3215 testsuite:
3217 * Merge queryparsertest and termgentest into apitest.  Their testcases now use
3218   the backend manager machinery in the testharness, so we don't have to
3219   hard-code use of inmemory and chert backends, but instead run them under all
3220   backends which support the required features.  This fixes some test failures
3221   when both chert and glass are disabled due to trying to run spelling tests
3222   with the inmemory backend.
3224 * Avoid overflowing collection frequency in totaldoclen1.  We're trying to test
3225   total document length doesn't wrap, so avoid collection freq overflowing in
3226   the process, as that triggers errors when running the testsuite under ubsan.
3227   We should handle collection frequency overflow better, but that's a separate
3228   issue.
3230 * Add some test coverage for ESet::get_ebound().
3232 matcher:
3234 * Fix upper bound on matches for OP_XOR.  Due to a reversed conditional, the
3235   estimate could be one too low in some cases where the XOR matched all the
3236   documents in the database.
3238 * Improve lower bound on matches for OP_XOR.  Previously the lower bound was
3239   always set to 0, which is valid, but we can often do better.
3241 glass backend:
3243 * Fix Database::check() parsing of glass changes file header.  In practice this
3244   was unlikely to actually cause problems.
3246 build system:
3248 * --disable-backend-remote now disables replication too which makes it
3249   actually usable (currently replication and the remote backend share most of
3250   their network code, so disabling them together probably makes sense anyway).
3252 * Improve builds with various combinations of backends disabled (see #361).
3254 portability:
3256 * Revert change to handle a self-initialised PIMPL object (e.g. Xapian::Query
3257   q(q);), added in 1.3.6.  It seems this case is actually undefined behaviour,
3258   so there's not much point trying to do anything about it.  Clang warns about
3259   the testcase for it (tested with 3.5), but sadly current GCC doesn't (tested
3260   with 6.1).
3262 * Use <cstdint> for integer types of known widths now we require C++11.
3264 * Replace unaligned word access functions with optimised versions which use
3265   memcpy() and (on little-endian platforms) a byte-swap (via compiler builtins
3266   where available).  Access revision numbers in database blocks with an aligned
3267   load, since we know they are suitably aligned.
3269 * Simplify handling of platforms where timer_create() exists but isn't
3270   suitable for our needs - AIX and GNU Hurd both have timer_create() but it
3271   always seems to fail (on Hurd this is because there's a dummy implementation
3272   in glibc which always fails with ENOSYS).  Trying a call at runtime which
3273   will never succeed is a waste of time, so we want to avoid defining
3274   HAVE_TIMER_CREATE in such cases.  Probing for this properly in configure
3275   would need us to compile and run a test program, which is unhelpful when
3276   cross-compiling, so for now just test against a blacklist of platforms we
3277   know don't provide a suitable timer_create() function.
3279 * Check _POSIX_MONOTONIC_CLOCK and if it's not defined, use CLOCK_REALTIME
3280   instead of CLOCK_MONOTONIC.  The existing hard-coded platform checks still
3281   seem to be needed, as on these platforms CLOCK_MONOTONIC is available for
3282   some functions, but doesn't work with timer_create() for one reason or
3283   another.  But the new check should avoid failures on platforms without any
3284   monotonic clock support.
3286 * Make opt_intrusive_base symbols visible to avoid UBSAN warnings.
3288 * Avoid potential set-but-unused warning - with both chert and glass disabled,
3289   last_docid's final set value isn't used, which GCC doesn't warn about, but
3290   other compilers might.
3292 * Avoid explicit recursive return of void - we've had warnings for such cases
3293   from some compilers in the past, and it's an odd thing to do outside of a
3294   template.
3296 Xapian-core 1.3.6 (2016-05-09):
3298 API:
3300 * TfIdfWeight: Support freq and squared IDF normalisations.  Patch from Vivek
3301   Pal.
3303 * New Xapian::Query::OP_INVALID to provide an "invalid" query object.
3305 * Reject OP_NEAR/OP_PHRASE with non-leaf subqueries early to avoid a
3306   potential segmentation fault if the non-leaf subquery decayed at
3307   just the wrong moment.  See #508.
3309 * Reduce positional queries with a MatchAll or PostingSource subquery to
3310   MatchNothing (since these subqueries have no positional information, so
3311   the query can't match).
3313 * Deprecate ValueRangeProcessor and introduce new RangeProcessor class as
3314   a replacement.  RangeProcessor()::operator()() method returns Xapian::Query,
3315   so a range can expand to any query.  OP_INVALID is used to signal that
3316   a range is not recognised.  Fixes #663.
3318 * Combining of ranges over the same quantity with OP_OR is now handled by
3319   an explicit "grouping" parameter, with a sensible default which works
3320   for value range queries.  Boolean term prefixes and FieldProcessor now
3321   support "grouping" too, so ranges and other filters can now be grouped
3322   together.
3324 * Formally deprecate WritableDatabase::flush().  The replacement commit()
3325   method was added in 1.1.0, so code can be switched to use this and still
3326   work with 1.2.x.
3328 * Fix handling of a self-initialised PIMPL object (e.g. Xapian::Query q(q);).
3329   Previously the uninitialised pointer was copied to itself, resulting in
3330   undefined behaviour when the object was used.  This isn't something you'd see
3331   in normal code, but it's a cheap check which can probably be optimised away
3332   by the compiler (GCC 6 does).
3334 testsuite:
3336 * Fix testcase notermlist1 to check correct table extension - ".glass" not
3337   ".DB" (chert doesn't support DB_NO_TERMLIST).
3339 build system:
3341 * Bootstrap with autoconf 2.69.  This requires GNU m4 >= 4.6, but that should
3342   no longer be an issue on developer machines.
3344 * Fix build with --enable-log.  Debug logging was trying to log
3345   compress_strategy parameter which was removed recently.  Reported by Ankit
3346   Paliwal on xapian-devel.
3348 documentation:
3350 * Fix misfiled deprecation notes.  Various things marked as deprecated and
3351   removed in 1.3.x have in fact been deprecated but not removed (they were just
3352   added to the wrong list).  One instance queried by David Bremner on #xapian,
3353   and a review found several more.
3355 * Improve docs for lcov makefile targets - say that these are targets in the
3356   xapian-core directory (noted by poe_ on #xapian), document
3357   coverage-reconfigure-maintainer-mode target, and clarify what the example of
3358   how to use GENHTML_ARGS actually does.
3360 * Note that Java bindings use xapian/iterator.h.
3362 * Update release checklist.  The script to build the release tarballs now
3363   automates some of the changes needed in trac.
3365 portability:
3367 * Fix build with Android NDK which declares sys_errlist and sys_nerr in the
3368   C library headers, but doesn't actually define them in the library itself.
3369   The configure test now tries to link a trivial program which uses these
3370   symbols.  Patch from Tejas Jogi.
3372 Xapian-core 1.3.5 (2016-04-01):
3374 This release includes all changes from 1.2.23 which are relevant.
3376 API:
3378 * The Snipper class has been replaced with a new MSet::snippet() method.
3379   The implementation has also been redone - the existing implementation was
3380   slower than ideal, and didn't directly consider the query so would sometimes
3381   selects a snippet which doesn't contain any of the query terms (which users
3382   quite reasonably found surprising).  The new implementation is faster, will
3383   always prefer snippets containing query terms, and also understands exact
3384   phrases and wildcards.  Fixes #211.
3386 * Add optional reference counting support for ErrorHandler, ExpandDecider,
3387   KeyMaker, PostingSource, Stopper and TermGenerator.  Fixes #186, reported
3388   by Richard Boulton.  (ErrorHandler's reference counting isn't actually used
3389   anywhere in xapian-core currently, but means we can hook it up in 1.4.x if
3390   ticket #3 gets addressed).
3392 * Deprecate public member variables of PostingSource.  The new getters and/or
3393   setters added in 1.2.23 and 1.3.5 are preferred.  Fixes #499, reported by
3394   Joost Cassee.
3396 * Reimplement MSet and MSetIterator.  MSetIterator internally now counts down
3397   to the end of the MSet, so the end test is now against 0, rather than against
3398   mset.size().  And more of the trivial methods are now inlined, which reduces
3399   the number of relocations needed to load the library, and should give faster
3400   code which is a very similar size to before.
3402 * Only issue prefetch hints for documents if MSet::fetch() is called.  It's not
3403   useful to send the prefetch hint right before the actual read, which was
3404   happening since the implementation of prefetch hints in 1.3.4.  Fixes #671,
3405   reported by Will Greenberg.
3407 * Fix OP_ELITE_SET selection in multi-database case - we were selecting
3408   different sets for each subdatabase, but removing the special case check for
3409   termfreq_max == 0 solves that.
3411 * Remove "experimental" marker from FieldProcessor, since we're happy with the
3412   API as-is.  Reported by David Bremner on xapian-discuss.
3414 * Remove "experimental" marker from Database::check().  We've not had any
3415   negative feedback on the current API.
3417 * Databse::check() now checks that doccount <= last_docid.
3419 * Database::compact() on a WritableDatabase with uncommitted changes could
3420   produce a corrupted output.  We now throw Xapian::InvalidOperationError in
3421   this case, with a message suggesting you either commit() or open the database
3422   from disk to compact from.  Reported by Will Greenberg on #xapian-discuss
3424 * Add Arabic stemmer.  Patch from Assem Chelli in
3425   https://github.com/xapian/xapian/pull/45
3427 * Improve the Arabic stopword list.  Patch from Assem Chelli.
3429 * Make functions defined in xapian/iterator.h 'inline'.
3431 * Don't force the user to specify the metric in the geospatial API -
3432   GreatCircleMetric is probably what most users will want, so a sensible
3433   default.
3435 * Xapian::DBCHECK_SHOW_BITMAP: This was added in 1.3.0 (so has never been in
3436   a stable release) and was superseded by Xapian::DBCHECK_SHOW_FREELIST in
3437   1.3.2, so just remove it.
3439 * Make setting an ErrorHandler a no-op - this feature is deprecated and we're
3440   not aware of anyone using it.  We're hoping to rework ErrorHandler in 1.4.x,
3441   which will be simpler without having to support the current behaviour as well
3442   as the new.  See #3.
3444 testsuite:
3446 * unittest: We can't use Assert() to unit test noexcept code as it throws an
3447   exception if it fails.  Instead set up macros to set a variable and return if
3448   an assertion fails in a unittest testcase, and check that variable in the
3449   harness.
3451 glass backend:
3453 * Make glass the default backend.  The format should now be stable, except
3454   perhaps in the unlikely event that a bug emerges which requires a format
3455   change to address.
3457 * Don't explicitly store the 2 byte "component_of" counter for the first
3458   component of every Btree entry in leaf blocks - instead use one of the upper
3459   bits of the length to store a "first component" flag.  This directly saves 2
3460   bytes per entry in the Btree, plus additional space due to fewer blocks and
3461   fewer levels being needed as a result.  This particularly helps the position
3462   table, which has a lot of entries, many of them very small.  The saving would
3463   be expected to be a little less than the saving from the change which shaved
3464   2 bytes of every Btree item in 1.3.4 (since that saved 2 bytes multiple times
3465   for large entries which get split into multiple items).  A simple test
3466   suggests a saving of several percent in total DB size, which fits that.  This
3467   change reduces the maximum component size to 8194, which affects tables
3468   with a 64KB blocksize in normal use and tables with >= 16KB blocksize with
3469   full compaction.
3471 * Refactor glass backend key comparison - == and < operations are replaced by
3472   a compare() function returns negative, 0 or positive (like strcmp(), memcmp()
3473   and std::string::compare()).  This allows us to avoid a final compare to
3474   check for equality when binary chopping, and to terminate early if the binary
3475   chop hits the exact entry.
3477 * If a cursor is moved to an entry which doesn't exist, we need to step back to
3478   the first component of previous entry before we can read its tag.  However we
3479   often don't actually read its tag (e.g. if we only wanted the key), so make
3480   this stepping back lazy so we can avoid doing it when we don't want to read
3481   the tag.
3483 * Avoid creating std::string objects to hold data when compressing and
3484   decompressing tags with zlib.
3486 * Store minimum compression length per table in the version file, with 0
3487   meaning "don't compress".  Currently you can only change this setting with a
3488   hex editor on the file, but now it is there we can later make use of it
3489   without needing a database format change.
3491 * Database::check() now performs additional consistency checks for glass.
3492   Reported by Jean-Francois Dockes and Bob Cargill via xapian-discuss.
3494 * Database::check(): check docids don't exceed db_last_docid when checking
3495   a single glass table.
3497 * We now throw DatabaseCorruptError in a few cases where it's appropriate
3498   but we didn't previously, in particular in the case where all the files in a
3499   DB have been truncated to zero size (which makes handling of this case
3500   consistent with chert).
3502 * Fix compaction to a single file which already exists.  This was hanging.
3503   Noted by Will Greenberg on #xapian.
3505 chert backend:
3507 * When using 64-bit Xapian::docid, consistently use the actual maximum valid
3508   docid value rather instead of the maximum value the type can hold.
3510 build system:
3512 * Default to only building shared libraries.  Building both shared and static
3513   means having to compile the files which make up the library twice on most
3514   platforms.  Shared libraries are the better option for most users, and if
3515   anyone really wants static libraries they can configure with --enable-static
3516   (or --enable-static=xapian-core if configuring a combined tree with the
3517   bindings).
3519 * Fix XAPIAN_TEST_LINKER_FLAG macro to actually test if it's possible to link
3520   with the option in LDFLAGS - previously we attempted to guess based on
3521   whether the error message from $CXX $flag contained the option name, which
3522   doesn't actually work very well.
3524 documentation:
3526 * Document that OP_WILDCARD expansion limits currently work per sub-db.
3528 * Remove reference to ChangeLog files, as we are no longer updating them.
3530 * Remove link to apidoc.pdf which we no longer generate this by default.
3532 * Clarify LatLongCoord::operator< purpose in API documentation.
3534 * Fix documentation comment typo - LatLongDistancePostingSource is a posting
3535   source, not a match decider!
3537 * HACKING: Recommend lcov 1.11 as it uses much less memory
3539 tools:
3541 * xapian-replicate: Obviously corrupt replicas now self-heal.  If a replica
3542   database fails to open with DatabaseCorruptError then a full copy is now
3543   forced.
3545 portability:
3547 * Eliminate arrays of C strings, which result in relocations at library load
3548   time, slowing startup and making pages containing them unsharable.
3550 * Refactor MSet::fetch() to reduce load time relocations.
3552 debug code:
3554 * Fix to build when configured with --enable-assertions.
3556 * Fix to build when configured with --enable-log.  Reported by Tim McNamara
3557   on #xapian-discuss.
3559 Xapian-core 1.3.4 (2016-01-01):
3561 This release includes all changes from 1.2.22 which are relevant.
3563 API:
3565 * Update to Unicode 8.0.0.  Fixes #680.
3567 * Overhaul database compaction API.  Add a Xapian::Database::compact() method,
3568   with the Database object specifying the source database(s).
3569   Xapian::Compactor is now just a functor to use if you want to control
3570   progress reporting and/or the merging of user metadata.  The existing API
3571   has been reimplemented using the new one, but is marked as deprecated.
3573 * Add support for a default value when sorting.  Fixes #452, patch from
3574   Richard Boulton.
3576 * Make all functor objects non-copyable.  Previously some were, some weren't,
3577   but it's hard to correctly make use of this ability.  Fixes #681.
3579 * Fix use after free with WILDCARD_LIMIT_MOST_FREQUENT.  If we tried to open a
3580   postlist after processing such a wildcard, the postlist hint could be
3581   pointing to a PostList object which had been deleted.  Fixes #696, reported
3582   by coventry.
3584 * Add support for optional reference counting of MatchSpy objects.
3586 * Improve Document::get_description() - the output is now always valid UTF-8,
3587   doesn't contain implementation details like "Document::Internal", and more
3588   clearly reports if the document is linked to a database.
3590 * Remove XAPIAN_CONST_FUNCTION marker from sortable_serialise_() helper, as it
3591   writes to the passed in buffer, so it isn't const or pure.  Fixes
3592   decvalwtsource2 testcase failure when compiled with clang.
3594 * Make PostingSource::set_maxweight() public - it's hard to wrap for the
3595   bindings as a protected method.  Fixes #498, reported by Richard Boulton.
3597 testsuite:
3599 * Add unit test for internal C_isupper(), etc functions.
3601 matcher:
3603 * Optimise value range which is a superset of the bounds.  If the value
3604   frequency is equal to the doccount, such a range is equivalent to MatchAll,
3605   and we now avoid having to read the valuestream at all.
3607 * Optimise OP_VALUE_RANGE when the upper bound can't be exceeded.  In this
3608   case, we now use ValueGePostList instead of ValueRangePostList.
3610 glass backend:
3612 * Shave 2 bytes of every Btree item (which will probably typically reduce
3613   database size by several percent).
3615 * More compact item format for branch blocks - 2 bytes per item smaller.  This
3616   means each branch block can branch more ways, reducing the number of Btree
3617   levels needed, which is especially helpful for cold-cache search times.
3619 * Track an upper bound on spelling word frequency.  This isn't currently used,
3620   but will be useful for improving the spelling algorithm, and we want to
3621   stabilise the glass backend format.  See #225, reported by Philip Neustrom.
3623 * Support 64-bit docids in the glass backend on-disk format.  This changes the
3624   encoding used by pack_uint_preserving_sort() to one which supports 64 bit
3625   values, and is a byte smaller for values 16384-32767, and the same size for
3626   all other 32 bit values.  Fixes #686, from original report by James Aylett.
3628 * Use memcpy() not memmove() when no risk of overlap.
3630 * Store length of just the key data itself, allowing keys to be up to 255 bytes
3631   long - the previous limit was 252.
3633 * Change glass to store DB stats in the version file.  Previously we stored
3634   them in a special item in the postlist table, but putting them in the version
3635   file reduces the number of block reads required to open the database, is
3636   simpler to deal with, and means we can potentially recalculate tight upper
3637   and lower bounds for an existing database without having to commit a new
3638   revision.
3640 * Add support for a single-file variant for glass.  Currently such databases
3641   can only be opened for reading - to create one you need to use
3642   xapian-compact (or its API equivalent).  You can embed such databases within
3643   another file, and open them by passing in a file descriptor open on that file
3644   and positioned at the offset the database starts at).  Database::check() also
3645   supports them.  Fixes #666, reported by Will Greenberg (and previously
3646   suggested on xapian-discuss by Emmanuel Engelhart).
3648 * Avoid potential DB corruption with full-compaction when using 64K blocks.
3650 * Where posix_fadvise() is available, use it to prefetch postlist Btree blocks
3651   from the level below the root block which will be needed for postlists of
3652   terms in the query, and similarly for the docdata table when MSet::fetch() is
3653   called.  Based on patch by Will Greenberg in #671.
3655 chert backend:
3657 * Where posix_fadvise() is available, use it to prefetch postlist Btree blocks
3658   from the level below the root block which will be needed for postlists of
3659   terms in the query, and similarly for the record table when MSet::fetch() is
3660   called.  Based on patch by Will Greenberg in #671.
3662 remote backend:
3664 * Fix hook for remote support of user weighting schemes.  The commented-out
3665   code used entirely the wrong class - now we use the server object we have
3666   access to, and forward the method to the class which needs it.
3668 build system:
3670 * New configure options --enable-64bit-docid and --enable-64bit-termcount,
3671   which control the size of these types.  Because these types are used in
3672   the API, libraries built with different combinations of them won't be ABI
3673   compatible.  Based heavily on patch from James Aylett and Dylan Griffith.
3674   Fixes #385.
3676 * Sort out hiding most of the internal symbols which had public visibility
3677   for various reason.  Mostly addresses #63.
3679 tools:
3681 * xapian-inspect: We no longer install this - it's really an aid to Xapian
3682   development rather than a user tool.
3684 portability:
3686 * Minimum supported GCC version is now documented as GCC 4.7, for C++11
3687   support.  Previously we documented 4.7 as the oldest known to work.
3689 * Use CLOCK_REALTIME with timer_create() on Cygwin.
3691 * Don't include winsock headers on Cygwin.  Instead include <arpa/inet.h> for
3692   htons() and htonl().
3694 * Handle AI_ADDRCONFIG not being defined by some mingw versions.
3696 * Fix to handle mingw now providing a nanosleep() function.
3698 * Use WSAAddressToString instead of inet_ntop under __WIN32__ - at least under
3699   mingw we don't seem to have inet_ntop().
3701 * Fix testsuite to compile when S_ISSOCK() isn't defined.
3703 debug code:
3705 * Add missing parameters to debug logging for a few methods.
3707 Xapian-core 1.3.3 (2015-06-01):
3709 This release includes all changes from 1.2.20-1.2.21 which are relevant.
3711 API:
3713 * Database:
3715   + Add new flag Xapian::DB_RETRY_LOCK which allows opening a database for
3716     writing to wait until it can get a write lock.  (Fixes #275, reported by
3717     Richard Boulton).
3719   + Fix Database::get_doclength_lower_bound() over multiple databases when some
3720     are empty or consist only of zero-length documents.  Previously this would
3721     report a lower bound of zero, now it reports the same lowest bound as a
3722     single database containing all the same documents.
3724   + Database::check(): When checking a single table, handle the ".glass"
3725     extension on glass database tables, and use the extension to guide the
3726     decision of which backend the table is from.
3728 * Query:
3730   + Add new OP_WILDCARD query operator, which expands wildcards lazily, so now
3731     we create the PostList tree for a wildcard directly, rather than creating
3732     an intermediate Query tree.  OP_WILDCARD offers a choice of ways to limit
3733     wildcard expansion (no limit, throw an exception, use the first N by term
3734     name, or use the most frequent N).  (See tickets #48 and #608).
3736 * QueryParser:
3738   + Add new set_max_expansion() method which provides access to OP_WILDCARD's
3739     choice of ways to limit expansion and can set limits for partial terms as
3740     well as for wildcards.  Partial terms now default to the 100 most frequent
3741     matching terms.  (Completes #608, reported by boomboo).
3743   + Deprecate set_max_wildcard_expansion() in favour of set_max_expansion().
3745 * Add support for optional reference counting of FieldProcessor and
3746   ValueRangeProcessor objects.
3748 testsuite:
3750 * If command line option --verbose/-v isn't specified, set the verbosity level
3751   from environmental variable VERBOSE.
3753 * Re-enable replicate3 for glass, as it no longer fails.
3755 * Add more test coverage for get_unique_terms().
3757 * Don't leave an extra fd open when starting xapian-tcpsrv for remotetcp tests.
3759 glass backend:
3761 * When reporting freelist errors during a database check, distinguish between a
3762   block in use and in the freelist, and a block in the freelist more than once.
3764 * Fix compaction and database checking for the change to the format of keys
3765   in the positionlist table which happened in 1.3.2.
3767 * After splitting a block, we always insert the new block in the parent right
3768   after the block it was split from - there's no need to binary chop.
3770 * Avoid infinite recursion when we hit the end of the freelist block we're
3771   reading and the end of the block we're writing at the same time.
3773 * Fix freelist handling to allow for the newly loaded first block of the
3774   freelist being already used up.
3776 chert backend:
3778 * Fix problems with get_unique_terms() on a modified chert database.
3780 * Fix xapian-check on a single chert table, which seg faulted in 1.3.2.
3782 remote backend:
3784 * Avoid dividing zero by zero when calculating the average length for an empty
3785   database.
3787 build system:
3789 * Merge generate-allsnowballheaders script into collate-sbl.
3791 portability:
3793 * A compiler with good support for C++11 is now required to build Xapian.
3794   Most of the actively developed C++ compilers already have decent support,
3795   or are close to having it, and it makes development easier and more
3796   efficient.  Currently known to work: GCC >= 4.7, recent versions of clang
3797   (3.5 works).  Solaris Studio 12.4 compiles the code, but tests currently
3798   fail.  IBM's xlC doesn't support enough of C++11 yet.  HP's aCC hasn't
3799   been tested, but its documentation suggests it also doesn't support enough
3800   of C++11 yet.
3802 * Drop workarounds and special cases for old versions of various compilers
3803   which don't support C++11.
3805 * Use C++11's static_assert() and unique_ptr instead of custom implementations
3806   of equivalent functionality.
3808 * Building on OS/2 with EMX is no longer supported - EMX was last updated in
3809   2001 and comes with GCC 3.2.1, which is much too old to support C++11.
3811 * Building with SGI's and Compaq's C++ compilers is no longer supported -
3812   both seem to have ceased development, and don't support C++11.
3814 * Building with STLport is no longer supported - STLport was last released in
3815   2008, so it's no longer actively developed and won't support C++11.
3817 * Building on IRIX is no longer supported, because IRIX has reached end of
3818   life.
3820 * Disable "<FUNCTION> is expected to return a value" warning from Sun's C++
3821   compiler, as it fires for functions which end in a "throw" statement.
3822   Genuine instances of missing return values will be caught by compilers with
3823   superior warning machinery.
3825 * Fix warning from GCC 5.1 where template expansion leads to the comparison
3826   (bool_value < 255) which is always true.  Warning introduced by changes in
3827   1.3.2.
3829 * Use getaddrinfo() instead of gethostbyname(), since the latter may not be
3830   thread-safe, and as a step towards IPv6 support (see #374), but currently we
3831   still only look for IPv4 addresses.
3833 * timer_create() seems to always fail on AIX with EAGAIN, so just skip the
3834   matchtimelimit1 testcase there.
3836 * Under __WIN32__, we need to specify Vista as the minimum supported version to
3837   get the AI_ADDRCONFIG flag.  Older versions seem to all be out of support
3838   anyway.
3840 * Change configure probe for log2() to check for a declaration in <cmath>
3841   to get it to fix build on Solaris with Sun C++.  C++11 compilers should all
3842   provide log2(), but let's not rely on that just yet as it's easy to provide a
3843   fallback implementation.
3845 * Use scalbn() instead of ldexp() where possible (which we can in all cases
3846   when FLT_RADIX == 2, as it is on pretty much all current platforms).  On
3847   overflow and underflow ldexp() sets errno, which it seems better to avoid
3848   doing.
3850 * The list of stemmers is now in the same static const struct as the version
3851   info, and Stem::get_available_languages() is just an inlined wrapper which
3852   fetches this structure and returns the appropriate member.  This saves a
3853   relocation, reducing library load time a little.
3855 * Remove "pure" attribute from API functions which could throw an exception.
3856   These functions aren't really pure, and while we're happy for calls to them
3857   to be CSE-ed or eliminated entirely, the compiler might make more assumptions
3858   than that about a pure function - clang seems to assume pure => nothrow and
3859   an exception from such a function can't be caught.
3861 * Remove "pure" attribute from sortable_unserialise(), which can raise floating
3862   point exceptions FE_OVERFLOW and FE_UNDERFLOW.
3864 * Add "nothrow" attribute to more API functions which will never throw an
3865   exception.
3867 * Make sortable_serialise() an inlined wrapper around a function which won't
3868   throw and can be flagged with attribute 'const'.
3870 * Tweak sortable_unserialise() not to compare with a fixed string by
3871   constructing a temporary std::string object (which could throw
3872   std::bad_alloc), and mark it as XAPIAN_NOTHROW.
3874 debug code:
3876 * Only enable assertions in sortable_serialise() and sortable_unserialise() in
3877   the testsuite (since these functions shouldn't throw exceptions), and move
3878   the tests of these functions from queryparsertest to unittest to facilitate
3879   this.
3881 * Add more assertions to the glass backend code.
3883 Xapian-core 1.3.2 (2014-11-24):
3885 This release includes all changes from 1.2.16-1.2.19 which are relevant.
3887 API:
3889 * Update Unicode character database to Unicode 7.0.0.
3891 * New Xapian::Snipper class from Mihai Bivol's GSOC 2012 project.  (mostly
3892   fixes #211)
3894 * Fix all get_description() methods to always return UTF-8 text.  (fixes #620)
3896 * Database::check():
3898   + Alter to take its "out" parameter as a pointer to std::ostream instead of a
3899     reference, and make passing NULL mean "do not produce output", and make
3900     the second and third parameters optional, defaulting to a quiet check.
3902   + Escape invalid UTF-8 data in keys and tags reported by xapian-check, using
3903     the same code we use to clean up strings returned by get_description()
3904     methods.
3906   + Correct failure message which talks above the root block when it's actually
3907     testing a leaf key.
3909   + Rename DBCHECK_SHOW_BITMAP to DBCHECK_SHOW_FREELIST (old name still
3910     provided for now, but flagged as deprecated - DBCHECK_SHOW_BITMAP was new
3911     in 1.3.0, so will likely be removed before 1.4.0).
3913 * Methods and functions which take a string to unserialise now consistently
3914   call that parameter "serialised".
3916 * Weight: Make number of distinct terms indexing each document and the
3917   collection frequency of the term available to subclasses.  Patch from
3918   Gaurav Arora's Language Modelling branch.
3920 * WritableDatabase: Add support for multiple subdatabases, and support opening
3921   a stub database containing multiple subdatabases as a WritableDatabase.
3923 * WritableDatabase can now be constructed from just a pathname (defaulting to
3924   opening the database with DB_CREATE_OR_OPEN).
3926 * WritableDatabase: Add flags which can be bitwise OR-ed into the second
3927   argument when constructing:
3929   + Xapian::DB_NO_SYNC: to disable use of fsync, etc
3931   + Xapian::DB_DANGEROUS: to enable in-place updates
3933   + Xapian::DB_BACKEND_CHERT: if creating, create a chert database
3935   + Xapian::DB_BACKEND_GLASS: if creating, create a glass database
3937   + Xapian::DB_NO_TERMLIST: create a database without a termlist (see #181)
3939   + Xapian::DB_FULL_SYNC flag - if this is set for a database, we use the Mac
3940     OS X F_FULL_SYNC instead of fdatasync()/fsync()/etc on the version file
3941     when committing.
3943 * Database: Add optional flags argument to constructor - the following can be
3944   bitwise OR-ed into it:
3946   + Xapian::DB_BACKEND_CHERT (only open a chert database)
3948   + Xapian::DB_BACKEND_GLASS (only open a glass database)
3950   + Xapian::DB_BACKEND_STUB (only open a stub database)
3952 * Xapian::Auto::open_stub() and Xapian::Chert::open() are now deprecated in
3953   favour of these new flags.
3955 * Add LMWeight class, which implements the Unigram Language Modelling weighting
3956   scheme.  Patch from Gaurav Arora.
3958 * Add implementations of a number of DfR weighting schemes (BB2, DLH, DPH,
3959   IfB2, IneB2, InL2, PL2).  Patches from Aarsh Shah.
3961 * Add support for the Bo1 query expansion scheme.  Patch from Aarsh Shah.
3963 * Add Enquire::set_time_limit() method which sets a timelimit after which
3964   check_at_least will be disabled.
3966 * Database: Trying to perform operations on a database with no subdatabases now
3967   throws InvalidOperationError not DocNotFoundError.
3969 * Query: Implement new OP_MAX query operator, which returns the maximum weight
3970   of any of its subqueries.  (see #360)
3972 * Query: Add methods to allow introspection on Query objects - currently you
3973   can read the leaf type/operator, how many subqueries there are, and get a
3974   particular subquery.  For a query which is a term, Query::get_terms_begin()
3975   allows you to get the term.  (see #159)
3977 * Query: Only simplify OP_SYNONYM with a single subquery if that subquery is a
3978   term or MatchAll.
3980 * Avoid two vector copies when storing term positions in most common cases.
3982 * Reimplement version functions to use a single function in libxapian which
3983   returns a pointer to a static const struct containing the version
3984   information, with inline wrappers in the API header which call this.  This
3985   means we only need one relocation instead of 4, reducing library load time a
3986   little.
3988 * Make TermGenerator flags an anonymous enum, and typedef TermGenerator::flags
3989   to int for backward compatibility with existing user code which uses it.
3991 * Stem: Fix incorrect Unicode codepoints for o-double-acute and u-double-acute
3992   in the Hungarian Snowball stemmer.  Reported by Tom Lane to snowball-discuss.
3994 * Stem: Add an early english stemmer.
3996 * Provide the stopword lists from Snowball plus an Arabic one, installed in
3997   ${prefix}/share/xapian-core/stopwords/.  Patch from Assem Chelli, fixes #269.
3999 * Improve check for direct inclusion of Xapian subheaders in user code to
4000   catch more cases.
4002 * Add simple API to help with creating language-idiomatic iterator wrappers
4003   in <xapian/iterator.h>.
4005 testsuite:
4007 * Extend checkstatsweight1 to check that Weight::get_collection_freq() returns
4008   the same number as Database::get_collection_freq().
4010 * queryparsertest: Add testcase for FieldProcessor on boolean prefix with
4011   quoted contents.
4013 * queryparsertest: Enable some disabled cases which actually work (in some
4014   cases with slightly tweaked expected answers which are equivalent to those
4015   that were shown).
4017 * Make use of the new writable multidatabase feature to simplify the
4018   multi-database handling in the test harness.
4020 * Change querypairwise1_helper to repeat the query build 100 times, as with a
4021   fast modern machine we were sometimes trying with so many subqueries that we
4022   would run out of stack.
4024 * apitest: Use Xapian::Database::check() in cursordelbug1.  (partly addresses
4025   #238)
4027 * apitest: Test Query ops with a single MatchAll subquery.
4029 * apitest: New testcase readonlyparentdir1 to ensure that commit works with a
4030   read-only parent directory.
4032 matcher:
4034 * Streamline collation of statistics for use by weighting schemes - tests show
4035   a 2% or so increase in speed in some cases.
4037 * If a term matches all documents and its weight doesn't depend on its wdf, we
4038   can optimise it to MatchAll (the previous requirement that maxpart == 0 was
4039   unnecessarily strict).
4041 * Fix the check for a term which matches all documents to use the sub-db
4042   termfreq, not the combined db termfreq.
4044 * When we optimise a postlist for a term which matches all documents to use
4045   MatchAll, we still need to set a weight object on it to get percentages
4046   calculated correctly.
4048 glass backend:
4050 * 'brass' backend renamed to 'glass' - we decided to use names in ascending
4051   alphabetical order to make it easier to understand which backend is newest,
4052   and since 'flint' was used recently, we skipped over 'd', 'e' and 'f'.
4054 * Change positionlist keys to be ordered by term first rather than docid first,
4055   which helps phrase searching significantly.  For more efficient indexing,
4056   positionlist changes are now batched up in memory and written out in key
4057   order.
4059 * Use a separate cursor for each position list - now we're ordering the
4060   position B-tree by term first, phrase matching would cause a single cursor
4061   to cycle between disparate areas of the B-tree and reread the same blocks
4062   repeatedly.
4064 * Reference count blocks in the btree cursor, so cursors can cheaply share
4065   blocks.  This can significantly reduce the amount of memory used by cursors
4066   for queries which contain a lot of terms (e.g. wildcards which expand to a
4067   lot of terms).
4069 * Under glass, optimise the turning of a query into a postlist to reuse the
4070   cursor blocks which are the same as the previous term's postlist.  This is
4071   particularly effective for a wildcard query which expands to a lot of terms.
4073 * Keep track of unused blocks in the Btrees using freelists rather than
4074   bitmaps.  (fixes #40)
4076 * Eliminate the base files, and instead store the root block and freelist
4077   pointers in the "iamglass" file.
4079 * When compacting, sync all the tables together at the end.
4081 * In DB_DANGEROUS mode, update the version file in-place.
4083 * Only actually store the document data if it is non-empty.  The table which
4084   holds the document data is now lazily created, so won't exist if you never
4085   set the document data.
4087 chert backend:
4089 * Improve DBCHECK_FIX:
4091   + if fixing a whole database, we now take the revision from the first table
4092     we successfully look at, which should be correct in most cases, and is
4093     definitely better than trying to determine the revision of each broken
4094     table independently.
4096   + handle a zero-sized .DB file.
4098   + After we successfully regenerate baseA, remove any empty baseB file to
4099     prevent it causing problems.  Tracked down with help from Phil Hands.
4101 remote backend:
4103 * Bump remote protocol version to 38.0, due to extra statistics being tracked
4104   for weighting.
4106 * Make Weight::Internal track if any max_part values are set, so we don't need
4107   to serialise them when they've not been set.
4109 build system:
4111 * Fix conditional for enabling replication code - if chert is disabled but
4112   glass isn't, we should still enable it.
4114 * configure: Add hint for which package to install for rst2html
4116 documentation:
4118 * Don't build, ship or install PDF versions of the API docs by default, but
4119   provide an easy way for people to build it for themselves if they want it.
4121 * Convert equations in rst docs to use LaTeX via the math role and directive.
4123 * Actually ship, process and install geospatial.rst.
4125 * postingsource.rst: Use a modern class in postingsource example.  (Noted by
4126   James Aylett)
4128 * Move the protocol docs for the remote and replication protocols into the net/
4129   subdirectory.
4131 * Remove the dir_contents files and all the machinery to handle them.
4133 * HACKING: Note we now use doxygen 1.8.8 for 1.3.x snapshots and releases.
4135 * HACKING: Now using libtool 2.4.3 to bootstrap snapshots and 1.3.x releases.
4137 * HACKING: Now using automake 1.14.1 to bootstrap snapshots and 1.3.x releases.
4139 * HACKING: Drop note about needing git-svn if you're using git - bootstrap now
4140   only uses git-svn if your Xapian tree was checked out using git-svn.
4142 * HACKING: Need sphinx-doc to generate API docs for Python and Python 3 bindings.
4144 * HACKING: Note that MacTeX seems to be the best option if using homebrew.
4146 portability:
4148 * Don't pass an integer argument to log(), to avoid ambiguity errors with xlC
4149   and Sun's C++ compiler.  (fixes #627)
4151 * Fix compilations issues with Sun's C++ compiler (mostly missing library
4152   headers).
4154 * Implement RealTime::now() using clock_gettime() where it's available, since
4155   it can provide nanosecond resolution.
4157 * Implement RealTime::sleep() using nanosleep() where it's available, since it
4158   has a simpler API and a finer resolution than select().
4160 * Use lround() instead of round() in geospatial code, since we want the result
4161   as an int.  GCC 4.4.3 seems to optimise to use lround() anyway, but other
4162   compilers may not.
4164 * Include <math.h> for lround()/round(). (fixes #628)
4166 * Drop code supporting Microsoft Windows 9x which reached EOL in 2006.
4168 * Under C++11, use unique_ptr for AutoPtr.
4170 * Stop using a reference where we may end up passing *NULL, as that's invalid.
4171   Thanks Nick Lewycky and ubsan for helping track this down.
4173 * In DLHWeight and DPHWeight, avoid dividing by zero when the collection size
4174   is 0.
4176 debug code:
4178 * Fix assertion failure when built with --enable-assertions.  The behaviour
4179   when built without assertions happened to be correct.
4181 * Fix assertion in BitReader::decode(), and remove 'Assert(rd);' in two places
4182   where rd is no longer a pointer.
4184 Xapian-core 1.3.1 (2013-05-03):
4186 This release includes all changes from 1.2.10-1.2.15 which are relevant.
4188 API:
4190 * Give an compilation error if user code tries to include API headers other
4191   than xapian.h directly - these other headers are an internal implementation
4192   detail, but experience has shown that some people try to include them
4193   directly.  Please just use '#include <xapian.h>' instead.
4195 * Update Unicode character database to Unicode 6.2.0.
4197 * Add FieldProcessor class (ticket#128) - currently marked as an experimental
4198   API while we sort out how best to sort out exactly how it interacts with
4199   other QueryParser features.
4201 * Add implementation of several TF-IDF weighting schemes via a new TfIdfWeight
4202   class.
4204 * Add ExpandDeciderFilterPrefix class which only return terms with a particular
4205   prefix.  (fixes #467)
4207 * QueryParser: Adjust handling of Unicode opening/closing double quotes - if a
4208   quoted boolean term was started with ASCII double quote, then only ASCII
4209   double quote can end it, as otherwise it's impossible to quote a term
4210   containing Unicode double quotes.
4212 * Database::check(): If the database can't be opened, don't emit a bogus
4213   warning about there being too many documents to cross-check doclens.
4215 * TradWeight,BM25Weight: Throw SerialisationError instead of NetworkError if
4216   unserialise() fails.
4218 * QueryParser: Change the default stemming strategy to STEM_SOME, to eliminate
4219   the API gotcha that setting a stemmer is ignored until you also set a
4220   strategy.
4222 * Deprecate Xapian::ErrorHandler.  (ticket#3)
4224 * Stem: Generate a compact and efficient table to decode language names.  This
4225   is both faster and smaller than the approach we were using, with the added
4226   benefit that the table is auto-generated.
4228 * xapian.h:
4230   + Add check for Qt headers being included before us and defining
4231     'slots' as a macro - if they are, give a clear error advising how to work
4232     around this (previously compilation would fail with a confusing error).
4234   + Add a similar check for Wt headers which also define 'slots' as a macro
4235     by default.
4237 testsuite:
4239 * tests/generate-api_generated: Test that the string returned by a
4240   get_description() method isn't empty.
4242 * Use git commit hash in title of test coverage reports generated from a git
4243   tree.
4245 matcher:
4247 * Drop MatchNothing subqueries in OR-like situations in add_subquery() rather
4248   than adding them and then handling it later.
4250 * Handle the left side of AND_NOT and AND_MAYBE being MatchNothing in
4251   add_subquery() rather than in done().
4253 * Handle QueryAndLike with a MatchNothing subquery in add_subquery() rather
4254   than done().
4256 * Query: Multi-way operators now store their subquery pointers in a custom
4257   class rather than std::vector<Xapian::Query>.  The custom class take the
4258   same amount of space, or often less.  It's particularly efficient when
4259   there are two subqueries, which is very desirable as we no longer flatten a
4260   subtree of the same operator as we build the query.
4262 * Optimise an unweighted query term which matches all the documents in a
4263   subdatabase to use the "MatchAll" postlist.  (ticket#387)
4265 brass backend:
4267 * Iterating positional data now decodes it lazily, which should speed up
4268   phrases which include common words.
4270 * Compress changesets in brass replication. Increments the changeset version.
4271   Ticket #348
4273 * Restore two missing lines in database checking where we report a block with
4274   the wrong level.
4276 * When checking if a block was newly allocated in this revision, just look
4277   at its revision number rather than consulting the base file's bitmap.
4279 chert backend:
4281 * Iterating positional data now decodes it lazily, which should speed up
4282   phrases which include common words.
4284 remote backend:
4286 * Prefix compress list of terms and metadata keys in the remote protocol.
4287   This requires a remote protocol major version bump.
4289 build system:
4291 * Fix the 'libxapian' to be 'libxapian-1.3' and 'xapian.m4' to be
4292   'xapian-1.3.m4' (this was supposed to be the case for 1.3.0, but the
4293   change wasn't made correctly).
4295 * Remove support for 'configure --enable-quiet', 'make QUIET=' and 'make
4296   QUIET=y' - automake now supports 'configure --enable-silent-rules', 'make
4297   V=1' and 'make V=0' which are broadly equivalent and more standard.
4299 * configure: If we fail to find a function needed for the remote backend, don't
4300   autodisable it - it's more helpful to error out so the use can decide if they
4301   want to pass --disable-backend-remote to disable it, or work out what values
4302   to pass for LIBS, etc to make it work.  This also matches what we do for the
4303   disk based backends.
4305 * automake 1.13.1 is now used to generate snapshots and releases.
4307 * Add check-syntax make target to support editor syntax checks.
4309 * Fix to build when configured with --disable-backend-brass
4310   --disable-backend-chert.  (ticket#586)
4312 * Generate a check for compatible _DEBUG settings if built with MSVC.
4313   (ticket#389)
4315 * If you run "make coverage-check" by hand, the previous default of compressed
4316   HTML is unhelpful, so don't default to passing --html-gzip to genhtml, but
4317   instead add support for GENHTML_ARGS.
4319 * API methods and functions are now marked as 'const', 'pure', or 'nothrow'
4320   allowing compilers which support such annotations to generate more efficient
4321   code.  (tickets #151, #454)
4323 documentation:
4325 * HACKING: Note which MacPorts are needed for development work.
4327 * docs/remote_protocol.rst: Correct error in documentation of REPLY_DOCDATA
4328   message.
4330 tools:
4332 * xapian-check: Add "fix" option, which currently will regenerate iamchert if
4333   it isn't valid, and will regenerate base files from the .DB files (only
4334   really tested on databases which have just been compacted).
4336 portability:
4338 * Fix warning with GCC in build with assertions enabled.
4340 * common/fileutils.cc: Add safeunistd.h for mkdir, required by GCC 4.7
4341   (reported by Gaurav Arora).
4343 * backends/brass/brass_databasereplicator.cc: Use new/delete to avoid variable
4344   length array gcc extension and comply with c++98
4346 * Mark file descriptors as close-on-exec where supported.
4348 * api/queryinternal.cc: Need <functional> for mem_fun().
4350 * Work around Apple's OS X SDK defining a check() macro.
4352 * Add an option to use a flock() based locking implementation for brass and
4353   chert - this is much simpler than using fcntl() due to saner semantics around
4354   releasing locks when closing other descriptors on the same file (at least on
4355   platforms where flock() isn't just a compatibility wrapper around fcntl()).
4356   Sadly we can't simply switch to this without breaking locking compatibility
4357   with previous releases, but it's useful for platforms without fcntl()
4358   locking (it's enabled for DJGPP) and may be useful for custom builds for
4359   special purposes.
4361 packaging:
4363 * xapian-core.spec: Remove xapian-chert-update.
4365 debug code:
4367 * Building with --enable-log works once again.
4369 Xapian-core 1.3.0 (2012-03-14):
4371 API:
4373 * Update Unicode character database to Unicode 6.1.0.  (ticket#497)
4375 * TermIterator returned by Enquire::get_matching_terms_begin(),
4376   Query::get_terms_begin(), Database::synonyms_begin(),
4377   QueryParser::stoplist_begin(), and QueryParser::unstem_begin() now stores the
4378   list of terms to iterate much more compactly.
4380 * QueryParser:
4382   + Allow Unicode curly double quote characters to start and/or end phrases.
4384   + The set_default_op() method will now reject operators which don't make
4385     sense to set.  The operators which are allowed are now explicitly
4386     documented in the API docs.
4388 * Query: The internals have been completely reimplemented (ticket#280).  The
4389   notable changes are:
4391   + Query objects are smaller and should be faster.
4393   + More readable format for Query::get_description().
4395   + More compact serialisation format for Query objects.
4397   + Query operators are no longer flattened as you build up a tree (but the
4398     query optimiser still combines groups of the same operator).  This means
4399     that Query objects are truly immutable, and so we don't need to copy Query
4400     objects when composing them.  This should also fix a few O(n*n) cases when
4401     building up an n-way query pair-wise.  (ticket#273)
4403   + The Query optimiser can do a few extra optimisations.
4405 * There's now explicit support for geospatial search (this API is currently
4406   marked as experimental).  (ticket#481)
4408 * There's now an API (currently experimental) for checking the integrity of
4409   databases (partly addresses ticket#238).
4411 * Database::reopen() now returns true if the database may have been reopened
4412   (previously it returned void).  (ticket#548)
4414 * Deprecate Xapian::timeout in favour of POSIX type useconds_t.
4416 * Deprecate Xapian::percent and use int instead in the API and our own code.
4418 * Deprecate Xapian::weight typedef in favour of just using double and change
4419   all uses in the API and our own code.  (ticket#560)
4421 * Rearrange members of Xapian::Error to reduce its size (from 48 to 40 bytes on
4422   x86-64 Linux).
4424 * Assignment operators for PositionIterator and TermIterator now return *this
4425   rather than void.
4427 * PositionIterator, PostingIterator, TermIterator and ValueIterator now
4428   handle their reference counts in hand-crafted code rather than using
4429   intrusive_ptr/RefCntPtr, which means the compiler can inline the destructor
4430   and default constructor, so a comparison to an end iterator should now
4431   optimise to a simple NULL pointer check, but without the issues which the
4432   ValueIteratorEnd_ proxy class approach had (such as not working in templates
4433   or some cases of overload resolution).
4435 * Enquire:
4437   + Previously, Enquire::get_matching_terms_begin() threw InvalidArgumentError
4438     if the query was empty.  Now we just return an end iterator, which is more
4439     consistent with how empty queries behave elsewhere.
4441   + Remove the deprecated old-style match spy approach of using a MatchDecider.
4443 * Remove deprecated Sorter class and MultiValueSorter subclass.
4445 * Xapian::Stem:
4447   + Add stemmers for Armenian (hy), Basque (eu), and Catalan (ca).
4449   + Stem::operator= now returns a reference to the assigned-to object.
4451 testsuite:
4453 * Make unittest use the test harness, so it gets all the valgrind and fd leak
4454   checks, and other handy features all the other tests have.
4456 * Improve test coverage in several places.
4458 * Compress generated HTML files in coverage report.
4460 flint backend:
4462 * Remove flint backend.
4464 remote backend:
4466 * When propagating exceptions from a remote backend server, the protocol now
4467   sends a numeric code to represent which exception is being propagated, rather
4468   than the name of the type, as a number can be turned back into an exception
4469   with a simple switch statement and is also less data to transfer.
4470   (ticket#471)
4472 * Remote protocol (these changes require a protocol major version bump):
4474   + Unify REPLY_GREETING and REPLY_UPDATE.
4476   + Send (last_docid - doccount) instead of last_docid and (doclen_ubound -
4477     doclen_lbound) instead of doclen_ubound.
4479 * Remove special check which gives a more helpful error message when a modern
4480   client is used against a remote server running Xapian <= 0.9.6.
4482 build system:
4484 * Various changes allow us to now remove XAPIAN_VISIBILITY_DEFAULT from a
4485   number of functions which aren't in the public API (partly addresses
4486   ticket#63).
4488 * configure: For this development series, the library gets a -1.3 suffix and
4489   include files are installed with an extra /xapian-1.3 component to make
4490   parallel installs easier.
4492 * configure: Enable -fshow-column for GCC - things like vim's quickfix mode
4493   will then jump to the appropriate column for a compiler error or warning, not
4494   just the appropriate line.
4496 * Snowball compiler now reports "FILE:LINE:" before each error so tools like
4497   vim's quickfix mode can parse this and bring up the line with the error
4498   automatically.
4500 * docs/doxygen_api.conf.in: Don't generate XML from doxygen for the bindings -
4501   the bindings now do this for themselves.  (ticket#262)
4503 documentation:
4505 * INSTALL: Update GCC details - we now recommend 4.3 or newer (was 4.1), and
4506   note that while 3.1 is the hard minimum requirement, the oldest we've tested
4507   with at all recently was 3.3.
4509 * docs/deprecation.rst: Updated.
4511 tools:
4513 * delve:
4515   + Move delve from examples to bin and rename to xapian-delve.
4517   + Send errors to stderr not stdout.
4519 * xapian-check: Now reports useful descriptions rather than cryptic numeric
4520   codes for B-tree errors.
4522 debug code:
4524 * Add assertions that the index is in range when dereferencing MSetIterator and
4525   ESetIterator.
4527 * Fix various errors in debug logging statements.
4529 * Add QUERY category for debug logging.
4531 Xapian-core 1.2.23 (2016-03-28):
4533 API:
4535 * PostingSource: Public member variables are now wrapped by methods (mostly
4536   getters and/or setters, depending on whether they should be readable,
4537   writable or both).  In 1.3.5, the public members variables have been
4538   deprecated - we've added the replacement methods in 1.2.23 as well to make
4539   it easier for people to migrate over.
4541 chert backend:
4543 * xapian-check now performs additional consistency checks for chert. Reported
4544   by Jean-Francois Dockes and Bob Cargill via xapian-discuss.
4546 documentation:
4548 * Update links to Xapian website and trac to use https, which is now supported,
4549   thanks to James Aylett.
4551 portability:
4553 * On older Linux kernels, rename() of a file within a directory on NFS can
4554   sometimes erroneously fail with EXDEV.  This should only happen if you
4555   try to rename a file across filing systems, so workaround this issue by
4556   retrying up to 5 times on EXDEV (which should be plenty to avoid this
4557   bug, and we don't want to risk looping forever).  Fixes #698, reported by
4558   Mark Dufour.
4560 Xapian-core 1.2.22 (2015-12-29):
4562 API:
4564 * Add FLAG_CJK_NGRAM for QueryParser and TermGenerator.  Has the same effect as
4565   setting the environment variable XAPIAN_CJK_NGRAM.  Fixes #180, reported by
4566   Richard Boulton, with contributions from Pavel Strashkin, Mikkel Kamstrup
4567   Erlandsen and Brandon Schaefer.
4569 * Fix bug parsing multiple non-exclusive filter terms - previously this could
4570   result in such filters effectively being ignored.
4572 * Fix Database::get_doclength_lower_bound() over multiple databases when some
4573   are empty or consist only of zero-length documents.  Previously this would
4574   report a lower bound of zero, now it reports the same lowest bound as a
4575   single database containing all the same documents.
4577 * Make Database::get_wdf_upper_bound("") return 0.
4579 * Mark constructors taking a single argument as "explicit" to avoid unwanted
4580   implicit conversions.
4582 testsuite:
4584 * If command line option --verbose/-v isn't specified, set the verbosity level
4585   from environmental variable VERBOSE.
4587 * Skip timed tests if $AUTOMATED_TESTING is set.  Fixes #553, reported by
4588   Dagobert Michelsen.
4590 * Don't leave an extra fd open when starting xapian-tcpsrv for remotetcp tests.
4592 * apitest: Revert disabling of part of adddoc5 for clang - the test failure was
4593   in fact due to a bug in 1.3.x, and 1.2.x was never affected.
4595 * apitest: Tweak bounds checks in dbstats1 testcase - multi backends should
4596   give tight bounds.
4598 brass backend:
4600 * Format limit on docid now correctly imposed when sizeof(int) > 4.
4602 * Avoid potential DB corruption with full-compaction when using 64K blocks.
4604 chert backend:
4606 * Format limit on docid now correctly imposed when sizeof(int) > 4.
4608 * Avoid potential DB corruption with full-compaction when using 64K blocks.
4610 flint backend:
4612 * Format limit on docid now correctly imposed when sizeof(int) > 4.
4614 * Avoid potential DB corruption with full-compaction when using 64K blocks.
4616 remote backend:
4618 * Fix to handle total document length exceeding 34,359,738,368.  (Fixes #678,
4619   reported by matf).
4621 * Avoid dividing by zero when getting the average length for an empty database.
4623 * Stop apparent error from remote server when read-only client disconnects.  A
4624   read-only client just closes the connection when done, but the server
4625   previously reported "Got exception NetworkError: Received EOF", which sounds
4626   like there was a problem.  Now we just say "Connection closed" here, and
4627   "Connection closed unexpectedly" if the client connects in the middle of an
4628   exchange.  Possibly fixes #654, reported by Germán M. Bravo.
4630 * Give a clearer error message when the client and server remote protocol
4631   versions aren't compatible.
4633 * Check length of key in MSG_SETMETADATA.
4635 build system:
4637 * pkg-config: Fix library name in .pc file to say "xapian" not "xapian-core".
4638   Reported by Eric Lindblad to the xapian-devel list.
4640 * Private symbol decode_length() is no longer visible outside the library.
4642 documentation:
4644 * Stop maintaining ChangeLog files.  They make merging patches harder, and stop
4645   'git cherry-pick' from working as it should.  The git repo history should be
4646   sufficient for complying with GPLv2 2(a).
4648 * Strip out "quickstart" examples which are out of date and rather redundant
4649   with the "simple" examples.
4651 * Correct documentation of Enquire::get_query().  If no query has been set,
4652   the documentation said Xapian::InvalidArgumentError was thrown, but in
4653   fact we just return a default initialised Query object (i.e. Query()).  This
4654   seems reasonable behaviour and has been the case since Xapian 0.9.0.
4656 * Document xapian-compact --blocksize takes an argument.
4658 * Update snowball website link to snowballstem.org.
4660 tools:
4662 * xapian-replicate: Fix replication for files > 4GB on 32-bit platforms.
4663   Previously replication would fail to copy a file whose size didn't fit in
4664   size_t.  Fixes #685, reported by Josh Elsasser.
4666 * xapian-tcpsrv: Better error if -p/--port not specified
4668 * quest: Support `-f cjk_ngram`.
4670 examples:
4672 * xapian-metadata: Extend "list" subcommand to take optional key prefix.
4674 portability:
4676 * Fix new warnings from recent versions of GCC and clang.
4678 * Add spaces between literal strings and macros which expand to literal strings
4679   for C++11 compatibility in __WIN32__-specific code.
4681 * Need <unistd.h> for unlink() on FreeBSD, reported by Germán M. Bravo via
4682   github PR 72.
4684 * Fix testsuite to build when S_ISSOCK() isn't defined.
4686 * Don't provide our own implementation of sleep() under __WIN32__ if there
4687   already is one - mingw provides one, and in some situations it seems to clash
4688   with ours.  Reported to xapian-discuss by John Alveris.
4690 * Add missing '#include <arpa/inet.h>' to htons().  Seems to be implicitly
4691   included on most platforms, but Interix needs it.  Reported by Eric Lindblad
4692   on xapian-discuss.
4694 * Disable "<FUNCTION> is expected to return a value" warning from Sun's C++
4695   compiler, as it fires for functions ending in a "throw" statement.  Genuine
4696   instances will be caught by compilers with superior warning machinery.
4698 * Prefer scalbn() to ldexp() where possible, since the former doesn't ever set
4699   errno.
4701 * '#include <config.h>' in the "simple" examples, as when compiling with xlC on
4702   AIX, _LARGE_FILES gets defined by AC_SYS_LARGEFILE to enable large file
4703   support, and defining this changes the ABI of std::string, so it also needs
4704   to be defined when compiling code using Xapian.
4706 * On cygwin, include <arpa/inet.h> instead of winsock headers for htons() and
4707   htonl().
4709 * Include <cygwin/version.h> for CYGWIN_VERSION_API_MAJOR.
4711 * Avoid referencing static members via an object in that object's own
4712   definition, as this doesn't work with all compilers (noted with GCC 3.3), and
4713   is a bit of an odd construct anyway.  Reported by Eric Lindblad on
4714   xapian-discuss.
4716 * GCC < 3.4.2 lacks operator<< overloads for unsigned long long on some
4717   platforms, so simply work around this by using str(), as this isn't
4718   performance sensitive code.  Reported by Eric Lindblad on xapian-discuss.
4720 * Fix delete which should be delete[] in brass backend cursor code.
4722 Xapian-core 1.2.21 (2015-05-20):
4724 API:
4726 * QueryParser: Extend the set of characters allowed in the start of a range to
4727   be anything except for '(' and characters <= ' '.  This better matches what's
4728   accepted for a range end (anything except for ')' and characters <= ' ').
4729   Reported by Jani Nikula.
4731 matcher:
4733 * Reimplement OP_PHRASE for non-exact phrases.  The previous implementation was
4734   buggy, giving both false positives and false negatives in rare cases when
4735   three or more terms were involved.  Fixes #653, reported by Jean-Francois
4736   Dockes.
4738 * Reimplement OP_NEAR - the new implementation consistently requires the terms
4739   to occur at different positions, and fixes some previously missed matches.
4741 * Fix a reversed check for picking the shorter position list for an exact
4742   phrase of two terms.  The difference this makes isn't dramatic, but can be
4743   measured (at least with cachegrind).  Thanks to kbwt for spotting this.
4745 * When matching an exact phrase, if a term doesn't occur where we want, use
4746   its actual position to advance the anchor term, rather than just checking
4747   the next position of the anchor term.
4749 brass backend:
4751 * Fix cursor versioning to consider cancel() and reopen() as events where
4752   the cursor version may need incrementing, and flag the current cursor version
4753   as used when a cursor is rebuilt.  Fixes #675, reported by Germán M. Bravo.
4755 * Avoid using file descriptions < 3 for writable database tables, as it risks
4756   corruption if some code in the same process tries to write to stdout or
4757   stderr without realising it is closed.  (Partly addresses #651)
4759 chert backend:
4761 * Fix cursor versioning to consider cancel() and reopen() as events where
4762   the cursor version may need incrementing, and flag the current cursor version
4763   as used when a cursor is rebuilt.  Fixes #675, reported by Germán M. Bravo.
4765 * Avoid using file descriptions < 3 for writable database tables, as it risks
4766   corruption if some code in the same process tries to write to stdout or
4767   stderr without realising it is closed.  (Partly addresses #651)
4769 flint backend:
4771 * Fix cursor versioning to consider cancel() and reopen() as events where
4772   the cursor version may need incrementing, and flag the current cursor version
4773   as used when a cursor is rebuilt.  Fixes #675, reported by Germán M. Bravo.
4775 remote backend:
4777 * Fix sort by value when multiple databases are in use and one or more are
4778   remote.  This change necessitated a minor version bump in the remote
4779   protocol.  Fixes #674, reported by Dylan Griffith.  If you are upgrading a
4780   live system which uses the remote backend, upgrade the servers before the
4781   clients.
4783 build system:
4785 * The compiler ABI check in the public API headers now issues a warning
4786   (instead of an error) for an ABI mismatch for ABI versions 2 and later
4787   (which means GCC >= 3.4).  The changes in these ABI versions are bug fixes
4788   for corner cases, so there's a good chance of things working - e.g. building
4789   xapian-bindings with GCC 5.1 (which defaults to ABI version 8) against
4790   xapian-core built with GCC 4.9 (which defaults to ABI version 2) seems to
4791   work OK.  A warning is still useful as a clue to what is going on if linking
4792   fails due to a missing symbol.
4794 * xapian-config,xapian-core.pc: When compiling with xlC on AIX, the reported
4795   --cxxflags/--cflags now include -D_LARGE_FILES=1 as this is defined for the
4796   library, and defining it changes the ABI of std::string with this compiler,
4797   so it must also be defined when building code using the Xapian API.
4799 * xapian-core.pc: Include --enable-runtime-pseudo-reloc in --libs output for
4800   mingw and cygwin, like xapian-config does.
4802 * xapian-core.pc: Fix include directory reported by `pkg-config --cflags`.
4803   This bug was harmless if xapian-core was installed to a directory which was
4804   on the default header search path (such as /usr/include).
4806 * xapian-config: Fix typo so cached result of test in is_uninstalled() is
4807   actually used on subsequent calls.  Fixes #676, reported (with patch) by Ryan
4808   Schmidt.
4810 * configure: Changes in 1.2.19 broke the custom macro we use to probe for
4811   supported compiler flags such that the flags never got used.  This release
4812   fixes this problem.
4814 * configure: Set default value for AUTOM4TE before AC_OUTPUT so the default
4815   will actually get used.  Only relevant when building in maintainer mode
4816   (e.g. from git).
4818 * soaktest: Link with libtool's '-no-install' or '-no-fast-install', like we
4819   already do for other test programs, which means that libtool doesn't need to
4820   generate shell script wrappers for them on most platforms.
4822 documentation:
4824 * API documentation: Minor wording tweaks and formatting improvements.
4826 * docs/deprecation.rst: Add deprecation of omindex --preserve-nonduplicates
4827   which happened in 1.2.4.
4829 * HACKING: Update URL.
4831 * HACKING: libtool 2.4.6 is now used for bootstrapping snapshots and releases.
4833 tools:
4835 * xapian-compact: Make sure we open all the tables of input databases at the
4836   same revision.  (Fixes #649)
4838 * xapian-metadata: Add 'list' subcommand to list all the metadata keys.
4840 * xapian-replicate: Fix connection timeout to be 10 seconds rather than 10000
4841   seconds (the incorrect timeout has been the case since 1.2.3).
4843 * xapian-replicate: Set SO_KEEPALIVE for xapian-replicate's connection to the
4844   master, and add command line option to allow setting socket-level timeouts
4845   (SO_RCVTIMEO and SO_SNDTIMEO) on platforms that support them.  Fixes #546,
4846   reported by nkvoll.
4848 * xapian-replicate-server: Avoid potentially reading uninitialised data if a
4849   changeset file is truncated.
4851 portability:
4853 * Add spaces between literal strings and macros which expand to literal strings
4854   for C++11 compatibility.
4856 * ValueCountMatchSpy::top_values_begin(): Fix the comparison function not to
4857   return true for two equal elements, which manifests as incorrect sorting in
4858   some cases when using clang's libc++ (which recent OS X versions do).
4860 * apitest: The adddoc5 testcase fails under clang due to an exception handling
4861   bug, so just #ifdef out the problematic part of the testcase when building
4862   with clang for now.
4864 * Fix clang warnings on OS X.  Reported by Germán M. Bravo.
4866 * Fix examples to build with IBM's xlC compiler on AIX - they were failing due
4867   to _LARGE_FILES being defined for the library build but not for the examples,
4868   and defining this changes the ABI of std::string with this compiler.
4870 * configure: Improve the probe for whether the test harness can use RTTI to
4871   work for IBM's xlC compiler (which defaults to not generating RTTI).
4873 * Fix to build with Sun's C++ compiler.
4875 * Use F_DUPFD where available to dup to a file descriptor which is >= 2, rather
4876   than calling dup() until we get one.
4878 * When unserialising a double, avoid reading one byte past the end of the
4879   serialised value.  In practice this was harmless on most platforms, as
4880   dbl_max_mantissa is 255 for IEEE-754 format doubles, and at least GCC's
4881   std::string keeps the buffer nul-terminated.  Reported by Germán M. Bravo in
4882   github PR#67.
4884 * When unserialising a double, add missing cast to unsigned char when we check
4885   if the value will fit in the double type.  On machines with IEEE-754 doubles
4886   (which is most current platforms) this happened to work OK before.  It would
4887   also have been fine on machines where char is unsigned by default.
4889 * Fix incorrect use of "delete" which should be "delete []".  This is
4890   undefined behaviour in C++, though the type is POD, so in practice this
4891   probably worked OK on many platforms.
4893 debug code:
4895 * Fix some overly strict assertions in flint, which caused apitest's
4896   cursordelbug1 to fail with assertions on.
4898 Xapian-core 1.2.20 (2015-03-04):
4900 chert backend:
4902 * After splitting a block, we always insert the new block in the parent right
4903   after the block it was split from - there's no need to binary chop.
4905 build system:
4907 * Generate and install a file for pkg-config.  (Fixes#540)
4909 * configure: Update link to cygwin FAQ in error message.
4911 documentation:
4913 * include/xapian/weight.h: Document the enum stat_flags values.
4915 * docs/postingsource.rst: Use a modern class in postingsource example.  (Noted
4916   by James Aylett)
4918 * docs/deprecation.rst,docs/replication.rst: Fix typos.
4920 * Update doxygen configuration files to avoid warnings about obsolete tags from
4921   newer doxygen versions.
4923 * HACKING: Update details of building Xapian packages.
4925 tools:
4927 * xapian-check: For chert and brass, cross-check the position and postlist
4928   tables to detect positional data for non-existent documents.
4930 portability:
4932 * When locking a database for writing, use F_OFD_SETLK where available, which
4933   avoids having to fork() a child process to hold the lock.  This currently
4934   requires Linux kernel >= 3.15, but it has been submitted to POSIX so
4935   hopefully will be widely supported eventually.  Thanks to Austin Clements for
4936   pointing out this now exists.
4938 * Fix detection of fdatasync(), which appears to have been broken practically
4939   forever - this means we've probably been using fsync() instead, which
4940   probably isn't a big additional overhead.  Thanks to Vlad Shablinsky for
4941   helping with Mac OS X portability of this fix.
4943 * configure: Define MINGW_HAS_SECURE_API under mingw to get _putenv_s()
4944   declared in stdlib.h.
4946 * Use POSIX O_NONBLOCK in preference to O_NDELAY - the semantics of the latter
4947   differ between BSD and System V.
4949 * According to POSIX, strerror() may not be thread safe, so use alternative
4950   thread-safe ways to translate errno values where possible.
4952 * On Microsoft Windows, avoid defining EADDRINUSE, etc if they're already
4953   defined, and use WSAE* constants un-negated - they start from a high value
4954   so won't collide with E* constants.
4956 debug code:
4958 * Add more assertions to the chert backend code.
4960 Xapian-core 1.2.19 (2014-10-21):
4962 API:
4964 * Xapian::BM25Weight:
4966   + Improve BM25 upper bound in the case when our wdf upper bound > our
4967     document length lower bound.  Thanks to Craig Macdonald for pointing out
4968     this trick.
4970   + Pre-multiply termweight by (param_k1 + 1) rather than doing it for
4971     every weighted term in every document considered.
4973 testsuite:
4975 * Don't report apparent leaks of fds opened on /dev/urandom - at least on
4976   Linux, something in the C library seems to lazily open it, and the report of
4977   a possible leak followed by assurance that it's OK really is just noise we
4978   can do without.
4980 matcher:
4982 * Fix false matches reported for non-exact phrases in some cases.  Fixes the
4983   reduced testcase in #657, reported by Jean-Francois Dockes.
4985 brass backend:
4987 * Only full sync after writing the final base file (only affects Max OS X).
4989 chert backend:
4991 * Only full sync after writing the final base file (only affects Max OS X).
4993 flint backend:
4995 * Only full sync after writing the final base file (only affects Max OS X).
4997 build system:
4999 * For Sun's C++ compiler, pass -library=Crun separately since libtool looks for
5000   " -library=stlport4 " (with the spaces).  (fixes#650)
5002 * Remove .replicatmp (created by the test suite) upon "make clean".
5004 documentation:
5006 * include/xapian/compactor.h: Fix formatting of doxygen comment.
5008 * HACKING: freecode no longer accepts updates, so drop that item from the
5009   release checklist.
5011 * docs/overview.rst: Add missing database path to example of using
5012   xapian-progsrv in a stub database file.
5014 portability:
5016 * Suppress unused typedef warnings from debugging logging macros, which occur
5017   in functions which always exit via throwing an exception when compiling with
5018   recent versions of GCC or clang.
5020 * Fix debug logging code to compile with clang.  (fixes #657, reported by
5021   Germán M. Bravo)
5023 debug code:
5025 * Add missing RETURN() markup for debug logging in a few places, highlighted by
5026   warnings from recent GCC.
5028 * Fix incorrect return types in debug logging annotations so that code compiles
5029   when configured with --enable-log.
5031 Xapian-core 1.2.18 (2014-06-22):
5033 API:
5035 * Document: Fix get_docid() to return the docid for the sub-database (as it
5036   is explicitly documented to) for Document objects passed to functors like
5037   KeyMaker during the match.  (fixes#636, reported by Jeff Rand).
5039 * Document: Don't store the termname in OmDocumentTerm - we were only using it
5040   in get_description() output and an exception message.  Speeds up indexing
5041   etext.txt using simpleindex by 0.4%, and should reduce memory usage a bit
5042   too.  (Change inspired by comments from Vishesh Handa on xapian-devel).
5044 * Database: Iterating the values in a particular slot is now a bit more
5045   efficient for inmemory and remote backends (but still slow compared to
5046   flint, chert and brass).
5048 testsuite:
5050 * apitest: Expand crashrecovery1 to check that the expected base files exist
5051   and ones which shouldn't exist don't.
5053 * queryparsertest: Fix testcase for empty wildcard followed by negation to
5054   enable FLAG_LOVEHATE so the negation is actually parsed.  Fortunately the
5055   fixed testcase passes.
5057 matcher:
5059 * OP_SYNONYM: avoid fetching the doclength if the weighting scheme doesn't
5060   need it and the calculated wdf for the synonym is <= doclength_lower_bound
5061   for the current subdatabase.  (fixes #360)
5063 build system:
5065 * Releases are now bootstrapped with libtool 2.4.2 instead of 2.4, and with
5066   config.guess and config.sub updated to the latest versions.
5068 documentation:
5070 * Add an example of initializing SimpleStopper using a file listing stopwords.
5071   (Patch from Assem Chelli)
5073 * Improve the descriptions of the stem_strategy values in the API docs.
5074   (Reported by "oilap" on #xapian)
5076 * docs/sorting.rst: Fix incorrect parameter types in Xapian::Weight
5077   subclass example.
5079 * docs/glossary.rst: Add definition of "collection frequency".
5081 * HACKING:
5083   + makeindex is now in Debian package texlive-binaries.
5085   + Replace a link to the outdated autotools "goat book" with a link to the
5086     "Portable Shell" chapter of the autoconf manual.
5088 * include/xapian/base.h: Remove very out of date comments talking about atomic
5089   assignment and locking - since 0.5.0 we've adopted a "user locks" policy.
5090   (Reported by Jean-Francois Dockes)
5092 examples:
5094 * delve:
5096   + Add -A <prefix> option to list all terms with a particular prefix.
5098   + Send errors to stderr not stdout.
5100   + If -v is specified more than once, show even more info in some cases.
5101     (NEWS file claimed this was backported in 1.2.15, but it actually wasn't).
5103 * quest:
5105   + Add --default-op option.
5107   + Add --weight option to allow the weighting scheme to be specified.
5109 portability:
5111 * Explicitly '#include <algorithm>' for std::max(), fixing build with VS2013.
5112   (Fixes#641, reported by "boomboo").
5114 * Fix testcase blocksize1 not to try to delete an open database, which isn't
5115   possible under Windows.  (Fixes #643, reported by Chris Olds)
5117 * docs/quickstart.rst: Split --cxxflags and --libs for portability (noted by
5118   "Hurricane Tong" on xapian-devel).
5120 * Fix warnings with clang 5.0.
5122 debug code:
5124 * Add assertions that weighting scheme upper bounds aren't exceeded.
5126 Xapian-core 1.2.17 (2014-01-29):
5128 API:
5130 * Enquire::set_sort_by_relevance_then_value() and
5131   Enquire::set_sort_by_relevance_then_key(): Fix sense of reverse parameter.
5132   Reported by "boomboo" on IRC.
5134 * BM25Weight: Fix case where (k1 == 0 || b == 0) but k2 != 0.  Reported by
5135   "boomboo" on IRC.
5137 * Unicode::tolower(): Fix to give correct results for U+01C5, U+01C8, U+01CB,
5138   and U+01F2 (previously these were left unchanged).
5140 testsuite:
5142 * Automatically probe for and hook in eatmydata to the testsuite using the
5143   wrapper script it now includes.
5145 * Fix apitest to build when brass, chert or flint are disabled.
5147 brass backend:
5149 * Fix handling of invalid block sizes passed to Xapian::Brass::open() - the
5150   size gets fixed as documented, but the uncorrected size was passed to the
5151   base file (and abort() was called if 0 was passed).
5153 * Validate "dir_end" when reading a block.  (fixes #592)
5155 chert backend:
5157 * Fix handling of invalid block sizes passed to Xapian::Chert::open() - the
5158   size gets fixed as documented, but the uncorrected size was passed to the
5159   base file (and abort() was called if 0 was passed).
5161 * Validate "dir_end" when reading a block.  (fixes #592)
5163 flint backend:
5165 * Fix handling of invalid block sizes passed to Xapian::Flint::open() - the
5166   size gets fixed as documented, but the uncorrected size was passed to the
5167   base file (and abort() was called if 0 was passed).
5169 * Validate "dir_end" when reading a block.  (fixes #592)
5171 build system:
5173 * configure: Improve reporting of GCC version.
5175 * Use -no-fast-install on platforms where -no-install causes libtool to emit a
5176   warning.
5178 * docs/Makefile.am: Fix handling of MAINTAINER_NO_DOCS.
5180 * Include UnicodeData.txt and the script to generate the unicode tables from
5181   it.
5183 documentation:
5185 * postingsource.rst: Clarify a couple of points (reported by "vHanda" on IRC).
5187 portability:
5189 * Protect the ValueIterator::check() method against Mac OS X SDK headers
5190   which define a check() macro.
5192 * Fix warning from xlC compiler.
5194 * Avoid use of grep -e in configure, as /usr/bin/grep on Solaris doesn't
5195   support -e.
5197 * Fix check for flags which might be needed for ANSI mode for compilers called
5198   'cxx'.
5200 * configure: Improve handling of Sun's C++ compiler - trick libtool into not
5201   adding -library=Cstd, and prefer -library=stdcxx4 if supported.  Explicitly
5202   add -library=Crun which seems to be required, even though the documentation
5203   suggests otherwise.
5205 Xapian-core 1.2.16 (2013-12-04):
5207 API:
5209 * PositionIterator,PostingIterator,TermIterator,ValueIterator: Don't segfault
5210   if skip_to() or check() is called on an iterator which is already at_end().
5211   Reported by David Bremner.
5213 * ValueCountMatchSpy: get_description() on a default-constructed
5214   ValueCountMatchSpy object no longer fails when xapian-core is built with
5215   --enable-log.
5217 * ValueCountMatchSpy: get_total() on a default-constructed ValueCountMatchSpy
5218   object now returns 0 rather than segfaulting.
5220 testsuite:
5222 * If -v/--verbose is specified more than once to a test program, show the
5223   diagnostic output for passing tests as well as failing/skipped ones.
5225 * queryparsertest: Change qp_scale1 to time 5 repetitions of the large query to
5226   help average out variations.
5228 * queryparsertest: Add test coverage for explicit synonym of a term with a
5229   prefix (e.g. ~foo:search).
5231 * apitest: Remove code from registry* testcases which tries to test the
5232   consequences of throwing an exception from a destructor - it's complex to
5233   ensure we don't leak memory while doing this (it seems GCC doesn't release
5234   the object in this case, but clang does), and it's generally frowned upon,
5235   plus C++11 makes destructors noexcept by default.
5237 * Fix "make check" to actually removed cached databases first, as is
5238   intended.
5240 brass backend:
5242 * When moving a cursor on a read-only table, check if the block we want is in
5243   the internal cursor.  We already do this for a writable table, as it is
5244   necessary for correctness, but it's a cheap check and may avoid asking the
5245   OS for a block we actually already have.
5247 * Correctly report the database as closed rather than 'Bad file descriptor'
5248   in certain cases.
5250 * Reuse a cursor for reading values from valuestreams rather than creating
5251   a new one each time.  This can dramatically reduce the number of blocks
5252   redundantly reread when sorting by value.  The rereads will generally get
5253   served from VM cache, but there's still an overhead to that.
5255 chert backend:
5257 * When moving a cursor on a read-only table, check if the block we want is in
5258   the internal cursor.  We already do this for a writable table, as it is
5259   necessary for correctness, but it's a cheap check and may avoid asking the
5260   OS for a block we actually already have.
5262 * Correctly report the database as closed rather than 'Bad file descriptor'
5263   in certain cases.
5265 * Reuse a cursor for reading values from valuestreams rather than creating
5266   a new one each time.  This can dramatically reduce the number of blocks
5267   redundantly reread when sorting by value.  The rereads will generally get
5268   served from VM cache, but there's still an overhead to that.
5270 flint backend:
5272 * When moving a cursor on a read-only table, check if the block we want is in
5273   the internal cursor.  We already do this for a writable table, as it is
5274   necessary for correctness, but it's a cheap check and may avoid asking the
5275   OS for a block we actually already have.
5277 * Correctly report the database as closed rather than 'Bad file descriptor'
5278   in certain cases.
5280 build system:
5282 * Compress source tarballs with xz instead of gzip.
5284 * Split XAPIAN_LIBS out of XAPIAN_LDFLAGS so that -l flags for libraries
5285   configure detects are needed appear after -L flags specified by the user
5286   that may be needed to find such libraries.  (fixes#626)
5288 * XO_LIB_XAPIAN now handles the user specifying a relative path in
5289   XAPIAN_CONFIG, e.g.: "./configure XAPIAN_CONFIG=../xapian-core/xapian-config"
5291 * Adjust XO_LIB_XAPIAN to strip _gitNNN suffix from snapshot versions.
5293 * configure: Handle git snapshot naming when calculating REVISION.
5295 * configure: Enable -fshow-column for GCC - things like vim's quickfix mode
5296   will then jump to the appropriate column for a compiler error or warning, not
5297   just the appropriate line.
5299 * configure: Report GCC version in configure output.
5301 documentation:
5303 * The API documentation shipped with the release is now generated with
5304   doxygen 1.8.5 instead of 1.5.9, which is most evident in the different
5305   HTML styling newer doxygen uses.
5307 * Document how Utf8Iterator handles invalid UTF-8 in API documentation.
5309 * Improve how descriptions of deprecated features appear in the API
5310   documentation.
5312 * docs/remote_protocol.rst: Correct error in documentation of REPLY_DOCDATA
5313   message.
5315 * docs/overview.rst: Correct documentation for how to specify "prog" remote
5316   databases in stub files.
5318 * Direct users to git in preference to SVN - we'll be switching entirely in
5319   the near future.
5321 tools:
5323 * xapian-chert-update: Fix -b to work rather than always segfaulting (reported
5324   in https://bugs.debian.org/716484).
5326 * xapian-chert-update: The documented alias --blocksize for -b has never
5327   actually been supported, so just drop mentions of it from --help and the man
5328   page.
5330 * xapian-check:
5332   + Fix chert database check that first docid in each doclength chunk is more
5333     than the last docid in the previous chunk - previously this didn't actually
5334     work.
5336   + Fix database check not to falsely report "position table: Junk after
5337     position data" whenever there are 7 unused bits (7 is OK, *more* than 7
5338     isn't).
5340   + Fix to report block numbers correctly for links within the B-tree.
5342   + If the METAINFO key is missing, only report it once per table.
5344   + Fix database consistency checking to always open all the tables at the same
5345     revision - not doing this could lead to false errors being reported after a
5346     commit interrupted by the process being killed or the machine crashing.
5347     Reported by Joey Hess in https://bugs.debian.org/724610
5349 examples:
5351 * quest: Add --check-at-least option.
5353 portability:
5355 * configure: clang doesn't support -Wstrict-null-sentinel or -Wlogical-op, so
5356   don't pass it these options.
5358 * Fix build errors and warnings with mingw.
5360 * Suppress "unused local typedef" warnings from GCC 4.8.
5362 * If the compiler supports C++11, use static_assert to implement
5363   CompileTimeAssert.
5365 * tests/zlib-vg.c: Fix two warnings when compiled with clang.
5367 * Fix failure when built with -D_GLIBCXX_DEBUG - we were modifying the top()
5368   element of a heap before calling pop(), such that the heap comparison
5369   operation (which is called when -D_GLIBCXX_DEBUG is on to verify the heap is
5370   valid) would read off the end of the data.  In a normal build, this issue
5371   would likely never manifest.
5373 * configure: When generating ABI compatibility checks in xapian/version.h, pass
5374   $CXXFLAGS and $CPPFLAGS to $CXXCPP as they could contain options which affect
5375   the ABI (such as -fabi-version for GCC).  (Fixes #622)
5377 * Microsoft GUIDs in binary form have reversed byte order in the first three
5378   components compared to standard UUIDs, so the same database would report a
5379   different UUID on Windows to on other platforms.  We now swap the bytes to
5380   match the standard order.  With this fix, the UUIDs of existing databases
5381   will appear to change on Windows (except in rare "palindronic" cases).
5383 * Fix a couple of issues to get Xapian to build and work on AIX.
5385 * common/safeuuid.h: Remove bogus take-address-of from uuid handling code for
5386   NetBSD and OpenBSD.
5388 * Under cygwin, use cygwin_conv_path() if using a new enough cygwin version,
5389   rather than the now deprecated cygwin_conv_to_win32_path().  Reported by
5390   "Haroogan" on the xapian-devel mailing list.
5392 * common/safeuuid.h: Add missing '#include <cstdlib>' and qualify free with std.
5394 * Fix 'unused label' warning when chert backend is disabled.
5396 * xapian.h: Add check for Wt headers being included before us and defining
5397   'slots' as a macro - if they are, give a clear error advising how to work
5398   around this (previously compilation would fail with a confusing error).
5400 debug code:
5402 * Fix assertion failure for when an OrPostList decays to an AndPostList - the
5403   ordering of the subqueries by estimated termfreq may not be the same as it
5404   was when the OrPostList was constructed, as the subqueries may themselves
5405   have decayed.  Reported by Michel Pelletier.
5407 * Fix -Wcast-qual warning from GCC 4.7 when configured with --enable-log.
5409 Xapian-core 1.2.15 (2013-04-16):
5411 API:
5413 * QueryParser/TermGenerator: Don't include CJK codepoints which are
5414   punctuation in N-grams.
5416 * TermGenerator: Fix bug where we failed to generate the first bigram
5417   from the second sequence of N-grammable CJK characters in a piece of text.
5419 brass backend:
5421 * Call fdatasync()/fsync() when creating the "iambrass" file.
5423 chert backend:
5425 * Call fdatasync()/fsync() when creating the "iamchert" file.
5427 flint backend:
5429 * Call fdatasync()/fsync() when creating the "iamflint" file.
5431 build system:
5433 * XO_LIB_XAPIAN now handles the user specifying XAPIAN_CONFIG without a path,
5434   for example: ./configure XAPIAN_CONFIG=xapian-config-1.3
5436 tools:
5438 * delve: If -v is specified more than once, show even more info in some cases.
5440 portability:
5442 * Fix warning due to needlessly casting away const-ness in debug logging.
5444 * Fix pointer truncation bug in lemon parser generator, which probably affects
5445   regenerating the query parser on WIN64.
5447 debug code:
5449 * Fix to build when configured with --enable-log.
5451 Xapian-core 1.2.14 (2013-03-14):
5453 API:
5455 * MSet::get_document(): Don't cache retrieved Document objects unless they
5456   were requested with fetch().  This avoids using a lot of memory when many
5457   MSet entries are retrieved.  (Fixes #604)
5459 testsuite:
5461 * apitest: Improved test coverage.
5463 matcher:
5465 * Check if a candidate document has at least the minimum weight needed
5466   before checking positional information, which speeds up slow phrase
5467   searches (partly addresses #394).
5469 brass backend:
5471 * Fix multipass compaction not to damage document values, and to merge the
5472   database stats correctly.  (fixes #615)
5474 chert backend:
5476 * Fix multipass compaction not to damage document values, and to merge the
5477   database stats correctly.  (fixes #615)
5479 flint backend:
5481 * Fix multipass compaction bug.  (fixes #615)
5483 tools:
5485 * xapian-replicate:
5487   + Fix handling of delays between replication events - the subtraction of the
5488     target time and the current time was reversed, so we wouldn't sleep when
5489     before the deadline, but would sleep after it for the amount we'd missed it
5490     by.
5492   + On Microsoft Windows, we no longer sleep for more than 43 years if the
5493     target time for a replication event had already passed.  (Fixes #472)
5495 portability:
5497 * matcher/queryoptimiser.cc: Need <functional> for mem_fun().
5499 * tests/harness/testsuite.cc: Don't provide explicit template types to
5500   make_pair - it isn't useful, and breaks with C++11.  Fixes build error with
5501   MSVC2012.
5503 * examples/quest.cc: Fix to build with Sun Studio 12 compiler.  (ticket#611)
5505 Xapian-core 1.2.13 (2013-01-09):
5507 API:
5509 * TermGenerator: Add new method TermGenerator::set_max_word_length() to allow
5510   this limit to be adjusted by the user.
5512 * QueryParser: Implicitly close any unclosed brackets at the end of the query
5513   string.  Patch from Sehaj Singh Kalra.
5515 * DateValueRangeProcessor: Add extra constructor overloaded form so that in
5516   DateValueRangeProcessor(1, "date:"), the const char * gets interpreted as
5517   std::string rather than bool.
5519 testsuite:
5521 * apitest: Assorted test coverage improvements.
5523 * When reporting valgrind errors, skip any warnings before the error in the
5524   valgrind log.
5526 matcher:
5528 * Improved fix for #590 - count all matching LeafPostList objects with a Weight
5529   object rather than trying to prune at the MultiAndPostList level based on
5530   max_wt (if wdf is always zero for a term, BM25 gives max_wt of 0, which lead
5531   to us never counting that subquery.
5533 * Fix calculation of 0.0/0.0 in some cases.  This then got used as a minimum
5534   weight, but it seems this gives -nan (at least on x86-64 Linux) so it may
5535   have been harmless in practice.
5537 * We no longer use the highest weighted MSet entry to calculate percentages, so
5538   remove code which finds it.
5540 brass backend:
5542 * Close excess file handles before we get the fcntl lock, which avoids the
5543   lock being released again if one is open on the lock file.  Notably this
5544   avoids a situation where multiple threads in the same process could succeed
5545   in locking a database concurrently.
5547 chert backend:
5549 * Close excess file handles before we get the fcntl lock, which avoids the
5550   lock being released again if one is open on the lock file.  Notably this
5551   avoids a situation where multiple threads in the same process could succeed
5552   in locking a database concurrently.
5554 flint backend:
5556 * Close excess file handles before we get the fcntl lock, which avoids the
5557   lock being released again if one is open on the lock file.  Notably this
5558   avoids a situation where multiple threads in the same process could succeed
5559   in locking a database concurrently.
5561 remote backend:
5563 * Improve the UnimplementedError message for a MatchSpy subclass which doesn't
5564   implement name() so it's clearer that it is this particular subclass which
5565   can't be used remotely, rather than all MatchSpy objects.
5567 build system:
5569 * The build system is now generated with automake 1.11.6 rather than 1.11.1,
5570   which fixes a security issue in "make distcheck" (not something users will
5571   usually run, but it seems worth addressing).
5573 * Use user-specified LIBS for configure tests, which is what you'd expect to
5574   happen, and provides a way for the user to tell configure where to find
5575   library functions which configure can't find for itself.
5577 * INCLUDES is now deprecated in automake, so use AM_CPPFLAGS instead.
5579 * Test coverage rules now assume lcov 1.10 which allows them to be simpler
5580   and not to require a patched version of lcov.
5582 documentation:
5584 * valueranges.html: Update documentation to reflect change in Xapian 1.1.2 -
5585   DateValueRangeProcessor and StringValueRangeProcessor now support a prefix or
5586   suffix.
5588 * Clarify that the "reverse" parameter of set_sort_by_relevance_then_value()
5589   and set_sort_by_relevance_then_key() only affects the ordering of the
5590   value/key part of the sort.
5592 * docs/quickstart.html: Fix seriously outdated statement that Xapian doesn't
5593   create the database directory - that changed in 0.7.2 (released 2003-07-11).
5595 * HACKING: Try to make it clearer we're looking for a dual-licence on submitted
5596   patches.
5598 tools:
5600 * xapian-replicate:
5602   + Add a --full-copy option to force a full copy to be sent.  (ticket#436)
5604   + Add --quiet option, and be a little more verbose by default.
5606   + Allow files > 32G to be be copied by replication.
5608   + Fix "if (fd > 0)" tests in some replication code to be "if (fd >= 0)".
5609     In practice this is unlikely to actually have caused problems since
5610     stdin is typically still open and using fd 0.
5612   + Simplify how we open the .DB file on the replication slave to just call
5613     open() once with O_CREAT, rather than once without, than stat() if that
5614     fails, and then again with O_CREAT|O_TRUNC if stat() doesn't show an
5615     ordinary file exists.
5617 examples:
5619 * quest:
5621   + New --flags command line option to allow setting arbitrary QueryParser
5622     flags.
5624   + Align option descriptions in --help output, and make the initial letter of
5625     such descriptions consistently lowercase.
5627 portability:
5629 * Fix testsuite harness to compile with GCC 4.7.
5631 * On platforms with the F_MAXFD fcntl but without closefrom(), we were failing
5632   to close the highest numbered open fd in our closefrom() replacement.
5634 * Our closefrom() replacement on Linux now works around valgrind not hiding
5635   some extra fds it has open, but then complaining if we try to close them.
5637 + Pass O_BINARY when opening replication related files in some cases where we
5638   weren't before, which will probably help solve ticket #472.
5640 * configure: socketpair() needs -lnetwork on Haiku.
5642 * Micro-optimisation in Unicode handling - GCC doesn't currently optimise the
5643   arithmetic shift right idiom we use, but it documents that signed right shift
5644   does sign extension so we now just use a right shift for GCC.
5646 debug code:
5648 * Preserve errno over debug logging calls, so they can safely be added to code
5649   which expects errno not to change.
5651 Xapian-core 1.2.12 (2012-06-27):
5653 build system:
5655 * 1.2.11 had its library version information incorrectly set.  This resulted in
5656   the shared library having an incorrect SONAME - e.g. on Linux,
5657   libxapian.so.21 instead of libxapian.so.22.  This release has been made to
5658   fix this problem.
5660 documentation:
5662 * AUTHORS: Add the GSoC students.
5664 Xapian-core 1.2.11 (2012-06-26):
5666 API:
5668 * Add new QueryParser::STEM_ALL_Z stemming strategy, which stems all terms and
5669   adds a Z prefix.  (Patch from Sehaj Singh Kalra, fixes ticket#562)
5671 * Add TermGenerator::set_stemming_strategy() method, with strategies which
5672   correspond to those of QueryParser.  Based on patch from Sehaj Singh Kalra,
5673   with some tweaks for adding term positions in more cases.  (Fixes ticket#563)
5675 * Correct "BM25Weight" to "TradWeight" in exception message from TradWeight.
5677 * We were failing to call init() for user-defined Weight objects providing the
5678   term-independent weight.  These now get called with init(0.0).
5680 * Xapian::Auto::open_stub() now throws a Xapian::DatabaseOpeningError exception
5681   if the stub file can't be opened.  Previously we failed to check for this
5682   condition, which resulted in us treating the file as empty.
5684 testsuite:
5686 * When the testsuite is using valgrind, we used to run remote servers under
5687   valgrind too (but with --tool=none) to get consistent behaviour as valgrind's
5688   emulation of x87 excess precision isn't exact.  Now we only do this if x87 FP
5689   instructions are actually in use (which means x86 architecture and configure
5690   run with --disable-sse).
5692 * Make sure XAPIAN_MAX_CHANGESETS gets unset after replication testcases which
5693   set it, so further testcases don't waste time generating changesets.
5695 * Improved test coverage (including more tests for closed databases -
5696   ticket#337).
5698 brass backend:
5700 * After closing the database, methods which try to use the termlist would throw
5701   FeatureUnavailableError with message "Database has no termlist", assuming
5702   that the termlist table not being open meant it wasn't present.  Fix to check
5703   if the postlist_table is open to determine which case we're in.
5705 chert backend:
5707 * After closing the database, methods which try to use the termlist would throw
5708   FeatureUnavailableError with message "Database has no termlist", assuming
5709   that the termlist table not being open meant it wasn't present.  Fix to check
5710   if the postlist_table is open to determine which case we're in.
5712 inmemory backend:
5714 * Check if the database is closed in metadata_keys_begin() for InMemory
5715   Databases.
5717 build system:
5719 * xapian-config: Don't interpret a missing .la file as meaning that we only
5720   have static libraries.
5722 documentation:
5724 * Fix API documentation for Query constructors - both XOR and ELITE_SET can
5725   take any number of subqueries, not only exactly two.
5727 * Backport missing API documentation comments for operator++ and operator*
5728   methods or PositionIterator, PostingIterator and TermGenerator.
5730 * docs/replication.rst: Update documentation - since 1.2.5, the value of
5731   XAPIAN_MAX_CHANGESETS determines how many changesets we keep.
5733 * docs/admin_notes.rst: Correction - we don't "create a lock file", we "lock a
5734   file".
5736 * Fix API documentation for TradWeight constructor - "k1" should be "k".
5738 portability:
5740 * configure: Overhaul handling of compilers which pretend to be GCC.  Clang
5741   is now detected, and we only pass it warning flags it actually understands.
5742   And we now check for symbol visibility support with Intel's compiler.
5744 * configure: Solaris automatically pulls in library dependencies, so set
5745   link_all_deplibs_CXX=no there.
5747 * configure: We now check -Bsymbolic-functions for all compilers.
5749 * configure: Enable -Wdouble-promotion for GCC >= 4.6.
5751 * Pass -ldl last when compiling zlib-vg.so, as that seems to be needed on
5752   Ubuntu 12.04.
5754 * Fix incorrect use of "delete" which should be "delete []".  This is
5755   undefined behaviour in C++, though the type is POD, so in practice this
5756   probably worked OK on many platforms.
5758 * In BM25Weight when k1 or b is zero (not the default), we used to multiply
5759   an uninitialised double by zero, which is undefined behaviour, but in
5760   practice will often give zero, leading to the desired results.
5762 * xapian.h: Add check for Qt headers being included before us and defining
5763   'slots' as a macro - if they are, give a clear error advising how to work
5764   around this (previously compilation would fail with a confusing error).
5766 Xapian-core 1.2.10 (2012-05-09):
5768 testsuite:
5770 * apitest: Extend tradweight1 to test that TradWeight(0) means that wdf and
5771   document length don't affect the weight of a term.
5773 * termgentest: Check that TermGenerator discards words > 64 bytes.
5775 matcher:
5777 * Don't count unweighted subqueries of MultiAndPostList in percentage
5778   calculations, as OP_FILTER maps to MultiAndPostList now.  (ticket#590)
5780 brass backend:
5782 * When compacting, if the output database is empty, don't write out a metainfo
5783   tag.  Take care not to divide by zero when computing the percentage size
5784   change for a table.
5786 chert backend:
5788 * When compacting, if the output database is empty, don't write out a metainfo
5789   tag.  Take care not to divide by zero when computing the percentage size
5790   change for a table.
5792 documentation:
5794 * API documentation:
5796  + Note version when Database::close() was added.
5798  + Fix switched lower and upper in API documentation for Weight methods
5799    get_doclength_lower_bound() and get_doclength_upper_bound().  Correct
5800    maximum to minimum in get_doclength_lower_bound() comment and note that this
5801    excludes zero length documents.  Fix "An lower" to "A lower".
5803 * docs/admin_notes.html: Mention that postlist and termlist tables also hold
5804   value info for chert.  Mention that xapian-chert-update was removed in 1.3.0.
5805   Mention that you need to use copydatabase from 1.2.x to convert flint to
5806   chert.
5808 * HACKING: Update section on patches to mention git (git diff and git
5809   format-patch), and using "-r" with normal diff, and also that ptardiff offers
5810   a nice way to diff against an unpacked tarball.
5812 debug code:
5814 * Fix use of AssertEq() on NULL, which doesn't compile, at least with recent
5815   GCC.
5817 Xapian-core 1.2.9 (2012-03-08):
5819 API:
5821 * QueryParser: Fix FLAG_AUTO_SYNONYMS not to enable auto multi-word synonyms
5822   too (but in a different way to trunk so as to not break the ABI).
5824 matcher:
5826 * Fix issue with running AND, OR and XOR queries against a database with no
5827   documents in it - this was leading to a divide by zero, which led to
5828   MSet::get_matches_estimated() reporting 2147483648 on i386.
5830 build system:
5832 * Remove configure's --with-stlport and --with-stlport-compiler options, as
5833   they don't allow you to actually specify what you need to (at least to use
5834   the Debian STLport package), and instead document what to pass to configure
5835   to enable building with STLport (though it seems to no longer be actively
5836   maintained, and the debug mode (which is probably the most interesting
5837   feature now) doesn't seem to work on Debian stable).
5839 documentation:
5841 * Document that OP_ELITE_SET with non-term subqueries might pick subqueries
5842   which don't match anything.  Closes ticket#49.
5844 * Document that you can define a static operator delete method in your subclass
5845   if deallocation needs to be handled specially.  (Closes ticket#554)
5847 * Assorted minor documentation improvements.
5849 portability:
5851 * Address new warnings from GCC 4.6.
5853 * Fix argument order when linking xapian-check to fix mingw build.
5854   (ticket#567)
5856 * Add some missing explicit header includes to fix build with STLport.
5858 Xapian-core 1.2.8 (2011-12-13):
5860 API:
5862 * Add support to TermGenerator and QueryParser for indexing and searching CJK
5863   text using n-grams.  Currently this is only enabled when the environmental
5864   variable XAPIAN_CJK_NGRAM is set to a non-empty value.
5866 documentation:
5868 * Add link from index page to apidoc.pdf.
5870 * quickstart.html: Correct link which was to quickstartsearch.cc.html but
5871   should be to quickstartindex.cc.html.
5873 * overview.html,quickstart.html: Fix several factual errors.
5875 * API documentation:
5877   + Improve documentation comments for several methods.
5879   + Add documentation for function parameters which didn't have it.
5881   + Remove bogus paragraph in WritableDatabase::replace_document()
5882     documentation comment which had been cut and pasted from delete_document()
5883     documentation comment.  (Fixes ticket#579)
5885   + Explicitly document which value slot numbers are valid.  (Fixes ticket#555)
5887   + Escape < and > in doxygen comments so "<foo>" doesn't get eaten by doxygen.
5889 portability:
5891 + Some fixes for warnings when cross-compiling to mingw.
5893 * tests/soaktest/soaktest.cc: With Sun's compiler, random() and srandom()
5894   aren't in <cstdlib> so we need to use <stdlib.h> instead.
5896 Xapian-core 1.2.7 (2011-08-10):
5898 API:
5900 * Document objects now track whether any document positions have been modified
5901   so that replacing a modified document can completely skip considering
5902   updating positions if none have changed.  Currently the flint, chert, and
5903   brass backends implement this optimisation.  A common case this speeds up is
5904   adding and/or removing boolean filter terms to/from existing documents - for
5905   example this gives an 18% speedup for adding tags in notmuch.
5907 testsuite:
5909 * Make sure that perftest isn't run with libeatmydata preloaded, as making
5910   fsync() a no-op makes performance tests rather bogus.
5912 remote backend:
5914 * Remove unnecessary call to reopen() in the remote servers in a case where
5915   either we had just called it or we are using a writable database and so
5916   reopen() doesn't do anything.
5918 build system:
5920 * configure: -Wshadow gives bogus warnings with 4.0 (at least on Mac OS X), so
5921   disable it for GCC < 4.1 (like the comments already said we did!)
5923 documentation:
5925 * Improve the documentation comment for Database::close().  (ticket#504)
5927 * Fix typo in documentation comment for Enquire constructor which reversed the
5928   intended sense (though the text was fairly obviously wrong before).
5930 * Improve documentation of QueryParser::add_boolean_prefix()'s exclusive
5931   parameter to talk about terms and prefixes rather than values and fields
5932   (which was confusing since "document value" has a particular meaning in
5933   Xapian).
5935 * docs/facets.html: Expand descriptions for indexing and finding facets.
5936   Fix errors in example code.
5938 * docs/index.html: Add links to Omega and bindings documentation.
5940 * docs/remote_protocol.html: Fixed typo which reversed the intended sense.
5942 * xapian-check --help: Document that checking a whole database performs
5943   additional cross-checks between the tables.
5945 * docs/admin_notes.html: Add note about xapian-chert-update.
5947 * docs/deprecation.html: Note here that WritableDatabase::flush() is
5948   deprecated in favour of WritableDatabase::commit().
5950 portability:
5952 * Fix -Wshadow warnings from GCC 4.6.
5954 * Fix warning from GCC 3.3.
5956 debug code:
5958 * Fix some problems with the templates used to implement output of parameters
5959   and return values in debug logging.
5961 Xapian-core 1.2.6 (2011-06-12):
5963 API:
5965 * QueryParser:
5967   + Add new set_max_wildcard_expansion() method to allow limiting the number of
5968     terms a wildcard can expand to.  (ticket#350)
5970   + If default_op is OP_NEAR or OP_PHRASE then disable stemming of the terms,
5971     since we don't index positional information for stemmed terms by default.
5973 * Spelling correction was failing to correctly handle words which had the same
5974   trigram in an even number of times.
5976 testsuite:
5978 * We now actually include the soaktest code in the release tarballs.
5980 matcher:
5982 * Eliminate some vector copies when handling phrase subqueries in the query
5983   optimiser.
5985 brass backend:
5987 * Kill the child process which holds the lock with SIGKILL as that can't be
5988   ignored, whereas SIGHUP can be in some cases.
5990 chert backend:
5992 * Kill the child process which holds the lock with SIGKILL as that can't be
5993   ignored, whereas SIGHUP can be in some cases.
5995 flint backend:
5997 * Kill the child process which holds the lock with SIGKILL as that can't be
5998   ignored, whereas SIGHUP can be in some cases.
6000 documentation:
6002 * The HTML documentation is now maintained in reStructured Text format.
6004 * docs/queryparser.html: Document the precedence order of operators.
6006 * docs/scalability.html: Bring up-to-date.
6008 * docs/overview.html: Document "remote" in stub databases.
6010 * docs/postingsource.html: Add PostingSource example.  (ticket#503)
6012 * include/xapian/database.h: Add @exception InvalidArgumentError for
6013   Database::get_document() (ticket#542).
6015 * Ship ChangeLog.0 in the tarball.
6017 * Assorted minor improvements.
6019 examples:
6021 * examples/delve: Report has_positions().
6023 * examples/simpleindex: Add short description to usage message.
6025 portability:
6027 * Fix to build for mingw.
6029 Xapian-core 1.2.5 (2011-04-04):
6031 API:
6033 * Enquire::get_eset() now accepts a min_wt argument to allow the minimum wanted
6034   weight to be specified.  Default is 0, which gives the previous behaviour.
6036 * QueryParser: Handle NEAR/<offset> and ADJ/<offset> where offset isn't an
6037   integer the same way at the end of the query as in the middle.
6039 * Replication:
6041   + Only keep $XAPIAN_MAX_CHANGESETS changeset files when generating a new one
6042     (previously this variable only controlled if we generated changesets or
6043     not).  Closes ticket#278.
6045   + $XAPIAN_MAX_CHANGESETS is reread each time, rather than only when the
6046     database is opened.
6048   + If you build Xapian with DANGEROUS mode enabled, changeset files now
6049     actually have the appropriate flag set (the reader will currently throw an
6050     exception, but that's better than quietly handling them incorrectly).
6052 testsuite:
6054 * Compaction tests which generate stub files now close them before performing
6055   the actual compaction, to avoid issues on Microsoft Windows (ticket#525).
6057 * Improve test coverage.
6059 matcher:
6061 * Fix memory leak if an exception is thrown during the match.
6063 brass backend:
6065 * Bumped format version number (we now store the oldest revision for which we
6066   might have a replication changeset).
6068 * Optimise not to read the bitmaps from the base files when opening a database
6069   for reading (cross-port of equivalent change to chert).
6071 * Optimise not to update doclength when it hasn't changed (cross-port of
6072   equivalent change to chert).
6074 * If we try to delete an old base file and it isn't there, just continue rather
6075   than throwing an exception.  We wanted to get rid of it anyway, and it may be
6076   NFS issues telling us the wrong thing.  In particular, DatabaseCorruptError
6077   was rather a pessimistic assessment.
6079 chert backend:
6081 * Optimise not to read the bitmaps from the base files when opening a database
6082   for reading.
6084 * Optimise not to update doclength when it hasn't changed.
6086 * xapian-chert-update: Fix to handle larger databases, and databases which
6087   have values set.
6089 * If we try to delete an old base file and it isn't there, just continue rather
6090   than throwing an exception.  We wanted to get rid of it anyway, and it may be
6091   NFS issues telling us the wrong thing.  In particular, DatabaseCorruptError
6092   was rather a pessimistic assessment.
6094 flint backend:
6096 * Optimise not to read the bitmaps from the base files when opening a database
6097   for reading (cross-port of equivalent change to chert).
6099 * Optimise not to update doclength when it hasn't changed (cross-port of
6100   equivalent change to chert).
6102 * If we try to delete an old base file and it isn't there, just continue rather
6103   than throwing an exception.  We wanted to get rid of it anyway, and it may be
6104   NFS issues telling us the wrong thing.  In particular, DatabaseCorruptError
6105   was rather a pessimistic assessment.
6107 remote backend:
6109 * xapian-tcpsrv: If we can't bind to the specified port because it is a
6110   privileged one, exit with code 77 (EX_NOPERM) to make it easier to
6111   automatically handle failure when starting the server from a script.
6113 build system:
6115 * Snapshots and releases are now bootstrapped with autoconf 2.68 and libtool
6116   2.4.
6118 * configure: -Wstrict-null-sentinel was added in GCC 4.0.1 and so doesn't work
6119   with GCC 4.0.0.  For simplicity, only enable it for GCC >= 4.1.
6121 documentation:
6123 * INSTALL: Note how to build for a non-default arch on a multi-arch platform.
6125 * include/xapian/enquire.h: Fix doxygen markup so alternative overloaded forms
6126   of Enquire::get_mset() appear in the API documentation.
6128 * collapsing.html: Add missing document (written some time ago, but never
6129   actually added to builds).
6131 * replication.html: Update documentation to make it clear that users shouldn't
6132   create the destination directory for replication themselves.
6134 * docs/intro_ir.html: Update link to a paper.  Update text about book "to be
6135   published in 2008".
6137 * docs/deprecation.html:
6139   + PostingSource now offers a replacement for Enquire::set_bias().
6141   + OmegaScript: $set{spelling,true} is now deprecated.
6143   + Add note about botched removal of Enquire.get_matching_terms from Python
6144     bindings (now fully removed).
6146   + Note removal of "if idx in mset" from Python bindings.
6148   + Deprecate MSet.items and ESet.items from Python bindings (ticket#531).
6150 * docs/admin_notes.html: Update for 1.2.5.
6152 * Updates to documentation of internals.
6154 tools:
6156 * xapian-replicate-server: Fix race condition between checking if a file
6157   exists and opening it to replicate it.
6159 * xapian-replicate: Complain unless host name and port number are specified -
6160   previously these defaulted to an empty string and 0, which resulted in
6161   potentially confusing error messages.
6163 * xapian-replicate: If --master isn't specified, default to DATABASE.
6165 examples:
6167 * quest: Report any spelling correction (requires the database contains
6168   spelling data of course).
6170 * copydatabase: Add --no-renumber option.
6172 portability:
6174 * api/compactor.cc: Add missing header <ctime> for time() (ticket#530).
6176 * api/compactor.cc: Use msvc_posix_rename() under __WIN32__ to atomically
6177   update stub file after compaction (ticket#525).
6179 * Fix uninitialised variable warnings with gcc -O3.
6181 * Eliminate std::string member of global static object used when compiled with
6182   --enable-log which was causes problems on Mac OS X.
6184 * Fix some issues highlighted by clang++ warnings.
6186 Xapian-core 1.2.4 (2010-12-19):
6188 API:
6190 * QueryParser:
6192   + Avoid a double free if Query construction throws an exception in a
6193     particular case.  Fixes ticket#515.
6195   + Allow phrase generators between a probabilistic prefix and the term itself
6196     (e.g. path:/usr/local).
6198   + The correct window size wasn't being set in some cases when default_op was
6199     set to OP_PHRASE.
6201 * Enquire::get_mset():
6203   + Avoid pointlessly trying to allocate lots of memory if the first document
6204     requested is larger than the size of the database.
6206   + An empty query now returns an MSet with firstitem set correctly -
6207     previously firstitem was always 0 in this case.
6209 * Document: Initialise docid to 0 when creating a document from
6210   scratch, as documented.
6212 * Compactor:
6214   + Move the database compaction and merging functionality into this new class,
6215     and make xapian-compact a simple wrapper around this class.  (ticket#175)
6217   + Inputs can now be stub database directories or files, in which case the
6218     databases in the stub are used as inputs.
6220   + Add support for compacting to a stub database, which can be one of the
6221     inputs (for atomic update).
6223   + If spellings and/or synonyms were only present in some source databases,
6224     they weren't copied to the output database, but now they are.
6226 testsuite:
6228 * Improve test coverage (particularly for Xapian::Utf8Iterator and
6229   Xapian::Stem).
6231 * Add zlib-vg.c to distribution tarballs.
6233 * tests/runtest: Add XAPIAN_TESTSUITE_LD_PRELOAD hook to allow libeatmydata to
6234   easily be used to speed up testsuite runs.
6236 matcher:
6238 * The matcher wasn't recalculating the max possible weight after a subquery of
6239   XOR reached its end.  This caused an assertion failure in debug builds, and
6240   is a missed optimisation opportunity.
6242 * Implement SelectPostList::check() so that check() on OP_NEAR and OP_PHRASE
6243   subqueries will just check a single document, not a potentially huge numbers
6244   of documents.
6246 * BM25Weight: Fix calculation order to avoid inconsistent weights due to
6247   rounding when certain non-default parameter combinations are used.
6249 * TradWeight: Fix calculation order to avoid inconsistent weights due to
6250   rounding with TradWeight(0).
6252 * Fix regression in speed of OP_OR queries in certain cases due to optimisation
6253   added in 1.0.21/1.2.1.
6255 * In the query optimiser, use value range bounds to detect value ranges which
6256   must be empty.
6258 remote backend:
6260 * Add support for iterating metadata keys with the remote backend.  This change
6261   necessitated an increase in the minor version of the remote protocol.  If you
6262   are upgrading a live system which uses the remote backend, upgrade the
6263   servers before the clients.
6265 build system:
6267 * xapian-config: Add --static option which makes other options report values
6268   for static linking.
6270 * xapian-config is now removed by "make distclean" not "make clean".
6272 * configure: FreeBSD and OpenBSD don't need explicit dependency libraries, so
6273   set link_all_deplibs_CXX=no there.
6275 * This release uses autoconf 2.67 rather than 2.65.
6277 documentation:
6279 * INSTALL: Raise recommended GCC version from 3.3 to 4.1, since that's the
6280   oldest we regularly test with.
6282 * replication.html: Update and improve in various ways.
6284 * Remove lingering "experimental" marker from PostingSource and
6285   ValueCountMatchSpy API documentation.
6287 * index.html: Add links to replication and facets documents, and fix typo in
6288   serialisation document link.
6290 * internals.html: Add link to replication protocol.
6292 * Change the categorisation document to talk about facets, since that's the
6293   terminology that seems to be most widely used these days, and
6294   "categorisation" can also mean automatically assigning categories to
6295   documents.  Also update to reflect the final API.
6297 * deprecation.html: Add guidelines for supporting other software.
6299 * Document cases where QueryParser's FLAG_WILDCARD and FLAG_PARTIAL aren't
6300   currently supported.
6302 * PLATFORMS: Move PLATFORMS information to the wiki and replace with a pointer.
6304 tools:
6306 * xapian-compact: Fix access to empty priority_queue while merging synonyms.
6307   This could have caused problems, though we've had no reports of any (the
6308   bug was found with _GLIBCXX_DEBUG).
6310 * xapian-compact: Add --quiet/-q option to suppress progress output.
6311   (ticket#437)
6313 * xapian-replicate: If a full copy was attempted, but was not put live, display
6314   an explanatory message (in verbose mode).
6316 examples:
6318 * examples/quest: Add command line options to allow prefixes to be specified
6319   for the QueryParser.
6321 * examples/delve: Add '-z' option to count zero-length documents.
6323 * examples/simplesearch: Fix cut-and-paste errors in usage message and
6324   --version output.
6326 portability:
6328 * configure: Add support for --enable-sse=sse and --enable-sse=sse2 to allow
6329   control of which SSE instructions to use.
6331 * configure: Enable use of SSE maths on x86 by default with Sun's compiler.
6333 * configure: Beef up the test for whether -lm is required and add a special
6334   case to force it to be for Sun's C++ compiler - there's some interaction with
6335   libtool and/or shared objects which means that the previous configure test
6336   didn't think -lm is needed here when it is.
6338 * Fix to build on OpenBSD 4.5 with GCC 3.3.5.
6340 * Need to avoid excess precision on m68k when targeting models 68010, 68020,
6341   68030 as well as 68000.
6343 * Fix compilation with Sun's C++ compiler.
6345 * Fix testsuite to build on Solaris < 10.
6347 Xapian-core 1.2.3 (2010-08-24):
6349 API:
6351 * Database::get_spelling_suggestion() will now suggest a correction even if the
6352   passed word is in the dictionary, provided the correction has at least the
6353   same frequency.  Partly addresses #225.
6355 * QueryParser:
6357   + Fix handling of groups of terms which are all stopwords - in situations
6358     where this causes a problem we now disable stopword checks for such groups.
6359     (ticket#245)
6361   + Fix to be smarter about handling a boolean filter term containing ".." in
6362     the presence of valuerangeprocessors.
6364 testsuite:
6366 * New "unittest" program for testing low level functions directly.  Currently
6367   this has tests for the internal resolve_relative_path() function.
6368   (ticket#243)
6370 remote backend:
6372 * Retry select() if it fails with EINTR while waiting for connect(), and
6373   discriminate cases with same failure message to aid debugging.
6375 documentation:
6377 * Fix documentation comment for Xapian::timeout type - it holds a time interval
6378   in milliseconds not microseconds (the API docs for the methods which use it
6379   explicitly correctly document that the timeouts are in milliseconds).
6381 * libuuid moved from e2fsprogs to util-linux-ng about a year ago, so update
6382   documentation, comments, and configure error messages to reflect this.
6384 portability:
6386 * configure: Don't pass -mtune=generic unless GCC >= 4.2 is in use
6387   (ticket#492).
6389 * Fix handling of some obscure cases of resolving relative paths on Microsoft
6390   Windows.  (ticket#243).
6392 * Optimise closing of all unwanted file descriptors after forking by using
6393   closefrom() if available, and otherwise providing our own implementation
6394   (optimised to some extent for many platforms).
6396 * Fix test harness to build under Microsoft Windows (ticket#495).
6398 packaging:
6400 * xapian-core.spec: Add xapian-metadata and cmake related files to RPM
6401   packaging.
6403 * xapian-core.spec: Update BuildRequires to specify libuuid-devel instead of
6404   e2fsprogs-devel.
6406 debug code:
6408 * Improve logging of function parameter placeholder strings.
6410 Xapian-core 1.2.2 (2010-06-27):
6412 brass backend:
6414 * Sync changes from each Btree table to disk right after syncing changes to
6415   its base file, which allows more time for the table changes to be written
6416   and may also be more efficient with some Linux kernel versions.
6418 chert backend:
6420 * Sync changes from each Btree table to disk right after syncing changes to
6421   its base file, which allows more time for the table changes to be written
6422   and may also be more efficient with some Linux kernel versions.
6424 tools:
6426 * xapian-check: Don't try to check document lengths are consistent between the
6427   postlist and termlist tables if it would use more than 1GB of memory, and
6428   handle std::bad_alloc or std::length_error when trying to allocate space
6429   for this.  This issue affected sup users, as sup allocates docids such that
6430   they are sparse and large docids can easily occur.
6432 examples:
6434 * delve: Show the database's UUID.
6436 portability:
6438 * Revert 1.2.1 change to visibility of Xapian::Weight's copy constructor as
6439   it making it private broke compilation with GCC 4.1 (which seems to be a
6440   bug in this compiler version).
6442 * tests/harness/testsuite.cc: Need <cstdio> for sprintf().  Fixes compilation
6443   error which was masked if valgrind was installed.  (ticket#489)
6445 packaging:
6447 * xapian-core.spec: Update for 1.2.x - add e2fsprogs-devel to BuildRequires and
6448   add new files to install.
6450 Xapian-core 1.2.1 (2010-06-22):
6452 This release includes all changes from 1.0.21 which are relevant.
6454 API:
6456 * QueryParser: Add support for open-ended ranges (ticket#480).
6458 * Add new optional parameter to QueryParser::add_boolean_prefix() to allow the
6459   user to indicate a prefix isn't "exclusive" and that multiple instances
6460   should be combined with OP_AND rather than OP_OR.  Fixes ticket#402.  This
6461   change should also improve efficiency as it avoids copying the lists of
6462   prefixes and compares them more efficiently.
6464 * You can now specify a custom stemming algorithm by subclassing
6465   Xapian::StemImplementation, mostly based on patch from Evgeny Sizikov in
6466   ticket#448.
6468 * Fix replication bug: when multiple commits were made to the master database
6469   while a client was performing a full copy, the client would only apply the
6470   first changeset and then try to make the database live, but fail due to
6471   trying to set the wrong revision number.
6473 * Replication no longer sleeps between applying changesets to an offline
6474   database.  It's only necessary to sleep for a live database (to allow readers
6475   to complete a search without getting DatabaseModifiedErrror.
6477 * xapian-replicate: Add new "-r" command line option to specify how long
6478   replication sleeps for between applying changesets to a live database.
6480 * If a Btree table doesn't exist when applying a replication changeset, create
6481   it.  This fixes replicating a revision where a lazy table is created.
6482   (ticket#468)
6484 testsuite:
6486 * zlib can produce "uninitialised" output from "initialised" input - the
6487   output does decode to the input, so this is presumably just some unused bits
6488   in the output, so we use an LD_PRELOAD hack to get valgrind to check the
6489   input is initialised and then tell it that the output is initialised.
6491 * Don't pass NULL to closedir(), which fixes test harness failures on platforms
6492   without /proc/self/fd.
6494 * Use safesyswait.h, fixing build failure on "make check" on FreeBSD.
6496 * Check is SA_SIGINFO is defined before using it as it isn't available
6497   everywhere.  Fixes testsuite build failure on GNU Hurd.
6499 * Add a "soaktest" testsuite, intended to contain long-running tests with
6500   random data.  Currently contains a single test which builds and runs random
6501   queries, checking that the results returned are consistent when asking for
6502   different result ranges.
6504 * Test UUID returned by Database::get_uuid() is 36 characters long.
6506 matcher:
6508 * Xapian no longer forces the wdf_max value to be at least one in
6509   BM25Weight::get_maxpart().  We used to do this so that a non-existent term in
6510   the query would cause it not to achieve 100%, but now we calculate
6511   percentages based on the number of matching subqueries, and it is more
6512   natural for a non-existent term to get zero weight (ditto for a term which
6513   always has wdf 0).
6515 * OP_VALUE_RANGE and OP_VALUE_GE now use value streams directly which is much
6516   more efficient for chert (the default backend in 2.2.x).  As an example, a
6517   range query testcase which previously took 29 seconds now takes 0.4 seconds
6518   (70 times faster).  (ticket#432)
6520 * The term statistics from multiple databases are now gathered in a simpler
6521   way which is a bit faster and uses less memory.
6523 build system:
6525 * Install headers under PREFIX/include not PREFIX/include/xapian.  If you used
6526   XO_LIB_XAPIAN or xapian-config in your build system, the headers would still
6527   have been found.
6529 * Releases and snapshots are now generated with libtool 2.2.10 instead of
6530   2.2.6.
6532 * Fix build failures with some combinations of backends disabled (partially
6533   addresses ticket#361 - some combinations still fail).
6535 * Add check to configure that GCC actually supports visibility for the platform
6536   being built for, which fixes compiler warnings with platforms which don't
6537   (such as Mac OS X and mingw).
6539 documentation:
6541 * Update documentation - replication and PostingSource aren't experimental in
6542   1.2.x.
6544 portability:
6546 * Make use of built-in UUID API on FreeBSD and NetBSD.  (ticket#470)
6548 * Fix mingw build.
6550 debug code:
6552 * Add new pretty printer for values reported by calls and returns in debug
6553   logging - in particular, strings are now reported with non-printable
6554   characters escaped.
6556 * Debug logging should have less runtime overhead when built in but not in use.
6558 * Drop support for --enable-log=profile - dedicated profiling tools are likely
6559   to return more useful results.
6561 Xapian-core 1.2.0 (2010-04-28):
6563 This release includes all changes from 1.0.20 which are relevant.
6565 testsuite:
6567 * Fix --abort-on-error to actually work.
6569 * Exit with status 1 not 0 if we caught an exception from the harness itself.
6571 Xapian-core 1.1.5 (2010-04-16):
6573 This release includes all changes from 1.0.19 which are relevant.
6575 API:
6577 * Database replication now handles an exception while applying a changeset
6578   better.
6580 * If environment variable XAPIAN_MAX_CHANGESETS is set on a replication client
6581   then any changesets read are saved so the replicated copy can itself be
6582   replicated.
6584 testsuite:
6586 * Use sigsetjmp() and siglongjmp() where available so that the set of blocked
6587   signals get restored and the test harness can catch a second incidence of a
6588   particular signal in a run.  Use sigaction() instead of signal() where
6589   available, which allows us to report the address associated with SIGSEGV,
6590   SIGFPE, SIGILL, and SIGBUS.
6592 * Add machinery to check for leaked file descriptors.  Currently this requires
6593   /proc/self/fd to work (which is present on Linux and some other platforms).
6594   Remove the crude ulimit in runtest which has caused problems on some Debian
6595   buildds.
6597 * The test harness now explicitly catches const char * exceptions and reports
6598   their contents.
6600 brass backend:
6602 * Ensure that the wdf upper bound is correctly updated when replacing
6603   documents.
6605 * xapian-compact: Now sets lastdocid correctly when using --no-renumber.
6607 chert backend:
6609 * Ensure that the wdf upper bound is correctly updated when replacing
6610   documents.
6612 * xapian-compact: Now sets lastdocid correctly when using --no-renumber.
6614 * xapian-check: Check that the initial doclen chunk exists.
6616 flint backend:
6618 * xapian-compact: Now sets lastdocid correctly when using --no-renumber.
6620 remote backend:
6622 * Add remote backend support for WritableDatabase::add_spelling() and
6623   WritableDatabase::remove_spelling().  This bumps the remote protocol to
6624   version 35.0 (so both client and servers will need updating).  Suggesting
6625   spelling corrections isn't yet supported.  (ticket#178)
6627 build system:
6629 * XO_LIB_XAPIAN: Give a more specific error message for the cases where
6630   XAPIAN_CONFIG isn't found, is a directory, or isn't executable.
6632 examples:
6634 * delve:
6636   + If any documents are specified with "-d<docid>", "-V<slot>" now only show
6637     values for those documents.
6639   + Remove undocumented -k option, which has been a compatibility alias for -V
6640     since 0.9.10.  Just use -V instead.
6642 * xapian-metadata: Add new example program which allows you to get and set
6643   individual user metadata entries.
6645 Xapian-core 1.1.4 (2010-02-15):
6647 This release includes all changes from 1.0.18 which are relevant.
6649 API:
6651 * Xapian::TermGenerator,Xapian::QueryParser,Xapian::Unicode::is_wordchar():
6652   Add ENCLOSING_MARK and COMBINING_SPACING_MARK categories to is_wordchar(),
6653   which is used by TermGenerator and QueryParser.  Also make TermGenerator and
6654   QueryParser ignore several zero-width space characters.  This is a better
6655   but less compatible version of a fix in 1.0.18.
6657 * Implement support for iterating valuestreams for multidatabases.
6659 * Xapian::Stem: Update the german and german2 stemming algorithms to the latest
6660   versions from Snowball.  These add an extra rule for the "-nisse" ending.
6662 * Xapian::ValueCountMatchSpy: Replace get_values() with values_begin() and
6663   values_end().
6665 * Xapian::MatchSpy: Provide an iterator for accessing the top values found
6666   instead of taking a vector by reference to return them in.
6668 * Xapian::NumericRanges: Remove experimental API we aren't happy with yet.
6670 * Xapian::DatabaseReplica, Xapian::DatabaseMaster: Remove experimental
6671   API we aren't happy with.  Replication is still supported via the
6672   command line programs.  (ticket#347)
6674 * Xapian::score_evenness(): Remove as it turns out not to be useful in practice.
6675   (ticket#435)
6677 * Xapian::ValueWeightPostingSource: A ValueWeightPostingSource with no entries
6678   would report -infinity as its upper bound, which could cause no results to be
6679   incorrectly returned for some queries involving such an object.
6681 * Xapian::WritableDatabase::close() fixed to commit() changes (unless a
6682   transaction is in progress).
6684 testsuite:
6686 * apitest: Improve test coverage in various places.
6688 matcher:
6690 * Uses of values during the match (sorting by value or Sorter, MatchSpy,
6691   MatchDecider, and collapsing) now use value stream iteration which is
6692   a lot more efficient for chert and brass (but may be slower for flint).
6694 brass backend:
6696 * New development backend.  Changes over chert:
6698   + Batched posting list changes during indexing use significantly less memory.
6700   + Instead of using complex code to iterate modified posting lists and
6701     documents length lists, brass can flush individual such lists to disk
6702     and then iterates them from there.
6704   + To iterate all terms, chert flushes all pending postlist changes.  In the
6705     case where a prefix is specified, brass only flushes postlist changes for
6706     terms starting with the specified prefix, and doesn't flush document length
6707     changes.
6709 chert backend:
6711 * Promote chert to being the stable backend.
6713 * Change the packing of integers and strings into sortable keys, which reduces
6714   database size by 2.5% in tests.  This means an incompatible change in the
6715   chert format.  You can use the new xapian-chert-update utility to update a
6716   chert database from the old format to the new format.  It works much like
6717   xapian-compact so should take a similar amount of time (and results in a
6718   compact database).
6720 * xapian-compact:
6722   + Prune unused docids off the end of each database when merging multiple
6723     databases with renumbering.
6725   + Extend --no-renumber to support merging databases, but only if they have
6726     disjoint ranges of used document ids.
6728   + Ensure that the resultant database has a fresh UUID (previously chert
6729     copied the UUID from the first input).
6731 * xapian-check:
6733   + Fix checking of the METAINFO key in chert.  For small databases, the
6734     statistics fit in few enough bytes that incorrect check appeared to
6735     succeed and no errors were reported, but for larger databases an
6736     error was incorrectly reported.
6738   + Rework the checking of postlist chunks to use a cleaner approach which
6739     should report errors better.
6741   + Use a type wider than 32 bits to keep count of items in a table.
6742     Previously xapian-check would report the number of entries modulo
6743     4294967296.
6745 * When iterating a value stream, skip_to() now only assigns the value to a
6746   std::string when it reaches its target.  This saves a lot of unnecessary
6747   string copying - in a real-world test it improved the time for 100 queries
6748   from 3.66s to 3.10s.
6750 * When skipping through a chunk of postings to find the one we want, don't
6751   bother to unpack the wdf values we're skipping over.  This should save a
6752   significant amount of time in certain cases where the profile data shows
6753   about a third of the time is spent in the function where this happens.
6755 * Report locking failure due to running out of file descriptors better.
6757 flint backend:
6759 * xapian-compact:
6761   + Prune unused docids off the end of each database when merging multiple
6762     databases with renumbering.
6764   + Ensure that the resultant database has a fresh UUID (previously flint
6765     didn't set a UUID so one would be generated on demand when next requested,
6766     but only if the database was writable).
6768 * Report locking failure due to running out of file descriptors better.
6770 remote backend:
6772 * Add support for WritableDatabase::set_metadata() and Database::get_metadata()
6773   to the remote backend (based largely on patch in #178).
6775 inmemory backend:
6777 * Read the document data and values lazily for the inmemory backend like we do
6778   for other backends.  They're much less costly to fetch than if a disk or
6779   network access is involved, but it avoids copying potentially large data
6780   which may not be needed.  Consistency here also makes things easier to
6781   understand for both users and developers.
6783 build system:
6785 * This release uses autoconf 2.65 rather than 2.64.
6787 documentation:
6789 * docs/replication.html: Add note about not using reopen() with databases being
6790   updated by the replication client.
6792 * docs/admin_notes.html: Update for chert and other recent changes.
6794 * Remove out-of-date reference in the API documentation comment to an
6795   add_slot() method.  This no longer exists - you need to use multiple
6796   ValueCountMatchSpy objects to monitor more than one slot.
6798 examples:
6800 * simpleexpand,simpleindex,simplesearch: Handle --help and --version.
6802 debug code:
6804 * The debug log now reports boolean values as "true" and "false" (instead of
6805   "1" and "0").
6807 Xapian-core 1.1.3 (2009-09-18):
6809 This release includes all changes from 1.0.15-1.0.17 which are relevant.
6811 API:
6813 * Update Unicode character database to Unicode 5.2.  (ticket#351)
6815 * Rename Xapian::Sorter to Xapian::KeyMaker, paving the way for using it to
6816   build collapse keys too.  Xapian::Sorter remains for compatibility (and is
6817   now a subclass of Xapian::KeyMaker) but is deprecated.
6819 * Resolve the inconsistency in MultiValueSorter::add()'s "forward" parameter
6820   versus the "reverse" parameters which the Enquire sorting functions now take
6821   by replacing the class with MultiKeyMaker with a renamed method add_value()
6822   with a "reverse" parameter.  MultiValueSorter remains with the old semantics
6823   for compatibility but is deprecated.  (ticket#359)
6825 * QueryParser: Don't apply spelling correction to wildcarded terms, or to terms
6826   at the end of the query which we expand under FLAG_PARTIAL.
6828 * Add new Error subclass SerialisationError which we throw for serialisation
6829   related errors (which previously mostly threw NetworkError.
6831 * Rename Xapian::SerialisationContext to Xapian::Registry.
6833 * Add DecreasingValueWeightPostingSource class, which reads weights from a
6834   value slot in which a significant range of the values are in decreasing
6835   order.  This functions similarly to ValueWeightPostingSource, but can be much
6836   more efficient.
6838 * Add new Xapian::MatchSpy class:
6840   + This replaces the use of Xapian::MatchDecider as a "matchspy", which is now
6841     deprecated.  The new class only inspects, and can't reject.  It can work
6842     with remote databases, with the results being serialised to return them
6843     across the link.
6845   + Add subclass ValueCountMatchSpy, which counts the occurrences of each value
6846     in a slot in the search results seen (useful for faceted or categorisation
6847     systems).  The results can be grouped into ranges using the NumericRange
6848     and NumericRanges classes, and the score_evenness() function.  This API is
6849     currently experimental.
6851 * Remove default implementation of Weight::clone() which returns NULL.  We
6852   always need clone() to be implemented because it's called for every term
6853   in the query, not just used for the remote backend.
6855 chert backend:
6857 * Rewrite the low level packing and unpacking functions more efficiently.  As
6858   well as being generally faster, the pack functions now take a reference to a
6859   string to append to, which avoids creating a lot of temporary string objects.
6860   Indexing HTML files with omindex is 5-10% faster.  Searching for "The" on
6861   gmane (which results in a lot of unpacking of postings and document lengths)
6862   is about 35% faster.  (ticket#326)
6864 * xapian-compact: Don't report an absent lazy input table as 0 size.
6866 * Fix ChertModifiedPostList to skip added-but-then-deleted-before-flush
6867   documents.  (ticket#392)
6869 * Fix WritableDatabase::get_doclength() to work properly after a call to commit
6870   for the chert backend (ticket#397).
6872 * Fix to work with the metainfo key stored in the latest format of chert
6873   databases.
6875 * Avoid doing pointless work by trying to delete non-existent lists of values
6876   when we're just adding documents.
6878 * Fix code to find the first docid in the next chunk (ticket#399).
6880 * Add support for chert databases without a termlist table (ticket#181).
6881   Currently the only way to create such a database is to create a chert
6882   database and do "rm termlist.*".
6884 flint backend:
6886 * xapian-compact: Don't report an absent lazy input table as 0 size.
6888 remote backend:
6890 * Remote protocol major version has changed to support serialising MatchSpy
6891   objects.
6893 * Fixed not to sometimes read off the end of the returned matches when
6894   searching multiple databases, some of which are remote, and when the primary
6895   ordering is by relevance.
6897 build system:
6899 * This release uses autoconf 2.64 rather than 2.63.  This means configure now
6900   makes use of shell functions, which makes it ~13% smaller, and should also
6901   make it execute faster.
6903 * configure: Send stderr output from ldconfig to config.log.
6905 * Add optional third parameter to XO_LIB_XAPIAN autoconf macro which specifies
6906   the basename for the "xapian-config" script (defaults to "xapian-config" to
6907   give the current behaviour).
6909 * This release uses doxygen 1.5.9 to generate the API documentation.
6911 documentation:
6913 * Minor improvements to the formatting of the collated API documentation.
6915 portability:
6917 * Fix code to compile with Sun's C++ compiler.
6919 * Fix our uuid_unparse_lower() replacement for older libuuid to actually
6920   compile (really fixes ticket#368).
6922 * Fix xapian-config to work with Solaris 10 /bin/sh.  (ticket#405)
6924 debug code:
6926 * Use C++ syntax for NULL with a type in log output.
6928 Xapian-core 1.1.2 (2009-07-23):
6930 This release includes all changes from 1.0.14 which are relevant.
6932 API:
6934 * Move support for a prefix/suffix from NumberValueRangeProcessor to
6935   StringValueRangeProcessor, and change NumberValueRangeProcessor and
6936   DateValueRangeProcessor to inherit from StringValueRangeProcessor so all
6937   three now support a prefix/suffix.  (ticket#220)
6939 * Query: Trim 4 bytes off the internals.  (ticket#280)
6941 * QueryParser: If default_op is OP_NEAR or OP_PHRASE then make the window size
6942   (9 + no_of_terms) to match the default for an explicit NEAR or PHRASE.
6943   (ticket#254)
6945 testsuite:
6947 * Sort out the clash between two different patches to fix leaking file
6948   descriptors when running tests with the remotetcp backend (broken by
6949   changes in 1.1.1).
6951 matcher:
6953 * If the highest weighted document doesn't match all the terms in the query,
6954   its percentage weight is now calculated by simply counting how many weighted
6955   leaf subqueries match it instead of scaling by the proportion of the weight
6956   which matches (which required accessing the termlist for that document).
6957   (ticket#363).
6959 * XOR with a SYNONYM subquery could previously achieve 100% - this has been
6960   fixed.
6962 flint backend:
6964 * Backport the lazy update changes from chert to flint:
6966   WritableDatabase::replace_document() now updates the database lazily in
6967   simple cases - for example, if you just change a document's values and
6968   replace it with the same docid, then the terms and document data aren't
6969   needlessly rewritten.  Caveats: currently we only check if you've looked at
6970   the values/terms/data, not if they've actually been modified, and only keep
6971   track of the last document read.
6973 build system:
6975 * Update to always use C++ forms for ISO C standard headers (ticket#330).
6977 * Fix several places where Xapian::doccount is used instead of
6978   Xapian::termcount, and similar issues.  It's still not possible to make
6979   these types different sizes, but we're now closer to this goal.
6980   (ticket#385).
6982 documentation:
6984 * Note that PostingSource and Weight objects returned by clone() and
6985   unserialise() methods will be deallocated with "delete".
6987 debug code:
6989 * Fix debug logging not to segfault on NULL Query::Internal pointers.
6991 Xapian-core 1.1.1 (2009-06-09):
6993 This release includes all changes from 1.0.13 which are relevant.
6995 API:
6997 * New Query::OP_SYNONYM operator, which matches the same documents as OP_OR,
6998   but attempts to weight as if the all the subqueries were a single term with
6999   their combined wdf, which should give better relevance weights.
7001 * QueryParser's synonym, wildcard, and partial query features now use
7002   the new OP_SYNONYM operator.
7004 * PostingSource: Add new set_maxweight() method to allow subclasses to tell
7005   the matcher that their maximum weight has decreased.  Make get_maxweight()
7006   a non-virtual method of the baseclass which returns the last set maxweight
7007   (which will require updates to most user subclasses. (ticket#340)
7009 * DatabaseReplica: Fix SEGV when calling get_description() on a default
7010   constructed DatabaseReplica.
7012 * Make Query::MatchAll and Query::MatchNothing const since they're immutable.
7013   All the public methods of Query are const, so this should be completely API
7014   compatible.
7016 * Methods returning an end iterator for a ValueIterator now actually return a
7017   proxy object which silently converts to ValueIterator if required.  This
7018   proxy object allows a comparison with an "_end()" method to be optimised
7019   better so that it just ends up comparing the internal member of the iterator
7020   class with NULL (previously a call to ValueIterator's destructor remained).
7021   This should be API compatible, but note that it is definitely now more
7022   efficient just to compare against the return value of the relevant _end()
7023   method than to store the end iterator explicitly.
7025 testsuite:
7027 * Testcase valuestats4 requires transactions, so indicate that and remove the
7028   explicit SKIP for inmemory.
7030 * Testcase changemaxweightsource1 uses ChangeMaxweightPostingSource, which
7031   doesn't work with multi or remote, so mark the test accordingly.
7033 * We've decided that "going back" with skip_to() or check() should have
7034   unspecified behaviour, so stop testing how this case behaves!
7036 matcher:
7038 * Subclass MultiPostList directly from PostList instead of from LeafPostList.
7039   This gets rid of two unused data members per MultiPostList in exchange for
7040   having to define 5 extra "never called" methods, but 4 of these just
7041   tailcall.
7043 * Store termfreqs and reltermfreqs for query terms in a single map rather than
7044   one map for each, which saves is more compact and likely to be faster.
7046 chert backend:
7048 * xapian-check: For chert, check value stats are the correct format and that
7049   the streamed values are consistent with their stats (ticket#277).
7051 * xapian-check: Chert doesn't store termlist entries for documents without
7052   terms, which resulted in us reporting an error when we found document ids in
7053   the doclength "postlist" which were greater than any with an entry in the
7054   termlist.  Instead compare these entries against db.get_last_docid() if we
7055   are checking a whole db and the db can be opened.  If not, suppress this
7056   check.
7058 remote backend:
7060 * When serialising stats, serialise the termfreq and reltermfreq together,
7061   rather than in separate lists.  This gives a smaller serialised form, and
7062   matches these both being stored in the same map now.  This is an incompatible
7063   remote protocol change, so bump the major version to 32.  (ticket#362)
7065 build system:
7067 * Some build failures with --disable-backend-XXX options have been fixed, but
7068   we haven't exhaustively tested all combinations.
7070 * Ship common/win32_uuid.cc and common/win32_uuid.h (ticket#367).
7072 documentation:
7074 * Update PostingSource documentation to describe how init() is called again if
7075   a PostingSource is reused.  Fixes #352.
7077 portability:
7079 * Fixed to build with GCC 4.4.
7081 * Drop support for GCC 2.95.3 and 3.0.x - we now require at least 3.1 as doing
7082   so eliminates some preprocessor conditionals which we aren't able to test
7083   regularly as we don't have easy access to such old GCC versions.  GCC 3.1 is
7084   nearly 7 years old now, and GCC3 didn't get widespread use until later
7085   versions anyway.  If you still need to use GCC < 3.1, Xapian 1.0.x should
7086   build with 2.95.3 or newer.
7088 * Older versions of libuuid don't have uuid_unparse_lower() so probe for it in
7089   configure, and if it isn't present provide an inline version in safeuuid.h
7090   (ticket#368).
7092 * Fixed to build with MSVC (ticket#379).
7094 * Add static_cast<char>() to str(bool) overload to suppress bogus MSVC warning
7095   (ticket#377).
7097 debug code:
7099 * common/debuglog.h: Add missing initialisation of uncaught_exception variable
7100   in a couple of places.
7102 Xapian-core 1.1.0 (2009-04-22):
7104 API:
7106 * All deprecated xapian-core features listed for removal in 1.1.0 have been
7107   removed.  See deprecation.html for details, and suggested updates.
7109 * The Unicode character categorisation functions have been updated from
7110   Unicode 5.0 to 5.1.
7112 * Add NON_SPACING_MARK to is_wordchar() for better tokenisation of languages
7113   which use such marks - for example, Arabic.  This is better than the stop-gap
7114   fix in 1.0 of treating NON_SPACING_MARK as a phrase-generator character
7115   when parsing queries, but it does mean that databases built from data
7116   containing such characters will need to be rebuilt.  (ticket#355)
7118 * The details of how to subclass Xapian::Weight to implement your own
7119   weighting scheme have changed incompatibly to allow user weighting schemes
7120   to have access to the same statistics as built-in schemes (ticket#213)
7121   If you have a existing subclass of Xapian::Weight you'll need to update it.
7123 * New Database methods get_doclength_upper_bound(), get_doclength_lower_bound()
7124   and get_wdf_upper_bound(), primarily intended for allowing weighting schemes
7125   to calculate tighter upper bounds on weights (which BM25Weight and TradWeight
7126   now do) which allows matcher weight-based optimisations to be more effective.
7127   Chert actually tracks doclength bounds and a global (rather than per term)
7128   upper bound on wdf; other backends return much less tight bounds, but these
7129   still lead to better upper bounds on weights.
7131 * Enquire::get_eset() now uses an unmodified of probabilistic formula, and
7132   doesn't return terms which would get a negative weight from it (since that
7133   means they are expected to be harmful not helpful).
7135 * Add Database::close() method, which will release system resources (in
7136   particular, close filehandles) held by a database.  This is particularly
7137   useful when wrapping the API for languages with garbage collection.
7139 * Change Database::positionlist_begin() not to throw exceptions if the term or
7140   document doesn't exist.
7142 * Xapian databases now have a UUID, readable with Database::get_uuid().
7144 * A new Database replication API has been added (currently experimental).
7146 * MSet::get_termfreq() will now fall back to looking up the term frequency in
7147   the database rather than raising an exception if a term wasn't present in
7148   the query.
7150 * Calling RSet:add_document() with argument 0 now throws InvalidArgumentError.
7152 * QueryParser sped up (new version of lemon); queryparsertest runs 2.2% faster.
7154 * Add ValueSetMatchDecider, which is a matchdecider which is intended to be
7155   passed a set of values to look for in documents, and selects documents based
7156   on the presence of those values.
7158 * Add new Xapian::PostingSource class to allow passing custom sources of
7159   postings and weights to the matcher.  Built-in PostingSource subclasses:
7160   FixedWeightPostingSource, ValueMapPostingSource, ValuePostingSource, and
7161   ValueWeightPostingSource.  (Currently experimental).
7163 * Database: Add get_value_freq(), get_value_lower_bound() and
7164   get_value_upper_bound() methods to get statistics about the values stored in
7165   a slot.  Add support for the value statistics methods to chert, inmemory,
7166   multi and remote databases.
7168 * Enquire::get_eset() now faster for large ESet size.
7170 * Xapian::Document objects now have a reduced memory footprint.
7172 * Enquire::set_collapse_key() now allows you to specify a maximum number of
7173   matches with each collapse key to keep (which defaults to 1, giving the
7174   previous behaviour).  Enquire can now report bounds and an estimate of what
7175   the total number of matches would have been if collapsing wasn't in use.
7177 * WritableDatabase::commit() is a new, preferred alias for
7178   WritableDatabase::flush().  (ticket#266)
7180 * Add methods for serialising documents and queries to strings, and
7181   unserialising back from strings.  (ticket#206)
7183 testsuite:
7185 * stemtest: No longer checks environment variables OM_STEMTEST_SKIP_RANDOM,
7186   OM_STEMTEST_LANGUAGES, and OM_STEMTEST_SEED.
7188 * perftest: New performance testsuite.  This is intended to contain intended to
7189   contain potentially time-consuming performance tests, which log output to
7190   an XML file for later analysis.  It's not run by "make check" - use "make
7191   check-perf" to run it.
7193 * apitest: Now runs tests over both flint and chert for multi, remotetcp, and
7194   remoteprog.
7196 * Wait for subprocesses to finish at end of tests with remotetcp backend, to
7197   avoid test failures when the same database is used for the next testcase.
7199 matcher:
7201 * Internally, pass around non-normalised document lengths as Xapian::termcount
7202   (unsigned integer) not Xapian::doclength (double).  This gives a 3% speedup
7203   for 10 term OR queries!
7205 chert backend:
7207 * New development backend.  Use Chert::open() to explicitly create a chert
7208   format database, or set XAPIAN_PREFER_CHERT=1 in the environment to
7209   prefer chert when creating a new database without an explicit type.
7211 * Quartz and Flint stored the document length alongside every posting list
7212   entry.  Chert instead stores a chunked list of all the document lengths
7213   which saves a lot of space, and is a big win for large queries or those
7214   which don't need the document lengths.  This structure is used to
7215   implement much faster iteration (six times faster in a test) over all
7216   document ids (which speeds up queries using unary NOT, e.g. `NOT apples'),
7217   and to test for the existence of documents (instead of checking the record
7218   table for an entry).
7220 * Document values are now stored in a chunked stream for each slot for
7221   efficient access to the same slot in lots of documents.  This makes
7222   operations like sort by value much more efficient.
7224 * WritableDatabase::replace_document() now updates the database lazily in
7225   simple cases - for example, if you just change a document's values and
7226   replace it with the same docid, then the terms and document data aren't
7227   needlessly rewritten.  Caveats: currently we only check if you've looked at
7228   the values/terms/data, not if they've actually been modified, and only keep
7229   track of the last document read.
7231 flint backend:
7233 * If we can't obtain a write lock while trying to create a new database
7234   we now report the lock failure with DatabaseLockError, not
7235   DatabaseOpeningError - it's more useful to know that the lock attempt failed
7236   in this situation.
7238 * Improve reporting of failures to obtain lock due to unexpected errors.
7240 * xapian-check: Don't stop checking a table after an error in certain cases -
7241   instead increment the error counter and try to continue checking from the
7242   next item.
7244 remote backend:
7246 * The remote database protocol major version has been increased, allowing
7247   a significant amount of compatibility code to be removed.  This change means
7248   that new clients won't work with old servers, and old clients won't work
7249   with new servers.  If upgrading a live system, you will need to take this
7250   into account.
7252 * The remote servers now always default to opening a Database and the client
7253   has to send a protocol message to explicitly request write access.  This
7254   allows a single server to support multiple readers and one writer
7255   simultaneously.  (ticket#145)
7257 * Database::get_document() no longer does an unnecessary copy of the document's
7258   values.
7260 * Change serialisation of queries to be more compact and easier to parse.
7262 stub databases:
7264 * Stub databases used to assume that any relative paths were relative to the
7265   current working directory.  They now assume that relative paths are
7266   relative to the directory holding the stub database file.
7268 * Stub database lines which begin with a '#' character are now ignored,
7269   allowing comments in stub database files.
7271 * New "stub directory" database type - this is a directory containing a stub
7272   database file named "XAPIANDB".
7274 * Don't just ignore lines with no spaces in a stub database file.
7276 * Bad lines in a stub file were being ignored after we'd seen a good entry.
7278 * Add new Auto::open_stub() overload which opens a stub database file
7279   containing a single entry as a WritableDatabase.
7281 * Add support for "inmemory" to stub database (which is useful now that stub
7282   databases can be opened for writing).
7284 * A stub database file is now allowed to contain no database entries, which
7285   results in an empty Database object (this avoids user code having to special
7286   case to handle "0 or more" databases).
7288 build system:
7290 * To allow installations of Xapian 1.0 and 1.1 to easily coexist, the library
7291   is now libxapian-1.1; xapian.m4 is now xapian-1.1.m4; headers are now
7292   installed in $prefix/include/xapian-1.1.  If you use XO_LIB_XAPIAN or
7293   xapian-config as we recommend, this should all be transparent.  Also
7294   programs and scripts have a default program suffix to -1.1 unless overridden
7295   using the --program-suffix argument to configure (if you really want no
7296   suffix, "./configure --program-suffix=" will achieve this).
7298 * On Linux and k*bsd-gnu, override libtool's link_all_deplibs_CXX to "no".
7300 * On Linux, override libtool's sys_lib_dlsearch_path_spec to a list generated
7301   in a more reliable way which includes all the default directories.
7303 * configure: --enable-debug and --enable-debug-verbose have been deprecated
7304   since 1.0.0, so remove specific errors pointing to the replacements.
7306 documentation:
7308 * Disable "JAVADOC_AUTOBRIEF" in doxygen configuration since we always try to
7309   write a brief description explicitly, and JAVADOC_AUTOBRIEF causes problems
7310   in some cases.
7312 * docs/deprecation.html: Describe what "experimental" features are, and why
7313   replication and posting sources are currently experimental.
7315 * docs/deprecation.html: Deprecate Stem_get_available_languages() from the
7316   python bindings.
7318 examples:
7320 * Use C++ forms of C headers in examples (ticket#330).
7322 packaging:
7324 * xapian-core.spec: We no longer need to run autoreconf to work around
7325   libtool's incomplete sys_lib_dlsearch_path_spec or to pick up distro-specific
7326   patches for link_all_deplibs.
7328 debug code:
7330 * Report get_description() rather than the pointer value for
7331   Xapian::Query::Internal* parameters to internal functions.
7333 * The debug logging framework has been overhauled.  See HACKING for details
7334   of how it now works.
7336 * Faster integer to string functions inside the library (this is a general
7337   improvement, but will particularly speed up debug logging as that converts a
7338   lot of integers to strings).
7340 Xapian-core 1.0.23 (2011-01-14):
7342 API:
7344 * QueryParser: Avoid a double free if Query construction throws an exception
7345   in a particular case.  Fixes ticket#515.
7347 * QueryParser: Handle NEAR/<offset> and ADJ/<offset> where offset isn't an
7348   integer the same way at the end of the query as in the middle.
7350 * Enquire::get_mset(): Avoid pointlessly trying to allocate lots of memory
7351   if the first document requested is larger than the size of the database.
7353 * Enquire::get_mset(): An empty query now returns an MSet with firstitem set
7354   correctly - previously firstitem was always 0 in this case.
7356 matcher:
7358 * The matcher wasn't recalculating the max possible weight after a subquery of
7359   XOR reached its end.  This caused an assertion failure in debug builds, and
7360   is a missed optimisation opportunity.
7362 tools:
7364 * xapian-compact: Fix access to empty priority_queue while merging synonyms.
7365   This could have caused problems, though we've had no reports of any (the
7366   bug was found with _GLIBCXX_DEBUG).
7368 Xapian-core 1.0.22 (2010-10-03):
7370 API:
7372 * Xapian::Document: Initialise docid to 0 when creating a document from
7373   scratch, as documented.
7375 * Xapian::QueryParser: Allow phrase generators between a probabilistic prefix
7376   and the term itself (e.g. path:/usr/local).
7378 matcher:
7380 * Back out the OP_OR efficiency improvement made in 1.0.21 since this change
7381   slows down some other common cases.  We'll address this fully in 1.2.4, but
7382   that fix is more invasive than we are comfortable with for 1.0.x at this
7383   point.
7385 build system:
7387 * xapian-config: Add --static option which makes other options report values
7388   for static linking.
7390 documentation:
7392 * deprecation.html: Add guidelines for supporting other software.
7394 * Document cases where QueryParser's FLAG_WILDCARD and FLAG_PARTIAL aren't
7395   currently supported.
7397 * Fix documentation for Xapian::timeout type - it holds a time interval in
7398   milliseconds not microseconds (the API docs for the methods which use it
7399   explicitly correctly document that the timeouts are in milliseconds).
7401 portability:
7403 * configure: Don't pass -mtune=generic unless GCC >= 4.2 is in use
7404   (ticket#492).
7406 * configure: Add support for --enable-sse=sse and --enable-sse=sse2 to allow
7407   control of which SSE instructions to use.
7409 * configure: Enable use of SSE maths on x86 by default with Sun's compiler.
7411 * configure: Beef up the test for whether -lm is required and add a special
7412   case to force it to be for Sun's C++ compiler - there's some interaction with
7413   libtool and/or shared objects which means that the previous configure test
7414   didn't think -lm is needed here when it is.
7416 * Fix test harness to build under Microsoft Windows (ticket#495).
7418 * Fix to build on OpenBSD 4.5 with GCC 3.3.5.
7420 * Need to avoid excess precision on m68k when targeting models 68010, 68020,
7421   68030 as well as 68000.
7423 packaging:
7425 * xapian-core.spec: Add cmake related files to RPM packaging.
7427 Xapian-core 1.0.21 (2010-06-18):
7429 API:
7431 * Xapian::Stem now recognises "nb" and "nn" as additional codes for the
7432   Norwegian stemmer.
7434 * Xapian::QueryParser now correctly parses a wildcarded term in between two
7435   other terms (ticket#484).
7437 testsuite:
7439 * Improve test coverage of OP_VALUE_RANGE and MSet::get_percent().
7441 matcher:
7443 * OP_OR could skip a matching document if it decayed to OP_AND or OP_AND_MAYBE
7444   during the match in some cases.  Fixes ticket#476.
7446 * OP_XOR with non-leaf subqueries could skip matching documents in some cases,
7447   and OP_XOR of three or more sub-queries could return incorrect weights.
7448   Fixes ticket#475.
7450 * OP_OR is now more efficient if a subquery is potentially expensive (e.g.
7451   ValueRangePostList, OP_NEAR, OP_PHRASE).  A 10-fold speed-up with
7452   ValueRangePostList has been observed.
7454 flint backend:
7456 * When iterating a table, if the table changes underneath we could end up
7457   returning the same entry twice.  (Debian#579951)
7459 * A cancelled transaction (or a failing operation implicitly cancelling
7460   pending changes) now marks the tables as unmodified, which fixes an exception
7461   trying to read block 0 if one of the tables is empty on disk.
7463 quartz backend:
7465 * When iterating a table, if the table changes underneath we could end up
7466   returning the same entry twice.  (Debian#579951)
7468 remote backend:
7470 * When daemonising, read the max fd to close with sysconf() instead of using
7471   a hardcoded value of 256, and work even if stdin and stdout have been closed.
7473 build system:
7475 * Install files to make Xapian easier to use with cmake.
7477 documentation:
7479 * Update the list of languages that the Xapian::Stem constructor recognises.
7481 * Assorted minor improvements to the collated API documentation.
7483 portability:
7485 * On x86 processors, Xapian now defaults to using SSE2 FP instructions.  This
7486   avoids issues with excess precision and it a bit faster too.  If you need
7487   to support processors without SSE2 (this means pre-Pentium4 for Intel) then
7488   configure with --disable-sse.  (ticket#387)
7490 * Fix warning when compiling for mingw with GCC 4.2.1.
7492 * Remove mutable from a couple of reference class members - mutable doesn't
7493   make sense for a reference and some compilers warn about it.
7495 Xapian-core 1.0.20 (2010-04-27):
7497 API:
7499 * MSet: Fix incorrect values reported by get_matches_estimated(),
7500   get_matches_lower_bound(), and get_matches_upper_bound() in certain cases
7501   when sorting and collapsing (ticket#464).
7503 documentation:
7505 * deprecation.html: Note how to disable deprecation warnings. (ticket#393)
7507 examples:
7509 * delve: Add -a option to list all terms in a database.
7511 * delve: -d and -V command line options now report out of range and invalid
7512   numbers.
7514 portability:
7516 * The getopt warning fix for Cygwin in 1.0.19 caused build failures on Mac OS X
7517   (and probably some other platforms with non-GNU getopt implementations), so
7518   replace with a fix which is only enabled for Cygwin. (ticket#469)
7520 Xapian-core 1.0.19 (2010-04-15):
7522 API:
7524 * QueryParser: Fix leak if Xapian::Database throws an exception during parsing
7525   (ticket#462).
7527 testsuite:
7529 * Explicitly flush after indexing for quartz and flint, so we see any
7530   exceptions from the flush (the implicit flush from the destructor swallows
7531   any exceptions).
7533 * apitest: Add databasemodified1 testcase to provide some test coverage for
7534   DatabaseModifiedError.
7536 flint backend:
7538 * When updating a document, rather than decoding the old positions, comparing
7539   with the new, and then encoding the new if different, we now just encode the
7540   new and then compare the encoded forms.  (ticket#428)
7542 * Avoid trying to delete the document positions when we know there aren't any.
7544 * Fix memory leak if Database::allterms_begin() throws an exception
7545   (ticket#462).
7547 * xapian-check: Report document id for document length mismatch.
7549 * Fix potential issues with iterators over a WritableDatabase which is modified
7550   during iteration.  No problems have actually been observed with flint, only
7551   in 1.1.4 with chert in cases which don't occur in flint, but it seems likely
7552   the issue can manifest for flint in other situations.  Fixes ticket#455.
7554 * Initialise zlib z_stream structure members zalloc, zfree, and opaque with
7555   Z_NULL rather than 0 cast to the appropriate type, as that's what the zlib
7556   documentation says to do.  Add missing initialisation of opaque for the
7557   inflate z_stream which the zlib docs say is needed (reading the zlib code,
7558   this isn't true for current versions, so this improves robustness rather
7559   than fixing an observable bug).
7561 * Don't memcpy() a block to itself - it's a waste of effort, and (probably)
7562   undefined behaviour (as a block overlaps itself).
7564 quartz backend:
7566 * Fix potential issues with iterators over a WritableDatabase which is modified
7567   during iteration.  No problems have actually been observed with quartz, only
7568   in 1.1.4 with chert in cases which don't occur in quartz, but it seems likely
7569   the issue can manifest for quartz in other situations.  Fixes ticket#455.
7571 * Don't memcpy() a block to itself - it's a waste of effort, and (probably)
7572   undefined behaviour (as a block overlaps itself).
7574 build system:
7576 * Force -fno-strict-aliasing for GCC 4.2 to avoid bad code being generated due
7577   to a bug in that compiler version.  Fixes ticket#449.  This issue hasn't been
7578   observed to affect Xapian 1.0.x, but it seems prudent to backport the fix.
7580 documentation:
7582 * INSTALL: Correct description of --enable-assertions.  It does NOT enable
7583   debugging symbols, and shouldn't control checks on bad data passed to API
7584   calls (if it does anywhere, that's a bug).  Note that Xapian will run more
7585   slowly with assertions on.
7587 * spelling.html:
7589   + Add section on indexing.
7591   + Add a note about removing automatically added spelling dictionary entries.
7593   + Move the "algorithm" section to the end, as it is really just background
7594     information for the curious.
7596 * include/xapian/queryparser.h: Document the possible exception messages from
7597   QueryParser::parse_query().
7599 * include/xapian/termgenerator.h: Note how TermGenerator handles stopwords.
7601 examples:
7603 * delve: Display the lastdocid value when displaying general database
7604   statistics.
7606 * simpleindex: Explicitly call flush() on the database, as that is good
7607   practice (since you see any exceptions).
7609 portability:
7611 * Fix compilation failure in testsuite on OpenBSD, introduced by new regression
7612   test in 1.0.18.  Fixes ticket#458.
7614 * Fix getopt-related warning on Cygwin.
7616 Xapian-core 1.0.18 (2009-02-14):
7618 API:
7620 * Document: Add new add_boolean_term() method, which is an alias for add_term()
7621   with wdfinc=0.
7623 * QueryParser:
7625   + Add support for quoting boolean terms so they can contain arbitrary
7626     characters (partly addresses ticket#128).
7628   + Add ENCLOSING_MARK and COMBINING_SPACING_MARK categories, plus several
7629     zero-width space characters, as phrase generators.  This mirrors a better
7630     fix in 1.1.4, but without losing compatibility with existing databases.
7632   + Fix handling of an explicit AND before a hated term (foo AND -bar).
7633     (ticket#447)
7635 * TermIterator: Only include trailing '+' or '#' on a term if it isn't followed
7636   by a word character (makes more sense and matches QueryParser's behaviour).
7637   (ticket#446)
7639 * Database: Fix many methods to behave better on a database with no
7640   subdatabases, such as is constructed by Database().  Fixes ticket#415.
7642 testsuite:
7644 * Add test coverage for xapian-compact, and improve coverage for
7645   WritableDatabase::replace_document().
7647 * apitest: Rename matchfunctor<n> to matchdecider<n> to match current
7648   terminology.
7650 flint backend:
7652 * When updating documents, don't update posting entries which haven't changed.
7653   Largely fixes ticket #250.
7655 * If the number of entries in the position table happened to be 4294967296 or
7656   an exact multiple, Xapian would ignore positional data for that table when
7657   running queries, and xapian-compact wouldn't copy its contents.
7659 * Iterating all the terms in the database with a prefix is now slightly more
7660   efficient.
7662 * Fix locking code to work if stdin and/or stdout have been closed.
7664 * If a document is replaced with itself unmodified, we no longer increase the
7665   automatic flush counter.
7667 * When iterating a posting list modified since the last flush(), the reported
7668   wdf is now correct (previously it was too high by its old value).
7670 * Replacing a document deleted since the last flush failed to update the
7671   collection frequency and wdf, and caused an assertion failure when assertions
7672   were enabled.
7674 * WritableDatabase::replace_document() didn't always remove old positional
7675   data (the only effect is that the position table was bloated by unwanted
7676   entries).
7678 * xapian-inspect:
7680   + New "until" command which shows entries until a specified key is reached.
7682   + New "open" command which allows easy switching between tables.
7684 * xapian-compact: Fix typos in --help output.
7686 quartz backend:
7688 * Replacing a document deleted since the last flush failed to update the
7689   collection frequency and wdf, and caused an assertion failure when assertions
7690   were enabled.
7692 * WritableDatabase::replace_document() didn't always remove old positional
7693   data (the only effect is that the position table was bloated by unwanted
7694   entries).
7696 remote backend:
7698 * Throw UnimplementedError if a MatchDecider is used with the remote backend.
7699   Previously Xapian returned incorrect results in this case.
7701 build system:
7703 * configure: With --enable-maintainer-mode, enable -Werror for GCC >= 4.1
7704   rather than >= 4.0 as Apple's GCC 4.0 gives bogus uninitialised variable
7705   warnings.
7707 documentation:
7709 * The API documentation now includes Xapian::Error and subclasses, and doesn't
7710   mention Xapian::Query::Internal.
7712 * Make clear in the Xapian::Document API documentation that this class is a
7713   lazy handle and discuss the issues this can cause.
7715 * INSTALL: Improve text about zlib dependency.
7717 * HACKING: Add details of our licensing policy for accepting patches.
7719 examples:
7721 * quest: If no database is specified, still parse the query and report
7722   Query::get_description() to provide an easy way to check how a query parses.
7724 portability:
7726 * Fix GCC 4.2 warning.
7728 xapian-core 1.0.17 (2009-11-18):
7730 API:
7732 * QueryParser:
7734   + Fix handling of a group of two or more terms which are all stopwords which
7735     notably caused issues when default_op was OP_AND, but could probably
7736     manifest in other cases too.  Fixes ticket#406.
7738   + Fix interaction of FLAG_PARTIAL and FLAG_SYNONYM.  (ticket#407)
7740 * Database: A database created via the default constructor no longer causes a
7741   segfault when the methods get_metadata() or metadata_keys_begin() are called.
7743 flint backend:
7745 * Don't try to close the fd one more than the maximum allowable when locking
7746   the database.  Harmless, except it causes a warning when running under
7747   valgrind.  (ticket#408)
7749 remote backend:
7751 * Xapian::Sorter isn't supported with the remote backend so throw
7752   UnimplementedError rather than giving incorrect results.  (ticket#384)
7754 * Fix potential reading off the end of the MSet which is returned internally
7755   by the remote server.
7757 documentation:
7759 * Various documentation comment improvements for the Database class.
7761 examples:
7763 * examples/quest.cc: Tighten up the type of the error we catch to detect an
7764   unknown stemming language.
7766 portability:
7768 * xapian-config: Need to quote ^ for Solaris /bin/sh.
7770 * configure: Actually use any flags we determine are needed to switch the
7771   compiler to proper ANSI C++ mode, when building xapian-core - this stopped
7772   working in 1.0.12, breaking support for HP's aCC, Compaq's cxx, Sun's CC, and
7773   SGI's CC.
7775 Xapian-core 1.0.16 (2009-09-10):
7777 flint backend:
7779 * Fix a typo which stopped this fix in 1.0.12 from working (ticket #398):
7781   If we fail to get the lock after we spawn the child lock process (the common
7782   case is because the database is already open for writing) then we now clean
7783   up the child process properly.
7785 documentation:
7787 * Improve API documentation of QueryParser::set_default_op() and
7788   QueryParser::get_default_op().
7790 portability:
7792 * Fix build failure on Mac OS X 10.6.
7794 Xapian-core 1.0.15 (2009-08-26):
7796 testsuite:
7798 * Fix the test harness not to report heaps of bogus errors when using valgrind
7799   3.5.0.
7801 flint backend:
7803 * Backport the lazy update changes from 1.1.2:
7805   WritableDatabase::replace_document() now updates the database lazily in
7806   simple cases - for example, if you just change a document's values and
7807   replace it with the same docid, then the terms and document data aren't
7808   needlessly rewritten.  Caveats: currently we only check if you've looked at
7809   the values/terms/data, not if they've actually been modified, and only keep
7810   track of the last document read.
7812 * Fix PostingIterator::skip_to() on an unflushed WritableDatabase to skip
7813   documents which were added and deleted since the last flush.  (ticket#392)
7815 documentation:
7817 * Overhaul the doxygen options we use and tweak various documentation comments
7818   to improve the generated API documentation.
7820 * Explicitly document that an empty prefix argument to
7821   QueryParser::add_prefix() means "no prefix".
7823 * Update the documentation comments for Enable::set_sort_by_value(),
7824   set_sort_by_value_then_relevance(), and set_sort_by_relevance_then_value() to
7825   mention sortable_serialise() as a good way to store numeric values for
7826   sorting.
7828 Xapian-core 1.0.14 (2009-07-21):
7830 API:
7832 * When using more than one ValueRangeProcessor, QueryParser didn't reset the
7833   begin and end strings to ignore any changes made by a ValueRangeProcessor
7834   which returned false, so further ValueRangeProcessors would see any changes
7835   it had made.  This is now fixed, and test coverage improved.
7837 testsuite:
7839 * The test harness code which launches xapian-tcpsrv child processes was
7840   failing to close a file descriptor for each one launched due to a bug in
7841   the code which is meant to track them.  This was causing apitest to fail
7842   on OpenBSD (ticket#382).  Also wait between testcases for any spawned
7843   xapian-tcpsrv processes to exit to avoid spurious failures when a database is
7844   reused by the next testcase.
7846 * tests/runtest.in: Use "ulimit -n" where available to limit the number of
7847   available file descriptors to 64 so we catch file descriptor leaks sooner.
7849 * When measuring CPU time used for scalability tests, we no longer try to
7850   include the CPU time used by child processes, as we can only get that for
7851   child processes which have exited and it's hard to ensure that they have
7852   with the current framework.  Although this means we only tests the
7853   client-side scaling for remote tests, the local backend tests cover most of
7854   the work done by the server part of the remote backend.
7856 * apitest: In testcase topercent2, don't expect max_attained or max_possible to
7857   be exact as rounding errors in different ways of calculating can cause small
7858   variations.  On trunk we already have similar code because the new weighting
7859   scheme stuff gives different bounds in the different cases.  This should fix
7860   testsuite failures seen on some of the Debian and Ubuntu buildds.
7862 * The test harness now always reports the full exception message (was
7863   conditional on --verbose), and output for different exception types and
7864   other causes of failure is now more consistent.
7866 * For scalability tests, the test harness now increases the number of
7867   repetitions until the first run takes more than 0.001 seconds, to avoid
7868   trying to base calculations on a length of time we probably can't reliably
7869   measure to start with.
7871 * Add test coverage for Stem::get_description() for each supported language.
7873 * queryparsertest: Reenable tests which require the inmemory backend to be
7874   enabled by fixing typo XAPIAN_HAS_BACKEND_INMEMORY ->
7875   XAPIAN_HAS_INMEMORY_BACKEND.
7877 flint backend:
7879 * Use F_FULLFSYNC where available (Mac OS X currently) to ensure that changes
7880   have been committed to disk.  (ticket#288)
7882 remote backend:
7884 * Fix handling of percentage weights in various cases when we're searching
7885   multiple remote databases or a mix of local and remote databases.
7887 build system:
7889 * configure: -Wshadow produces false positives with GCC 4.0, so only enable it
7890   for >= 4.1 since we enable -Werror for maintainer-mode builds for GCC >= 4.0.
7892 * configure: Check that we can find the valgrind/memcheck.h header as well as
7893   the valgrind binary.
7895 * Change how snowball generates the data used by its among operation - instead
7896   of using pointers to the strings in struct among, store an offset into a
7897   constant pool, as this reduces the number of relocations by about 2300, which
7898   should decrease the time taken by the dynamic linker when loading the
7899   library.  This also reduces the size of the shared library significantly
7900   (on x86-64 Linux, the stripped shared library is 4% smaller).
7902 Xapian-core 1.0.13 (2009-05-23):
7904 API:
7906 * Xapian::Document no longer ever stores empty values explicitly.  This
7907   wasn't intentional behaviour, and how this case was handled wasn't
7908   documented.  The amended behaviour is consistent with how user metadata
7909   is handled.  This change isn't observable using Document::get_value(),
7910   but can be noticed when iterating with Document::values_begin(), using
7911   Document::values_count(), or trying to delete the value with
7912   Document::remove_value().
7914 testsuite:
7916 * Fix testcase scaleweight4 not to fail on x86 when compiled with -O0.  The
7917   problem was in the testcase code, and was caused by excess precision in
7918   intermediate FP values.
7920 * Testcases which check that operations have the expected O(...) behaviour now
7921   check CPU time instead of wallclock time on most platforms, which should
7922   eliminate occasional failures due to load spikes from other processes.
7923   (ticket#308)
7925 * Fix test failures due to SKIP_TEST_FOR_BACKEND("inmemory") not skipping when
7926   it should due to comparing char * strings with == (on trunk the return value
7927   being tested is std::string rather than const char *).
7929 * Improve test coverage in several corner cases.
7931 * Fix testcase consistency2 to actually be run (fortunately it passes).
7933 * In the generated testcases, call get_description() on the default
7934   constructed object of each class to make sure that works (and doesn't try to
7935   dereference NULL, or fail some assertion, etc).  All currently checked
7936   classes are fine - this is to avoid future regressions or such problems with
7937   new classes.
7939 * In the test coverage build, use "--coverage" instead of "-fprofile-arcs
7940   -ftest-coverage".
7942 * The test harness now has the inmemory backend flagged as supporting
7943   user-specified metadata (apart from iteration over metadata keys).
7945 matcher:
7947 * If a query contains a MatchAll subquery, check for it before checking the
7948   other terms so that the loop which checks how many terms match can exit
7949   early if they all match.
7951 * When an OR or ANY_MAYBE decayed to an AND, we were carefully swapping the
7952   children for maximum efficiency, but the condition was reversed so we were
7953   in fact making things worse.  This was noticed because it was resulting in
7954   the same query running faster when more results were asked for!
7956 * Only build the termname to termfreq and weight map for the first subdatabase
7957   instead of rebuilding it for each one.  Also don't copy this map to return
7958   it.  This should speed up searches a little, especially those over multiple
7959   databases.
7961 * If a submatcher fails but ErrorHandler tells us to continue without it, we
7962   just use a NULL pointer to stand in rather than allocating a special dummy
7963   place-holder object.
7965 * Remove AndPostList, in favour of MultiAndPostList.  AndPostList was only used
7966   as a decay product (by AndMaybePostList and OrPostList), and doesn't appear
7967   to be any faster.  Removing it reduces CPU cache pressure, and is less code
7968   to maintain.
7970 * Call check() instead of skip_to() on the optional branch of AND_MAYBE.
7972 flint backend:
7974 * Fix a bug in TermIterator::skip_to() over metadata keys.
7976 remote backend:
7978 * Fix xapian-tcpsrv --interface option to work on MacOS X (ticket#373).
7980 * Fix typo which caused us to return the docid instead of the maximum weight
7981   a document from a remote match could return!  This could have led to wrong
7982   results when searching multiple databases with the remote backend, but
7983   probably usually didn't matter as with BM25 the weights are generally small
7984   (often all < 1) while docids are inevitably >= 1.
7986 inmemory backend:
7988 * The inmemory backend doesn't support iterating over metadata keys.  Trying
7989   to do so used to give an empty iteration, but has now been fixed to throw
7990   UnimplementedError (and this limitation has now been documented).
7992 build system:
7994 * Remove a lot of unused header inclusions and some unused code which should
7995   make the build faster and slightly smaller.
7997 * Fix to compile under --disable-backend-flint, --disable-backend-remote, and
7998   --disable-backend-inmemory.
8000 * Don't remove any built sources in "make clean" even under
8001   --make-maintainer-mode as that breaks switching a tree away from
8002   maintainer-mode with: make distclean;./configure
8004 * configure: Enable more GCC warnings - "-Woverloaded-virtual" for all
8005   versions, "-Wstrict-null-sentinel" for 4.0+, "-Wlogical-op
8006   -Wmissing-declarations" for 4.3+.  Notably "-Wmissing-declarations" caught
8007   that consistency2 wasn't being run.
8009 * Internally, fix the few places where we pass std::string by value to pass
8010   by const reference instead (except where we need a modifiable copy anyway) as
8011   benchmarking shows that const reference is slightly faster and generates
8012   less code with GCC's reference counted std::string implementation - with a
8013   non-reference counted implementation, const reference should be much faster.
8014   (ticket#140)
8016 documentation:
8018 * INSTALL: We no longer regularly test build with GCC 2.95.4 and we're raising
8019   the minimum GCC version required to 3.1 for Xapian 1.1.x.
8021 * Document what passing maxitems=0 to Enquire::get_mset() does.
8023 * docs/queryparser.html: Add examples of using a prefix on a phrase or
8024   subexpression.
8026 * Correct doxygen comments for user metadata functions:
8027   Database::get_metadata() can't throw UnimplementedError but
8028   WritableDatabase::set_metadata() can.
8030 * Document that Database::metadata_keys_begin() returns an end iterator if the
8031   backend doesn't support metadata.
8033 * HACKING: Update the list of Debian/Ubuntu packages needed for a development
8034   environment.
8036 debug code:
8038 * Fix build with --enable-debug.
8040 * Added some more assertions.
8042 Xapian-core 1.0.12 (2009-04-19):
8044 API:
8046 * WritableDatabase::remove_spelling() now works properly.
8048 * The QueryParser now treats NON_SPACING_MARK Unicode characters as phrase
8049   generators, which improves handling of Arabic.  This is a stop-gap solution
8050   for 1.0.x which will work with existing databases without requiring
8051   reindexing - in 1.1.0, NON_SPACING_MARK will be regarded as part of a word.
8052   (ticket#355)
8054 * Fix undefined behaviour in distribution of OP_NEAR and OP_PHRASE over a
8055   non-leaf subquery (indentified by valgrind on testcase nearsubqueries1).
8056   (ticket#349)
8058 * Enhance distribution of OP_NEAR/OP_PHRASE over non-leaf subqueries to work
8059   when there are multiple non-leaf subqueries (ticket#201).
8061 * Enquire::get_mset() no longer needlessly checks if the documents exist.
8063 * PostingIterator::get_description() output improved visually in some cases.
8065 testsuite:
8067 * Add make targets to assist generating a testsuite code coverage report with
8068   lcov.  See HACKING for details.
8070 * Improved test coverage in a number of places and removed some used code as
8071   shown by lcov's coverage report.
8073 flint backend:
8075 * xapian-compact:
8077   + Now handles databases which contains no documents but have user metadata
8078     (ticket#356).
8080   + Fix test for the total document length overflowing.
8082 * Release the database lock if the database is closed due to an unrecoverable
8083   error during modifications. (ticket#354)
8085 * If we fail to get the lock after we spawn the child lock process (the common
8086   case is because the database is already open for writing) then we now clean
8087   up the child process properly.
8089 build system:
8091 * Overriding CXXFLAGS at make-time (e.g. "make CXXFLAGS=-Os") no longer
8092   overrides any flags configure detected to be required to make the compiler
8093   accept ISO C++ (for GCC, no such flags are required, so this doesn't
8094   change anything).
8096 documentation:
8098 * Update documentation and code comments to reflect that 1.1 will be a
8099   development series, and 1.2 the next release series.
8101 * docs/admin_notes.html: Document the child process used for locking which
8102   exec-s "cat" (ticket #258).
8104 * include/xapian/unicode.h: Fix documentation comment typos.
8106 * include/xapian/matchspy.h: Removed currently unused header to stop doxygen
8107   from generating documentation for it.
8109 Xapian-core 1.0.11 (2009-03-15):
8111 API:
8113 * Enquire::get_mset():
8115   + Now throws UnimplementedError if there's a percentage cutoff and sorting is
8116     primarily by value - this has never been correctly supported and it's
8117     better to warn people than give incorrect results.
8119   + No longer needlessly copies the results internally.
8121   + When searching multiple databases, now recalculates the maximum attainable
8122     weight after each database which may allow it to terminate earlier.
8123     (ticket#336).
8125   + Fix inconsistent percentage scores when sorting primarily by value, except
8126     when a MatchDecider is also being used; document this remaining problem
8127     case.  (ticket#216)
8129 * Enquire::set_sort_by_value() (and similar methods): Rename the wrongly named
8130   "ascending" parameter to "reverse", and note that its value should always be
8131   explicitly given since defaulting to "reverse=true" is confusing and the
8132   default will be deprecated in 1.1.0.  (ticket#311)
8134 * Database::allterms_begin(): Fix memory leak when iterating all terms from
8135   more than one database.
8137 * Query::get_terms_begin(): Don't return "" from the TermIterator (happened
8138   when the query contained or was Query::MatchAll).
8140 * Add QueryParser::FLAG_DEFAULT to make it easier to add flags to those set by
8141   default.
8143 testsuite:
8145 * The testsuite now reports problems detected by valgrind with newer valgrind
8146   versions.  Drop support for running the testsuite under valgrind < 3.3.0
8147   (well over a year old) as this greatly simplifies the configure tests.
8149 * Fix usage message for options which take arguments in --help output from test
8150   programs - "-x=foo" doesn't work, the correct syntax is "-x foo".
8152 * If comparing MSet percentages fails, report the differing percentages if in
8153   verbose mode.
8155 * Add test that backends don't truncate total document length to 32 bits.
8157 * Disable lockfileumask1 (regression testcase added in 1.0.10) on Cygwin and on
8158   OS/2.
8160 flint backend:
8162 * The configure test for pread() and pwrite() got accidentally disabled in
8163   0.8.4 and we've always been using llseek() followed by read() or write()
8164   since then.  The configure test is now fixed, and gives a slight speedup
8165   (3% measured for searching).
8167 * The child process used to implement WritableDatabase locking now changes
8168   directory to / so that it doesn't block unmounting of any partitions and
8169   closes any open file descriptors which aren't relating to locking so that
8170   if those files are closed by our parent and deleted the disk space gets
8171   released right away.
8173 * We now reuse the same zlib zstream structures rather than using a fresh
8174   one for each operation.  This doesn't make a measurable difference in
8175   our own tests on Linux but reportedly is measurably faster on some
8176   systems.  (ticket #325)
8178 quartz backend:
8180 * The pread()/pwrite() fix also speeds up quartz.
8182 remote backend:
8184 * Avoid copying Query::Internal objects needlessly when unserialising Query
8185   objects.
8187 inmemory backend:
8189 * Store the (non-normalised) document lengths as Xapian::termcount (unsigned
8190   int) rather than Xapian::doclength (double) which saves 4 bytes per document.
8192 build system:
8194 * configure: The output of g++ --version changed format (again) with GCC 4.3
8195   which meant configure got "g++" for the version.  Instead use the (hopefully)
8196   more robust technique of using g++ -E to pull out __GNUC__ and
8197   __GNUC_MINOR__.
8199 documentation:
8201 * API documentation:
8203   + WritableDatabase::flush() can't throw DatabaseLockError.
8205   + WritableDatabase's constructor can throw at least DatabaseCorruptError or
8206     DatabaseLockError.
8208   + Document how to get all matches from Enquire::get_mset().
8210   + Other minor improvements.
8212 * docs/sorting.html: Clarify meaning.
8214 portability:
8216 * Fix "#line" directives in generated file queryparser/queryparser_internal.cc
8217   to give a relative path - previously they had a full path when generated by a
8218   VPATH build (as release tarballs are), and this confused GCC 2.95 and
8219   depcomp.
8221 * Fix for compiling with Sun's compiler (untested as we no longer have access
8222   to it).
8224 Xapian-core 1.0.10 (2008-12-23):
8226 API:
8228 * Composing an OP_NEAR query with two non-term subqueries now throws
8229   UnimplementedError instead of AssertionError (in a --enable-assertions build)
8230   or leading to unexpected results (otherwise).  This partly addresses bug#201.
8232 * Using a MultiValueSorter with no values set no longer causes a hang or
8233   segmentation fault (but it is still rather pointless!)
8235 matcher:
8237 * If we're using values for sorting and for another purpose, cache the
8238   Document::Internal object created to get the value for sorting, like we do
8239   between other uses.
8241 flint backend:
8243 * If the disk became full while flushing database changes to disk, the
8244   WritableDatabase object would throw a DatabaseError exception but be left in
8245   an inconsistent state such that further use could lead to the database on
8246   disk ending up in a "corrupt" state (theoretically fixable, but no tool
8247   to fix such a database exists).  Now we try to ensure that the object is
8248   left in a consistent state, but if doing so throws a further exception, we
8249   put the WritableDatabase object in a "closed" state such that further
8250   attempts to use it throw an exception.
8252 * Create the lockfile "flintlock" with permissions 0666 so that the umask is
8253   honoured just like we do for the other files (previously we used 0600).
8254   Previously it wasn't possible to lock a database for update if it was
8255   owned by another user, even if you otherwise had sufficient permissions via
8256   "group" or "other".
8258 * Fix garbled exception message when a base file can't be reread.
8260 quartz backend:
8262 * Fix garbled exception message when a base file can't be reread.
8264 remote backend:
8266 * xapian-tcpsrv and xapian-progsrv now accept -w as a short form of --writable,
8267   as was always intended.
8269 build system:
8271 * This release now uses newer versions of the autotools (autoconf 2.62 ->
8272   2.63; automake 1.10.1 -> 1.10.2).
8274 documentation:
8276 * INSTALL: Add new paragraphs about HP's aCC and IRIX (adapted from footnotes
8277   in PLATFORMS).
8279 * PLATFORMS: HP testdrive has been shut down, so all mark all those machines as
8280   "no longer available".  Update atreus' build report to 1.0.10.
8282 * docs/queryparser.html: Add link to valueranges.html.
8284 examples:
8286 * delve: Add missing "and" to --help output.  Report termfreq and collection
8287   freq for each term we're asked about.
8289 portability:
8291 * Fix to build with GCC 4.4 snapshot.
8293 Xapian-core 1.0.9 (2008-10-31):
8295 API:
8297 * Database::get_spelling_suggestion() is now faster (15% speed up for parsing
8298   queries with FLAG_SPELLING_CORRECTION set in a test on real world data).
8300 * Fix OP_ELITE_SET segmentation fault due to excess floating point precision
8301   on x86 Linux (and possibly other platforms).
8303 * Database::allterms_begin() over multiple databases now gives a TermIterator
8304   with operations O(log(n)) rather than potentially O(n) in the number of
8305   databases.
8307 * Add new Database methods metadata_keys_begin() and metadata_keys_end() to
8308   allow the complete list of metadata in a database to be retrieved (this
8309   API addition is needed so that copydatabase can copy database metadata).
8311 testsuite:
8313 * Remove the cached test databases before running the testsuite.
8315 * apitest: Fix cursordelbug1 to work on Microsoft Windows (bug#301).
8317 * apitest,queryparsertest: Skip tests which fail because the timer granularity
8318   is too coarse to measure how long the test took.  In practice, this is only
8319   an issue on Microsoft Windows (bug#300 and bug#308).
8321 matcher:
8323 * Adjust percent cutoff calculations in the matcher in a way which corresponds
8324   to the change to percentage calculations made in 1.0.7 to allow for excess
8325   precision.
8327 * Query::MatchAll no longer gives match results ranked by increasing document
8328   length.
8330 flint backend:
8332 * xapian-compact: Fix crash while compacting spelling table for a single
8333   database when built with MSVC, and probably other platforms, though Linux
8334   got lucky and happened to work (bug#305).
8336 build system:
8338 * configure: Disable -Wconversion for now - it's not useful for older GCC and
8339   is buggy in GCC 4.3.
8341 * configure: Set -Wstrict-overflow to 1 instead of 5, to avoid unreasonable
8342   warnings under GCC 4.3.
8344 documentation:
8346 * Minor improvements to API documentation, including documenting the
8347   XAPIAN_FLUSH_THRESHOLD environmental variable in WriteableDatabase::flush()
8348   (bug#306).
8350 * valueranges.html: Fix typos in example code, and drop superfluous empty
8351   destructor from ValueRangeProcessor subclass.
8353 * HACKING: Several improvements.
8355 examples:
8357 * copydatabase: Also copy user metadata.
8359 Xapian-core 1.0.8 (2008-09-04):
8361 API:
8363 * Fix output of RSet::get_description
8365 testsuite:
8367 * Report subtotals per backend, rather than per testgroup per backend to make
8368   the output easier to read.
8370 flint backend:
8372 * Fix WritableDatabase::add_document() and replace_document() not to be O(n*n)
8373   in the number of values in the new document.
8375 * Fix handling of a table created lazily after the database has had commits,
8376   and which is then cursored while still in sequential mode.
8378 * Fix failure to remove all the Btree entries in some cases when all the
8379   postings for a term are removed.  (bug#287)
8381 * xapian-inspect: Show the help message on start-up.  Correct the documented
8382   alias for next from ' ' to ''.  Avoid reading outside of input string when it
8383   is empty.  (bug#286)
8385 quartz backend:
8387 * Backport fix from flint for WritableDatabase::add_document() and
8388   replace_document() not to be O(n*n) in the number of values in the new
8389   document.
8391 build system:
8393 * configure: Report bug report URL in --help output.
8395 * xapian-config: Report bug report URL in --help output.
8397 * configure: Fix deprecation error for --enable-debug=full to say to instead
8398   use '--enable-assertions --enable-log' not '--enable-debug --enable-log'.
8400 documentation:
8402 * valueranges.html: Expand on some sections.
8404 examples:
8406 * quest: Fix to catch QueryParserError instead of const char * which
8407   QueryParser threw in Xapian < 1.0.0.
8409 * copydatabase: Use C++ forms of C headers.  Only treat '\' as a directory
8410   separator on platforms where it is.  Update counter every 13 counting up to
8411   the end so that the digits all "rotate" and the counter ends up on the exact
8412   total.
8414 portability:
8416 * Eliminate literal top-bit-set characters in testsuite source code.
8418 Xapian-core 1.0.7 (2008-07-15):
8420 API:
8422 * OP_VALUE_RANGE, OP_VALUE_GE, and OP_VALUE_LE:
8424   + If there were gaps in the document id numbering, these operators could
8425     return document ids which weren't present in the database.  This has been
8426     fixed.
8428   + These operators are now more efficient when there are a lot of "missing"
8429     document ids (bug#270).
8431   + Optimise Query(OP_VALUE_GE, <n>, "") to Query::MatchAll.
8433 * Xapian::QueryParser:
8435   + QueryParser now stops parsing immediately when it hits a syntax error.
8436     This doesn't change behaviour, but does mean failing to parse queries is
8437     now more efficient.
8439   + Cases of O(N*N) behaviour have been fixed.
8441 * Xapian::Stem now recognises "nl" as an alias for "dutch" (debian bug 484458).
8443 * Setting sort by value was being ignored by a Xapian::Enquire object which had
8444   previously had a Xapian::Sorter set (bug#256).
8446 testsuite:
8448 * Improved test coverage in a few places.
8450 matcher:
8452 * When using a MatchDecider, we weren't reducing matches_lower_bound unless
8453   all the potential results were retrieved, which led to the lower bound
8454   being too high in some such cases.
8456 * We now track how many documents were tested by a MatchDecider and how many
8457   of those it rejected, and set matches_estimated based on this rate.  Also,
8458   matches_upper_bound is reduced by the number of rejected documents.
8460 * Fixed matches_upper_bound in some cases when collapsing and using a
8461   MatchDecider.
8463 * Fixed matches_lower_bound when collapsing and using a percentage cutoff.
8465 * When using two or more of a MatchDecider, collapsing, or a percentage
8466   cutoff, we now only round the scaled estimate once, and we also round it to
8467   the nearest rather than always rounding down.  Hopefully this should
8468   improve the estimate a little in such cases.
8470 * Fix problem on x86 with the top match getting 99% rather than 100% (caused
8471   by excess precision in an intermediate value).
8473 flint backend:
8475 * If Database::reopen() is called and the database revision on disk hasn't
8476   changed, then do as little work as possible.  Even if it has changed, don't
8477   bother to recheck the version file (bug#261).
8479 * xapian-compact:
8481   + Fix check for user metadata key to not match other key types we may add in
8482     the future.  When compacting, we can't assume how we should handle them.
8484   + If the same user metadata key is present in more than one source database
8485     with different tag values, issue a warning and copy an arbitrary tag value.
8487   + Fix potential SEGV when compacting database(s) with user metadata but no
8488     postings.
8490   + In error message, refer to "iamflint" as the "version file", not the
8491     "meta file".
8493 * xapian-inspect:
8495   + Print top-bit-set characters as escaped hex forms as they often won't be
8496     valid UTF-8 sequences.
8498   + If we're passed a database directory rather than a single table, issue a
8499     special error message since this is an obvious mistake for users to make.
8501 * Fix cursor handling for a modified table which has previously only had
8502   sequential updates which usually manifested as zlib errors (bug#259).
8504 quartz backend:
8506 * Fix cursor handling for a modified table which has previously only had
8507   sequential updates which usually manifested as incorrect data being returned
8508   (bug#259).
8510 * Calling skip_to() as the first operation on an all-documents PostingIterator
8511   now works correctly.
8513 remote backend:
8515 * Improve performance of matches with multiple databases at least one of which
8516   is remote, and when the top hit is from a remote database (bug#279).
8518 * When remote protocol version doesn't match, the error message displayed
8519   now shows the minor version number supplied by the server correctly.
8521 * We now wait for the connection to close after sending MSG_SHUTDOWN for a
8522   WritableDatabase, which ensures that changes have been written to disk
8523   and the lock released before the WritableDatabase destructor returns
8524   (as is the case with a local database).
8526 * We no longer ever send MSG_SHUTDOWN for a read-only Database - just closing
8527   the connection is enough (and is protocol compatible).
8529 inmemory backend:
8531 * Fix bug which resulted in the values not being stored correctly when
8532   replacing an existing document, or if there are gaps in the document id
8533   numbering.
8535 build system:
8537 * This release now uses newer versions of the autotools (autoconf 2.61 ->
8538   2.62; automake 1.10 -> 1.10.1; libtool 1.5.24 -> 1.5.26).  The newer
8539   autoconf reportedly results in a faster configure script, and warns about
8540   use of unrecognised configure options.
8542 * Fix configure to recognise --enable-log=profile and fix build problems when
8543   this is enabled.
8545 * "make up" in the "tests" subdirectory now does "make" in the top-level.
8547 * Fix "make distcheck" by using dist-hook to install generated files from
8548   either srcdir or builddir, with the appropriate dependency to generate them
8549   automatically in maintainer mode builds.
8551 documentation:
8553 * intro_ir.html: Improve wording a bit.
8555 * The documentation now links to trac instead of bugzilla.  For links to the
8556   main website, we now prefer xapian.org to www.xapian.org.
8558 * Doxygen-generated API documentation:
8560   + Improved documentation in several places.
8562   + The helper macro XAPIAN_VISIBILITY_DEFAULT no longer appears in the output.
8564   + Header and directory relationship graphs are no longer generated as they
8565     aren't actually informative here.
8567 * HACKING: Numerous updates and improvements.
8569 examples:
8571 * quest: Output get_description() of the parsed query.
8573 portability:
8575 * Fix build with GCC 2.95.3.
8577 * Fix build with GCC 4.3.
8579 * Newer libtool features improved support for Mac OS X Leopard and added
8580   support for AIX 6.1.
8582 debug code:
8584 * Database::get_spelling_suggestion() now debug logs with category APICALL
8585   rather than SPELLING, for consistency with all other API methods.
8587 * Added APICALL logging to a few Database methods which didn't have it.
8589 * Remove debug log tracing from get_description() methods since logging for
8590   other methods calls get_description() methods on parameters, so logging these
8591   calls just makes for more confusing debug logs.  A get_description() method
8592   should have no side-effects so it's not very interesting even when explicitly
8593   called by the user.
8595 Xapian-core 1.0.6 (2008-03-17):
8597 API:
8599 * Add new query operators OP_VALUE_LE and OP_VALUE_GE which perform "single
8600   ended" range checks, and a corresponding new Query constructor.
8602 * Add Unicode::toupper() to complement Unicode::tolower().
8604 * Xapian::Stem has been further optimised - stemtest now runs ~2.5% faster.
8606 testsuite:
8608 * tests/runtest: Fixed to handle test programs with a ".exe" extension.
8610 * tests/queryparsertest: Add a couple more testcases which already work to
8611   improve test coverage.
8613 * tests/apitest: Add caseconvert1 testcase to test Unicode::tolower() and
8614   Unicode::toupper().
8616 flint backend:
8618 * xapian-check: Fix not to report an error for a database containing no
8619   postings but some user metadata.
8621 * Update the base files atomically to avoid problems with reading processes
8622   finding partially written ones.
8624 * Create lazy tables with the correct revision to avoid producing a database
8625   which we later report as "corrupt" (bug#232).
8627 * xapian-compact: Fix compaction for databases which contain user metadata
8628   keys.
8630 quartz backend:
8632 * Update the base files atomically to avoid problems with reading processes
8633   finding partially written ones.
8635 remote backend:
8637 * The addition of OP_VALUE_LE and OP_VALUE_GE required an update to the Query
8638   serialisation, which required a minor remote protocol version bump.
8640 * Fix to actually set the writing half as the connection as non-blocking when
8641   a timeout is specified.  This would have prevented timeouts from operating
8642   correctly in some situations.
8644 build system:
8646 * configure: GCC warning flag overhaul:  Stop passing "-Wno-multichar" since
8647   any multi-character character literal is bound to be a typo (I believe we
8648   were only passing it after misinterpreting its sense!)  Pass
8649   "-Wformat-security", and "-Wconversion" for all GCC versions.  Add
8650   "-Winit-self" and "-Wstrict-overflow=5" for GCC >= 4.2.  The latter might
8651   prove too aggressive, but seems reasonable so far.  Fix some minor niggles
8652   revealed by "-Wconversion" and "-Wstrict-overflow=5".
8654 * Add XAPIAN_NORETURN() annotations to functions and non-virtual methods which
8655   don't return.
8657 documentation:
8659 * docs/intro_ir.html: Briefly mention how pure boolean retrieval is supported.
8661 * docs/valueranges.html: Fix example of using multiple VRPs to come out as a
8662   "program listing".
8664 * include/xapian/queryparser.h: Fix incorrect example in doccomment.
8666 * docs/quickstart.html: Remove information covered by INSTALL since
8667   there's no good reason to repeat it and two copies just risks one
8668   getting out of date (as has happened here!)
8670 * docs/quickstart.html: Fix very out of date reference to MSet::items
8671   (bug#237).
8673 * PLATFORMS: Remove reports for 0.8.x as they're too old to be interesting.
8674   Separate out 0.9.x reports.  Add Solaris 9 and 10 success reports from James
8675   Aylett.  Update from Debian buildd logs.
8677 portability:
8679 * Now builds on OS/2, thanks to a patch by Yuri Dario.
8681 * Fix testsuite to build on mingw (broken by changes in 1.0.5).
8683 debug code:
8685 * Fix --enable-assertions build, broken by changes in 1.0.5.
8687 Xapian-core 1.0.5 (2007-12-21):
8689 API:
8691 * More sophisticated sorting of results is now possible by defining a
8692   functor subclassing Xapian::Sorter (bug#100).
8694 * Xapian::Enquire now provides a public copy constructor and assignment
8695   operator (bug#219).
8697 * Xapian::Document::values_begin() didn't ensure that values had been read
8698   when working on a Document read from a database.  However, values_end() did
8699   (and so did values_count()) so this wasn't generally a problem in practice.
8701 * Xapian::PostingIterator::skip_to() now works correctly when running over
8702   multiple databases.
8704 * Xapian::Database::postlist_begin() no longer adds a "MultiPostList" wrapper
8705   for the common case when there's only one subdatabase.
8707 * Xapian::TradWeight now avoids division by zero in the (rare) situation of the
8708   average document length being zero (which can only happen if all documents
8709   are empty or only have terms with wdf 0).
8711 * Calling Xapian::WritableDatabase methods when we don't have exactly one
8712   subdatabase now throws InvalidOperationError.
8714 testsuite:
8716 * apitest:
8718   + Testcases now describe the conditions they need to run, and are
8719     automatically collated by a Perl script.  This makes it significantly
8720     easier to add a new testcase.
8722   + The test harness's "BackendManager" has been overhauled to allow
8723     cleaner implementations of testcases which are currently hard to
8724     write cleanly, and to make it easier to add new backend settings.
8726   + Add a "multi" backend setting which runs suitable tests over two
8727     subdatabases combined.  There's a corresponding new make target
8728     "check-multi".
8730   + Add more feature tests of document values.
8732   + sortrel1 now runs for inmemory too.
8734   + Add simple feature test for TradWeight being used to run a query.
8736   + Fix spell3 to work on Microsoft Windows (bug#177).
8738   + API classes are now tested to check they have copy constructors and
8739     assignment operators, and also that most have a default constructor.
8741   + quartztest testcases adddoc2 and adddoc3 have been reworked as apitest
8742     testcases adddoc5 and adddoc6, which run for other backends.
8744   + stubdb1 now explicitly creates the database it needs - generally this
8745     bug didn't manifest because an earlier test has already created it.
8747 * queryparsertest: Add feature tests to check that ':' is being inserted
8748   between prefix and term when it should be.
8750 * Fix extracting of valgrind error messages in the test harness.
8752 * tests/valgrind.supp: Add more variants of the zlib suppressions.
8754 matcher:
8756 * Xapian::Enquire: When the "first" parameter to get_mset() is non-zero, avoid
8757   copying all the wanted items after performing the match.
8759 * Fix bug in handling a pure boolean match over more than one database under
8760   set_docid_order(ASCENDING) - we used to exit early which isn't correct.
8762 * When collapsing on a value, give a better lower bound on the number of
8763   matches by keeping track of the number of empty collapse values seen.
8765 * Xapian::BM25Weight: Fix bug when k2 is non-zero: a non-initialised value
8766   influenced the weight calculations.  By default k2 is zero, so this bug
8767   probably won't have affected most users.
8769 * The mechanism used to collate term statistics across multiple databases has
8770   been greatly simplified (bug#45).
8772 flint backend:
8774 * xapian-check:
8776   + Update to handle flint databases produced by Xapian 1.0.3 and later.
8778   + Fix not to go into an infinite loop if certain checks fail.
8780 quartz backend:
8782 * quartzcompact: Fix equality testing of C strings to use strcmp() rather than
8783   '=='!  In practice, using '==' often gives the desired effect due to pooling
8784   of constant strings, but this may have resulted in a bug on some platforms.
8786 remote backend:
8788 * If we're doing a match with only one database which is remote then just
8789   return the unserialised MSet from the remote match.  This requires an
8790   update to the MSet serialisation, which requires a minor remote protocol
8791   version bump.
8793 build system:
8795 * XO_LIB_XAPIAN now hooks LT_INIT as well as AC_PROG_LIBTOOL and
8796   AM_PROG_LIBTOOL.
8798 * Distribute preautoreconf, dir_contents, docs/dir_contents and
8799   tests/dir_contents.
8801 * Fix preautoreconf to correctly handle all the sources passed to doxygen to
8802   create the collated internal source documentation, and to work in a VPATH
8803   build.
8805 documentation:
8807 * sorting.html: New document on the topic of sorting match results.
8809 * HACKING,admin_notes.html,bm25.html,glossary.html,intro_ir.html,overview.html,
8810   quickstart.html,scalability.html,termgenerator,html,synonyms.html: Assorted
8811   minor improvements.
8813 * valueranges.html: State explicitly that Xapian::sortable_serialise() is used
8814   to encode values at index time, and give an example of how it is called.
8816 * API documentation:
8818  + Clarify get_wdf() versus get_termfreq().
8820  + We now use pngcrush to reduce the size of PNG files in the HTML version.
8822  + The HTML version no longer includes various intermediate files which doxygen
8823    generates.
8825  + Hide the v102 namespace from Doxygen as it isn't user visible.
8827  + Stop describing get_description() as an "Introspection method", as this
8828    doesn't help to explain what it does, and get_description() doesn't really
8829    fall under common formal definitions of "introspection".
8831 * index.html: Add a list of documents on particular topics and include links to
8832   previously unlinked-to documents.  Weed down the top navigation bar which had
8833   grown to unwieldy length.
8835 * PLATFORMS: Update for Debian buildds.
8837 * Improve documentation comment for Document::termlist_count().
8839 * admin_notes.html: Note that this document is up-to-date for 1.0.5.
8841 * INSTALL: zlib 1.2.0 apparently fixes a memory leak in deflateInit2(), which
8842   we use, so that's another reason to prefer 1.2.x.
8844 portability:
8846 * Add explicit includes of C headers needed to build with the latest snapshots
8847   of GCC 4.3.  Fix new warnings.
8849 * xapian-config: On platforms which we know don't need explicit dependencies,
8850   --ltlibs now gives the same output as --libs.
8852 * The minimum supported GCC version is now 2.95.3 (rather than 2.95) as 2.95.3
8853   added support for '#include <sstream>' which means we no longer need to
8854   maintain our own version.
8856 * Fix build with SGI's compiler on IRIX.
8858 * Fix or suppress some MSVC warnings.
8860 debug code:
8862 * Remove incorrect assertion in MultiAndPostList (bug#209).
8864 * Fix build when configured with "--enable-log --disable-assertions".
8866 Xapian-core 1.0.4 (2007-10-30):
8868 API:
8870 * Query:
8872   + Add OP_SCALE_WEIGHT operator (and a corresponding constructor which
8873     takes a single subquery and a parameter of type "double").  This
8874     multiplies the weights from the subquery by the parameter, allowing
8875     adjustment of the importance of parts of the query tree.
8877   + Deprecate the essentially useless constructor Query(Query::op, Query).
8879 * QueryParser:
8881   + A field prefix can now be set to expand to more than one term prefix.
8882     Similarly, multiple term prefixes can now be applied by default.  This is
8883     done by calling QueryParser::add_boolean_prefix() or
8884     QueryParser::add_prefix() more than once with the same field name but a
8885     different term prefix (previously subsequent calls with the same field name
8886     had no effect).
8888   + Trying to set the same field as probabilistic and boolean now throws
8889     InvalidOperationError.
8891   + Fix parsing of `term1 site:example.org term2', broken by changes in 1.0.2.
8893   + Drop special treatment for unmatched ')' at the start of the query, as it
8894     seems rather arbitrary and not particularly useful and was causing us to
8895     parse `(site:example.org) -term' incorrectly.
8897   + The QueryParser now generates pure boolean Query objects for strings such
8898     as `site:example.org' by applying OP_SCALE_WEIGHT with a factor of 0.0.
8900   + Fix handling of `"quoted phrase" +term' and `"quoted phrase" -term'.
8902   + Fix handling of `site:example.org -term'.
8904   + Fix problem with spelling correction of hyphenated terms (or other terms
8905     joined with phrase generators): the position of the start of the term
8906     wasn't being reset for the second term in the generated phrase, resulting
8907     in out of bounds errors when substituting the new value in the corrected
8908     query string.
8910   + The parser stack is now a std::vector<> rather than a fixed size, so it
8911     will typically use less memory, and can't hit the fixed limit.
8913   + Fix handling of STEM_ALL and update the documentation comment for
8914     QueryParser::set_stemming_strategy() to explain how it works clearly.
8916 * PostingIterator: positionlist_begin() and get_wdf() should now always
8917   throw InvalidOperationError where they aren't meaningful (before in some
8918   cases UnimplementedError was thrown).
8920 testsuite:
8922 * Add tests for new features.
8924 * Add another valgrind suppression for a slightly different error from zlib
8925   in Ubuntu gutsy.
8927 * Remove quartztest's test_postlist1 and test_postlist2, replacing the coverage
8928   lost by extending and adding tests which work with other backends as well.
8930 * If a test throws a subclass of std::exception, the test harness now
8931   reports the class name and the extra information returned by std::exception's
8932   what() method.
8934 matcher:
8936 * Several performance improvements have been made, mainly to the handling
8937   of OP_AND and related operations (OP_FILTER, OP_NEAR, and OP_PHRASE).
8938   In combination, these are likely to speed up searching significantly
8939   for most users - in tests on real world data we've seen savings of 15-55%
8940   in search times).  These improvements are:
8942   + OP_AND of 3 or more sub-queries is now processed more efficiently.
8944   + Sub-queries from adjacent OP_AND, OP_FILTER, OP_NEAR, and OP_PHRASE are now
8945     combined into a single multi-way OP_AND operation, and the filters which
8946     implement the near/phrase restrictions are hoisted above this so they need
8947     to check fewer documents (bug#23).
8949   + If an OP_OR or OP_AND_MAYBE decays to OP_AND, we now ensure that the less
8950     frequent sub-query is on the left, which OP_AND is optimised to expect.
8952 * When the Enquire::get_mset() parameter checkatleast is set, and we're sorting
8953   by relevance with forward ordering by docid, and the query is pure boolean,
8954   the matcher was deciding it was done before the checkatleast requirement was
8955   satisfied.  Then the adjustments made to the estimated and max statistics
8956   based on checkatleast meant the results claimed there were exactly msize
8957   results.  This bug has now been fixed.
8959 * Queries involving an OP_VALUE_RANGE filter now run around 3.5 times faster
8960   (bug#164).
8962 * The calculations behind MSet::get_matches_estimated() were always rounding
8963   down fractions, but now round to the nearest integer.  Due to cumulative
8964   rounding, this could mean that the estimate is now a few documents higher in
8965   some cases (and hopefully a better estimate).
8967 * Implement explicit swap() methods for internal classes MSetItem and ESetItem
8968   which should make the final sort of the MSet and ESet a little more
8969   efficient.
8971 flint backend:
8973 * Fixed a bug introduced in 1.0.3 - trying to open a flint database for reading
8974   no longer fails if it isn't writable.
8976 * We no longer use member function pointers in the Btree implementation which
8977   seems to speed up searching a little.
8979 remote backend:
8981 * The remote protocol minor version has been increased (to accommodate
8982   OP_SCALE_WEIGHT).  If you are upgrading a live system which uses the
8983   remote backend, upgrade the servers before the clients.
8985 build system:
8987 * Added macro machinery to allow branch prediction hints to be specified and
8988   used by compilers which support this (current GCC and Intel C++).
8990 * In a developer build, look for rst2html.py if rst2html isn't found as some
8991   Linux distros have it installed under with an extension.
8993 documentation:
8995 * In the API documentation, explicitly note that Database::get_metadata()
8996   returns an empty string when the backend doesn't support user-specified
8997   metadata, and that WritableDatabase::set_metadata() throws UnimplementedError
8998   in this case.  Also describe the current behaviour with multidatabases.
9000 * README: Remove the ancient history lesson - this material is better left to
9001   the history page on the website.
9003 * deprecation.html:
9005   + Deprecate the non-pythonic iterators in favour of the pythonic ones.
9007   + Move "Stem::stem_word(word)" in the bindings to the right section (it was
9008     done in 1.0.0, as already indicated).
9010   + Improve formatting.
9012 * When running rst2html, using "--verbose" was causing "info" messages to be
9013   included in the HTML output, so drop this option and really fix this issue
9014   (which was thought to have been fixed by changes in 1.0.3).
9016 * install.html: Reworked - this document now concentrates on giving
9017   a brief overview of building which should be suitable for most common cases,
9018   and defers to the INSTALL document in each tarball for more details.
9020 * PLATFORMS: Update from tinderbox and buildbot.
9022 * remote.html: xapian-tcpsrv has been able to handle concurrent read
9023   access since 0.3.1 (7 years ago) so update the very out-of-date information
9024   here.  Also, note that some newer features aren't supported by the remote
9025   backend yet.
9027 * HACKING: Note specifically that std::list::size() is O(n) for GCC.
9029 * intro_ir.html: Add link to the forthcoming book "Introduction to
9030   Information Retrieval", which can be read online.
9032 * scalability.html: Update size of gmane.
9034 * quartzdesign.html: Note that Quartz is now deprecated.
9036 debug code:
9038 * The debug assertion code has been rewritten from scratch to be cleaner and
9039   pull in fewer other headers.
9041 Xapian-core 1.0.3 (2007-09-28):
9043 API:
9045 * Add support for user specified metadata (bug#143).  Currently supported by
9046   the flint and inmemory backends.
9048 * Deprecate Enquire::register_match_decider() which has always been a no-op.
9050 * Improve the lower bound on the number of matching documents for an AND query
9051   - if the sum of the lower bounds for the two sides is greater than the
9052   number of documents in the database, then some of them must have both terms.
9054 * Spelling correction: Fix off-by-one error in loop bounds when initialising
9055   (bug#194).
9057 * If the check_at_least parameter to Enquire::get_mset() is used, but there
9058   aren't that many results, then MSet::get_matches_lower_bound() and
9059   MSet::get_matches_upper_bound() weren't always reported as equal - this
9060   bug is now fixed.
9062 * When sorting by value, and using the check_at_least parameter to
9063   Enquire::get_mset(), some potential matches weren't being counted.
9065 * Failing to create a flint or quartz database because we couldn't create the
9066   directory for it now throws DatabaseCreateError not DatabaseOpeningError.
9068 testsuite:
9070 * Fix display of valgrind output when a test fails because valgrind detected
9071   a problem.
9073 * Add another version of valgrind suppression for the zlib end condition check
9074   as this gives a different backtrace for zlib in Ubuntu gutsy.
9076 flint backend:
9078 * The Flint database format has been extended to support user metadata, and
9079   each termlist entry is now a byte shorter (before compression).  As a
9080   result, Xapian 1.0.2 and earlier won't be able to read Xapian 1.0.3
9081   databases.  However, Xapian 1.0.3 can read older databases.  If you open an
9082   older flint database for writing with Xapian 1.0.3, it will be upgraded
9083   such that it cannot then be read by Xapian 1.0.2 and earlier.
9085 * Zlib compression wasn't being used for the spelling or synonym tables (due
9086   to a typo - Z_DEFAULT_COMPRESSION where it should be Z_DEFAULT_STRATEGY).
9088 * xapian-check: Allow "db/record." and "db/record.DB" as arguments.
9090 * Fix "key too long" exception message by substituting FLINT_BTREE_MAX_KEY_LEN
9091   with its numeric value.
9093 * Assorted minor efficiency improvements.
9095 * If we reach the flush threshold during a transaction, we now write out the
9096   postlist changes, but don't actually commit them.
9098 * Check length of new terms is at most 245 bytes for flint in add_document()
9099   and replace_document() so that the API user gets an error there rather
9100   than when flush() is called (explicitly or implicitly).  Fixes bug#44.
9102 * Flint used to read the value of the environmental variable
9103   XAPIAN_FLUSH_THRESHOLD when the first WritableDatabase was opened and would
9104   then cache this value.  However the program using Xapian may have changed
9105   it, so we now reread it each time a WritableDatabase is opened.
9107 * Implement TermIterator::positionlist_count() for the flint backend.
9109 remote backend:
9111 * Fix the result of MSet::get_matches_lower_bound() when using the
9112   check_at_least parameter to get_mset().
9114 inmemory backend:
9116 * Implement TermIterator::positionlist_count() for the inmemory backend.
9118 build system:
9120 * xapian-config: We always need to include dependency_libs in the output of
9121   `xapian-config --libs` if shared libraries are disabled.
9123 * Distribution tarballs are now in the POSIX "ustar" format.  This supports
9124   pathnames longer than 99 characters (which we now have a few instances of
9125   in the doxygen generated documentation) and also results in a distribution
9126   tarball that is about half the size!  This format should be readable by any
9127   tar program in current use - if your tar program doesn't support it, we'd
9128   like to know (but note that the GNU tar tarball is smaller than the size
9129   reduction in the xapian-core tarball...)
9131 * configure no longer generates msvc/version.h - this is now entirely handled
9132   by the MSVC-specific makefiles.
9134 documentation:
9136 * Add a glossary.
9138 * docs/stemming.html: Reorder the initial paragraphs so we actually answer the
9139   question "What is a stemming algorithm?" up front.
9141 * When running rst2html, use "--exit-status=warning" rather than "--strict".
9142   The former actually gives a non-zero exit status for a warning or worse,
9143   while the former doesn't, but does include any "info" messages in the output
9144   HTML.
9146 * docs/deprecation.rst: Add "Database::positionlist_begin() throwing
9147   RangeError and DocNotFoundError".
9149 * valueranges.rst: Correct out-of-date reference to float_to_string.
9151 * HACKING: Document a few more "coding standards".
9153 * PLATFORMS: Updated.
9155 * docs/overview.html: Restore HTML header accidentally deleted in November
9156   2006.
9158 * Fix several typos.
9160 portability:
9162 * Add missing instances of "#include <string.h>" to fix compilation with recent
9163   GCC 4.3 snapshots.
9165 * Fix some warnings for various compilers and platforms.
9167 Xapian-core 1.0.2 (2007-07-05):
9169 API:
9171 * Xapian now offers spelling correction, based on a dynamically maintained
9172   list of spelling "target" words.  This is currently supported by the
9173   flint backend, and works when searching multiple databases.
9175 * Xapian now offers search-time synonym expansion, based on an externally
9176   provided synonym dictionary.  This is currently supported by the flint
9177   backend, and works when searching multiple databases.
9179 * TermGenerator: now offers support for generating spelling correction
9180   data.
9182 * QueryParser:
9184   + New flag FLAG_SPELLING_CORRECTION to enable spelling correction, and a new
9185     method, "get_corrected_query_string()" to get the spelling corrected
9186     query string.
9188   + New flags have been added to allow the new synonym expansion feature to be
9189     enabled and controlled.  Synonym expansion can either be automatic, or only
9190     for terms explicitly indicated in the query string by the new "~" operator.
9192   + The precedence of the boolean operators has been adjusted to match their
9193     usual precedence in mathematics and programming languages.  "NOT" now binds
9194     as tightly as "AND" (previously "AND NOT" would bind like "AND", but just
9195     "NOT" would bind like "OR"!)  Also "XOR" now binds more tightly than "OR",
9196     but less tightly than "AND" (previously it bound just like "OR").
9198   + '+' and '-' have been fixed to work on bracketed subexpressions as
9199     documented.
9201   + If the stemmer is "none", no longer put a Z prefix on terms; this now
9202     matches the output of TermGenerator.
9204 * Add new Xapian::sortable_serialise() and Xapian::sortable_unserialise()
9205   functions which serialise and unserialise numbers (currently only
9206   doubles) to a string representation which sorts in numeric order.  Small
9207   integers have a short representation.
9209 * NumberValueRangeProcessor has been changed to work usefully.  Previously
9210   the numbers had to be the same length; now numbers are serialised to
9211   strings such that a string sort on the string orders the numbers correctly.
9212   Negative and floating point numbers are also supported now.  The old
9213   NumberValueRangeProcessor is still present in the library to preserve
9214   ABI compatibility, but code linking against 1.0.2 or later will pick
9215   up the new implementation, which really lives in a sub-namespace.
9217 * Documents now have a get_docid() method, to get the document ID from the
9218   database they came from.
9220 * Add support for a new type of match decider, called a "matchspy".  Unlike
9221   the old deciders, this will reliably be tested on every candidate
9222   document, so can be used to tally statistics on them.
9224 * Fixed a segfault when getting a description for a MatchNothing query
9225   joined with AND_NOT (bug #176).
9227 * Header files have been tidied up to remove some unnecessary includes.
9228   Applications using "#include <xapian.h>" will not be affected.  We don't
9229   intend to support direct inclusion of individual header files from the xapian
9230   directory, but if you do that, you may have to update you code.
9232 testsuite:
9234 * Feature tests added for all new features.
9236 * Improved test coverage in queryparsertest.  Some tests in queryparsertest
9237   now use flint databases, so the test now ensures that the .flint
9238   subdirectory exists.
9240 * The test harness no longer creates <dbdir>/log for flint (flint doesn't
9241   create a log like quartz does).
9243 * apitest: "-bremote" must now be "-bremoteprog" (to better match
9244   "-bremotetcp"); "-bvoid" must now be "-bnone" (to better describe not
9245   using a database backend).
9247 * To complement "make check-flint", "make check-quartz", and "make
9248   check-remote", you can now run tests for the remotetcp backend with
9249   "make check-remotetcp", for the remoteprog backend with "make
9250   check-remoteprog", for the inmemory backend with "make check-inmemory", and
9251   tests not requiring a backend with "make check-none".
9253 * Several extra tests of the check_at_least parameter supplied to
9254   get_mset() were added.
9256 * Fix memory leak and fd leak in remotetcp handling, so apitest now passes
9257   under valgrind.
9259 * quartztest: no longer test QuartzPostList::get_collection_freq(), which
9260   has been removed.
9262 * Add regression test emptyquery2 for bug #176.
9264 * Add regression test matchall1 for bug with MatchAll queries.
9266 * Enhanced test coverage of match functor, to check that it returns all
9267   matching documents.
9269 matcher:
9271 * Fix bug when check_at_least was supplied - the matches after the
9272   requested MSet size were being returned to the user.  The parameter is
9273   also now handled in a more efficient way - no extra memory is required
9274   (previously, extra memory proportional to the value of check_at_least was
9275   required).
9277 * Fix bug which used incorrect statistics, and caused assertion failures,
9278   when performing a search using a MatchAll query.
9280 * Optimisation for single term queries: we don't need to look at the top
9281   document's termlist to determine that it matches all the query terms.
9283 flint backend:
9285 * The value and position tables are now only created if there is anything to
9286   add to them.  So if you never use document values, there's no value.DB,
9287   value.baseA, or value.baseB.  This means the table doesn't need to be opened
9288   for searching (saving a file handle and a number of syscalls) and when
9289   flushing changes, we don't need to update baseA/baseB just to keep the
9290   revisions in step.  The flint database version has been increased, but the
9291   new code will happily open and read/update flint databases from Xapian 1.0.0
9292   and 1.0.1.  Xapian 1.0.2 flint databases can't be read by Xapian 1.0.1 or
9293   earlier though.
9295 * Two new optional tables are now supported: "spelling", which is used to
9296   store information for spelling correction, and "synonym", which is used
9297   to store synonym information.
9299 * xapian-compact: Now compacts and merges spelling and synonym tables.
9300   Also has a new option "--no-renumber" to preserve document ids from
9301   source databases.
9303 * xapian-check: Now checks the spelling and synonym tables (only the Btree
9304   structure is currently checked, not the information inside).
9306 * Database::term_exists(), Database::get_termfreq(), and
9307   Database::get_collection_freq() are now slightly more efficient for flint
9308   databases.
9310 * New utility 'xapian-inspect' which allowing interactive inspection of key/tag
9311   pairs in a flint Btree.  Useful for development and debugging, and an
9312   approximate equivalent to quartzdump.
9314 * WritableDatabase::delete_document() no longer cancels pending changes if the
9315   document doesn't exist.
9317 * Fix handling of exceptions during commit - previously, this could result
9318   in tables getting out-of-sync, perhaps even resulting in a corrupt database.
9320 * Optimise iteration of all documents in the case where all the document
9321   IDs up to lastdocid are used; in this case, we no longer need to access disk
9322   to get the document IDs.
9324 quartz backend:
9326 * WritableDatabase::delete_document() no longer cancels pending changes if the
9327   document doesn't exist.
9329 * We no longer create a postlist just to find the termfreq or collection
9330   frequency.
9332 remote backend:
9334 * Calling WritableDatabase::delete_document() on a non-existent document now
9335   correctly propagates DocNotFoundError.
9337 * The minor remote protocol version has increased (to fix the previous issue).
9338   You should be able to cleanly upgrade a live system by upgrading servers
9339   first and then clients.
9341 * progclient: Reopen stderr on the child process to /dev/null rather than
9342   closing it.  This fixes apitest with the remoteprog backend to pass when run
9343   under valgrind (it failed in this case in 1.0.0 and 1.0.1).  It probably
9344   has no effect otherwise.
9346 * check_at_least is now passed to the remote server to reduce the work
9347   needed to produce the match, and the serialised size of the returned MSet.
9349 inmemory backend:
9351 * Bug fix: using replace_document() to add a document with a specific
9352   document id above the highest currently used would create empty documents
9353   for all document ids in between.
9355 build system:
9357 * Work around an apparent bug in automake which causes the entries in .libs
9358   subdirectories generated for targets of bin_PROGRAMS not to be removed on
9359   make clean.  This was causing make distcheck to fail.
9361 * Snapshots and releases are now bootstrapped with automake 1.10, and
9362   libtool 1.5.24.
9364 * HTML documentation generated from RST files is now installed.
9366 documentation:
9368 * The API documentation is now generated with Doxygen 1.5.2, which fixes the
9369   missing docs for Xapian::Query.
9371 * Ship and install internals.html.
9373 * Generating the doxygen-collated documentation of the library internals (with
9374   "make doxygen_source_docs") now only tries to generate an HTML version.  The
9375   PDF version kept exceeding TeX limits, and HTML is a more useful format for
9376   this anyway.
9378 * API docs for Xapian::QueryParser now make it clear that the default value for
9379   the stemming strategy is STEM_NONE.
9381 * API docs now describe the NumberValueRangeProcessor more clearly.
9383 * Several typo fixes and assorted wording improvements.
9385 * queryparser.html: Mention "AND NOT" as an alternative way to write "NOT",
9386   and document synonym expansion.
9388 * admin_notes.html: Updated for changes in this release, and corrected a
9389   few minor errors.
9391 * spelling.rst: New file, documenting the spelling correction feature.
9393 * synonyms.rst: New file, documenting the synonyms expansion feature.
9395 * valueranges.rst: The NumberValueRangeProcessor is now documented.
9397 * HACKING: Mention new libtool, and more details about preferring
9398   pre-increment.  Also add a note about 2 space indentation of protection
9399   level declarations in classes.
9401 * INSTALL: note that zlib must be installed before you can build.
9403 examples:
9405 * copydatabase: Now copies synonym and spelling data.  Also, fix a cosmetic
9406   bug with progress output when a specified database directory has a trailing
9407   slash.
9409 portability:
9411 * Fix to build on with OpenBSD's zlib (xapian-core 1.0.0 and 1.0.1 didn't).
9413 * Fixed to build with older zlib such as zlib 1.1.5 which Solaris apparently
9414   uses (xapian-core 1.0.0 and 1.0.1 didn't).  However, we recommend using zlib
9415   1.2.x as decompressing is apparently about 20% faster.
9417 * msvc/version.h.in: Generated version.h for MSVC build no longer has the
9418   remote backend marked as disabled.
9420 * Fix warnings from Intel's C++ compiler.
9422 * Fixes for compilation with gcc-2.95 and GCC 4.3 snapshots.
9424 packaging:
9426 * RPMs:
9428   + Rename xapian.spec to xapian-core.spec to match tarball name.
9430   + Append the user name to BuildRoot.
9432 debug code:
9434 * Better debug logging from the queryparser internals.
9436 Xapian-core 1.0.1 (2007-06-11):
9438 API:
9440 * Xapian::Error:
9442   + Make Error::error_string member std::string rather than char * to avoid
9443     problems with double free() with copied Error objects.  Unfortunately
9444     this mean an incompatible ABI change which we had hoped to avoid until
9445     1.1.0, but in this case there didn't seem to be a sane way to fix the
9446     problem without an ABI change.
9448   + Error::get_description() now converts my_errno to error_string if it hasn't
9449     been already rather than not including any error description in this case.
9451   + Add new method "get_description()" to get a string describing the error
9452     object.  This is used in various examples and scripts, improving their
9453     error reporting.
9455 * Xapian::Database: Add new form of allterms_begin() and allterms_end()
9456   which allow iterating of all terms with a particular prefix.  This
9457   is easier to use than checking the end condition yourself, and is
9458   more efficiently implemented for the remote backend (fixes bug#153).
9460 * Xapian::Enquire: Passing an uninitialised Database object to Enquire will
9461   now cause InvalidArgumentError to be thrown, rather than causing a segfault
9462   when you call Enquire::get_mset().  If you really want an empty database,
9463   you can use Xapian::InMemory::open() to create one.
9465 * Xapian::QueryParser: Multiple boolean prefixed terms with the same term
9466   prefix are now combined with OR before such groups are combined with AND
9467   (bug#157).  Multiple value ranges on the same value are handled similarly.
9469 * Xapian::Query OP_VALUE_RANGE: Avoid calling db->get_lastdocid() repeatedly
9470   as we know the answer won't change - this reduces the run time of a
9471   particular test case by 25%.
9473 testsuite:
9475 * Add test for serialisation of error strings.
9477 * Improved output in various situations:
9479   + Quote strings in TEST_STRINGS_EQUAL().
9481   + queryparsertest: Use TEST_STRINGS_EQUAL when comparing query descriptions
9482     against their expected output, since this makes it much easier to see the
9483     differences.
9485   + Report whole message for exceptions, rather than a truncated version, in
9486     verbose mode.
9488   + Make use of Xapian::Error::get_description(), giving better error
9489     reports.
9491 * queryparsertest: New test of custom ValueRangeProcessor subclass
9492   (qp_value_customrange1).
9494 * apitest: flintdatabaseformaterror1 and flintdatabaseformaterror2 now use a
9495   genuine Xapian 0.9.9 flint database for their tests, and more cases are
9496   tested.  The two tests have also been split into 3 now.
9498 * Fix test harness not to invoke undefined behaviour in cases where a paragraph
9499   of test data contains two or fewer characters.
9501 * Implement a better fix for the MSVC ifstream issue which was fixed in 1.0.0.
9502   This fixes an unintentional side-effect of the previous fix which meant that
9503   apitest's consistency1 wasn't working as intended (it now has a regression
9504   test to make sure it is testing what we intend).
9506 flint backend:
9508 * xapian-compact: Don't uncompress and recompress tags when compacting a
9509   database.  This speeds up xapian-compact rather a lot (by more than 50% in a
9510   quick test).
9512 * If the docid counter wraps, Flint now throws DatabaseError (fixes bug#152).
9514 * Remove the special case error message for pre-0.6 databases since they'll
9515   be quartz format (the check is only in flint because this code was taken from
9516   quartz).
9518 quartz backend:
9520 * If the docid counter wraps, Quartz now throws DatabaseError (fixes bug#152).
9522 remote backend:
9524 * The remote protocol now has a minor version number.  If the major
9525   version number is the same, a client can work with any server with
9526   the same or higher minor version number, which makes upgrading live
9527   systems easier for most remote protocol changes - just upgrade the servers
9528   first.
9530 * When a read-only remote database is closed, the client no longer sends a
9531   (totally bogus) MSG_FLUSH to the server, and the reply is also eliminated.
9532   This reduces the time taken to close a remote database a little (fixes
9533   bug#149).
9535 inmemory backend:
9537 * skip_to() on an allterms TermIterator from an InMemory Database can no longer
9538   move backwards.
9540 * An allterms TermIterator now initialises lazily, which can save some work if
9541   the first operation is a skip_to() (as it often will be).
9543 build system:
9545 * Fix VPATH compilation in maintainer mode with gcc-2.95.
9547 * Fix multiple target rule for generating the queryparser source files in
9548   parallel builds.
9550 * Distribute missing stub Makefiles for "bin", "examples", and
9551   "include/xapian".
9553 documentation:
9555 * Document the design flaw with NumberValueRangeProcessor and why it shouldn't
9556   be used.
9558 * ValueRangeProcessor and subclasses now have API documentation and an overview
9559   document.
9561 * Expand documentation of value range Query constructor.
9563 * Improved API documentation for the TermGenerator class.
9565 * docs/deprecation.rst:
9567   + Fix copy and paste error - set_sort_forward() should be changed to
9568     set_docid_order().
9570   + Improve entry for QueryParserError.
9572 * PLATFORMS: Updated from tinderbox.
9574 examples:
9576 * copydatabase: Rewritten to use the ability to iterate over all the documents
9577   in a database.  Should be much more efficient for databases with sparsely
9578   distributed document IDs.
9580 * simpleindex: Rewritten to use the TermGenerator class, which eliminates a
9581   lot of non-Xapian related code and is more typical of what a user is likely
9582   to want to do.
9584 * simplesearch,simpleexpand: Rewritten to use the QueryParser class, which
9585   is more typical of what a user is likely to want to do.
9587 portability:
9589 * xapian-config: Add special case check for host_os matching linux* or
9590   k*bsd-gnu since vanilla libtool doesn't correctly probe link_all_deplibs=no
9591   for them.
9593 packaging:
9595 * RPMs: Add "# norootforbuild" comment which SuSE's build scripts look for.
9596   Rename "Source0:" to "Source:" as there's only one tarball now.  Add gcc-c++
9597   and zlib-devel to "Build-Requires:".
9599 * The required automake version has been lowered to 1.8.3, so RPMs can now be
9600   built on RHEL 4 and SLES 9.
9602 Xapian-core 1.0.0 (2007-05-17):
9604 API:
9606 * Xapian::Database:
9608   + The Database(const std::string &) constructor has been marked as "explicit".
9609     Hopefully this won't affect real code, but it's possible.  Instead of
9610     passing a std::string where a Xapian::Database is expected, you'll now
9611     have to explicitly write `Xapian::Database(path)' instead of `path'.
9613   + Fixed problem when calling skip_to() on an allterms iterator over multiple
9614     databases which could cause a debug assertion in debug builds, and possible
9615     misbehaviour in normal builds.
9617 * Xapian::Error:
9619   + The constructors of Error subclasses which take a `const std::string &'
9620     parameter are now explicit.  This is very unlikely to affect any real code
9621     but if it does, just write `Xapian::Error(msg)' instead of `msg'.
9623   + Xapian::Error::get_type() now returns const char* rather than std::string.
9624     Generally existing code will just work (only one change was required in
9625     Xapian itself) - the simplest change is to write `std::string(e.get_type())'
9626     instead of `e.get_type()'.
9628   + Previously, the errno value was lost when an error was propagated from
9629     a remote server to the client, because errno values aren't portable
9630     between platforms.  To fix this, Error::get_errno() is now deprecated and
9631     you should use Error::get_error_string() instead, which returns a string
9632     expanded from the errno value (or other system error code).
9634 * Xapian::QueryParser:
9636   + Now assumes input text is encoded as UTF-8.
9638   + We've made several changes to term generation strategy.  Most notably:
9639     Unicode support has been added; '_' now counts as a word character; numbers
9640     and version numbers are now parsed as a single term; single apostrophes are
9641     now included in a term; we now store unstemmed forms of all terms; and we
9642     no longer try to "normalise" accents.
9644   + parse_query() now throws the new Xapian::Error subclass QueryParserError
9645     instead of throwing const char * (bug#101).
9647   + Pure NOT queries are now supported (for example, `NOT apples' will match
9648     all documents not indexed by the stemmed form of `apples').  You need
9649     to enable this feature by passing QueryParser::FLAG_PURE_NOT in flags
9650     to QueryParser::parse_query().
9652   + We now clear the stoplist when we parse a new query.
9654   + Queries such as `+foo* bar', where no terms in the database match the
9655     wildcard `foo*', now match no documents, even if `bar' exists.  Handling
9656     of `-foo*' has also been fixed.
9658   + Now supports wildcarding the last term of a query to provide better support
9659     for incremental searching.  Enabled by QueryParser::FLAG_PARTIAL.
9661   + The default prefix can now be specified to parse_query() to allow parsing
9662     of text entry boxes for particular fields.
9664   + QueryParser::set_stemming_options() has been deprecated since 0.9.0 and
9665     has now been removed.
9667 * Xapian::Stem:
9669   + Now assumes input text is encoded as UTF-8.
9671   + We've updated to the latest version of the Snowball stemmers.  This means
9672     that a small number of words produce different (and generally better)
9673     stems and that some new stemmers are supported: german2 (like german but
9674     normalises umlauts), hungarian, kraaij_pohlmann (a different Dutch
9675     stemmer), romanian, and turkish.
9677 * Xapian::TermGenerator:
9679   + New class which generates terms from a piece of text.
9681 * Xapian::Enquire:
9683   + The Enquire(const Database &) constructor has been marked as "explicit".
9684     This probably won't affect real code - certainly no Xapian API methods
9685     or functions take an Enquire object as a parameter - but calls to user
9686     methods or functions taking an Enquire object could be affected.  In
9687     such cases, you'll now have to explicitly write `Xapian::Enquire(db)'
9688     instead of `db'.
9690   + Enquire::get_eset() now produces better results when used with multiple
9691     databases - without USE_EXACT_TERMFREQ they should be much more similar to
9692     results from an equivalent single database; with USE_EXACT_TERMFREQ they
9693     should be identical.
9695   + Track the minimum weight required to be considered for the MSet separately
9696     from the minimum item which could be considered.  Trying to combine the two
9697     caused several subtle bugs (bug#86).
9699   + Enquire::get_query() is now `const'.  Should have no effect on user code.
9701   + Enquire::get_mset() now handles the common case of an "exact" phrase search
9702     (where the window size is equal to the number of terms) specially.
9704   + Enquire::include_query_terms and Enquire::use_exact_termfreq are now
9705     deprecated in favour of capitalised versions Enquire::INCLUDE_QUERY_TERMS
9706     and Enquire::USE_EXACT_TERMFREQ (for consistency with our other manifest
9707     constants, and general C/C++ conventions).
9709 * Xapian::RSet:
9711   + RSet::contains(MSetIterator) is now `const'.  Should have no effect on user
9712     code.
9714 * Xapian::SimpleStopper::add() now takes `const std::string &' not `const
9715   std::string'.  Should have no effect on user code.
9717 * Xapian::Query:
9719   + We now only perform internal validation on a Query object when it's either
9720     constructed or changed, to avoid O(n^2) behaviour in some cases.
9722   + Xapian::Query::MatchAll (an alias for Query("")) matches all terms in the
9723     document (useful for "pure NOT" queries) and Xapian::Query:MatchNothing
9724     is now a more memorable alias for Query().
9726 * Instead of explicitly checking that a term exists before opening its
9727   postlist, we now do both in one operation, which is more efficient.
9729 * MatchDecider::operator() now returns `bool' not `int'.
9731 * ExpandDecider::operator() now returns `bool' not `int'.
9733 * Xapian::TermIterator::get_termfreq() now throws InvalidOperationError
9734   if called on a TermIterator from a freshly created Document (since
9735   there's no meaningful term frequency as there's no Database for
9736   context).
9738 * <xapian/output.h> is no longer available as an externally visible header.
9739   It's not been included by <xapian.h> since 0.7.0.  Instead of using
9740   `cout << obj;' use `cout << obj.get_description();'.
9742 * New constant Xapian::BAD_VALUENO which is -1 cast to Xapian::valueno.
9744 * New Xapian::ValueRangeProcessor hierarchy: DateValueRangeProcessor,
9745   NumberValueRangeProcessor, and StringValueRangeProcessor.  In
9746   conjunction with the new QueryParser::add_valuerangeprocessor()
9747   method and the new Query::OP_VALUE_RANGE op these allow you to
9748   implement ranges in the query parser, such as `$50..100',
9749   `10..20kg', `01/02/2007..03/04/2007'.
9751 testsuite:
9753 * Many new and improved testcases in various areas.
9755 * If a test throws an unknown exception, say so in the test failure message.
9756   If it throws std::string, report the first 40 characters (or first line if
9757   less than 40 characters) of the string even in non-verbose mode.
9759 * Use of valgrind improved:
9761   + The test harness now only hooks into valgrind if environment variable
9762     XAPIAN_TESTSUITE_VALGRIND is set, which makes it easy to run test programs
9763     under valgrind in the normal way.  The runtest script sets this
9764     automatically.
9766   + runtest now passes "--leak-resolution=high" to valgrind to prevent
9767     unrelated leak reports related to STL classes from being combined.
9769   + configure tests for valgrind improved and streamlined.
9771   + New runsrv script to run xapian-tcpsrv and xapian-progsrv.  We need to
9772     run these under valgrind to avoid issues with excess numerical precision
9773     in valgrind's FP handling, but we can use "--tool=none" which is a lot
9774     faster than running them under valgrind's default memcheck tool.
9776 * The test harness now starts xapian-tcpsrv in a more reliable way - it will
9777   try sequentially higher port numbers, rather than failing because a
9778   xapian-tcpsrv (or something else) is already using the default port.
9779   It also no longer leaks file descriptors (which was causing later tests
9780   to fail on some platforms), and if xapian-tcpsrv fails to start, the error
9781   message is now reported.
9783 * remotetest has been removed and its testcases have either been added to
9784   apitest or just removed if redundant with tests already in apitest.
9786 * termgentest is a new test program which tests the Xapian::TermGenerator
9787   class.
9789 * TEST_EQUAL_DOUBLE() now uses a slightly less stringent threshold -
9790   DBL_EPSILON is too strict for calculations which include multiple
9791   steps.  Also, we now use it instead of doubles_are_equal_enough() and
9792   weights_are_equal_enough() which try to perform the same job.
9794 * New macro TEST_STRINGS_EQUAL() which displays the strings on separate lines
9795   so the differences can be clearly seen.
9797 * Test programs are now linked with '-no-install' which means that libtool
9798   doesn't need to generate shell script wrappers for them on most platforms.
9800 * runtest: Now turns on MALLOC_CHECK_ and MALLOC_PERTURB_ for glibc if
9801   valgrind isn't being used.
9803 * Better support for Microsoft Windows:
9805   + test_emptyterm2 no longer tries to delete a database from disk while a
9806     WritableDatabase object still exists for it, since this isn't supported
9807     under Microsoft Windows.
9809   + Fallback handling when srcdir isn't specified how takes into account .exe
9810     extensions and different path separators.
9812 flint backend:
9814 * Flint is now the default backend.
9816 * xapian-check: New program which performs consistency checks on a flint
9817   database or table.
9819 * xapian-compact: Now prunes unused docids off the start of each source
9820   database's range of docids.
9822 * Positional information is now encoded using a highly optimised fls()
9823   implementation, which is much faster than the FP code 0.9.x used.
9824   Unfortunately the old encoding could occasionally add extra bits
9825   on some architectures, which was harmless except the databases
9826   wouldn't be portable.  Because of this, the flint format has had to
9827   be changed incompatibly.
9829 * The lock file is now called "flintlock" rather than "flicklock" (which
9830   was a typo!)
9832 * Flint now releases its lock correctly if there's an error in
9833   WritableDatabase's constructor.  Previously the lock would remain until
9834   the process exited.
9836 * Flint now throws new Xapian::Error subclass DatabaseVersionError instead of
9837   DatabaseOpeningError when it fails to open a database because it has an
9838   unsupported version.  DatabaseVersionError is a subclass of
9839   DatabaseOpeningError so existing code should continue to work, but it's
9840   now much easier to determine if the problem is that a database needs
9841   rebuilding.
9843 * If you try to open a flint database with an older or newer version than
9844   flint understands, the exception message now gives the version understood,
9845   rather than "I only understand FLINT_VERSION" (literally).
9847 * If we fail to obtain the lock, report why in the exception message.
9849 * Flint now compresses tags in the record and termlist tables using zlib.
9851 * More robust code to handle the flint locking child process, in case of
9852   unexpected errors.
9854 * If a document was replaced more than once between flushes, the document
9855   length wouldn't be updated after the first change.
9857 quartz backend:
9859 * Quartz is still supported, but use in new projects is deprecated (use Flint
9860   instead).  Quartz will be removed eventually.
9862 * quartzcheck: Test if this is a quartz database by looking at "meta" not
9863   "record_DB".  If "record_DB" is >= 2GB and we don't have a LFS aware stat
9864   function then stat can fail even though the file is there.  Also open the
9865   database explicitly as a Quartz database for extra robustness.
9867 * If a document was replaced more than once between flushes, the document
9868   length wouldn't be updated after the first change.
9870 remote backend:
9872 * The remote backend is now supported under Microsoft Windows.
9874 * Open a fresh copy of the database(s) on each connection to a xapian-tcpsrv
9875   rather than relying on being able to share a database across fork() or
9876   between threads (which we don't promise will work).
9878 * xapian-tcpsrv: New "--interface" option allows the hostname or address of the
9879   interface to listen on to be specified (the default is the previous behaviour
9880   of listening on all interfaces).
9882 * If name lookup fails, report the h_errno code from gethostbyname() rather
9883   than whatever value errno happens to currently have!
9885 * Fix bugs in query unserialisation.
9887 * The remote backend now supports all operations (get_lastdocid(), and
9888   postlist_begin() have now been implemented).
9890 * Currently a read-only server can be opened as a WritableDatabase (which is
9891   a minor bug we plan to fix).  In this case, operations which write will fail
9892   and the exception is now InvalidOperationError not NetworkError.
9894 * If a remote server catches NetworkTimeoutError then it will now only
9895   propagate it if we can send it right away (since the connection is
9896   probably unhappy).  After that (and for any other NetworkError) we now
9897   just rethrow it locally to close the connection and let it be logged if
9898   required.
9900 * The timeout parameter to RemoteDatabase wasn't being used, instead the
9901   client would wait indefinitely for the server to respond.
9903 * A timeout of zero to the remote backend now means "never timeout".  This
9904   is now the default idle timeout for WritableDatabase (the connection
9905   timeout default is now 10 seconds, rather than defaulting to the idle
9906   timeout).
9908 * Fix handling of the document length in remote termlists.
9910 * The remote backend now checks when decoding serialised string that the
9911   length isn't more than the amount of data available (bug#117).
9913 * The remote backend now handles the unique term variants of delete_document
9914   and replace_document on the server side.
9916 * The RSet serialisation now encodes deltas between docids (rather than the
9917   docids themselves) which greatly reduces the size of the encoding of a
9918   sparse RSet for a large database.
9920 * We now encode deltas between term positions when sending data after calling
9921   positionlist_begin() on a remote database.
9923 * When using a MatchDecider with remote database(s), don't rerun the
9924   MatchDecider on documents which a remote server has already checked.
9926 * Apply the "decreasing weights with remote database" optimisation which we use
9927   in the sort_by_relevance case in the sort_by_relevance_then_value case too.
9929 * We now throw NetworkError rather than InternalError for invalid data received
9930   over the remote protocol.
9932 * We now close stderr of the spawned backend program when using the "prog" form
9933   of the remote backend.  Previously stderr output would go to the client
9934   application's stderr.
9936 muscat36 backend:
9938 * Support for the old Muscat 3.6 backends has been completely removed.  It's
9939   still possible to convert Muscat 3.6 databases to Xapian databases by
9940   building 0.9.10 and using copydatabase to create a quartz database, which can
9941   then be read by 1.0.0 (and converted to a flint database using copydatabase
9942   again).
9944 build system:
9946 * We've added GCC visibility annotations to the library, which when using GCC
9947   version 4.0 or later reduce the size and load time of the library and
9948   increase the runtime speed a little.  Under x86_64, the stripped library is
9949   6.4% smaller (1.5% smaller with debug information).
9951 * configure: If using GCC, use -Bsymbolic-functions if it is supported
9952   (it requires a very recent version of ld currently).  This option reduces the
9953   size and load time of the shared library by resolving references within the
9954   library when it's created.
9956 * We automatically define _FORTIFY_SOURCE in config.h if GCC is in use
9957   and it's not already set (you can override this as documented in INSTALL).
9958   This adds some checking (mostly at compile time) that important return
9959   values aren't ignored and that array bounds aren't exceeded.
9961 * `./configure --enable-quiet' already allows you to specify at configure time
9962   to pass `--quiet' to libtool.  Now you can override this at make-time by
9963   using `make QUIET=' (to turn off `--quiet') or `make QUIET=y' (to turn on
9964   `--quiet').
9966 * In non-maintainer mode, we don't need the tools required to rebuild some of
9967   the documentation, so speed up configure by not even probing for them in
9968   this common case.
9970 * The makefiles now use non-recursive make in all directories except "docs" and
9971   "tests".  For users, this means that the build is faster and requires less
9972   disk space (bug#97).
9974 * configure: Add proper detection for SGI's C++ (check stderr output of
9975   "CC -v") and automatically pass -ptused in CXXFLAGS for xapian-core and any
9976   applications using xapian-config --cxxflags since it seems to be required to
9977   avoid template linking errors.
9979 * XO_LIB_XAPIAN now checks for the case where XAPIAN_CONFIG wasn't specified
9980   and xapian-config wasn't found, but the library appears to be installed -
9981   this almost certainly means that the user has installed xapian-core from
9982   a package, but hasn't installed the -dev or -devel package, so include
9983   that advice in the error message.
9985 * `./configure --with-stlport-compiler' now requires a compiler name as an
9986   argument.
9988 * configure: Disable probes for f77, gcj, and rc completely by preventing
9989   the probe code from even appearing in configure - this reduces the size of
9990   configure by 209KB (~25%) and should speed it up significantly.
9992 * configure: Suppress more unhelpful warnings and "remarks" for HP's aCC, and
9993   turn on "+wlint", which seems useful.
9995 * A number of cases of unnecessary header inclusions have been addressed,
9996   which should speed up compilation (fewer headers to parse when compiling
9997   many source files).  This also reduces dependencies within the source code,
9998   and thus the number of files which need to be rebuilt when a header is
9999   changed.
10001 * configure: Cache the results of some of our custom tests.
10003 documentation:
10005 * The documentation has all been updated for changes in Xapian 1.0.0.
10007 * Many of the documentation comments in the API headers (which are collated
10008   using doxygen to generated the API reference) have been improved, and some
10009   missing ones added.  Also, internal classes, members, and methods are now all
10010   marked as such so that none should appear in the generated documentation.  In
10011   particular, the class inheritance graphs should be a lot clearer.  A few other
10012   problems have also been addressed.
10014 * docs/internals.html: New separate index page for the "internal"
10015   documentation.
10017 * docs/deprecated.html: New document describing deprecation policy.  This
10018   includes lists of features which have been removed, or which are deprecated
10019   and scheduled for removal, along with suggested replacements.
10021 * docs/admin_notes.html: New document introducing Xapian for sysadmins.
10023 * docs/termgenerator.html: New document describing the new term generation
10024   strategy implemented by the Term::Generator class.
10026 * docs/bm25.html,docs/intro_ir.html: These have been overhauled to make them
10027   fit better with the rest of the documentation, and with Xapian itself.
10029 * docs/overview.html: Fixed links to error classes in generated API
10030   documentation.
10032 * HACKING,INSTALL: Many updates and improvements.
10034 * xapian-config: Improve --version output so that help2man produces a better
10035   man page.
10037 * PLATFORMS: Remove reports for 0.7.* and demote reports for 0.8.* to "older
10038   reports" status.  All SF compilefarm machines are now "no longer available",
10039   so update the symbols and key to reflect this.  Update with recent success
10040   reports from the tinderbox and other sources.
10042 * AUTHORS: Thanks several bug reporters I missed before, as well as recent
10043   contributors.
10045 * docs/code_structure.html now looks nicer and includes links to
10046   svn.xapian.org.
10048 * docs/remote_protocol.html: Fixed several typos and other errors, and document
10049   all the new messages.
10051 * We no longer include docs/apidoc/latex/* in the xapian-core tarballs since
10052   it's just useless bloat.
10054 examples:
10056 * delve:
10058   + Report the exception error string if open a database fails.
10060   + Rename "-k" to "-V" since "keys" were renamed to "values" long ago.  Keep
10061     "-k" as an alias for now, but don't advertise it.  Add handling so "-V3"
10062     shows value #3 for every document in the database.
10064   + No longer stems terms by default.  Add "-s/--stemmer" option to allow a
10065     stemmer to be specified.
10067 * quest: Add "--stemmer" option to allow stemming language to be set, or
10068   stemming to be disabled.
10070 portability:
10072 * Fix compilation with GCC 4.3 snapshot.
10074 * Always use pid_t not int for holding a process id, and use AC_TYPE_PID_T to
10075   `#define pid_t int' if <sys/types.h> doesn't provide pid_t.
10077 * Pass the 4th parameter of setsockopt() as char* which works whether the
10078   function actually takes char* or void* (since C++ allows implicit conversion
10079   from char* to void*).
10081 * Most warnings in the MSVC build have been fixed.
10083 * Refactored most portability workarounds into safeXXXX.h headers.
10085 * Building for mingw in a cygwin environment should work better now.
10087 packaging:
10089 * RPM spec file:
10091   + Updated for the changes in this release.
10093   + ChangeLog.examples is now packaged.
10095 debug code:
10097 * Rename --enable-debug* configure options - conflating the options to "turn on
10098   assertions" and "turn on logging" is confusing. `--enable-debug[=partial]'
10099   becomes `--enable-assertions'; `--enable-debug-verbose' becomes
10100   `--enable-log' and `--enable-debug=full' becomes `--enable-assertions
10101   --enable-log'.  For now the old options give an error telling you the new
10102   equivalent.
10104 * Debug logging from expand is now all of type EXPAND (some was of types
10105   MATCHER and WTCALC before).
10107 * Hook the debug tracing in the lemon generated parser into Xapian's debug
10108   logging framework.
10110 * New assertion types: AssertEqParanoid() and AssertNeParanoid().
10112 * Retry write() if it fails when writing a debug log entry to ensure to avoid
10113   the risk of a partial write.
10115 Xapian-core 0.9.10 (2007-03-04):
10117 API:
10119 * Fix WritableDatabase::replace_document() not to lose positional information
10120   for a document if it is replaced with itself with unmodified postings.
10122 * QueryParser: Add entries to the "unstem" map for prefixed boolean filters
10123   (e.g. type:html).
10125 * Fix inconsistent ordering of documents between pages with
10126   Enquire::set_sort_by_value_then_relevance (fixes bug#110).
10128 testsuite:
10130 * Workaround apparent bug in MSVC's ifstream class.
10132 flint and quartz backends:
10134 * Fix possible double-free after a transaction fails.
10136 * Fix code for recovering from failing to open a table for reading
10137   mid-modification.  If modifications are so frequent that opening for reading
10138   fails 100 times in a row, throw DatabaseModifiedError not
10139   DatabaseOpeningError.
10141 * Don't call std::string::append(ptr, 0) when ptr may be uninitialised
10142   or NULL (rather suspect, and reported to cause SEGV-like behaviour with
10143   MSVC).
10145 * Ensure both_bases is set to false if we don't have both bases when
10146   opening a table using an existing object.
10148 * Use MS Windows API calls to delete files and open files we might want to
10149   delete while they are still open (i.e. the flint and quartz btree base
10150   files).  This fixes a problem when a writer can't discard an old revision at
10151   the exact moment a reader is opening it (bug #108).
10153 remote backend:
10155 * Fix WritableDatabase::has_positions() to refetch the cached value if it
10156   might be out of date.
10158 * Fix incorrect serialisation of a query with non-default termpositions.
10160 inmemory backend:
10162 * If replace_document is used to set the docid of a newly added document which
10163   has previously existed, ensure we mark that document as valid.
10165 documentation:
10167 * Assorted improvements to API documentation.
10169 * docs/Makefile.am: The larger pool_size we set in 0.9.9 for building
10170   sourcedoc.pdf was a bit marginal, so increase it further.
10172 * docs/stemming.html,docs/install.html: Correct 2 references to "CVS" to say
10173   "SVN" instead.
10175 * HACKING: Update the release checklist.
10177 portability:
10179 * Fix flint and quartz to allow 2GB+ B-tree tables when compiling with MSVC.
10181 packaging:
10183 * RPMs: Remove "." from end of "Summary:".  Package the new man page for
10184   xapian-progsrv.
10186 Xapian-core 0.9.9 (2006-11-09):
10188 testsuite:
10190 * Use popen() to run xapian-tcpsrv and wait for "Listening..." before returning
10191   rather than just sleeping for 1 second and hoping that's enough.
10193 * If we can't start xapian-tcpsrv because the port is in use, try higher
10194   numbered ports.
10196 remote backend:
10198 * xapian-tcpsrv: If the port requested is in use, exit with code 69
10199   (EX_UNAVAILABLE) which is useful if you're trying to automate launching of
10200   xapian-tcpsrv instances.
10202 * xapian-tcpsrv: Output "Listening..." once the socket is open and read for
10203   connections (this allows the testsuite to wait until xapian-tcpsrv is ready
10204   before connecting to it).
10206 * xapian-progsrv: Now supports --help, --version, and has a man page.  Fixes
10207   Bug #98.
10209 * Turn on TCP_NODELAY for the TCP variant of the remote backend which
10210   dramatically improves the latency of operations on the database.
10212 build system:
10214 * internaltest: Disable serialiselength1 and serialisedoc1 when the remote
10215   backend is disabled to fix build error in this case.
10217 * Move libbtreecheck.la from testsuite/ to backends/quartz/.
10219 * Move the testsuite harness from testsuite/ to tests/harness/.
10221 documentation:
10223 * Ship our custom INSTALL file rather than the generic one from autoconf which
10224   we've accidentally been shipping instead since 0.9.5.
10226 * docs/Makefile.am: Building sourcedoc.pdf needs a larger pool_size now we're
10227   using pdflatex.
10229 * HACKING: Update debian packaging checklist.
10231 * PLATFORMS: Updated with results from tinderbox.
10233 portability:
10235 * Create "safefcntl.h" as a replacement for <fcntl.h> instead of using
10236   "utils.h" for this purpose, since "utils.h" pulls in many other things we
10237   often don't need.
10239 packaging:
10241 * RPMs: Prevent binaries getting an rpath for /usr/lib64 on FC6.
10243 Xapian-core 0.9.8 (2006-11-02):
10245 API:
10247 * QueryParser: Don't require a prefixed boolean term to start with an
10248   alphanumeric - allow the same set of characters as we do for the second
10249   and subsequent characters.
10251 flint backend:
10253 * Only force a flush on WritableDatabase::allterms_begin() if there are
10254   actually pending changes.
10256 quartz backend:
10258 * Only force a flush on WritableDatabase::allterms_begin() if there are
10259   actually pending changes.
10261 * quartzcheck: Avoid dying because of an unhandled exception if the Btree
10262   checking code finds an error in the low-level Btree structure.  Add a
10263   catch for any other unknown exceptions.
10265 build system:
10267 * When building with GCC, turn on warning flag -Wshadow even when not in
10268   maintainer mode (provided it is supported by the GCC version being used).
10270 * testsuite/backendmanager.cc: Fix compilation when valgrind is detected by
10271   configure.
10273 * If generating apidoc.pdf fails, display the logfile pdflatex generates since
10274   that is likely to show what failed.
10276 documentation:
10278 * Produce a PDF for apidoc rather than PostScript, since the PDF is smaller,
10279   plus at least as easy to print and easier to view for most users.  Use
10280   pdflatex to generate the PDF directly rather than going via a DVI file which
10281   apparently produces a better result and also avoids problems on some Linux
10282   distros where latex is a symlink to pdfelatex (bug#81, bug#95).
10284 * HACKING: Mention automake 1.10 is out but we've not tested it yet.
10286 * HACKING: Add entries to release checklist: make sure new API methods
10287   are wrapped by the bindings, and that bug submitters are thanked.
10289 * HACKING: Note that on Debian, tetex-extra is needed for
10290   fancyhdr.sty.
10292 * HACKING: Note that dch can be used to update debian/changelog.
10294 * docs/code_structure.html: Document backends/remote.
10296 * PLATFORMS: Update from tinderbox.
10298 portability:
10300 * configure: When checking if we need -lm, don't use a constant argument to
10301   log() as the compiler might simply evaluate the whole expression at compile
10302   time.
10304 * configure: Redhat's GCC 2.96 doesn't support -Wundef even though real GCC
10305   version before and after it do!
10307 * configure: Avoid use of double quotes in double-quoted backticks since
10308   it causes problems on some platforms.
10310 * backends/flint/flint_io.cc: Fix compilation on windows (needs to
10311   #include "safewindows.h" to get definition of SSIZE_T).
10313 * Fix our implementation of om_ostringstream to compile so that the build
10314   works once more on older compilers without <sstream> (regression probably
10315   introduced in 0.9.7).
10317 packaging:
10319 * xapian.spec: Package xapian-progsrv.
10321 Xapian-core 0.9.7 (2006-10-10):
10323 API:
10325 * QueryParser:
10327   + Allow a distance to be optionally specified for NEAR - e.g.
10328     "cats NEAR/3 dogs" (bug#92).
10330   + Implement "ADJ" operator - like "NEAR" except the terms must
10331     appear in matching documents in the same order as in the query.
10333   + Fix bug in how we handle prefixed quoted phrases and prefixed brackets.
10335   + Fix parsing of loved and hated prefixed phrases and bracketted expressions.
10337   + Fix handling of stopwords in boolean expressions.
10339   + Don't ignore a stopword if it's the only query term.
10341 * Document::add_value() failed to replace an existing value with the same
10342   number, contrary to what the documentation says (bug #82).
10344 * Enquire::set_sort_by_value(): Don't fetch the document data when fetching
10345   the value to sort on.  Simple benchmarking showed this to speed up sort by
10346   value by a factor of between 3 and 9!
10348 * Implement transactions for flint and quartz.  Also supported are "unflushed"
10349   transactions, which provided an efficient way to atomically group a number
10350   of database modifications.
10352 * The Xapian::Error and Xapian::ErrorHandler classes have been reimplemented.
10353   The new versions have better, clearer documentation comments and are cleaner
10354   internally.
10356 * Change how doubles are serialised by TradWeight, BM25Weight, and in the
10357   remote backend protocol.  The new encoding allows us to transfer any double
10358   value which can be represented by both machines precisely and compactly.
10360 testsuite:
10362 * Add targets "check-flint", "check-quartz", and "check-remote" in tests and at
10363   the top level which run the subset of tests which test the respective backend.
10365 * apitest: Run tests on flint if flint is enabled, rather than if quartz is
10366   enabled!
10368 * apitest: Speed up deldoc4 when run in verbose mode - some stringstream
10369   implementations are very inefficient when the string grows long.
10371 * Turn on GLIBCXX_FORCE_NEW when running tests under valgrind to stop the GNU
10372   C++ STL from using a pooling allocator.  This helps make velgrind's leak
10373   tracking more reliable.
10375 * Probe for required valgrind logging options at configure time rather than
10376   when running the test program.  This saves about 2 seconds per test program
10377   invocation.
10379 * Fix testsuite harness to show valgrind output when a test fails (when running
10380   under valgrind in verbose mode).  This had stopped working, probably due to
10381   changes in valgrind 3.
10383 * internaltest: Check that the destructor on a temporary object gets called
10384   at the correct time (Sun C++ deliberately gets this wrong by default, and it
10385   would be good to catch any other compilers which do the same).
10387 * apitest: When running tests on the remote backend and running under valgrind,
10388   run xapian-tcpsrv and xapian-progsrv under valgrind too to avoid issues
10389   with the precision of doubles (bug#94).
10391 flint backend:
10393 * Retry on EINTR from fcntl or waitpid when creating or releasing the flint
10394   lock file.
10396 * xapian-compact: Add --blocksize option to allow the blocksize to be set
10397   (default is 8K as before.)
10399 * WritableDatabase::replace_document(did, doc) was double-incrementing the
10400   "changes" counter when document did didn't exist so it would flush twice
10401   as often - fixed.
10403 * WritableDatabase::postlist_begin(): Remove forced flush when iterating the
10404   posting list of a term which has modified postings pending.
10406 quartz backend:
10408 * quartzcompact: Add --blocksize option to allow the blocksize to be set
10409   (default is 8K as before.)
10411 * WritableDatabase::replace_document(did, doc) was double-incrementing the
10412   "changes" counter when document did didn't exist so it would flush twice
10413   as often - fixed.
10415 remote backend:
10417 * Most of the remote backend has been rewritten.  It now supports most
10418   operations which a local database does (including writing!), the protocol
10419   used is more compact, and a number of layers of classes have been eliminated
10420   and the sequences of method calls simplified, so the code should be easier to
10421   understand and maintain despite doing more.  A number of bugs have been fixed
10422   in the process.
10424 * xapian-tcpsrv: Report errno if we catch a Xapian::Error which has it set.
10426 * xapian-tcpsrv: Fix memory leak in query unserialisation.
10428 build system:
10430 * Now using autoconf 2.60 for snapshots and releases.  Also now using a
10431   libtool patch which improves support for Sun C++'s -library=stlport4 option.
10433 * configure: Fix generation of version.h to work with Solaris sed.
10435 * automake adds suitable rules for rebuilding doxygen_api_conf and
10436   doxygen_source_conf, so remove our less accurate versions.  Also fix
10437   dependencies for regenerating the doxygen documentation, and make the
10438   documentation build work with parallel make.
10440 * Make use of the dist_ prefix to avoid having to list files in EXTRA_DIST as
10441   well as in *_DATA and man_MANS.
10443 * Removed a few unused #include-s.
10445 * include/xapian/error.h: Add hook to allow SWIG bindings to be built using
10446   GCC's visibility support.
10448 * configure: Turn on automake's -Wportability to help ensure our Makefile.am's
10449   are written in a portable way.
10451 * configure: Disable probing and short-cut tests for a FORTRAN compiler.  We
10452   don't use one, but current libtool versions always check for it regardless.
10454 * xapian-config: Prune -L/usr/lib from output of `xapian-config --libs'.
10456 documentation:
10458 * docs/scalability.html: quartzcompact and xapian-compact now allow you to set
10459   the blocksize, so there's no need to use copydatabase if you want to migrate
10460   a database to a larger blocksize.  Mention gmane.  Other minor tweaks.
10462 * Eliminate "XAPIAN_DEPRECATED" from generated documentation.
10464 * PLATFORMS: Added success report for Nexenta (alpha 5), MSVC, and sparc linux.
10465   Updated other results from tinderbox.
10467 * Add links to the wiki from README and the documentation index.
10469 * docs/overview.html: Add discussion of uses of terms vs values.
10471 * docs/overview.html: Rewrite the section on Xapian::Document to remove some
10472   very out-of-date information and make it clearer.
10474 * include/xapian/database.h: Note that automatically allocated document IDs
10475   don't reuse IDs from deleted documents.
10477 * include/xapian/enquire.h: Note that "set_sort_by_relevance" is the default
10478   setting.
10480 * docs/queryparser.html,include/xapian/queryparser.h: Add note that
10481   FLAG_WILDCARD requires you to call set_database.
10483 * HACKING: Add some advice regarding debugging using -D_GLIBCXX_DEBUG,
10484   valgrind, and gdb.
10486 * HACKING: Give URL to Alexandre Duret-Lutz's autotools tutorial, which is much
10487   more up-to-date than the "goat book".
10489 * HACKING: Update and expand the information about the debian packaging.
10491 * Add missing dir_contents files.
10493 portability:
10495 * xapian/version.h: Add a check that _GLIBCXX_DEBUG is set compatibly if we're
10496   compiling with GNU C++ 3.4 or newer.
10498 * Add configure check to see if "-lm" is needed to get maths functions since
10499   newer versions of Sun's C++ compiler seem to require this.
10501 * Automatically put Sun's C++ compiler into "ANSI C++ compliant library" mode
10502   (using -library=stlport4).  This allows us to remove most of the special
10503   case bits of code we've accumulated for just this compiler, which improves
10504   maintainability.
10506 * Sun's C++ compiler implements non-standards-conforming lifetimes for
10507   temporary objects by default.  This means database locks don't get released
10508   when they should, so we now always pass "-features=tmplife" for Sun C++
10509   which selects the behaviour specified by the C++ standard.
10511 Xapian-core 0.9.6 (2006-05-15):
10513 API:
10515 * Rename Xapian::xapian_version_string() and companions to
10516   Xapian::version_string(), etc.  Keep the old functions as aliases which are
10517   marked as deprecated.
10519 * QueryParser: Add rules to handle a boolean filter with a "+" in front (such
10520   as +site:xapian.org).
10522 testsuite:
10524 * queryparsertest: Add another prefix testcase to improve coverage.
10526 build system:
10528 * configure: Simpler check for VALGRIND being set to empty value.
10530 * include/Makefile.am: Add xapian/version.h.timestamp as a dependency on
10531   all-local so that xapian/version.h actually gets regenerated when required.
10533 * Eliminate XAPIAN_BUILD_BACKEND_* from config.h and just use
10534   XAPIAN_HAS_*_BACKEND from xapian/version.h instead.
10536 documentation:
10538 * remote_protocol.html: Document keep-alive messages.
10540 * xapian/enquire.h: Remove bogus documentation for a parameter which doesn't
10541   exist.
10543 * PLATFORMS: Added a summary.  Updated and pruned old entries for which we
10544   have a newer close match.
10546 * HACKING: Expand on details of what's required when changing Xapian (discuss
10547   documentation requirements, and more on why feature tests are vital).
10549 * HACKING: Update section on building debian packages.
10551 portability:
10553 * The tarball is generated with a patched version of libtool 1.5.22 which
10554   fixes libtool bugs on HP-UX and some BSD platforms.
10556 * configure: Fix problems with test for snprintf which affected cygwin, and
10557   possibly some other platforms.
10559 * configure: Tweak version.h generation to cope with CXXCPP putting carriage
10560   returns into its output as can happen on cygwin.
10562 * Fix renaming of "iamflint.tmp" for MS Windows where you can't rename an open
10563   file.
10565 * Fixed MSVC7 warnings.
10567 * Added workaround for newlib header bug.
10569 Xapian-core 0.9.5 (2006-04-08):
10571 API:
10573 * QueryParser:
10575   + Fix FLAG_BOOLEAN_ANY_CASE to really allow any case combination - previously
10576     it only allowed all uppercase or all lowercase.
10578   + Fix QueryParser's handling of terms with trailing "#", "+", or "-" when
10579     set_database has been called and the term doesn't exist in the database
10580     with the suffix.
10582 * Add mechanism to allow xapian-bindings to override deprecation warnings so
10583   we can continue to wrap deprecated methods without lots of warnings.
10585 * Move Enquire::get_matching_terms_end() and Document::termlist_end() inline in
10586   header.
10588 * Database::termlist_begin(): Eliminate the MultiTermList wrapper in the common
10589   case where we're only dealing with a single database.
10591 * Fix TermIterator::positionlist_begin() to work on TermIterator from
10592   Database::termlist_begin().  Make TermList::positionlist_begin() pure
10593   virtual and put dummy implementations in BranchTermList and other
10594   subclasses which can't (or don't) implement it.  This makes it hard to
10595   accidentally fail to implement it in a backend's TermList subclass.
10597 * TermIterator::positionlist_begin() with the remote backend now throws
10598   UnimplementedError instead of InvalidOperationError.
10600 * Implement Enquire::set_sort_by_relevance_then_value().
10602 testsuite:
10604 * Added missing feature test for QueryParser::FLAG_BOOLEAN_ANY_CASE.
10606 * remotetest: Check mset size in tcpmatch1.
10608 flint backend:
10610 * xapian-compact: Fixed segfault from passing an unknown option (e.g.
10611   "xapian-compact --foo").
10613 quartz backend:
10615 * quartzdump,quartzcompact: Fixed segfault from passing an unknown option
10616   (e.g.  "quartzdump --foo").
10618 remote backend:
10620 * xapian-tcpsrv: Don't perform a name lookup on the IP address which an
10621   incoming connection is from as that could easily slow down the search
10622   response - instead just print the IP address itself if output is verbose.
10624 * xapian-tcpsrv: Allow up to 5 connections in the listen queue instead of just
10625   one.
10627 build system:
10629 * Removed unused code from the matcher and the remote, quartz, and flint
10630   backends.
10632 documentation:
10634 * All installed binaries now support --help and --version and have a man page
10635   (which is generated using help2man).
10637 * docs/overview.html: Bring up to date.
10639 * docs/remote_protocol.html: Document messages for requesting and sending a
10640   termlist and a document.
10642 * PLATFORMS, AUTHORS: Updated.
10644 * INSTALL: Improve wording.
10646 * HACKING: Note that we now use a lightly patched version of libtool 1.5.22.
10648 * HACKING: aclocal is part of automake, not autoconf.
10650 portability:
10652 * Added some tweaks to help support compilation with MSVC.
10654 packaging:
10656 * RPMs: package the new man pages.
10658 debug code:
10660 * Add missing spaces in some debug output.
10662 Xapian-core 0.9.4 (2006-02-21):
10664 API:
10666 * Flag deprecated methods such that the compiler gives a warning, for compilers
10667   which support such a feature (most notably GCC >= 3.1).
10669 * Correct typo in name of definition of function xapian_revision().
10671 testsuite:
10673 * Updated uses of deprecated methods in the testsuite.
10675 build system:
10677 * xapian-config: Set exec_prefix and prefix at top of script so that
10678   xapian-config works after xapian-core is installed.
10680 documentation:
10682 * Add documentation comment for Enquire::set_sort_by_value_then_relevance().
10684 * README: Add pointer to HACKING.  Change "CVS access" to "SVN access".
10686 * PLATFORMS: Updated from tinderbox.
10688 * COPYING: Update second occurrence of old FSF address.
10690 Xapian-core 0.9.3 (2006-02-16):
10692 API:
10694 * Added 4 functions to report version information for the library version being
10695   used (which may not be the same as that compiled against if shared libraries
10696   are in use):  xapian_version_string(), xapian_major_version(),
10697   xapian_minor_version(), xapian_revision().
10699 * Xapian::QueryParser:
10701   + Fix handling of "+" terms in a query when the default query operator is
10702     AND.  Added regression test for this.
10704   + Added "AND NOT" as a synonym for "NOT".  Added feature tests for this.
10706 * Fix prototype for ESet::operator[] to take parameter of type termcount
10707   instead of doccount (doccount and termcount are both typedefs to the same
10708   type so this really just makes the prototype more consistent).
10710 * Xapian::Stem: Check for malloc and calloc failing to allocate memory and
10711   throw an exception.  Richard has fixed this upstream in snowball, so this is
10712   a temporary fix until we import a new version of snowball.
10714 * Xapian::Database: Trying to open a database for reading which doesn't exist
10715   now fails with DatabaseOpeningError instead of FeatureUnavailableError.
10716   Added regression test for this.
10718 * Add Stopper::get_description() and SimpleStopper::get_description().
10720 testsuite:
10722 * Fixed testsuite harness to work with valgrind on 64 bit platforms.
10724 * Merged the "running tests" section of docs/tests.html into the similar
10725   section in HACKING, and make docs/tests.html refer the reader to HACKING for
10726   more information.
10728 * Tidied and enhanced environmental variables which the test suite harness
10729   recongnises:
10731   + OM_TEST_BACKEND: Removed support since the "-b" switch to apitest allows
10732     you control which backend is used, making OM_TEST_BACKEND pretty much
10733     redundant.
10735   + XAPIAN_SIG_DFL: Renamed to XAPIAN_TESTSUITE_SIG_DFL.
10737   + XAPIAN_TESTSUITE_OUTPUT: New environmental variable to control use of
10738     ANSI colour escape sequences in test output (set to "plain" to disable
10739     them, unset, empty, or "auto" to check if stdout is a tty, or anything
10740     else to force colour).
10742 flint backend:
10744 * xapian-compact: Added "--multipass" option to merge postlists in pairs or
10745   triples until all are merged.  Generally this is faster than an N-way merge,
10746   but it does require more disk space for temporary files so it's not the
10747   default.
10749 quartz backend:
10751 * quartzcheck: If the database is too broken to open, emit a warning message
10752   and bump the error count.
10754 build system:
10756 * Now generate snapshots and releases with automake 1.9.6 (was 1.9.5) and
10757   libtool 1.5.22 (was 1.5.18).
10759 * configure: If not cross-compiling, try to actually run a test program built
10760   with the C++ compiler, not just link one.
10762 * configure: Fix to actually skip the check for valgrind if VALGRIND is set to
10763   an empty value.
10765 * configure: Add sanity check for MS Windows that "find" is Unix-like find, not
10766   MSDOS-like.
10768 * Fix conditional compilation of flint backend - it was being disabled when
10769   quartz was, not when flint was supposed to be.
10771 documentation:
10773 * INSTALL,README: Updated.
10775 * Give pointer to replacements for the deprecated Enquire sorting methods
10776   in the doxygen collated documentation.
10778 * PLATFORMS: Added success reports for ppc64 linux and Fedora Core 4.  Updated
10779   from the tinderbox.
10781 * HACKING: Note platforms valgrind now has solid support for; Improve
10782   phrasing in a few places.
10784 * Upgrade to using doxygen 1.4.6 for generating API documentation.
10786 * Change title of the "full source" documentation to "Internal Source
10787   Documentation" rather than "Full source documentation" to make it
10788   clearer it's only useful if you want to modify Xapian itself.
10790 * Fix documentation comments for the values of QueryParser::feature_flag so
10791   doxygen actually pulls out the documentation for them.  Add documentation for
10792   the parameters of QueryParser::parse_query().
10794 * queryparser.html: Document wildcards.
10796 portability:
10798 * Fix compilation with GCC 4.0.1 and later (need to forward declare class
10799   InMemoryDatabase) (bug #69).
10801 * Fix compilation under cygwin (broken in 0.9.2).
10803 * Don't pass NULL for the second parameter of execl() - the Linux man page
10804   says execl takes "one or more pointers to null-terminated strings".  Also
10805   cast the NULL to (void*) to avoid "missing sentinel" warning from GCC4.
10807 * Use snprintf instead of sprintf where available (we were attempting to
10808   do this in some places before, but the configure test was broken so
10809   sprintf was always being used).
10811 * Enable more warnings under aCC and fix minor issues highlighted.  Suppress
10812   "Entire translation unit was empty" warning which isn't useful to us.
10814 * Write top-bit set characters in the source using \xXX notation to avoid
10815   warnings from Intel's C++ compiler.
10817 * configure: TYPE_SOCKLEN_T fails hard, so only run it if we've successfully
10818   run other socket tests.
10820 * queryparser/accentnormalisingitor.h: #include <limits.h> for CHAR_BIT.
10822 * bin/xapian-compact.cc: Fix printf type mismatch on 64 bit platforms.
10824 * Replace pair<bool, string> with a simple class BoolAndString - the pair
10825   results in a 4328 byte symbol on HP-UX which gets truncated (to 4000 bytes).
10826   Most likely this is harmless, but it causes a warning.
10828 * configure: Disable flint backend by default if building for djgpp or msdos.
10830 * xapian-config: Previously when linking without libtool we've always thrown
10831   in dependency_libs, even though only some platforms need it (because it's
10832   generally pretty harmless).  However some Linux distros have an unhelpful
10833   policy of not packaging .la files, so libxapian.la isn't available to
10834   extract dependency_libs from.  Linux is a platform which doesn't require
10835   dependency_libs to be explicitly linked, so extend xapian-config to not
10836   pull in dependency_libs if libtool's link_all_deplibs_CXX=no.
10838 * xapian-config: If the current platform needs dependency_libs and
10839   libxapian.la's dependency_libs contains another .la file, transform it into a
10840   pair of -L and -l options, and recursively expand its dependency_libs (if
10841   any).
10843 * Don't pass functions with C++ linkage to places wanting pointers to functions
10844   with C linkage.  So far this has worked for us, but it causes warnings with
10845   some compilers, and may not be portable.
10847 * Compaq C++ 7.1 doesn't suffer from the problem which previously prevented
10848   it from building Xapian.  This release includes workarounds for some
10849   oddities with errno.h support in this compiler, but currently the build
10850   fails when trying to link a binary with the library.
10852 packaging:
10854 * RPM: Invoke %setup correctly in xapian.spec.
10856 debug code:
10858 * Add missing '#include <iostream>' when TIMING_PATCH is defined.
10860 Xapian-core 0.9.2 (2005-07-15):
10862 API:
10864 * QueryParser:
10866   + Added optional "flags" argument to parse_query method.
10868   + Add flag FLAG_BOOLEAN_ANY_CASE which tells the QueryParser that boolean
10869     operators such as "AND", "OR", and "NEAR" should be recognised even if
10870     they aren't fully capitalised (so "and", "And", "aNd", etc will work too).
10872   + Add flag FLAG_WILDCARD which tells the QueryParser to allow right
10873     truncation e.g. "xap*".
10875   + Fixed to handle "-site:microsoft.com" where site is a boolean prefix.
10876     Added testcases for this.
10878 testsuite:
10880 * The test harness was incorrectly creating a quartz database when a flint one
10881   was requested, which meant tests weren't being run against flint and so it
10882   had bugs rendering it pretty much unusable.
10884 * Added regression test longpositionlist1 (to check encoding/decoding a long
10885   position list, which flint had problems with).
10887 flint backend:
10889 * Bumped format version number.
10891 * Added new "xapian-compact" program which can compact and merge flint
10892   databases in a similar way to how quartzcompact does for quartz databases.
10894 * Fixed to auto-detect database type when opening an existing Flint database
10895   as a WritableDatabase.
10897 * The code to encode the position list size, first entry, and last entry
10898   didn't match the code to decode them!  Reworked both to match, using a
10899   slightly more compact encoding.
10901 * We were failing to append "DB" to the path when opening a table for reading.
10903 * Rewrite of FlintAllTermsList with several fewer member variables.  The
10904   rewrite fixes a bug too - the old version wasn't ignoring the metainfo
10905   entry which is now in the postlist table.
10907 * It seems we need to explicitly kill the child process used for locking.
10908   Otherwise when we have two databases locked just closing the connection
10909   doesn't cause the child to die.  I don't understand why it's needed, but this
10910   fix is at least clean.
10912 quartz backend:
10914 * quartzcompact: Fix mis-repacking of keys in positionlist table when merging
10915   several databases.
10917 * Disable assertion in allterms iteration which is incorrect in a corner case.
10918   This is only a problem if a termname contains zero bytes and you're using a
10919   debug build.  Add regression test test_specialterms2.
10921 remote backend:
10923 * Implement sorting on a value with the remote backend.
10925 build system:
10927 * Pass automake options to AM_INIT_AUTOMAKE rather than specifying them in
10928   Makefile.am.  This way, the version requirements for autoconf and automake
10929   are stated close together.
10931 * configure: -Wshadow causes false positives with GCC 3.0.4, so only enable it
10932   for 3.1 and up.
10934 * configure: Eliminate use of "ln -s" when generating include/xapian/version.h
10935   since it seems to cause problems on Solaris in some setups and isn't really
10936   necessary.
10938 * Add dependency mechanism so version.h gets regenerated when the template is
10939   changed.
10941 * configure: Check for spaces in build directory, source directory, or install
10942   prefix and die with a helpful message.
10944 * Add dependency to generate queryparser_token.h.
10946 * Eliminated TOP_SRCDIR and TOP_BUILDDIR - it's better to just use top_srcdir
10947   and top_builddir directly.
10949 * configure: Generate the list of source files to feed to doxygen by inspecting
10950   all the Makefile.am files prior to running autoreconf rather than by using
10951   "find" when the user runs ./configure.  This speeds up configure, avoids
10952   generating docs for random .cc and .h files which aren't part of xapian-core,
10953   and avoids problems with picking up FIND.EXE on MS Windows.
10955 documentation:
10957 * Expanded explanation of the "descending docid with boolean weighting" trick
10958   for fast date ordered searching in Enquire::set_docid_order() API docs.
10960 * docs/intro_ir.html: Citeseer has moved, so update link.
10962 * testsuite/testsuite.cc: Update URL for valgrind FAQ in comment.
10964 * COPYING: Update FSF address.
10966 * HACKING: Minor updates to release checklist.
10968 portability:
10970 * Assorted tweaks towards allowing compilation with MSVC.
10972 packaging:
10974 * xapian.spec.in: Package xapian-compact.
10976 Xapian-core 0.9.1 (2005-06-06):
10978 API:
10980 * Fix SEGV on get_terms_begin() on an empty Query object.  This was causing
10981   a SEGV in Omega with an empty query.
10983 * Put Query::get_terms_end() inline in header.
10985 flint backend:
10987 * Added the new "flint" backend, which starts out as a copy of the quartz
10988   backend plus some modifications and replacements.  When creating a database
10989   without a specified backend, quartz is still used unless the environmental
10990   variable XAPIAN_PREFER_FLINT is set to a non-empty value.
10992 * apitest now runs tests on flint as well as the other backends.
10994 * Removed undocumented (and hence the little used) quartz "log" feature.
10996 * Implement new fork+fcntl+exec based locking (for Unix) and CreateFile based
10997   locking (for Windows - currently untested).
10999 * Move the special key/tag pair holding the total document length and doc id
11000   high water mark from the record table to the postlist table.  This means that
11001   when appending documents, the insertion point will now always be at the end
11002   of the record table which is more efficient.  We need to jump around the
11003   postlist table to merge postings in anyway.
11005 * Changed metafile magic to be different from quartz, and make the metafile
11006   version a datestamp which we'll change each time the format changes.
11008 * Check the return value of close() when writing the metafile.
11010 * Flint position list table now stores entries using interpolative coding
11011   (which is significantly more compact).
11013 quartz backend:
11015 * quartzcheck: Fixed corner case where you couldn't check a single Btree table
11016   which was just the DB and baseA/baseB files in a directory (Xapian doesn't
11017   produce anything like this, but btreetest does while unit testing the
11018   Btree code).
11020 build system:
11022 * Releases are now created using libtool 1.5.18 and automake 1.9.5.
11024 * configure: Pass more -W flags to g++ (including -Wundef which caught the
11025   getopt problem fixed in this release).  Fixed new GCC warnings from these new
11026   flags.
11028 * Fixed a lingering DOXYGEN_HAVE_DOT reference.
11030 * Fixed accidentally pruned #define which meant that getopt code was being
11031   included even on systems which use glibc (on such systems, we should use
11032   the glibc copy of the code instead).
11034 * queryparser/queryparser.lemony: Add missing '#include <config.h>'.
11036 documentation:
11038 * Added missing documentation comments for a QueryParser methods added in
11039   0.9.0.
11041 * docs/quartzdesign.html: Removed warning that quartz is still in development.
11043 * PLATFORMS: Updated from tinderbox.
11045 * configure: Describe CC_FOR_BUILD in configure --help output.
11047 * HACKING: Updated release instructions to refer to SVN, and note that release
11048   tarballs are now built specially rather than being copies of snapshots.
11049   Update information about the SVN tag name to use for debian files.
11051 * HACKING: Add "email Fabrice" to the release checklist so that RPM
11052   spec files don't lag behind.
11054 * Fixed a few spelling mistakes.
11056 packaging:
11058 * xapian.spec: Remove bogus %setup line left over from when we packaged
11059   xapian-core and xapian-examples together from separate tarballs.
11061 debug code:
11063 * api/omqueryinternal.cc: Fixed compilation with --enable-debug.
11065 * common/omdebug.h: Replace C style cast with static_cast<> which reveals that
11066   we were discarding const (harmlessly though).
11068 Xapian-core 0.9.0 (2005-05-13):
11070 API:
11072 * Query objects really need to be immutable after construction (otherwise we
11073   need a copy-on-write mechanism).  To achieve this the following API changes
11074   were required:
11076   + Remove Query::set_length() in favour of an optional length
11077     parameter to Enquire::set_query().
11079   + Eliminated Query::set_elite_set_size() in favour of optional parameter
11080     to constructor.
11082   + Eliminated Query::set_window() in favour of an optional parameter to the
11083     constructor.
11085 * Removed OP_WEIGHT_CUTOFF, since it doesn't actually seem to add useful
11086   functionality over using Enquire::set_cutoff().
11088 * MSet::max_size() (which only exists so that MSet is an STL container) now
11089   returns MSet::size() and is inlined from the header.
11091 * Added ESet::max_size() (for STL compatibility).
11093 * Fixed Xapian::RSet to have the same "it's a handle" copy semantics as most of
11094   the other classes.
11096 * Rewritten QueryParser class:
11098   + Uses Lemon instead of Bison to generate the parser, which enables us to
11099     stop using static data, so this class is at last reentrant.
11101   + QueryParser now uses a PIMPL style with reference counted internals like
11102     most of the other Xapian classes.
11104   + Direct access to member variables has gone, which unfortunately forces an
11105     API change (but this fixes bug #39).  Instead of accessing
11106     QueryParser::termlist member variable, iterate over terms using
11107     Query::get_terms_begin() and get_terms_end() on the returned Query object.
11108     Direct access to stoplist is replaced by QueryParser::get_stoplist_begin()
11109     and get_stoplist_end(); and to unstem by get_unstem_begin() and
11110     get_unstem_end().
11112   + The rewrite parses many real world examples better than the old version.
11114   + Now allow searches for C#, etc.  If a database has been set, for this and +
11115     and - suffixes, check if the term actually exists, and if not, ignore the
11116     suffix if the unsuffixed term exists.
11118   + Added QueryParser::get_description() method (not very descriptive yet!)
11120   + Added backward compatibility wrapper for old version of
11121     QueryParser::set_stemming_options().
11123   + xapian.h now automatically includes xapian/queryparser.h.  Directly
11124     including xapian/queryparser.h will continue to work for now, but is
11125     deprecated.
11127   + QueryParser::parse_query() was failing to clear termlist and unstem
11128     - the rewrite fixes this.
11130   + New QueryParser parses "term prefix:(term2 term3)" correctly.
11132 * Added Xapian::SimpleStopper which just stops terms specified by a pair of
11133   iterators.  This should be sufficient for the majority of uses.
11135 * Tidied up the Enquire sorting API and added ability to reverse sort on a
11136   value.  Removed sort_bands support.
11138 * Enquire::get_description() improved.
11140 * Methods which return an end iterator where the internals are just NULL are
11141   now inline in the header for efficiency.  Should we ever need to change an
11142   implementation, we can easily move methods back into the library and bump the
11143   library version suitably.
11145 * Added Stem::operator() as preferred alternative to Stem::stem_word().
11147 * Simplified Stem internal design by restructuring to eliminate a few internal
11148   methods.
11150 * BM25Weight: Avoid fetching document length if we're simply going to multiply
11151   it by zero!
11153 testsuite:
11155 * Fixed TEST_EQUAL_DOUBLE to use DBL_EPSILON correctly.
11157 * Rewrite of index_utils test harness code, removing unused and unusual
11158   features.  Data files for tests are now easier to write.  These changes
11159   also fix the bug that ^x didn't actually decode hex values correctly.
11161 * tests/testdata/etext.txt: Stripped carriage returns.
11163 * apitest: Extended stemlang1 to check that trying to create
11164   a stemmer for a non-existent language throws InvalidArgumentError.
11166 * queryparsertest:
11168   + Moved into tests/ subdirectory.
11170   + Reworked to use the standard testsuite harness.
11172   + Added tests for new features in the rewritten QueryParser.
11174 quartz backend:
11176 * quartzcheck: Now checks the structure of all the tables, not
11177   just the postlist table, and cross-checks doclen values between
11178   termlist and postlist tables.  Recognises "--help" option.  Should
11179   now continue after an error (typically it would crash before), and
11180   counts the number of errors found.  Now exits with non-zero status
11181   if any errors were found.  More readable output.
11183 * quartzcompact: Extended to allow merging several quartz
11184   databases to produce a single compact quartz database.  This
11185   allows for faster building - simple index in chunks, then merge
11186   the chunks.
11188 * quartzcompact: Made full compaction a tiny bit more compact.
11190 * quartzcompact: Added "fuller compaction" mode, which ignores the usual "at
11191   least 4 items per block" rule.  This achieves slightly tighter compaction,
11192   though it's probably not advisable to use this option if you plan to update
11193   the compacted database.
11195 * Improved compaction by a few % in non-full case.  Tighter bound on amount of
11196   memory to reserve to read the tag into.
11198 * Fix skip_to on an allterms TermIterator to set the current term when the
11199   skip_to-ed term is in the database.  Add regression test for this
11200   (allterms5).
11202 * Values are stored in sorted order so we can stop unpacking the list once we
11203   get to one after the one we're looking for (in the case where the one we're
11204   looking for doesn't exist).
11206 build system:
11208 * configure: Check that the C++ compiler can actually link a program.
11209   AC_LANG_CXX doesn't, and if it can't find a C++ compiler it'll just return
11210   "g++" which just leads to a later configure test failing in a confusing way.
11212 * configure: corrected configure output of "none known for yes" or "none known
11213   for no" to "none known for g++-3.2" or similar.
11215 * include/xapian/version.h: Define XAPIAN_HAS_xxx_BACKEND for each backend
11216   which is enabled.  The bindings need this, and user code might find it useful
11217   too.
11219 * include/xapian/database.h: Don't declare the backend factory functions if the
11220   corresponding backend has been disabled.  This means that trying to use a
11221   disabled backend will be caught at compile time rather than link time.
11223 * configure: Enhanced valgrind test to (a) see if --tool=memcheck
11224   is needed and (b) see if valgrind actually works (we don't want to
11225   try to use an x86 valgrind on an x86_64 box).
11227 * configure: Suppress 2 Intel C++ warnings which we can't easily code around,
11228   and enable -Werror automatically with --enable-maintainer-mode.
11230 * Clearer make rules for building Postscript doxygen docs.
11232 * Removed some no longer used code.
11234 * Moved a number of method definitions out of headers because they are virtual,
11235   or too large to be sensible candidates for inlining.
11237 * Eliminated the extra library for the queryparser - it's tiny compared to the
11238   main library and having it around just complicates things.
11240 * configure: We no longer need Bison, but we do need CC_FOR_BUILD to compile
11241   Lemon with.
11243 * Snapshot generator now appends _svn6789 or similar to the version string.
11244   Adjusted configure and XO_LIB_XAPIAN macro to take this into account.
11246 * configure: If any tools needed for documentation are missing
11247   and we're in maintainer mode, die with a suitable error in
11248   configure rather than with strange errors when building the
11249   documentation.
11251 * docs/Makefile.am: Explicitly set the pool_size for latex, because we
11252   now seem to overflow the default setting on some systems.
11254 * docs/Makefile.am: Use $(MAKE) instead of make.
11256 documentation:
11258 * Numerous improvements to documentation comments.  Added documentation
11259   comments for QueryParser class.
11261 * HACKING: Added better description of how reference-counted API
11262   classes are structured.
11264 * HACKING: Note that '#include <limits>' isn't supported by GCC 2.95,
11265   and other assorted minor tweaks.
11267 * HACKING: Note how to disable use of VALGRIND on the make check
11268   command line, or when using runtest directly.
11270 * Updated all documentation mentions of CVS to talk about Subversion
11271   instead.
11273 * PLATFORMS: Updated from tinderbox and other sources.
11275 * PLATFORMS: Added minimal testcase which fails to compile with
11276   Compaq's C++ compiler (cxx).
11278 * INSTALL,README: Updated.
11280 * docs/queryparser.html: Note that + and - work on phrases and
11281   bracketed expressions.
11283 * docs/intro_ir.html: Corrected two errors.
11285 * docs/stemming.html: Stemming appears to be applicable to Japanese
11286   so don't say it isn't!
11288 examples:
11290 * Moved xapian-examples module to examples subdirectory of xapian-core.
11292 * quest: Added stopword handling.
11294 portability:
11296 * configure: autoconf identifies Intel's C++ compiler as GCC, so probe for
11297   which we actually have.
11299 * Xapian will now compile cleanly with Intel C++ 8.1 on ia64 Linux and
11300   on x86 Linux.
11302 * backends/quartz/btree.cc: Fixed GCC compilation warning.
11304 * tests/api_db.cc: Fixed warning from Sun's C++ compiler.
11306 * configure: Automatically enable ANSI C++ mode for SGI's compiler
11307   with '-LANG:std'; check that any automatically determined flags
11308   for ANSI C++ mode actually allow us to compile a trivial program
11309   - if they don't it probably means the compiler isn't the one we
11310   were expecting, but one installed with the same name, so we now
11311   drop the flags in this case.
11313 * The compile on IRIX with SGI compiler is now warning free, apart from two
11314   "unused variable" warnings in Snowball generated code.
11316 * On WIN32, don't define NOMINMAX if it is already defined.
11318 packaging:
11320 * xapian.spec: Don't say "%makeinstall" in a comment since rpm
11321   tries to expand it and explodes.
11323 * xapian.spec: '/usr/share' -> '%{_datadir}'.
11325 * xapian.spec: Put the .so in the -devel package (it's only useful
11326   for linking to - the .so.* files are all that's needed at runtime).
11328 debug code:
11330 * net/socketserver.cc: Fixed typo in debug code.
11332 Xapian-core 0.8.5 (2004-12-23):
11334 quartz backend:
11336 * quartzcompact: When full_compaction is enabled, don't fill the last few bytes
11337   of a block if that would mean we needed an extra item and the overhead for
11338   that item would use up more of the next block than we save.  This reduces the
11339   table size after full compaction by up to 0.2% in my tests!
11341 * quartzcompact: Tables sizes will always be a whole number of Kbytes, since
11342   the blocksize is, so report the size in K.  Also report the change in size as
11343   well as the before and after sizes.
11345 * quartzcompact: Added missing '#include <config.h>' so that largefile support
11346   is enabled when we call stat() and we report compression statistics for
11347   tables > 2G.
11349 * quartzcompact: Added --no-full / -n option to disable full compaction.  This
11350   may be useful if you want to update the database after compacting it (need to
11351   test to see if this option is actually useful).
11353 * Renamed Btree::compress() to Btree::compact() for consistency with
11354   "full_compaction" and "quartzcompact".  Also, "compress" is confusing since
11355   we use that term in the zlib patch.
11357 build system:
11359 * xapian-config: Fixed --libs output to not include libxapian.la.
11361 * Added missing '#include <config.h>' to various .cc files (the omissions were
11362   probably harmless, but config.h should be included as the first thing any
11363   source file does).
11365 documentation:
11367 * Minor updates.
11369 packaging:
11371 * RPM spec file: %makeinstall puts the wrong paths in the .la files so use
11372   "make DESTDIR=... install" instead.
11374 debug code:
11376 * Fixed to build with AssertParanoid enabled.
11378 Xapian-core 0.8.4 (2004-12-08):
11380 API:
11382 * Added constructors to Database and WritableDatabase which fulfil the role
11383   that the Auto::open() factory functions currently do.  Auto::open() is
11384   now deprecated.
11386 * Removed the ability to write a Xapian object to an ostream directly, as
11387   it's little used and potentially dangerous ('cout << mset[i];' will
11388   compile, but you almost certainly meant 'cout << *mset[i];').  You can
11389   get the old effect by writing 'cout << obj->get_description();' instead
11390   of 'cout << obj;'.  Note that including xapian.h no longer pulls in
11391   fstream, which code may have been implicitly relying on - if this is
11392   a problem add '#include <fstream>' after '#include <xapian.h>'.
11394 * QueryParser: Be smarter about when to add a ':' when adding a term prefix.
11396 * BoolWeight::unserialise() now returns BoolWeight*, and similarly for
11397   TradWeight and BM25Weight.  BoolWeight::clone() now returns BoolWeight *.
11399 * If a database contains no positional information, change NEAR and PHRASE
11400   queries into AND queries (as otherwise they'd return no matches at all)
11401   (bug #56).  Added feature test phraseorneartoand1.
11403 * Renamed BM25 parameters to match standard naming in papers and elsewhere
11404   (A->k3, B->k1, C->k2, D->b), eliminated the extra factor of 2 which our C
11405   had, and reordered the parameters to k1, k2, k3.  This is an incompatible API
11406   change for BM25Weight(), so if you are using custom parameters for BM25
11407   you'll need to update your code.
11409 * During query expansion, if we estimate the term frequency, ensure it has a
11410   sane value (>= r and <= N - R + r) rather than bodging around the problem
11411   later on.
11413 * TradWeight, BM25Weight: termfreq is always exact for matching (we only
11414   approximate it for query expansion) so replace code to work around bad
11415   approximations with Assert() to make sure this never happens.
11417 testsuite:
11419 * runtest: Enhanced to allow it to run test programs under valgrind and other
11420   tools (gdb was already supported).
11422 * runtest: now works with valgrind 2.1.2 and later (valgrind's --logfile-fd
11423   option was renamed to --log-fd).
11425 * runtest: Allow VALGRIND environmental variable to override the value we got
11426   from configure.
11428 * Added a dependency so "make check" regenerates runtest if necessary.
11430 * The test programs now point the user to the runtest script if srcdir can't
11431   be guessed.  And they no longer look for the test program in the tests
11432   subdirectory of the current directory.
11434 * btreetest: Fixed memory leaks in test_cursor1 (the testcase itself was
11435   causing the leak, not the library).
11437 * apitest: Fixed mset_range_is_same() and mset_range_is_same_weights() helper
11438   functions which were only comparing the first item in the range.  Thankfully
11439   the tests still all pass so this wasn't hiding any bugs.
11441 * apitest: A modified version of changequery1 fails - the bug is obscure and
11442   subtle, and the fix is tricky so set the modified test to SKIP for now.
11444 * apitest: Added test_weight1 which tests the built-in Xapian::Weight
11445   subclasses and test_userweight1 which tests user defined weighting schemes
11446   (bug#8).
11448 * quartztest: Test with DB_CREATE_OR_OPEN in writelock1.
11450 quartz backend:
11452 * An interrupted update could cause any further updates to fail with "New
11453   revision too low" because the new revision was being calculated incorrectly -
11454   fixed (bug#55).
11456 * Fixed Bcursor::del() which didn't always leave the cursor on the next item
11457   like it should.  This may have been causing problems when trying to remove
11458   the last references to a particular term.
11460 * Fixed ultra-obscure bug in the code which finds a key suitable to
11461   discriminating between two blocks in a B-tree branch (discovered by reading
11462   the code).  Comparing the keys didn't consider the length of the second, so
11463   it is possible the code would miscompare.  But in reality this is extremely
11464   unlikely to happen, and even then would probably just mean that the
11465   discriminating key wouldn't be as short as it could be (wasting a few bytes
11466   but otherwise harmless).
11468 * If we're removing a posting list entirely, often there will only be one
11469   chunk, so avoid creating a Bcursor in this case.
11471 * Simplified Btree::compare_keys() by removing the last case which was dead
11472   code as it was covered by an earlier case.
11474 * Check that any user specified block size is a power of 2.  If the block
11475   size passed is invalid, use the default of 8192 rather than throwing an
11476   exception.
11478 * Started to refactor the Btree manager by introducing Item and Key classes
11479   which take care of handling the on-disk format, and eliminated duplicated
11480   tag reading code in Btree and Bcursor.  These changes will pave the way for
11481   improvements to the on disk format.
11483 * Applied the Quartz "DANGEROUS" patch, but disabled for now.  This way it
11484   won't keep being broken by changes to the code.
11486 * quartzcompact: Added --help and --version; Check that the source path and
11487   desitination path aren't the same; Report each table name when we start
11488   compacting it, and some simple stats on the compaction achieved when we
11489   finish.
11491 muscat36 backend:
11493 * Removed a default parameter value from one variant of
11494   Xapian::Muscat36::open_db() so that there's only one candidate for
11495   open_db(string).
11497 build system:
11499 * xapian-config: If flags are needed to select ANSI mode with the current
11500   compiler, then make xapian-config --cxxflags include them so that Xapian
11501   users don't have to jump through the same hoops we do.
11503 * xapian-config: Added --swigflags option for use with SWIG.
11505 * XO_LIB_XAPIAN now passes ac_top_srcdir to xapian-config which uses it
11506   (if provided) to say "configure.ac" or "configure.in" rather than
11507   "configure.in (or configure.ac)" in the "Add AC_PROG_LIBTOOL"
11508   error message.
11510 * Cleaned up the build system in a few places.
11512 * Removed a few totally unneeded header includes.
11514 * Moved a number of functions and methods out of headers because they're not
11515   good inlining candidates (too big or virtual methods).
11517 * Changed C style casts to C++ style.  The syntax is ugly, but they do make the
11518   intent clearer which is a good thing.  Note this as a coding style guideline
11519   in HACKING.
11521 * configure.ac: Automatically add -Werror to CFLAGS and CXXFLAGS if
11522   maintainer mode is enabled and we're using GCC3 or newer.  Don't do
11523   this for older GCCs as GCC 2.95 issues spurious warnings.
11525 * Reworked how include/xapian/version.h is generated so that it works
11526   better with compilers other than GCC, and with HP-UX sed.
11528 * XAPIAN_VERSION is now a string (e.g. "0.8.4").
11530 * Added new #define XAPIAN_REVISION (which is 4 for version 0.8.4).
11532 documentation:
11534 * docs/bm25.html,docs/intro_ir.html: Reworked to talk about Xapian
11535   rather than Muscat.  Also improved the appearance of the formulae.
11537 * HACKING: Valgrind now supports x86 FreeBSD and PowerPC Linux.
11539 * Documented parameters of Enquire::register_match_decider().
11541 * We now use doxygen 1.3.8 to build documentation for snapshots and releases.
11543 * PLATFORMS: Updated from the tinderbox (which now runs builds on machines
11544   available in HP's testdrive scheme) and other assorted reports.
11546 * PLATFORMS: Removed reports from versions prior to 0.7.0.  So much
11547   has changed that these are of little value.
11549 * docs/scalability.html: Added note warning about benchmarking from cold.
11551 * Assorted other minor documentation improvements.
11553 portability:
11555 * configure.ac: Improved snprintf configure test to actually
11556   check that it works (older implementations may have different
11557   semantics for the return value, and at least one ignores the length
11558   restriction entirely!)
11560 * Reworked the GNU getopt source we use so that the header is clean and
11561   suitable for use from a reasonably ISO-conforming C++ compiler instead of
11562   being full of cruft for working around quirky C compilers which C++ compilers
11563   tend to stumble over.
11565 * Use SOCKLEN_T for the type we need to pass to various socket calls, since
11566   HPUX defines socklen_t yet wants int in those calls.  Reworked the
11567   TYPE_SOCKLEN_T test we use.
11569 * On Windows, we want winsock2.h instead of sys/socket.h.  Mingw doesn't seem
11570   to even have the latter, so I think previously we've been compiling by
11571   picking one up from somewhere random!
11573 * Change the small number of C sources we have to be C++ so we can compile
11574   everything with the C++ compiler.  This way we don't need to worry about
11575   configure choosing a mismatching pair of compilers, or about whether
11576   configure tests with the C compiler don't apply to the C++ compiler, or vice
11577   versa.
11579 * Compiles and passes testsuite with HP's aCC (we have to compile in
11580   ANSI mode, so we automatically add -AA to CXXFLAGS).
11582 * If the link test detects pread and pwrite are present, get configure to try
11583   out prototypes for pread and pwrite.  This is much cleaner than trying to
11584   find the right combination of preprocessor defines to get each platform's
11585   system headers to provide prototypes.
11587 * configure: Disable probing for pread/pwrite on HP-UX as they're present but
11588   don't work when LFS (Large File Support) is enabled, and we definitely want
11589   LFS.
11591 * Fixed some warnings from Sun's C++ compiler.
11593 * Provide our own C_isalpha(), etc replacements for isalpha(), etc
11594   which always work in the C locale and avoid signed char problems.
11596 * For mingw/cygwin, pass -no-undefined when linking libxapianqueryparser.la
11597   so libtool builds a shared library.  Also pass the magic linker flag
11598   -Wl,--enable-runtime-pseudo-reloc if configure has determined it is needed.
11600 * For cygwin, use the underlying MoveFile API call for locking, as link()
11601   doesn't work on FAT partitions.  And don't rely on HAVE_LINK to control
11602   whether we use link() otherwise - if the configure test somehow misfires, a
11603   compilation error is better than using rename() on Unix as that would cause a
11604   second writer to smash the lock of the first.
11606 * Closer to building with Compaq C++ - add "-std strict_ansi" to CXXFLAGS, and
11607   tweaked the code in several places.  It currently dies trying to compile
11608   the PIMPL smart pointer template code which looks hard to fix.
11610 debug code:
11612 * HACKING: Document that %% in XAPIAN_DEBUG_LOG is substituted with
11613   the process-id, and that setting XAPIAN_DEBUG_FLAGS to -1 enables
11614   all debug messages.
11616 * Removed compatibility code for checking environment variables OM_DEBUG_FILE
11617   and OM_DEBUG_TYPES.
11619 Xapian-core 0.8.3 (2004-09-20):
11621 API:
11623 * Fixed bug which caused a segmentation fault or odd "Document not found"
11624   exceptions when new check_at_least parameter to Enquire::get_mset() was used
11625   and there weren't many matches (regression test checkatleast1).
11627 remote backend:
11629 * Renamed omtcpsrv to xapian-tcpsrv and omprogsrv to xapian-progsrv.
11631 packaging:
11633 * RPM packaging now has a separate package for the runtime libraries to
11634   allow 32 and 64 bit versions to be installed concurrently.
11636 * RPM for xapian-core now includes binaries from xapian-examples.
11638 debug code:
11640 * Fixed to compile with debug tracing enabled.
11642 Xapian-core 0.8.2 (2004-09-13):
11644 API:
11646 * Removed the compatibility layer which allowed programs written against the
11647   pre-0.7.0 API to be compiled.
11649 * Added new ESet methods swap(), back() and operator[].
11651 * Xapian::WritableDatabase::replace_document can now be used
11652   to add a document with a specific docid (to allow keeping docids
11653   in sync with numeric UIDs from another system).
11655 * Added Xapian::WritableDatabase::replace_document and
11656   delete_document variants which take a unique id term name rather
11657   than a document id.
11659 * Enquire::get_mset(): If a matchdecider is specified and no matches
11660   are requested, the lower bound on the number of matches must be 0
11661   (since the matchdecider could reject all the matches).
11663 * Renamed Query::is_empty() to Query::empty() for consistency.  Keep
11664   Query::is_empty() for now as a deprecated alias.
11666 * Enquire::set_sorting() now takes an optional third parameter which allows
11667   you to specify a sort by value, then relevance, then docid instead of
11668   by value then docid.
11670 * Enquire::get_mset() now takes an optional "check_at_least" parameter
11671   which allows Omega's MIN_HITS functionality to be implemented in the matcher
11672   (where it can be done a bit more efficiently).
11674 testsuite:
11676 * Reworked quartztest's positionlist1 into a generic api test as apitest's
11677   poslist3.
11679 * apitest: Reenabled allterms2, but with the iterator copying parts removed -
11680   TermIterator is an input_iterator so that part was invalid.
11682 * Overhauled btreetest and quartztest - tests at the Btree level are now all
11683   in btreetest.  Those at the QuartzDatabase level are in quartztest.
11685 * Split api_db.cc into 3 files as it has grown rather large.
11687 * tests/runtest: Added support for easily running gdb on a test program,
11688   automatically sorting out srcdir and libtool.
11690 quartz backend:
11692 * Refactored the quartz backend code to reduce the number of layered classes
11693   and eliminate unnecessary buffering, reducing memory usage so that more
11694   posting list changes can be batched together (see next change) and database
11695   building can be done several times faster.
11697 * Added tunable flush threshold - set XAPIAN_FLUSH_THRESHOLD=50000 to flush
11698   every 50000 documents.  The default is now every 10000 documents (was
11699   every 1000 documents previously).  The optimum value will most likely
11700   depend on your data and hardware.
11702 * WritableDatabase::get_document() no longer forces pending changes to be
11703   flushed.  The document will read things lazily from the database, and that
11704   reading may trigger a forced flush).
11706 * WritableDatabase::get_avlength() no longer forces pending changes to be
11707   flushed.  This means you can now search a modified WritableDatabase without
11708   causing a flush unless the search includes a term whose postlist has pending
11709   modifications.
11711 * Reduced quartz postlist chunk threshold from "2048 or a few bytes more" to
11712   "2000 or a few bytes more" so that full size chunks won't get split by the
11713   Btree.
11715 * Improved the "Db block overwritten" message.  The DatabaseCorruptError
11716   version now suggests multiple writers may be the cause, while the
11717   DatabaseModifiedError version uses less alarming wording and says to call
11718   Database::reopen().
11720 * QuartzWritableDatabase now stores the total document length and the last
11721   docid itself rather than tallying added and removed document length and
11722   writing the last docid back every time a document is added.  This gives
11723   cleaner code and a small performance win.
11725 * Make the first key null for blocks more than 1 away from the leaves.
11726   It saves disk space for a tiny CPU and RAM cost so is bound to be
11727   a win overall.
11729 * matcher/localmatch.cc: Fixed problems handling termweights in queries with
11730   the same term repeated (bug #37) and added regression test (qterminfo2).
11732 * Sped up iteration over all the terms in a database (QuartzCursor now only
11733   reads the tag from the Btree if asked to).
11735 * Cancelling an operation is now implemented more efficiently.
11737 inmemory backend:
11739 * Fixed bugs with deleting a document while a PostingIterator over it is
11740   active.
11742 muscat36 backend:
11744 * Fixed to compile now that internal_end_session() has gone (broken in 0.8.1).
11746 build system:
11748 * Fixed to compile when configured with --disable-inmemory (bug #33).
11750 * XO_LIB_XAPIAN now AC_SUBSTs XAPIAN_VERSION so your application's build
11751   system can easily check for a particular version of Xapian.
11753 * When compiling with GCC, we check that the compiler used to compile the
11754   library and the compiler used to compile the application have compatible
11755   C++ ABI versions.  Unfortunately GCC 3.1 incorrectly reports the same
11756   ABI version as GCC 3.0, so we now special case that test.
11758 * Bumped the versions of the autotools we require for bootstrapping, and
11759   updated the documentation of these in the HACKING document.
11761 * Quote macro names to fix warnings from newer aclocal.
11763 documentation:
11765 * Improved API documentation for Xapian::WritableDatabase::replace_document and
11766   delete_document.
11768 * Added documentation comments for MSet methods size(), empty(), swap(),
11769   begin(), end(), back().
11771 * Removed bogus documentation comments saying that some Enquire methods can
11772   throw DatabaseOpeningError.
11774 * Updated quartz design docs to reflect recent changes.  Also pulled
11775   out the Btree and Bcursor API docs and slotted them in as doxygen
11776   documentation comments - this way they're much more likely to
11777   be kept up-to-date.
11779 * Corrected multiple occurrences of "an Xapian::XXX" to "a Xapian::XXX"
11780   (presumably these all resulted from replacing "Om" with "Xapian::").
11782 * Various minor updates and improvements.
11784 portability:
11786 * Reworked how we cope with fcntl.h #define-ing open on Solaris.  This change
11787   finally allows Sun's C++ compiler to produce a working Xapian build on
11788   sparc Solaris!
11790 * configure.ac: Don't define DATADIR - we no longer use it and clashes
11791   with more recent mingw headers.
11793 * matcher/andpostlist.cc: Initialise lmax and rmax to 0.  This cures
11794   the SIGFPE on apitest's qterminfo2 on alpha linux.
11796 Xapian-core 0.8.1 (2004-06-30):
11798 API:
11800 * New method Xapian::Database::get_lastdocid which returns the highest used
11801   document id for a database (useful for re-synchronizing an indexer which
11802   was interrupted).  Implemented for quartz and inmemory.
11804 * Xapian::MSet::get_matches_*() methods now take collapsing into account, and
11805   the documentation has been clarified to state explicitly that collapsing and
11806   cutoffs are taken into account (bug#31).
11808 * Xapian::MSet: Need to adjust index by firstitem when indexing into items
11809   (bug#28).
11811 * MSetIterator and ESetIterator are now bidirectional iterators (rather than
11812   just input iterators)
11814 * Fixed post-increment forms of PostingIterator, TermIterator,
11815   PositionIterator, and ValueIterator so that *i++ works (as it must for them
11816   to be true input iterators).
11818 * Xapian::QueryParser: If we fail to parse a query, try stripping out
11819   non-alphanumerics (except '.') and reparsing.
11821 * Fixed memory leaked upon Xapian::QueryParser destruction.
11823 * Removed several unused Xapian::Error subclasses (these were used by the
11824   indexer framework which we decided was a failed experiment).
11826 testsuite:
11828 * queryparsertest: Pruned near-duplicate queryparsertest testcases.
11830 * queryparsertest: Added test case for `term NOT "a phrase'.
11832 * remotetest: Use 127.0.0.1 instead of localhost so that tcpmatch1 doesn't fail
11833   just because the network setup is broken.
11835 * apitest: Make emptyquery1 check that Query("") causes an InvalidArgumentError
11836   exception.
11838 quartz backend:
11840 * Fixed bug which meant we sometimes failed to remove a posting when deleting
11841   or replacing a document.
11843 * Fixed PostlistChunkReader to take a copy of the postlist data being read to
11844   avoid problems with reading data from a string that's been deleted.
11846 * Fixed bug in postlist merging which could occasionally extend a postlist
11847   chunk to overlap the docid range of the next chunk.
11849 * Eliminated the split cursor in each Btree object - we only actually need a
11850   single block buffer to handle splitting blocks.  This reduces the memory
11851   overhead of each Bcursor (and hence each QuartzPostList).
11853 * Changed 2 calls to abort() to throw Xapian::DatabaseCorruptError instead,
11855 * If Btree is writable, throw DatabaseCorruptError if we detect overwritten.
11857 * Check the return value of fdatasync()/fsync()/_commit() and raise an error.
11858   If they fail, we really want to know as it could cause data corruption.
11860 * Assorted clean ups, improved comments, debug tracing, assertions.
11862 * When merging in postlist changes, removed an unneeded call to
11863   QuartzBufferedTable::get_or_make_tag() in a case when we're using a cursor
11864   which has already fetched the tag.
11866 * Added SON_OF_QUARTZ define to disable incompatible changes to database
11867   formats by default, and use it to control the docid encoding for keys such
11868   that we're always inserting at the end of the table when added new documents.
11870 * Reopening the readonly version of a writable Btree is now more efficient
11871   (we used to close and reopen all the files and destroy and recreate a lot
11872   of objects and buffers).
11874 * Share file descriptors between the read and write Btree objects so that a
11875   quartz WritableDatabase now uses 5 fds rather than 10.
11877 * Added configure test for glibc, because otherwise we need to include a header
11878   before we can check for glibc in order to define something we should be
11879   defining before we include any headers!  Defining _XOPEN_SOURCE on OpenBSD
11880   seems to do the opposite to Linux and *disable* pread and pwrite!
11882 backends:
11884 * Stripped out the session machinery - all that is actually required is to
11885   ensure that any unflushed changes are flushed when the destructor runs.
11887 * A few other backend interface cleanups.
11889 build system:
11891 * Unified the shlib version numbers (the small benefit of tracking them
11892   individually makes it hard to justify the extra work required, and having one
11893   version simplifies debian packaging too).
11895 * configure.in: Fix typo (STLPORT_CXXLAGS -> STLPORT_CXXFLAGS)
11897 * Removed trivial m4/Makefile.am and autoconf/Makefile.am and do the work
11898   from the top level Makefile.am instead.  It's easier to see the structure
11899   this way, and it also removes a couple of recursive make invocations which
11900   will speed up builds a little.
11902 documentation:
11904 * HACKING: Added a list of subtasks when doing a release.
11905   Currently it's always me that does this, but it may not always be
11906   and anyhow it'll help me to have a list to run through.
11908 * include/xapian/database.h: Remove references to sessions in doxygen
11909   comments.
11911 * docs/quickstart.html: Corrected lingering reference to "om.h" and
11912   note that we need <iostream>.
11914 * docs/quickstartindex.cc.html,docs/quickstartexpand.cc.html,
11915   docs/quickstartsearch.cc.html: Add <iostream>.
11917 * PLATFORMS,AUTHORS: Updated.
11919 * docs/quartzdesign.html: Corrected various pieces of out of date
11920   information, and improved wording in a couple of places.
11922 * docs/scalability.html: Removed the reference to the Quartz update bottleneck
11923   "currently being addressed for Xapian 0.8" as it's now been addressed!  Also
11924   reworded to remove use of first person (it was originally a message sent to
11925   the mailing list).
11927 Xapian-core 0.8.0 (2004-04-19):
11929 * Omega, xapian-examples and xapian-bindings now have their own NEWS files.
11931 API:
11933 * Throw an exception when an empty query is used to build in the binary
11934   operator Query constructor (previously this caused a segfault.  Added
11935   regression test.
11937 * Made the TradWeight constructor explicit.  This is technically an API change
11938   as before you could pass a double where a Xapian::Weight was required - now
11939   you must pass Xapian::TradWeight(2.0) instead of 2.0.  That seems desirable,
11940   and it's unlikely any existing code will be affected.
11942 * Added "explicit" qualifier to constructors for internal use which take a
11943   single parameter.
11945 * Renamed Xapian::Document::add_term_nopos to Xapian::Document::add_term
11946   (with forwarding wrapper method for compatibility with existing code).
11948 * The reference counting mechanism used by most API classes now handles
11949   creating a new object slightly more efficiently.
11951 * Xapian::QueryParser: Don't use a raw term for a term which starts with a
11952   digit.
11954 testsuite:
11956 * apitest, quartztest: Added a couple of tests, and commented out some test
11957   lines which fail in debug builds.
11959 * quartztest: cause a test to fail if there's still a directory after a call
11960   to rmdir(), or if there isn't a directory after calling mkdir().
11962 * apitest: Check returned docids are the expected values in a couple more
11963   cases.  Improved wording of a comment.
11965 quartz backend:
11967 * We now merge a batch of changes into a posting list in a single pass which
11968   relieves an update bottleneck in previous versions.
11970 * When storing the termlist, pack the wdf into the same byte as the reuse
11971   length when possible - doing so typically makes the termlist 14% smaller!
11972   This change is backward compatible (0.7 database will work with 0.8, but
11973   databases built or updated with 0.8 won't work with 0.7).
11975 * quartzcheck: Check the structure within the postlist Btree as well as
11976   the Btree structures themselves.
11978 * Reduced code duplication in the btree manager and btreechecking code.
11980 * quartzdump: Backslash escape space and backslash in output rather than hex
11981   encoding them; renamed start-term and end-term to start-key and end-key;
11982   removed rather pointless "Calling next" message; if there's an error, write
11983   it to stderr not stdout, and exit with return code 1.
11985 * Corrected a number of comments in the source.
11987 * Removed several needless inclusions of quartz_table_entries.h.
11989 * Removed OLD_TERMLIST_FORMAT code - it has been disabled for since 0.6.0.
11991 * Removed all the quartz lexicon code and docs.  It's been disabled for ages,
11992   and we've not missed it.
11994 build system:
11996 * XO_LIB_XAPIAN autoconf macro can now be called without arguments in the
11997   common case where you want the test to fail if Xapian isn't found.
11999 * Fixed the configure test for valgrind - it wasn't working correctly when
12000   valgrind was installed but was too a version to support VALGRIND_COUNT_ERRORS
12001   and VALGRIND_COUNT_LEAKS.
12003 * GCC 2.95 supported -Wno-long-long and is our minimum recommended version, so
12004   unconditionally use -Wno-long-long with GCC, and don't test for it on other
12005   compilers (the old test incorrectly decided to use it with SGI's compiler
12006   resulting in a warning for every file compiled).
12008 documentation:
12010 * Updated the quickstart tutorial and removed the warning that "this
12011   document isn't up to date".
12013 * docs/intro_ir.html: Added a link to "Information Retrieval" by Keith van
12014   Rijsbergen which can be downloaded from his website!
12016 * docs/quartzdesign.html: Some minor improvements.
12018 * docs/matcherdesign.html: Merged in more details from a message sent to the
12019   mailing list.
12021 * docs/queryparser.html: Grammar fixes.
12023 * Doxygen wasn't picking up the documentation for PostingIterator and
12024   PositionListIterator - fixed.  Added doxygen comments for Xapian::Stopper
12025   and Xapian::QueryParser.
12027 * PLATFORMS: Updated with many results from tinderbox and from users.
12029 * AUTHORS: Updated the list of contributors.
12031 * HACKING: XAPIAN_DEBUG_TYPES should be XAPIAN_DEBUG_FLAGS.
12033 * HACKING: Updated to mention that building from CVS requires
12034   `./configure --enable-maintainer-mode' (or use bootstrap).
12036 * HACKING: Added notes about using "using", and pointers to a couple of useful
12037   C++ web resources.
12039 portability:
12041 * Solaris: Code tweaks for compiling with Sun's C++ compiler.
12043 * IRIX: Code tweaks for compiling with SGI's C++ compiler.
12045 * NetBSD mkdir() doesn't cope with a trailing / on the path - fixed our code to
12046   cope with this.
12048 * mingw/cygwin: Only use O_SYNC (on the debug log) if the headers define it.
12050 * backends/quartz/quartz_table_manager.cc: Fix for building on mingw.
12052 * mingw: Added configure test for link() to avoid infinite loop in our C++
12053   wrapper for link.
12055 * mingw and cygwin both need -Wl,--enable-runtime-pseudo-reloc passing when
12056   linking.  Arrange for xapian-config to include this, and check that the ld
12057   installed is a new enough version (or at least that it was at configure
12058   time).  Also pass to programs linked as part of the xapian-core build.
12060 * cygwin: Close a QuartzDatabase or QuartzWritableDatabase before trying to
12061   overwrite it - cygwin doesn't allow use to delete open/locked files...
12063 * backends/quartz/quartz_termlist.cc: Use Xapian::doccount instead of
12064   unsigned int in set_entries().
12066 * Database::Internal::Internal::keep_alive() should be
12067   Database::Internal::keep_alive().
12069 * Make Xapian::Weight::Weight() protected rather than private as we want to be
12070   able to call it from derived classes (GCC 3.4 flags this, other compilers
12071   seem to miss it).
12073 debug code:
12075 * Open debug log with flag O_WRONLY so that we can actually write to it!
12077 * backends/quartz/quartz_values.cc: Fixed problem with dereferencing
12078   a pointer to the end of a string in debug output.
12080 Xapian 0.7.5 (2003-11-26):
12082 API:
12084 * Xapian::QueryParser now supports prefixes on phrases and expressions (e.g.
12085   author:(twain OR poe) subject:"space flight").
12087 * Added missing default constructors for TermIterator, PostingIterator, and
12088   PositionIterator classes.
12090 * Fixed PositionIterator assignment operator.
12092 testsuite:
12094 * queryparsertest: Added testcase for new phrase and expression prefix support.
12096 * apitest: Added regression tests for API fixes.
12098 backends:
12100 * quartzcompact: Fix the name that the meta file gets copied to (was
12101   /path/to/dbdirmeta rather than /path/to/dbdir/meta).
12103 build system:
12105 * Changed to using AM_MAINTAINER_MODE.  If you're doing development work on
12106   Xapian itself, you should configure with "--enable-maintainer-mode" and
12107   ideally use GNU make.
12109 * Fixed configure test for fdatasync to work (I suspect a change in a recent
12110   autoconf broke it as it relied on autoconf internal naming).
12112 * Fully updated to reflect move of libbtreecheck.la from backends/quartz
12113   to testsuite.  btreetest and quartzcheck should build correctly now.
12115 documentation:
12117 * Added first cut of documentation for Xapian::QueryParser query syntax.
12119 * Fixed incorrectly formatted doxygen documentation comments which resulted in
12120   some missing text in the collated API and internal classes documentation.
12122 * Documented --enable-maintainer-mode and problems with BSD make in HACKING.
12124 * Fixed typo in docs/scalability.html.
12126 * PLATFORMS: Updated from the tinderbox.
12128 omega:
12130 * omega: Parsing of the probabilistic query is now delayed until we need some
12131   information from it.  This means that we can now use options set by the
12132   omegascript template to control the behaviour of the query parser.
12133   $set{stemmer,...} now controls the stemming language (e.g. $set{stemmer,fr})
12134   and $setmap{prefix,...} now sets the QueryParser prefix map (e.g.
12135   $setmap{prefix,subject,XT,abstract,XA}).
12137 * omega: Fixed $setmap not to add bogus entries.
12139 * docs/omegascript.txt: Expanded documentation of $set and $setmap to list
12140   values which Omega itself makes use of.
12142 * omega: Cleaned up the start up code quite a bit.
12144 * omega: Removed the unfinished code for caching omegascript command
12145   expansions.  Added code to cache $dbsize.  The only other value correctly
12146   marked for caching is already being cached!
12148 Xapian 0.7.4 (2003-10-02):
12150 API:
12152 * Fixed small memory leak if Xapian::Enquire::set_query() is called more than
12153   once.
12155 * Xapian::ESet now has reference counted internals (library interface version
12156   bumped because of this).
12158 * Removed unused OmDocumentTerm::termfreq member variable.
12160 * OmDocumentTerm ctor now takes wdf, and replaced set_wdf() with inc_wdf() and
12161   dec_wdf().
12163 * Removed unused open_document() method from SubMatch and derived classes.
12165 * Calls made by the matcher to Document::Internal::open_document() now use the
12166   lazy flag provided for precisely this purpose, but apparently never used -
12167   this should give quite a speed boost to any matcher options which use values
12168   (e.g. sort, collapse).
12170 testsuite:
12172 * Finished off support for running tests under valgrind to check for memory
12173   leaks and access to uninitialised variables.
12175 * apitest: Sped up deldoc4.
12177 * btreetest: Removed superfluous `/'s from constructed paths.
12179 * quartztest: adddoc2 now checks that there weren't any extra values created.
12181 backends:
12183 * quartz: don't start the document's TermIterator from scratch on every
12184   iteration in replace_document().  Should be a small performance win.
12186 * quartz: Pass 0 for the lexicon/postlist table when creating a termlist just
12187   to find the doc length.
12189 * quartz: quartz_table_entries.cc: Removed rather unnecessary use of
12190   const_cast.
12192 * quartz: quartz_table.cc: Removed unused variable.
12194 * quartz: Improved encapsulation of class Btree.
12196 build system:
12198 * libbtreecheck.la now has an explicit dependency on libxapian.la.
12200 * We now set the dependencies for libxapian correctly so that linking
12201   applications will pull in other required libraries.
12203 * matcher/Makefile.am: Ship networkmatch.cc even if "make dist" is run from a
12204   tree with the remote backend disabled.
12206 * configure.in: Sorted out tests for gethostbyname and gethostbyaddr using
12207   standard autoconf macros.
12209 * configure.in: If fork is found, but socketpair isn't, automatically disable
12210   the remote backend rather than configure dying with an error.
12212 * autoconf/: Removed various unused autoconf macros.
12214 portability:
12216 * xapian-config.in: Link with libxapianqueryparser before libxapian, since
12217   that's the dependency order.
12219 * Removed or replaced uses of <iostream> and <iosfwd> in the library sources
12220   - we don't need or want the library to pull in cin and friends.
12222 * extra/queryparser.yy: Fixed to build with Sun's C++ compiler.
12224 * Make the dummy source file C++ rather than C so that automake tells libtool
12225   that this is a C++ library - vital for correct linking on some platforms.
12227 * Makefile.am: Pass -no-undefined to libtool so that we can build build a DLL
12228   on MS Windows.
12230 * configure.in: Fixed check for socketpair - we were automatically disabling
12231   the remote backend on platforms where socketpair is in libsocket
12232   (such as Solaris).
12234 * Use O_BINARY for binary I/O if it exists.
12236 * common/utils.h: mkdir() only takes one argument on mingw.
12238 * common/utils.h,testsuite/backendmanager.cc: Touch file using open() rather
12239   than system().
12241 * common/utils.cc: Fixed to compile if snprintf isn't available.
12243 documentation:
12245 * docs/scalability.html: Fixed slip (32GB should be 32TB);  Added note about
12246   Linux 2.4 and ext2 filesize limits.
12248 * PLATFORMS: Updated.
12250 * NEWS: Fixed a few typos.
12252 bindings:
12254 * xapian.i: using namespace std in SWIG parsed segment to sort out typemaps.
12256 packaging:
12258 * Updated RPM packaging.
12260 omega:
12262 * omega: $topdoc now ensures the match has been run; $date no longer ensures
12263   the match has been run.
12265 * omega: Fixed to build with Sun's C++ compiler.
12267 Xapian 0.7.3 (2003-08-08):
12269 API:
12271 * MSetIterator: Fixed MSetIterator::get_document() to work when get_mset() was
12272   called with first != 0 (regression test msetiterator3).
12274 testsuite:
12276 * internaltest: Changed test exception1 to actually test something (hopefully
12277   what was originally intended!)
12279 * Added long option support to the testsuite programs (and quartzdump).
12281 * Testsuite now builds on platforms for which we use our own stringstream
12282   implementation.
12284 * Only use \r in test output if the output is a tty.
12286 * Increased default timeout used by tests running on the remote backend from 10
12287   seconds to 5 minutes to avoid tests failing just because the machine running
12288   them is slow and/or busy.
12290 * Fixed check for broken exception handling - we were getting "Xapian::"
12291   prefixed to one version and not on the other.
12293 * tests/runtest: Set srcdir if it isn't already to make it easy to manually run
12294   test programs from a VPATH build.
12296 * apitest: Check termfreq in allterms4.
12298 backends:
12300 * quartz: Fixed allterms TermIterator to not give duplicate terms when a
12301   posting list is chunked; added regression test (allterms4).
12303 * quartz: Check for EINTR when reading or writing blocks and retry the
12304   operation.  This should mean quartz won't fail falsely if a signal is
12305   received (e.g. if alarm() is used).
12307 build system:
12309 * Renamed libomqueryparser to libxapianqueryparser - for backward compatibility
12310   we still provide a library with the old name for now.
12312 * xapian.m4: Added XO_LIB_XAPIAN to replace OM_PATH_XAPIAN.  XO_LIB_XAPIAN will
12313   automagically enable use of "xapian-config --ltlibs" if A[CM]_PROG_LIBTOOL is
12314   used in configure.in.
12316 * xapian-config: Now supports linking with libtool - using libtool means that
12317   the run-time library path is set and that you can now link with an
12318   uninstalled libxapian.  Also xapian-config will now work once xapian-core's
12319   configure has been run, rather than only after "make all".
12321 * xapian-config: Now automatically tries to link libxapianqueryparser too.
12323 * bootstrap: Removed bootstrap scripts in favour of top-level bootstrap which
12324   creates a top-level configure you can optionally use to configure all checked
12325   out Xapian modules with one command, and which creates a top level Makefile
12326   to build all checked out Xapian modules with one command.
12328 * Added versioning information to libxapian and libxapianqueryparser.
12330 * xapian-example/omega: Use libtool and XO_LIB_XAPIAN so we can link with an
12331   uninstalled Xapian, and so the run time load path gets built into the
12332   binaries (no need to set LD_LIBRARY_PATH just because you install Xapian with
12333   a non-standard prefix).
12335 * configure: Stop the API documentation from being regenerated when
12336   include/xapian/version.h changes (since it's generated by configure).
12338 * Fixed "make dist" in VPATH builds.
12340 portability:
12342 * common/getopt.h: #include <stdlib.h>, <stdio.h>, and <unistd.h> before
12343   defining getopt as a macro - this avoids problems with clobbering prototypes
12344   of getopt() in system headers.
12346 * bin/quartzcompact.cc: Need stdio.h for rename().
12348 * languages/Makefile.am: Fixed compilation for compilers other than GCC.
12350 * Moved rset serialisation into a method of RSet::Internal, so
12351   omrset_to_string() is now just glue code.  This eliminates the need for it to
12352   be a friend of RSet::Internal which Sun's C++ compiler didn't seem to be able
12353   to cope with.
12355 documentation:
12357 * Fix incorrect documentation comment for Enquire::set_set_forward().  (Looked
12358   like a cut&paste error)
12360 * COPYING: Updated FSF address, and reinstated missing section: "How to Apply
12361   These Terms to Your New Programs"
12363 * PLATFORMS: Updated some linux results: RH7.3 on x86, and Debian on alpha and
12364   arm; Updated FreeBSD success report; Updated with results from the tinderbox.
12366 * docs/mkdoc.pl: Don't choke on a comment at the end of the DIST_SUBDIRS line
12367   in a Makefile.am.
12369 * HACKING: Improved note about why libtool 1.5 is needed.
12371 * HACKING: Added note about additional tools needed for building a
12372   distribution.
12374 bindings:
12376 * Fixed VPATH builds.
12378 * python: Fixed to link with libomqueryparser.
12380 * guile,tcl8: Updated typemaps to SWIG 1.3 style.
12382 omega:
12384 * omindex.cc: Added missing `#include <errno.h>'.
12386 * omindex/scriptindex: Fixed signed character issue in accent normalisation.
12388 * omindex: fixed memory and file descriptor leak on indexing a zero-sized file.
12390 * omindex: Fixed sense of test for unreadable files.
12392 * omindex: Improved log messages to distinguish re-indexed/added.
12394 * omindex,omega,scriptindex: Fixed to compile with mingw.
12396 * omindex: Fixed to compile with GNU getopt so we can build on non-glibc
12397   platforms.
12399 examples:
12401 * msearch: Quick fix to get mingw building going.
12403 * getopt: Copied over our fixes for better C++ compatibility.
12405 * simplesearch: Stem search terms.
12407 * simpleindex: Fixed not to run words together between lines.
12409 * simpleindex: Create database if it doesn't exist.
12411 Xapian 0.7.2 (2003-07-11):
12413 testsuite:
12415 * Fixed NULL pointer dereference when a test threw an unexpected exception.
12417 backends:
12419 * Quartz: When asked to create a quartz database, try to create the directory
12420   if it doesn't already exist.  Then we don't have to do it in every single
12421   Xapian program which wants to create a database...
12423 portability:
12425 * common/getopt.h: Fixed to work better with C++ compilers on non-glibc
12426   platforms.
12428 * common/utils.h: missing #include <ctype.h>
12430 * Quartz: Defined _XOPEN_SOURCE=500 for GLIBC so we get pread() and pwrite().
12432 * common/utils.h: Improved mingw implementation of rmdir().
12434 documentation:
12436 * PLATFORMS: Added MacOS X 10.2 success report.
12438 * Improvements to doxygen-generated documentation.
12440 bindings:
12442 * Moved to separate xapian-bindings module.
12444 * Added configure check for SWIG version (require at least 1.3.14).
12446 * bindings/swig/xapian.i: Fixed over-enthusiastic automatic conversion of
12447   termname to std::string.
12449 * PHP4 bindings much closer to working once again; updated guile and tcl8
12450   somewhat.
12452 omega:
12454 * omega: If the same database is listed more than once, only search the first
12455   occurrence.
12457 * omega: use snprintf to help guard against buffer overflows.
12459 Xapian 0.7.1 (2003-07-08):
12461 testsuite:
12463 * Fixed testsuite programs to not try to use "rm -rf" under mingw.
12465 backends:
12467 * Quartz: Use pread() and pwrite() on platforms which support them.  Doing so
12468   avoids one syscall per block read/write.
12470 * Quartz block count is now unsigned, which should nearly double the size of
12471   database for a given block size.  Not tested this yet.
12473 omega:
12475 * omindex: Fixed compilation problem in 0.7.0.
12477 documentation:
12479 * Added new document discussing scalability issues.
12481 * PLATFORMS: Updated.
12483 Xapian 0.7.0 (2003-07-03):
12485 API:
12487 * Moved everything into a Xapian namespace, which the main header now being
12488   xapian.h (rather than om/om.h).
12490 * Three classes have been renamed for better naming consistency:
12491   OmOpeningError is now Xapian::DatabaseOpeningError, OmPostListIterator is
12492   now Xapian::PostingIterator, and OmPositionListIterator is now
12493   Xapian::PositionIterator.
12495 * xapian.h includes <iosfwd> rather than <iostream> - if you were relying on
12496   the implicit inclusion, you'll need to add an explicit "#include <iostream>".
12498 * Replaced om_termname with explicit use of std::string - om_termname was just
12499   a typedef for std::string and the typedef doesn't really buy us anything.
12501 * Older code can be compiled by continuing to use om/om.h which uses #define
12502   and other tricks to map the old names onto the new ones.
12504 * Define XAPIAN_VERSION (e.g. 0.7.0), XAPIAN_MAJOR_VERSION (e.g. 0), and
12505   XAPIAN_MINOR_VERSION (e.g. 7).
12507 * Updated omega and xapian-examples to use Xapian namespace.
12509 queryparser:
12511 * Xapian::QueryParser: Accent normalisation added; Improved error reporting;
12512   Fixed to handle the most common examples found in the wild which used to give
12513   "parse error".
12515 bindings:
12517 * Python bindings brought up to date - use ./configure --enable-bindings to
12518   build them.  Requires Python >= 2.0 - may require Python >= 2.1.
12520 * Enabled optional building of bindings as part of normal build process.  Old
12521   Perl and Java bindings dropped; for Perl, use Search::Xapian from CPAN; Java
12522   JNI bindings will be replaced with a SWIG-based implmentation.
12524 internal implementation changes:
12526 * Removed one wrapper layer from the internal implementation of most API
12527   classes.
12529 * Xapian::Stem now uses reference counted internals.
12531 * Internally a lot of cases of unnecessary header inclusion have been removed
12532   or replaced with forward declarations of classes.  This should speed up
12533   compilation and recompilation of the Xapian library.
12535 * Suppress warnings in Snowball generated C code.
12537 * Reworked query serialisation in the remote backend so that the code is now
12538   all in one place.  The serialisation is now rather more compact and no longer
12539   relies on flex for parsing.
12541 testsuite:
12543 * Moved all the core library tests to tests subdirectory.
12545 * apitest now allows backend to be specified with "-b" rather than having to
12546   mess with environmental variables.
12548 * Testsuite programs can now hook into valgrind for leak checking, undefined
12549   variable checking, etc.
12551 backends:
12553 * Fixed parsing of port number in remote stub databases.
12555 * Quartz: Improved error message when asked to open a pre-0.6 Quartz database.
12557 * Quartz backend: Workaround for shared_level problem turns out to
12558   be arguably the better approach, so made it permanent and tidied up
12559   code.
12561 build system:
12563 * Build system fixed to never leave partial files in place of the expected
12564   output if a build is interrupted.
12566 * quartzcheck, quartzdump, and quartzcompact are now built by "make" rather
12567   than only by "make check".
12569 * xapian-config: Removed --prefix and --exec-prefix - you can't reliably
12570   install Xapian with a different prefix to the one it was configured with,
12571   yet these options give the impression you can.
12573 miscellaneous:
12575 * Fixed sending debug output to a file with XAPIAN_DEBUG_LOG with a value which
12576   didn't contain "%%" (%% expands to the current PID).
12578 * Fixed Xapian::MSetIterator::get_collapse_count() to work as intended.
12580 omega:
12582 * omindex,scriptindex: Normalise accents in probabilistic terms.
12584 * omindex: Read output from pstotext and pdftotext via pipes rather
12585   than temporary files to side-step the whole problem of secure temporary file
12586   creation; Use pdfinfo to get the title and keywords from when indexing a PDF;
12587   Safe filename escaping tweaked to not escape common safe punctuation.
12589 * omindex: Implement an upper limit on the length of URL terms - this is a
12590   slightly conservative 240 characters.  If the URL term would be longer than
12591   this, its last few bytes are replaced by a hash of the tail of the URL.  This
12592   means that (apart from hopefully very rare collisions) urlterms should still
12593   be unique ids for documents.  This is forward and backward compatible for
12594   URLs less than 240 characters.
12596 * omindex: Clean up processing of HTML documents:
12597   - Ignore the contents of <script> and <style> tags in HTML.
12598   - Strip initial whitespace in each tag in an HTML document.
12599   - Try not to split words in half when truncating title and summary.
12601 * query.cc: Set STEM_LANGUAGE near the start of the file so it's easy
12602   for users to change until we get better configurability.
12604 * omega: Replaced half-hearted logging support with flexible OmegaScript-based
12605   approach with new $log command.  Also added $now to allow the current
12606   date/time to be logged.
12608 * templates/xml: added collapse info to xml template.
12610 documentation:
12612 * Assorted minor documentation improvements.
12614 * PLATFORMS: Updated.
12616 rpms:
12618 * Improved RPM packaging of xapian-core and omega.
12620 Xapian 0.6.5 (2003-04-10):
12622 * OmEnquire: optimised the handling when sort_bands == 1 and fixed incorrect
12623   results in this and some other sorting cases; added some sorting testcases.
12625 * OmMSetIterator: added get_collapse_count() which returns a lower bound on
12626   the number of items which were removed by collapsing onto the current item.
12628 * OmStem: added default OmStem constructor and "none" language.  Both of these
12629   give a stemmer object which leaves terms unchanged which should allow for
12630   simpler logic in programs using Xapian.  The default constructor also removes
12631   the need to mess with pointers in some cases.
12633 * Automatically disable the remote backend if we don't have fork() since the
12634   remote backend requires it in several places.
12636 * Fixed to build with debug enabled.
12638 * testsuite: fixed to still build when some backends are disabled.
12640 * extra/parsequerytest.cc: Fixed to build with GCC 2.95.
12642 * Testsuite: Added regression test for Quartz bug which caused problems with
12643   long terms on machines with signed chars.
12645 * testsuite/index_utils.cc: Handling of ^x was just downright wrong due to a
12646   typo.
12648 * Improved portability: Fix for 64 bit machines.  Fixed btreetest to build with
12649   older compilers lacking <sstream>.  Xapian is now much closer to building
12650   with Sun's CFront-based Sun Pro C++ compiler, and with a Linux to mingw
12651   cross-compiler.
12653 * PLATFORMS: Updated with the results of many test builds.
12655 * Improved RPM packaging of xapian-core and omega.
12657 * Documentation: Use http://www.doxygen.org/ as URL for doxygen; Fixed bad link
12658   to our own website in overview.html; code_structure.html now only includes
12659   directories in the build system.
12661 * HACKING: updated.
12663 * Removed bugs/todo.xml, TODO, TODO.release, docs/todo.html, and
12664   docs/todo-release.html from the distribution.  Bugs and todo items will be
12665   tracked in Bugzilla instead.
12667 * Install docs in /usr/share/doc/xapian-core instead of /usr/share/xapian-core.
12669 * omega: If xP and P are both empty, there may be a boolean query, so don't
12670   force first page of hits.
12672 * omega: Fixed off-by-one error in rounding down topdoc - it was possible to
12673   get to an empty page of hits if there were exactly a multiple of HITSPERPAGE
12674   matches and the matcher over-estimated the number of matches and Omega
12675   displayed page links.
12677 * omega: Fixed handling of multiple DB parameters to be as documented.
12679 * omega: Added $collapsed to report get_collapse_count() for the current hit.
12681 * omega: Added $transform{} which does regexp manipulation (currently disabled
12682   until configure tests for regexp library are added)
12684 * omega: Added $uniq{} to eliminate duplicates from a sorted list.
12686 * omega: Don't force page 1 for a query with repeated terms!
12688 * omega: removed duplicates from terms listed in term frequencies.
12690 * omega: Added cgi parameter COLLAPSE to collapse on key values
12692 * omega: Added $value{key[,docid]} support to omegascript
12694 * omega: Renamed DATE1, DATE2, and DAYSMINUS to the more meaningful START, END,
12695   and SPAN (NB SPAN is days before END, or after START, or before today -
12696   whereas SPAN was before *DATE1* or before today).  The old parameters names
12697   are supported (with the original semantics) for now.
12699 * omega: Actually install documentation!
12701 * templates/query: propagate B boolean filters
12703 * templates/godmode: removed link to EuroFerret image
12705 * templates/godmode: added value dumping, for values from 0-255
12707 * omindex: Report correct version number (was hard-wired to 1.0!)
12709 * scriptindex: Allow '_' in fieldnames.  Diagnose bad characters in fieldnames
12710   better.
12712 * dbi2omega: Added DBUSER and DBPASSWD environmental variable support so that
12713   password protected DBs can easily be used
12715 * scriptindex.cc: added missing "#include <stdio.h>" which caused builds
12716   to fail for some platforms.
12718 Xapian 0.6.4 (2002-12-24):
12720 * Quartz backend: Fixed double setting of position list when updating a
12721   document with term position information (overall result was correct, just
12722   inefficient); when deleting a position_list, don't check if it's empty,
12723   just ask the layer below to delete it and let it handle the case when
12724   there's nothing to delete; Fixed unpacking of termlist on platforms where
12725   char is signed.
12727 * OmQueryParser: Added support for searching probabilistic fields (using
12728   <field>:<term>); the unstem multimap now includes "." on the end of a
12729   term if it was there in the query.
12731 * Don't include "om.h" as a dependency for the api docs since it's generated
12732   a configure time and the dependency was forcing users to regenerate the
12733   documentation, which requires doxygen to be installed.
12735 * Bindings: Python bindings updated to work with the updated API (still
12736   disabled by default).
12738 * Muscat 3.6 backend: Fixed to build with the new database factory functions;
12739   fixed compilation warnings; Muscat 3.6 DA and DB databases don't support
12740   positional information.  Instead of throwing an exception when we try to
12741   access it, return an empty position list (like a quartz database with no
12742   position information would).  This allows copydatabase to be used to convert
12743   a Muscat 3.6 database to a quartz one.
12745 * Documentation: quartzdesign and todo list updated.
12747 * quartzcheck: default mode changed to "v" rather than "+", since "+" is too
12748   verbose for a btree of any size; if you pass a quartz database directory,
12749   quartzcheck will now check all the tables which make up a quartz database.
12751 * quartzcompact: new tool which makes a copy of a quartz database with full
12752   compaction turned on - this results in a smaller database which is faster
12753   to search.  The next update will result in a lot of block splitting though
12754   (since all blocks are as full as possible).
12756 * omega: Added $unstem to map a stemmed term to the form(s) used in the query;
12757   $queryterms now only includes the first occurrence of each stemmed form;
12758   $prettyterm makes use of the unstem map; prefer MINHITS to MIN_HITS and
12759   RAWSEARCH to RAW_SEARCH since none of the other CGI parameter names have
12760   _ separating words (continue to support old names for now); fixed default
12761   template to not generate topterms twice, and fixed topterms to not stick
12762   outside the green box; corrected omegascript docs - it's $setrelevant
12763   not $set_relevant.
12765 * scriptindex: index=nopos with new indexnopos action; index and indexnopos now
12766   take an optional prefix argument; index=nopos is handled specially for
12767   backwards compatibility; added new data action to generate terms for date
12768   range searching.
12770 Xapian 0.6.3 (2002-12-14):
12772 * Updated PLATFORMS and todo list.  Noted in HACKING that Bison 1.50 seems to
12773   work with Xapian.
12775 * OmQueryParser now creates an "unstem" multimap to allow probabilistic
12776   query terms to be converted back to the form the user originally typed.
12778 * Updated documentation for remote protocol description and the quickstart
12779   tutorial which were both very out of date.
12781 * No longer use OmSettings to pass matcher parameters.  This completes the
12782   removal of OmSettings.
12784 * Added workaround for problem with cursors sharing levels in the btree.
12785   This should fix sporadic problems with large databases (small databases
12786   have fewer btree levels so aren't affected).
12788 * Stub databases now work again, though with a different format.  The new
12789   format allows multiple databases to be specified in the stub file.
12791 * OmEnquire::get_eset() now takes a flags argument of bit constants |-ed
12792   together instead of 2 bools.
12794 * Applied Martin Porter's better fix for the btree sequential addition bug
12795   which Richard fixed a few months ago.  Richard's fix resulted in a correct
12796   btree, but didn't always utilise space as efficiently as possible.
12798 * Fixed the remote backend to handle weighting schemes after the OmSettings
12799   changes.  You can now even implement your own weighting scheme and use it
12800   with the remote backend provided you register it with SocketServer at
12801   runtime (this feature has been on the todo list for ages).
12803 Xapian 0.6.2 (2002-12-07):
12805 * Set env var XAPIAN_SIG_DFL to stop the testsuite installing its
12806   signal handler (may be useful with some debugging tools).
12808 * backends/quartz/btree.cc: max_item_size wasn't being set due to
12809   some over-zealous code pruning.  It was defaulting to 0, and
12810   was causing the code to write off the end of allocated memory
12811   blocks.
12813 * matcher/localmatch.cc: fixed handling of wtscheme() - we were
12814   trying to use it for the extra weights, and then double
12815   deleting it!
12817 * common/omdebug.cc,common/omdebug.h: Fixed permissions on newly
12818   created log file (was getting 000!); Simplified class internals;
12819   Renamed env vars: OM_DEBUG_FILE is now XAPIAN_DEBUG_LOG,
12820   OM_DEBUG_TYPES is now XAPIAN_DEBUG_FLAGS (old versions still work
12821   for now).
12823 * testsuite/testsuite.cc: Fixed so running "gdb .libs/apitest"
12824   finds srcdir (for an in-tree build at least).
12826 * Fixed to compile with --enable-debug=full.
12828 * docs/remote.html: Updated from OmSettings to factory functions.
12830 * PLATFORMS: ixion is actually Linux 2.2.
12832 * OmWritableDatabase now has a default constructor.
12834 * Weighting scheme now specified by passing OmWeight object to OmEnquire.
12835   This also allows user weighting schemes (just subclass OmWeight and
12836   pass in an instance of this new class).  [This doesn't currently work
12837   with the remote backend.]
12839 * No longer use OmSettings to specify parameters for constructing databases.
12840   Instead there's a factory function for each database type - temporary naming
12841   scheme is OmXxx__open(), mostly because it's easy to grep for later.
12842   Instead of create and overwrite flags, we pass in a value - a new possible
12843   opening mode is "create or open".  [At present stub databases and the
12844   machinery in InMemory to allow the multierrhandler1 test aren't working.
12845   Everything else should be.]
12847 * OmEnquire::get_eset() takes parameters instead of an OmSettings object.
12849 * Fixed reversed sense of use_query_terms (and fixed reversed sense test in
12850   apitest which meant this wasn't spotted).
12852 * Documentation: Link to annotated class lists in doxygen generated
12853   documentation instead of the rather empty index pages; added doxygen
12854   markup so that apidoc now documents header files; updated todo list.
12856 * Documentation: intro doc thing was very out of date in places - fixed.
12858 * Omega: index .php files as HTML, with the PHP code stripped out; omindex
12859   return non-zero return code if an unexpected exception is caught; fixed
12860   HTML parser to not read one character past the end of the document in
12861   some cases; updated in line with OmSettings related changes to the API;
12862   Fixed $dbname to return "default" for the default database instead of "";
12863   templates/query: Removed now unused xDEFAULTOP hidden field, and superfluous
12864   "}"; dbi2omega now more efficient and can be restricted to listed fields.
12866 Xapian 0.6.1 (2002-11-28):
12868 * Fixed to compile with GCC 3.0.
12870 * PLATFORMS: Updated.
12872 Xapian 0.6.0 (2002-11-27):
12874 * Quartz database backend: lexicon disabled (./configure CXXFLAGS=-DUSE_LEXICON
12875   to reenable it), and encoding schemes simplified and made more compact;
12876   extended and added test cases; minimum block size is now 2048 bytes (as
12877   documented before, but now we actually enforce this); btree checking code
12878   split off and only linked in when required; tidied up btreetest's output.
12880 * Replaced our stemmers with those from Snowball.  These give better results,
12881   and are actively maintained by Martin Porter (who wrote the original Xapian
12882   stemmers too).  It also means that Xapian now has stemmers for Finnish,
12883   and Russian, and an implementation of Lovins' English stemmer.
12885 * Assorted improvements to the documentation, especially the documentation
12886   of the internals of the Quartz backend.
12888 * Removed the three uses of RTTI (typeid() and dynamic_cast<>) - one was
12889   totally superfluous, and the other two easily avoided.
12891 * Omega and simpleindex example: limit probabilistic term length to 64
12892   characters to stop the index filling up with junk terms which nobody will
12893   ever search for.
12895 * Omega: Added dbi2omega perl script to dump any database which perl DBI can
12896   access into the dump format expected by scriptindex.
12898 Xapian 0.5.5 (2002-12-04):
12900 * Fixed compilation with --enable-debug.
12902 * Minor documentation updates.
12904 * Omega: Fixed paging on default database; removed xDEFAULTOP from the query
12905   template as it's no longer used; removed bogus unmatched '}' from query
12906   template; added dbi2omega perl script to dump any database which perl DBI
12907   can access into the dump format expected by scriptindex; limit length of
12908   probabilistic terms generated to 64 characters.
12910 Xapian 0.5.4 (2002-10-16):
12912 * Fixed a compilation error with "make check" when using GCC 3.2.
12914 * PLATFORMS: checked 0.5.3 works on OpenBSD and Solaris 7.
12916 Xapian 0.5.3 (2002-10-12):
12918 Notable changes: Improvements to the test suite, and internal code cleanups:
12920 * Internal code cleanups on Quartz Btree implementation.
12922 * Minor documentation updates (TODO and PLATFORMS updated; Martin Porter's
12923   stemming paper removed - see the Snowball site for background stemmer
12924   info).
12926 * Implemented QuartzAllTermsList::get_approx_size().
12928 * Removed a couple of occurrences of "using std::XXX;" from externally
12929   visible headers.
12931 * With GCC, add warning flags "-Wall -W" rather than "-Wall -Wunused" (-Wall
12932   implies -Wunused anyway).  Fixed all the warnings this throws up, except in
12933   languages/ (that code is to be replaced with Snowball soon).
12935 * Test suite: Disable colour test output if stdout isn't a terminal and
12936   reworked check for broken exception handling as the previous  version never
12937   seemed to fire.  Other assorted minor improvements.
12939 * include/om/om.h is now removed on "make distclean" rather than "make clean".
12941 Xapian 0.5.2 (2002-10-06):
12943 Further improvements to documentation and portability:
12945 * docs/: converted all text docs to HTML (except omsettings which will
12946   has odd markup (LaTeX?) and will probably soon be obsolete anyway).
12948 * remote backend: Fixed handling of timeouts which are now in the past - fixes
12949   test failures with redhat/x86.
12951 * quartz backend: now works on 64 bit platforms.
12953 * test suite: try to spot mishandled exceptions and stop them causing bogus
12954   OMEXCEPT failures.
12956 Xapian 0.5.1 (2002-10-02):
12958 This release fixes features improved documentation and some build system
12959 portability fixes.
12961 * PLATFORMS: updated with more test results.
12963 * docs/: tidied up layout of HTML documentation; converted the notes about
12964   BM25 into HTML; updated stemmer docs to reflect intention to use Snowball
12965   instead; included HTML versions of quickstart*.cc.
12967 * automake 1.6.3 and autoconf 2.54 are now required for those working
12968   from CVS to fix a problem with the generated Makefiles and Solaris
12969   make.
12971 * net/Makefile.am: Fixed building of readquery.cc from readquery.ll.
12973 * buildall script is now deprecated - use the new streamlined bootstrap script
12974   in preference.
12976 Xapian 0.5.0 (2002-09-20):
12978 The last release of the software that is now known as Xapian was Open Muscat
12979 0.4.1 on November 24th 2000, not far from 2 years ago.
12981 There's been a significant amount of development in this time, so we've
12982 summarised the most notable changes and improvements:
12984   * The project is now called "Xapian". We've renamed the modules in the light
12985     of this change:
12987       + "om" is now "xapian-core"
12988       + "om-examples" is now "xapian-examples", and now contains small,
12989         instructive examples which demonstrate how to use Xapian to implement
12990         particularly features.
12991       + Added "xapian-applications" which contains larger sample applications
12993   * Much improved build system - should now build "out of the box" on many Unix
12994     platforms. Can now VPATH build with vendor tools on most platforms. Builds
12995     as cleanly as we can achieve with GCC 2.95.* (some bogus warnings due to
12996     compiler bugs). Should build without warnings on GCC 3.0, 3.1, and 3.2.
12998   * If using GCC, om/om.h now contains a check that the compiler used to build
12999     Xapian and the compiler used to build the application have compatible C++
13000     ABIs. So you get a clear error message early from the first attempt to
13001     compile a file rather than a confusing error from the linker near the end
13002     of the build.
13004   * RPM packages are now available. We intend to prepare Debian packages in the
13005     near future too.
13007   * xapian-config no longer support "--uninst". It's hard to make this work
13008     reliably and portably, and the effort is better expended elsewhere.
13009     Configure with a prefix and install to a temporary directory instead.
13011   * Xapian can now work with files > 2Gb on OSes which support them.
13013   * Restructured and reworked documentation.
13015   * Removed thread locks. We intend to be "thread-friendly" so different
13016     threads can access different objects without problems. In the rare event
13017     that you want to concurrently call methods on the same object from
13018     different threads you need to create a mutex and lock it. Thus the thread
13019     lock overhead is only incurred when it's necessary.
13021   * Indexgraph removed from core library. It will reappear as an add-on library
13022     at some point.
13024   * Omega's query parser has now been reworked as a separate library.
13026   * Terminology change - "keys" are now known as "values" to avoid confusion,
13027     since they're not like keys in a relational database. The exception is when
13028     a value is used as a key in some operation, e.g. "match_collapse_key".
13030   * Database backends:
13032       + Auto backend: can now be used to create a new database.
13033       + Auto backend: added support for "stub" databases - a text file
13034         specifying the settings for the database to be opened (particularly
13035         useful for allowing easy access to specific remote databases).
13036       + Quartz backend: many fixes and improvements, and the code has been
13037         cleaned up a lot. Implemented deleting of items from postlists.
13038       + Remote backend: implemented term_exists() and get_termfreq();
13039       + Multi-backend: the document length is now fetched from the sub-postlist
13040         rather than the database, which provides a huge speed-up in some cases.
13041       + Sleepycat backend: this experimental backend has been removed.
13042       + Muscat 3.6 backends: now disabled by default.
13044   * Tests:
13046       + Test cases added for most bug fixes and new features.
13047       + stemtest: rewritten in C++ rather than part C++, part perl. Now 15%
13048         faster.
13049       + includetest: removed - it's no longer useful now the code has matured.
13050       + Removed problematic leak checking from testsuite. We plan to use
13051         valgrind instead soon.
13053   * Matcher:
13055       + Fixed several matcher bugs which could cause incorrect results in some
13056         situations.
13057       + Fix bug in expander due to nth_element being called on the wrong
13058         element.
13059       + Added sorting within relevance bands to the matcher.
13060       + Matcher now calculates percentages differently, such that 100%
13061         relevance is actually achievable.
13062       + Matcher now uses a min-heap rather than nth-element to maintain the
13063         proto-mset. This is cleaner and more efficient.
13064       + New operator OP_ELITE_SET replaces match_max_or_terms option.
13065       + Implemented multiple XOR queries.
13066       + Add a new query operator, OP_WEIGHT_CUTOFF, which returns only those
13067         documents from a query which have a weight greater than a specified
13068         cutoff value.
13069       + Removed OmBatchEnquire from system: it may return at a later date, but
13070         for now it is simply out of date and a maintenance liability, and
13071         gives no significant advantage.
13072       + Added experimental match bias functors.
13074   * The API has been cleaned up in various places:
13076       + OmDocumentContents and OmIndexDoc merged to become OmDocument
13077       + OmQuery interface cleaned up
13078       + OmData and OmKey removed - methods which used them now just pass a
13079         string instead
13080       + OmESetItem replaced by OmESetIterator; OmMSetItem by OmMSetIterator;
13081         om_termname_list by OmTermIterator
13082       + OmDocumentTerm and OmDocumentParams removed
13083       + OmMSet::mbound replaced by OmMSet::matches_
13084         {lower_bound,estimated,upper_bound}, giving more information
13085       + Xapian iterators now have default constructors
13086       + Most API classes now have reference counted internals, so assignment
13087         and copying are cheap
13088       + OmStem now has copy constructor and assignment operator
13089       + and more...