[ci] Try to get .gitignore check to work
[xapian.git] / xapian-core / NEWS
blob982df6eef7500b834c547061a45e34b37a47fc6c
1 Xapian-core 1.4.5 (2017-10-16):
3 API:
5 * Add Database::get_total_length() method.  Previously you had to calculate
6   this from get_avlength() and get_doccount(), taking into account rounding
7   issues.  But even then you couldn't reliably get the exact value when total
8   length is large since a double's mantissa has more limited precision than an
9   unsigned long long.
11 * Add Xapian::iterator_rewound() for bidirectional iterators, to test if the
12   iterator is at the start (useful for testing whether we're done when
13   iterating backwards).
15 * DatabaseOpeningError exceptions now provide errno via get_error_string()
16   rather than turning it into a string and including it in the exception
17   message.
19 * WritableDatabase::replace_document(): when passed a Document object which
20   came from a database and has unmodified values, we used to always read
21   those values into a memory structure.  Now we only do this if the document
22   is being replaced to the same document ID which it came from, which should
23   make other cases a bit more efficient.
25 * Enquire::get_eset(): When approximating term frequencies we now round to the
26   nearest integer - previously we always rounded down.
28 testsuite:
30 * Improve Xapian::Document test coverage.
32 * Pass --child-silent-after-fork=yes to valgrind which stops us creating a
33   .valgrind.log.* file for every remote testcase run.  This option was added in
34   valgrind 3.3.0 which is already the minimum version we support.
36 * Open and unlink valgrind log before option parsing so we no longer leave a
37   log file behind if there's an error parsing options or for options like
38   --help which report and exit.
40 * Delete .valgrind.log.* on "make clean" - if tests are run under valgrind and
41   the test is killed at just the wrong moment then a log file may be left
42   behind.
44 * Fix the NetworkError with ECHILD check added in 1.4.4 - this will no longer
45   segfault if the test harness catches a NetworkError without an error string.
47 matcher:
49 * Iterating of positions has been sped up, which means phrase matching is now
50   faster (by a little over 5% in some simple tests).
52 * Fix use after free of QueryOptimiser hint in certain cases involving
53   multiple databases only some of which have positional information.
54   This bug was introduced by changes in xapian-core 1.4.3.  Fixes #752,
55   reported and analysed by Robert Stepanek.
57 * An unweighted OP_AND_MAYBE is now optimised to just its left branch - the
58   other branch or branches only contribute weight, so can be completely ignored
59   when the operator is unweighted.
61 inmemory backend:
63 * Use binary chop instead of linear search in all places where we're searching
64   for a term or document - we weren't taking advantage of the sorted order
65   everywhere.
67 build system:
69 * xapian-core.pc: Specify Libs.private in pkgconfig file, which is needed for
70   static linking, and probably also for shared libraries on platforms without
71   DT_NEEDED or something equivalent.  Fixes #751, reported by Matthieu Gautier.
73 documentation:
75 * Document that QueryParser::set_default_op() supports OP_MAX - this
76   has been the case since OP_MAX was added, but the API docs for
77   set_default_op() weren't updated to reflect this.
79 * Document OP_MAX and OP_WILDCARD.
81 * Fix documentation of TermGenerator stop_strategy values STOP_ALL and
82   STOP_STEMMED.  Reported by Matthieu Gautier in #750.  Thanks to Gaurav Arora
83   for additional investigation.
85 * net/remote_protocol.rst: Update the current version of the remote protocol
86   version (39 not 38).  The differences between the two are only in the Query
87   and MSet serialisations which aren't documented in detail here.
89 * Link get_unique_terms_begin() and get_terms_begin() API documentation -
90   the cross-referencing is useful in itself, but also helps to highlight
91   the difference between the two.
93 * Fix "IPv5" -> "IPv6" comment typo.  Noted by James Clarke
95 * deprecation.html:
97   + Add deprecated Enquire::get_eset() overload - this was marked as deprecated
98     in the header file, but hadn't been added here.
100   + Move deprecated typedefs to the "to be removed" list - they'd been
101     accidentally added to the "removed" list.
103   + Improve descriptions of several deprecated features.
105 * QueryParser::set_max_expansion() is now discussed in the API documentation
106   instead of the deprecated set_max_wildcard_expansion().
108 * Clarify PostList::check() API documentation:  If valid is set to false, then
109   NULL must be returned (pruning in this situation doesn't make sense) and
110   at_end() shouldn't be called (because it implicitly depends on the current
111   position being valid).
113 * HACKING:
115   + Update re -Wold-style-cast which we enabled and then had to disable again.
117   + Update links to C++ FAQ and libstdc++'s debug mode.
119   + Update several URLs to use https.
121   + The 1.2 release branch has now been retired, so remove 1.2-specific
122     backporting tips.
124 portability:
126 * Also check <errno.h> for sys_nerr and sys_errlist.  This is probably a more
127   common location for them than Linux's <stdio.h> (even on Linux the man page
128   says they're in <errno.h> but that doesn't match reality).
130 * Use $(CC) not $(CC_FOR_BUILD) to build zlib-vg.so.  The test for whether we
131   need it is based on the host OS, so it makes more sense to use the host
132   compiler to build it when cross compiling.
134 * On Hurd F_GETLK currently always fails with errno set to ENOSYS - treat this
135   the same way as ENOLCK.  This fixes the testsuite on GNU Hurd, broken since
136   the addition on Database::locked() in 1.4.3.
138 * Add missing #include "safesyssocket.h", needed on at least FreeBSD to get
139   AF_INET and SOCK_STREAM defined.  Fixes
140   https://github.com/xapian/xapian/pull/154, reported by Po-Chuan Hsieh
141   (alternative fix applied was suggested by James Aylett).
143 * configure: Fixed the probe for whether the test harness can use RTTI with
144   IBM's xlC compiler (which defaults to not generating RTTI).  Previously the
145   probe would always think RTTI was available.
147 debug code:
149 * Fix some incorrect class/method names in debug logging.
151 * Stop disabling ccache for coverage builds as ccache 3.2.2 now supports
152   caching compilations with --coverage, and they work as far back as ccache 3.0
153   (caching is automatically disabled by these older versions).
155 * Drop --enable-quiet from in COVERAGE_CONFIGURE - this option no longer does
156   anything since 1.3.1.
158 Xapian-core 1.4.4 (2017-04-19):
160 API:
162 * Database::check():
164   + Fix checking a single table - changes in 1.4.2 broke such checks unless you
165     specified the table without any extension.
167   + Errors from failing to find the file specified are now thrown as
168     DatabaseOpeningError (was DatabaseError, of which DatabaseOpeningError is
169     a subclass so existing code should continue to work).  Also improved the
170     error message when the file doesn't exist is better.
172 * Drop OP_SCALE_WEIGHT over OP_VALUE_RANGE, OP_VALUE_GE and OP_VALUE_LE in the
173   Query constructor.  These operators always return weight 0 so OP_SCALE_WEIGHT
174   over them has no effect.  Eliminating it at query construction time is cheap
175   (we only need to check the type of the subquery), eliminates the confusing
176   "0 * " from the query description, and means the OP_SCALE_WEIGHT Query object
177   can be released sooner.  Inspired by Shivanshu Chauhan asking about the query
178   description on IRC.
180 * Drop OP_SCALE_WEIGHT on the right side of OP_AND_NOT in the Query
181   constructor.  OP_AND_NOT takes no weight from the right so OP_SCALE_WEIGHT
182   has no effect there.  Eliminating it at query construction time is cheap
183   (just need to check the subquery's type), eliminates the confusing "0 * "
184   from the query description, and means the OP_SCALE_WEIGHT object can be
185   released sooner.
187 testsuite:
189 * Add more tests of Database::check().  Fixes #238, reported by Richard
190   Boulton.
192 * Make apitest testcase nosuchdb1 fail if we manage to open the DB.
194 * Skip testcases which throw NetworkError with errno value ECHILD - this
195   indicates system resource starvation rather than a Xapian bug.  Such failures
196   are seen on Debian buildds from time to time, see:
197   https://bugs.debian.org/681941
199 matcher:
201 * Fix incorrect results due to uninitialised memory.  The array holding max
202   weight values in MultiAndPostList is never initialised if the operator is
203   unweighted, but the values are still used to calculate the max weight to pass
204   to subqueries, leading to incorrect results.  This can be observed with an OR
205   under an unweighted AND (e.g. OR under AND on the right side of AND_NOT).
206   The fix applied is to simply default initialise this array, which should lead
207   to a max weight of 0.0 being passed on to subqueries.  Bug reported in
208   notmuch by Kirill A. Shutemov, and forwarded by David Bremner.
210 documentation:
212 * Correct "Query::feature_flag" -> "QueryParser::feature_flag".  Fixes #747,
213   reported by James Aylett.
215 * Rename set_metadata() `value` parameter to `metadata`.  This change is
216   particularly motivated by making it easier to map this case specially in SWIG
217   bindings, but the new name is also clearer and better documents its purpose.
219 * Rename value range parameters.  The new names (`range_limit` instead of
220   `limit`, `range_lower` instead of `begin` and `range_upper` instead of `end`)
221   are particularly motivated by making it easier to map them specially in SWIG
222   bindings, but they're also clearer names which better document their
223   purposes.
225 * Change "(key, tag)" to "(key, value)" in user metadata docs.  The user
226   metadata is essentially what's often called a "key-value store" so users
227   are likely to be familiar with that terminology.
229 * Consistently name parameter of Weight::unserialise() overridden forms.
230   In xapian/weight.h it was almost always named `serialised`, but LMWeight
231   named it `s` and CoordWeight omitted the name.
233 * Fix various minor documentation comment typos.
235 portability:
237 * Fix configure probe for __builtin_exp10() to work around bug on mingw - there
238   GCC generates a call to exp10() for __builtin_exp10() but there is no exp10()
239   function in the C library, so we get a link failure.  Use a full link test
240   instead to avoid this issue.  Reported by Mario Emmenlauer on xapian-devel.
242 * Fix configure probe for log2() which was failing on at least some platforms
243   due to ambiguity between overloaded forms of log2().  Make the probe
244   explicitly check for log2(double) to avoid this problem.
246 * Workaround the unhelpful semantics of AI_ADDRCONFIG on platforms which follow
247   the old RFC instead of POSIX (such as Linux) - if only loopback networking is
248   configured, localhost won't resolve by name or IP address, which causes
249   testsuites using the remote backend over localhost to fail in auto-build
250   environments which deliberately disable networking during builds.  The
251   workaround implemented is to check if the hostname is "::1", "127.0.0.1" or
252   "localhost" and disable AI_ADDRCONFIG for these.  This doesn't catch all
253   possible ways to specify localhost, but should catch all the ways these might
254   be specified in a testsuite.  Fixes https://bugs.debian.org/853107, reported
255   by Daniel Schepler and the root cause uncovered by James Clarke.
257 debug code:
259 * Adjust assertion in InMemoryPostList.  Calling skip_to() is fine when the
260   postlist hasn't been started yet (but the assertion was failing for a term
261   not in the database).  Latent bug, triggered by testcases complexphrase1 and
262   complexnear1 as updated for addition of support for OP_OR subqueries of
263   OP_PHRASE/OP_NEAR.
265 Xapian-core 1.4.3 (2017-01-25):
267 API:
269 * MSet::snippet(): Favour candidate snippets which contain more of a diversity
270   of matching terms by discounting the relevance of repeated terms using an
271   exponential decay.  A snippet which contains more terms from the query is
272   likely to be better than one which contains the same term or terms multiple
273   times, but a repeated term is still interesting, just less with each
274   additional appearance.  Diversity issue highlighted by Robert Stepanek's
275   patch in https://github.com/xapian/xapian/pull/117 - testcases taken from his
276   patch.
278 * MSet::snippet(): New flag SNIPPET_EMPTY_WITHOUT_MATCH to get an empty snippet
279   if there are no matches in the text passed in.  Implemented by Robert
280   Stepanek.
282 * Round MSet::get_matches_estimated() to an appropriate number of significant
283   figures.  The algorithm used looks at the lower and upper bound and where the
284   estimate sits between them, and then picks an appropriate number of
285   significant figures.  Thanks to Sébastien Le Callonnec for help sorting out a
286   portability issue on OS X.
288 * Add Database::locked() method - where possible this non-invasively checks if
289   the database is currently open for writing, which can be useful for
290   dashboards and other status reporting tools.
292 testsuite:
294 * Use terms that exist in the database for most snippet tests.  It's good to
295   test that snippet highlighting works for terms that aren't in the database,
296   but it's not good for all our snippet tests to feature such terms - it's
297   not the common usage.
299 matcher:
301 * Improve value range upper bound and estimated matches.  The value slot
302   frequency provides a tighter upper bound than Database::get_doccount().
303   The estimate is now calculated by working out the proportion of possible
304   values between the slot lower and upper bounds which the range covers
305   (assuming a uniform distribution).  This seems to work fairly well in
306   practice, and is certainly better than the crude estimate we were using:
307   Database::get_doccount() / 2
309 * Handle arbitrary combinations of OP_OR under OP_NEAR/OP_PHRASE, partly
310   addressing #508.  Thanks to Jean-Francois Dockes for motivation and testing.
312 * Only convert OP_PHRASE to OP_AND if full DB has no positions.  Until now the
313   conversion was done independently for each sub-database, but being consistent
314   with the results from a database containing all the same documents seems more
315   useful.
317 * Avoid double get_wdf() call for first subquery of OP_NEAR and OP_PHRASE,
318   which will speed them up by a small amount.
320 documentation:
322 * INSTALL: Update section about -Bsymbolic-functions which is not a new
323   GNU ld feature at this point.
325 tools:
327 * xapian-delve: Uses new Database::locked() method to report if the database
328   is currently locked.
330 portability:
332 * Fix build failure cross-compiling for android due to not pulling in header
333   for errno.
335 * Fix compiler warnings.
337 Xapian-core 1.4.2 (2016-12-26):
339 API:
341 * Add XAPIAN_AT_LEAST(A,B,C) macro.
343 * MSet::snippet(): Optimise snippet generation - it's now ~46% faster in a
344   simple test.
346 * Add Xapian::DOC_ASSUME_VALID flag which tells Database::get_document() that
347   it doesn't need to check that the passed docid is valid.  Fixes #739,
348   reported by Germán M. Bravo.
350 * TfIdfWeight: Add support for the L wdf normalisation.  Patch from Vivek Pal.
352 * BB2Weight: Fix weights when database has just one document.  Our existing
353   attempt to clamp N to be at least 2 was ineffective due to computing
354   N - 2 < 0 in an unsigned type.
356 * DPHWeight: Fix reversed sign in quadratic formula, making the upper bound a
357   tiny amount higher.
359 * DLHWeight: Correct upper bound which was a bit too low, due to flawed logic
360   in its derivation.  The new bound is slightly less tight (by a few percent).
362 * DLHWeight,DPHWeight: Avoid calculating log(0) when wdf is equal to the
363   document length.
365 * TermGenerator: Handle stemmer returning empty string - the Arabic stemmer
366   can currently do this (e.g. for a single tatweel) and user stemmers can too.
367   Fixes #741, reported by Emmanuel Engelhart.
369 * Database::check(): Fix check that the first docid in each doclength chunk is
370   more than the last docid in the previous chunk - this code was in the wrong
371   place so didn't actually work.
373 * Database::get_unique_terms(): Clamp returned value to be <= document length.
374   Ideally get_unique_terms() ought to only count terms with wdf > 0, but that's
375   expensive to calculate on demand.
377 glass backend:
379 * When compacting we now only write the iamglass file out once, and we write it
380   before we sync the tables but sync it after, which is more I/O friendly.
382 * Database::check(): Fix in SEGV when out == NULL and opts != 0.
384 * Fix potential SEGV with corrupt value stats.
386 chert backend:
388 * Fix potential SEGV with corrupt value stats.
390 build system:
392 * Add XO_REQUIRE autoconf macro to provide an easy way to handle version checks
393   in user configure scripts.
395 tools:
397 * quest: Support BM25+, LM and PL2+ weighting schemes.
399 * xapian-check: Fix when ellipses are shown in 't' mode.  They were being shown
400   when there were exactly 6 entries, but we only start omitting entries when
401   there are *more* than 6.  Fix applies to both glass and chert.
403 portability:
405 * Avoid using opendir()/readdir() in our closefrom() implementation as these
406   functions can call malloc(), which isn't safe to do between fork() and exec()
407   in a multi-threaded program, but after fork() is exactly where we want to
408   use closefrom().  Instead we now use getdirentries() on Linux and
409   getdirentriesattr() on OS X (OS X support bugs shaken out with help from
410   Germán M. Bravo).
412 * Support reading UUIDs from /proc/sys/kernel/random/uuid which is especially
413   useful when building for Android, as it avoids having to cross-build a UUID
414   library.
416 * Disable volatile workaround for excess precision SEGV for SSE - previously it
417   was only being disabled for SSE2.
419 * When building for x86 using a compiler where we don't know how to disable
420   use of 387 FP instructions, we now run remote servers for the testsuite under
421   valgrind --tool=none, like we do when --disable-sse is explicitly specified.
423 * Add alignment_cast<T> which has the same effect as reinterpret_cast<T> but
424   avoids warnings about alignment issues.
426 * Suppress warnings about unused private members.  DLHWeight and DPHWeight
427   have an unused lower_bound member, which clang warns about, but we need to
428   keep them there in 1.4.x to preserve ABI compatibility.
430 * Remove workaround for g++ 2.95 bug as we require at least 4.7 now.
432 * configure: Probe for <cxxabi.h>.  GCC added this header in GCC 3.1, which
433   is much older than we support, so we've just assumed it was available if
434   __GNUC__ was defined.  However, clang lies and defines __GNUC__ yet doesn't
435   seem to reliably provide <cxxabi.h>, so we need to probe for it.
437 * Fix "unused assignment" warning.
439 * configure: Probe for __builtin_* functions.  Previously we just checked for
440   __GNUC__ being defined, but it's cleaner to probe for them properly -
441   compilers other than GCC and those that pretend to be GCC might provide these
442   too.
444 * Use __builtin_clz() with compilers which support it to speed up encoding
445   and especially decoding of positional data.  This speeds up phrase searching
446   by ~0.5% in a simple test.
448 * Check signed right shift behaviour at compile time - we can use a test on a
449   constant expression which should optimise away to just the required version
450   of the code, which means that on platforms which perform sign-extension
451   (pretty much everything current it seems) we don't have to rely on the
452   compiler optimising a portable idiom down to the appropriate right shift
453   instruction.
455 * Improve configure check for log2().  We include <cmath> so the check really
456   should succeed if only std::log2() is declared.
458 * Enable win32-dll option to LT_INIT.
460 debug code:
462 * xapian-inspect:
464   + Support glass instead of chert.
466   + Allow control of showing keys/tags.
468   + Use more mnemonic letters than X for command arguments in help.
470 Xapian-core 1.4.1 (2016-10-21):
472 API:
474 * Constructing a Query for a non-reference counted PostingSource object will
475   now try to clone the PostingSource object (as happened in 1.3.4 and
476   earlier).  This clone code was removed as part of the changes in 1.3.5 to
477   support optional reference counting of PostingSource objects, but that breaks
478   the case when the PostingSource object is on the stack and goes out of scope
479   before the Query object is used.  Issue reported by Till Schäfer and analysed
480   by Daniel Vrátil in a bug report against Akonadi:
481   https://bugs.kde.org/show_bug.cgi?id=363741
483 * Add BM25PlusWeight class implementing the BM25+ weighting scheme, implemented
484   by Vivek Pal (https://github.com/xapian/xapian/pull/104).
486 * Add PL2PlusWeight class implementing the PL2+ weighting scheme, implemented
487   by Vivek Pal (https://github.com/xapian/xapian/pull/108).
489 * LMWeight: Implement Dir+ weighting scheme as DIRICHLET_PLUS_SMOOTHING.
490   Patch from Vivek Pal.
492 * Add CoordWeight class implementing coordinate matching.  This can be useful
493   for specialised uses - e.g. to implement sorting by the number of matching
494   filters.
496 * DLHWeight,DPHWeight,PL2Weight: With these weighting schemes, the formulae
497   can give a negative weight contribution for a term in extreme cases.  We
498   used to try to handle this by calculating a per-term lower bound on the
499   contribution and subtracting this from the contribution, but this idea
500   is fundamentally flawed as the total offset it adds to a document depends on
501   what combination of terms that document matches, meaning in general the
502   offset isn't the same for every matching document.  So instead we now clamp
503   each term's weight contribution to be >= 0.
505 * TfIdfWeight: Always scale term weight by wqf - this seems the logical
506   approach as it matches the weighting we'd get if we weighted every non-unique
507   term in the query, as well as being explicit in the Piv+ formula.
509 * Fix OP_SCALE_WEIGHT to work with all weighting schemes - previously it was
510   ignored when using PL2Weight and LMWeight.
512 * PL2Weight: Greatly improve upper bound on weight:
513   + Split the weight equation into two parts and maximise each separately as
514     that gives an easily solvable problem, and in common cases the maximum is
515     at the same value of wdfn for both parts.  In a simple test, the upper
516     bounds are now just over double the highest weight actually achieved -
517     previously they were several hundred times.  This approach was suggested by
518     Aarsh Shah in: https://github.com/xapian/xapian/pull/48
519   + Improve upper bound on normalised wdf (wdfn) - when wdf_upper_bound >
520     doclength_lower_bound, we get a tighter bound by evaluating at
521     wdf=wdf_upper_bound.  In a simple test, this reduces the upper bound on
522     wdfn by 36-64%, and the upper bound on the weight by 9-33%.
524 * PL2Weight: Fix calculation of upper_bound when P2>0.  P2 is typically
525   negative, but for a very common term it can be positive and then we should
526   use wdfn_lower not wdfn_upper to adjust P_max.
528 * Weight::unserialise(): Check serialised form is empty when unserialising
529   parameter-free schemes BoolWeight, DLHWeight and DPHWeight.
531 * TermGenerator::set_stopper_strategy(): New method to control how the Stopper
532   object is used.  Patch from Arnav Jain.
534 * QueryParser: Fix handling of CJK query over multiple prefixes.  Previously
535   all the n-gram terms were AND-ed together - now we AND together for each
536   prefix, then OR the results.  Fixes #719, reported by Aaron Li.
538 * Add Database::get_revision() method which provides access to the database
539   revision number for chert and glass, intended for use by xapiand.  Marked
540   as experimental, so we don't have to go through the usual deprecation cycle
541   if this proves not to be the approach we want to take.  Fixes #709,
542   reported by Germán M. Bravo.
544 * Mark RangeProcessor constructor as `explicit`.
546 testsuite:
548 * OP_SCALE_WEIGHT: Check top weight is non-zero - if it is zero, tests which
549   try to check that OP_SCALE_WEIGHT works will always pass.
551 * testsuite: Check SerialisationError descriptions from Xapian::Weight
552   subclasses mention the weighting scheme name.
554 matcher:
556 * Fix stats passed to Weight with OP_SYNONYM.  Previously the number of
557   unique terms was never calculated, and a term which matched all documents
558   would be optimised to an all-docs postlist, which fails to supply the
559   correct wdf info.
561 * Use floating point calculation for OR synonym freq estimates.  The division
562   was being done as an integer division, which means the result was always
563   getting rounded down rather than rounded to the nearest integer.
565 glass backend:
567 * Fix allterms with prefix on glass with uncommitted changes.  Glass aims to
568   flush just the relevant postlist changes in this case but the end of the
569   range to flush was wrong, so we'd only actually flush changes for a term
570   exactly matching the prefix.  Fixes #721.
572 remote backend:
574 * Improve handling of invalid remote stub entries: Entries without a colon now
575   give an error rather than being quietly skipped; IPv6 isn't yet supported,
576   but entries with IPv6 addresses now result in saner errors (previously the
577   colons confused the code which looks for a port number).
579 build system:
581 * XO_LIB_XAPIAN: Check for user trying to specify configure for XAPIAN_CONFIG
582   and give a more helpful error.
584 * Fix XO_LIB_XAPIAN to work without libtool.  Modern versions of GNU m4 error
585   out when defn is used on an undefined macro.  Uncovered by Amanda Jayanetti.
587 * Clean build paths out of installed xapian-config, mostly in the interests of
588   facilitating reproducible builds, but it is also a little more robust as the
589   "uninstalled tree" case can't then accidentally be triggered.
591 * Drop compiler options that are no longer useful:
592   + -fshow-column is the default in all GCC versions we now support
593     (checked as GCC 4.6).
594   + -Wno-long-long is no longer necessary now that we require C++11 where
595     "long long" is a standard type.
597 documentation:
599 * Add API documentation comments for all classes, methods, constants, etc which
600   were lacking them, and improve the content of some existing comments.
602 * Stop hiding undocumented classes and members.  Hiding them silences doxygen's
603   warnings about them, so it's hard to see what is missing, and the stub
604   documentation produced is perhaps better than not documenting at all.
605   Fixes #736, reported by James Aylett.
607 * xapian-check: Make command line syntax consistent with other tools.
609 * Note when MSet::snippet() was added.
611 * deprecation.rst: Recommend unsigned over useconds_t for timeout values (but
612   leave the API using useconds_t for 1.4.x for ABI compatibility.  The type
613   useconds_t is now obsolete and anyway was intended to represent a time in
614   microseconds (confusing when Xapian's timeouts are in milliseconds).  The
615   Linux usleep man page notes: "Programs will be more portable if they never
616   mention this type explicitly."
618 portability:
620 * Suppress compiler warnings about pointer alignment on some architectures.
621   We know the data is aligned in these cases.
623 * Fix replicate7 under Cygwin.
625 debug code:
627 * Add missing forward declaration needed by --enable-log build.
629 Xapian-core 1.4.0 (2016-06-24):
631 API:
633 * Update to Unicode 9.0.0.
635 portability:
637 * Fix build on big-endian architectures.  The new unaligned word access
638   functions expect WORDS_BIGENDIAN to be set, but configure.ac wasn't invoking
639   AC_C_BIGENDIAN to arrange for this to be set.
641 * Suppress compiler warnings about pointer alignment.  We know the data is
642   suitably aligned, because the whole point of these functions is to allow
643   reading an aligned word.
645 Xapian-core 1.3.7 (2016-06-01):
647 API:
649 * Reimplement ESet and ESetIterator as we did for MSet and MSetIterator in
650   1.3.5.  ESetIterator internally now counts down to the end of the ESet, so
651   the end test is now against 0, rather than against eset.size().  And more of
652   the trivial methods are now inlined, which reduces the number of relocations
653   needed to load the library, and should give faster code which is a very
654   similar size to before.
656 * MSetIterator and ESetIterator are now STL-compatible random_access_iterators
657   (previously they were only bidirectional_iterators).
659 testsuite:
661 * Merge queryparsertest and termgentest into apitest.  Their testcases now use
662   the backend manager machinery in the testharness, so we don't have to
663   hard-code use of inmemory and chert backends, but instead run them under all
664   backends which support the required features.  This fixes some test failures
665   when both chert and glass are disabled due to trying to run spelling tests
666   with the inmemory backend.
668 * Avoid overflowing collection frequency in totaldoclen1.  We're trying to test
669   total document length doesn't wrap, so avoid collection freq overflowing in
670   the process, as that triggers errors when running the testsuite under ubsan.
671   We should handle collection frequency overflow better, but that's a separate
672   issue.
674 * Add some test coverage for ESet::get_ebound().
676 matcher:
678 * Fix upper bound on matches for OP_XOR.  Due to a reversed conditional, the
679   estimate could be one too low in some cases where the XOR matched all the
680   documents in the database.
682 * Improve lower bound on matches for OP_XOR.  Previously the lower bound was
683   always set to 0, which is valid, but we can often do better.
685 glass backend:
687 * Fix Database::check() parsing of glass changes file header.  In practice this
688   was unlikely to actually cause problems.
690 build system:
692 * --disable-backend-remote now disables replication too which makes it
693   actually usable (currently replication and the remote backend share most of
694   their network code, so disabling them together probably makes sense anyway).
696 * Improve builds with various combinations of backends disabled (see #361).
698 portability:
700 * Revert change to handle a self-initialised PIMPL object (e.g. Xapian::Query
701   q(q);), added in 1.3.6.  It seems this case is actually undefined behaviour,
702   so there's not much point trying to do anything about it.  Clang warns about
703   the testcase for it (tested with 3.5), but sadly current GCC doesn't (tested
704   with 6.1).
706 * Use <cstdint> for integer types of known widths now we require C++11.
708 * Replace unaligned word access functions with optimised versions which use
709   memcpy() and (on little-endian platforms) a byte-swap (via compiler builtins
710   where available).  Access revision numbers in database blocks with an aligned
711   load, since we know they are suitably aligned.
713 * Simplify handling of platforms where timer_create() exists but isn't
714   suitable for our needs - AIX and GNU Hurd both have timer_create() but it
715   always seems to fail (on Hurd this is because there's a dummy implementation
716   in glibc which always fails with ENOSYS).  Trying a call at runtime which
717   will never succeed is a waste of time, so we want to avoid defining
718   HAVE_TIMER_CREATE in such cases.  Probing for this properly in configure
719   would need us to compile and run a test program, which is unhelpful when
720   cross-compiling, so for now just test against a blacklist of platforms we
721   know don't provide a suitable timer_create() function.
723 * Check _POSIX_MONOTONIC_CLOCK and if it's not defined, use CLOCK_REALTIME
724   instead of CLOCK_MONOTONIC.  The existing hard-coded platform checks still
725   seem to be needed, as on these platforms CLOCK_MONOTONIC is available for
726   some functions, but doesn't work with timer_create() for one reason or
727   another.  But the new check should avoid failures on platforms without any
728   monotonic clock support.
730 * Make opt_intrusive_base symbols visible to avoid UBSAN warnings.
732 * Avoid potential set-but-unused warning - with both chert and glass disabled,
733   last_docid's final set value isn't used, which GCC doesn't warn about, but
734   other compilers might.
736 * Avoid explicit recursive return of void - we've had warnings for such cases
737   from some compilers in the past, and it's an odd thing to do outside of a
738   template.
740 Xapian-core 1.3.6 (2016-05-09):
742 API:
744 * TfIdfWeight: Support freq and squared IDF normalisations.  Patch from Vivek
745   Pal.
747 * New Xapian::Query::OP_INVALID to provide an "invalid" query object.
749 * Reject OP_NEAR/OP_PHRASE with non-leaf subqueries early to avoid a
750   potential segmentation fault if the non-leaf subquery decayed at
751   just the wrong moment.  See #508.
753 * Reduce positional queries with a MatchAll or PostingSource subquery to
754   MatchNothing (since these subqueries have no positional information, so
755   the query can't match).
757 * Deprecate ValueRangeProcessor and introduce new RangeProcessor class as
758   a replacement.  RangeProcessor()::operator()() method returns Xapian::Query,
759   so a range can expand to any query.  OP_INVALID is used to signal that
760   a range is not recognised.  Fixes #663.
762 * Combining of ranges over the same quantity with OP_OR is now handled by
763   an explicit "grouping" parameter, with a sensible default which works
764   for value range queries.  Boolean term prefixes and FieldProcessor now
765   support "grouping" too, so ranges and other filters can now be grouped
766   together.
768 * Formally deprecate WritableDatabase::flush().  The replacement commit()
769   method was added in 1.1.0, so code can be switched to use this and still
770   work with 1.2.x.
772 * Fix handling of a self-initialised PIMPL object (e.g. Xapian::Query q(q);).
773   Previously the uninitialised pointer was copied to itself, resulting in
774   undefined behaviour when the object was used.  This isn't something you'd see
775   in normal code, but it's a cheap check which can probably be optimised away
776   by the compiler (GCC 6 does).
778 testsuite:
780 * Fix testcase notermlist1 to check correct table extension - ".glass" not
781   ".DB" (chert doesn't support DB_NO_TERMLIST).
783 build system:
785 * Bootstrap with autoconf 2.69.  This requires GNU m4 >= 4.6, but that should
786   no longer be an issue on developer machines.
788 * Fix build with --enable-log.  Debug logging was trying to log
789   compress_strategy parameter which was removed recently.  Reported by Ankit
790   Paliwal on xapian-devel.
792 documentation:
794 * Fix misfiled deprecation notes.  Various things marked as deprecated and
795   removed in 1.3.x have in fact been deprecated but not removed (they were just
796   added to the wrong list).  One instance queried by David Bremner on #xapian,
797   and a review found several more.
799 * Improve docs for lcov makefile targets - say that these are targets in the
800   xapian-core directory (noted by poe_ on #xapian), document
801   coverage-reconfigure-maintainer-mode target, and clarify what the example of
802   how to use GENHTML_ARGS actually does.
804 * Note that Java bindings use xapian/iterator.h.
806 * Update release checklist.  The script to build the release tarballs now
807   automates some of the changes needed in trac.
809 portability:
811 * Fix build with Android NDK which declares sys_errlist and sys_nerr in the
812   C library headers, but doesn't actually define them in the library itself.
813   The configure test now tries to link a trivial program which uses these
814   symbols.  Patch from Tejas Jogi.
816 Xapian-core 1.3.5 (2016-04-01):
818 This release includes all changes from 1.2.23 which are relevant.
820 API:
822 * The Snipper class has been replaced with a new MSet::snippet() method.
823   The implementation has also been redone - the existing implementation was
824   slower than ideal, and didn't directly consider the query so would sometimes
825   selects a snippet which doesn't contain any of the query terms (which users
826   quite reasonably found surprising).  The new implementation is faster, will
827   always prefer snippets containing query terms, and also understands exact
828   phrases and wildcards.  Fixes #211.
830 * Add optional reference counting support for ErrorHandler, ExpandDecider,
831   KeyMaker, PostingSource, Stopper and TermGenerator.  Fixes #186, reported
832   by Richard Boulton.  (ErrorHandler's reference counting isn't actually used
833   anywhere in xapian-core currently, but means we can hook it up in 1.4.x if
834   ticket #3 gets addressed).
836 * Deprecate public member variables of PostingSource.  The new getters and/or
837   setters added in 1.2.23 and 1.3.5 are preferred.  Fixes #499, reported by
838   Joost Cassee.
840 * Reimplement MSet and MSetIterator.  MSetIterator internally now counts down
841   to the end of the MSet, so the end test is now against 0, rather than against
842   mset.size().  And more of the trivial methods are now inlined, which reduces
843   the number of relocations needed to load the library, and should give faster
844   code which is a very similar size to before.
846 * Only issue prefetch hints for documents if MSet::fetch() is called.  It's not
847   useful to send the prefetch hint right before the actual read, which was
848   happening since the implementation of prefetch hints in 1.3.4.  Fixes #671,
849   reported by Will Greenberg.
851 * Fix OP_ELITE_SET selection in multi-database case - we were selecting
852   different sets for each subdatabase, but removing the special case check for
853   termfreq_max == 0 solves that.
855 * Remove "experimental" marker from FieldProcessor, since we're happy with the
856   API as-is.  Reported by David Bremner on xapian-discuss.
858 * Remove "experimental" marker from Database::check().  We've not had any
859   negative feedback on the current API.
861 * Databse::check() now checks that doccount <= last_docid.
863 * Database::compact() on a WritableDatabase with uncommitted changes could
864   produce a corrupted output.  We now throw Xapian::InvalidOperationError in
865   this case, with a message suggesting you either commit() or open the database
866   from disk to compact from.  Reported by Will Greenberg on #xapian-discuss
868 * Add Arabic stemmer.  Patch from Assem Chelli in
869   https://github.com/xapian/xapian/pull/45
871 * Improve the Arabic stopword list.  Patch from Assem Chelli.
873 * Make functions defined in xapian/iterator.h 'inline'.
875 * Don't force the user to specify the metric in the geospatial API -
876   GreatCircleMetric is probably what most users will want, so a sensible
877   default.
879 * Xapian::DBCHECK_SHOW_BITMAP: This was added in 1.3.0 (so has never been in
880   a stable release) and was superseded by Xapian::DBCHECK_SHOW_FREELIST in
881   1.3.2, so just remove it.
883 * Make setting an ErrorHandler a no-op - this feature is deprecated and we're
884   not aware of anyone using it.  We're hoping to rework ErrorHandler in 1.4.x,
885   which will be simpler without having to support the current behaviour as well
886   as the new.  See #3.
888 testsuite:
890 * unittest: We can't use Assert() to unit test noexcept code as it throws an
891   exception if it fails.  Instead set up macros to set a variable and return if
892   an assertion fails in a unittest testcase, and check that variable in the
893   harness.
895 glass backend:
897 * Make glass the default backend.  The format should now be stable, except
898   perhaps in the unlikely event that a bug emerges which requires a format
899   change to address.
901 * Don't explicitly store the 2 byte "component_of" counter for the first
902   component of every Btree entry in leaf blocks - instead use one of the upper
903   bits of the length to store a "first component" flag.  This directly saves 2
904   bytes per entry in the Btree, plus additional space due to fewer blocks and
905   fewer levels being needed as a result.  This particularly helps the position
906   table, which has a lot of entries, many of them very small.  The saving would
907   be expected to be a little less than the saving from the change which shaved
908   2 bytes of every Btree item in 1.3.4 (since that saved 2 bytes multiple times
909   for large entries which get split into multiple items).  A simple test
910   suggests a saving of several percent in total DB size, which fits that.  This
911   change reduces the maximum component size to 8194, which affects tables
912   with a 64KB blocksize in normal use and tables with >= 16KB blocksize with
913   full compaction.
915 * Refactor glass backend key comparison - == and < operations are replaced by
916   a compare() function returns negative, 0 or positive (like strcmp(), memcmp()
917   and std::string::compare()).  This allows us to avoid a final compare to
918   check for equality when binary chopping, and to terminate early if the binary
919   chop hits the exact entry.
921 * If a cursor is moved to an entry which doesn't exist, we need to step back to
922   the first component of previous entry before we can read its tag.  However we
923   often don't actually read its tag (e.g. if we only wanted the key), so make
924   this stepping back lazy so we can avoid doing it when we don't want to read
925   the tag.
927 * Avoid creating std::string objects to hold data when compressing and
928   decompressing tags with zlib.
930 * Store minimum compression length per table in the version file, with 0
931   meaning "don't compress".  Currently you can only change this setting with a
932   hex editor on the file, but now it is there we can later make use of it
933   without needing a database format change.
935 * Database::check() now performs additional consistency checks for glass.
936   Reported by Jean-Francois Dockes and Bob Cargill via xapian-discuss.
938 * Database::check(): check docids don't exceed db_last_docid when checking
939   a single glass table.
941 * We now throw DatabaseCorruptError in a few cases where it's appropriate
942   but we didn't previously, in particular in the case where all the files in a
943   DB have been truncated to zero size (which makes handling of this case
944   consistent with chert).
946 * Fix compaction to a single file which already exists.  This was hanging.
947   Noted by Will Greenberg on #xapian.
949 chert backend:
951 * When using 64-bit Xapian::docid, consistently use the actual maximum valid
952   docid value rather instead of the maximum value the type can hold.
954 build system:
956 * Default to only building shared libraries.  Building both shared and static
957   means having to compile the files which make up the library twice on most
958   platforms.  Shared libraries are the better option for most users, and if
959   anyone really wants static libraries they can configure with --enable-static
960   (or --enable-static=xapian-core if configuring a combined tree with the
961   bindings).
963 * Fix XAPIAN_TEST_LINKER_FLAG macro to actually test if it's possible to link
964   with the option in LDFLAGS - previously we attempted to guess based on
965   whether the error message from $CXX $flag contained the option name, which
966   doesn't actually work very well.
968 documentation:
970 * Document that OP_WILDCARD expansion limits currently work per sub-db.
972 * Remove reference to ChangeLog files, as we are no longer updating them.
974 * Remove link to apidoc.pdf which we no longer generate this by default.
976 * Clarify LatLongCoord::operator< purpose in API documentation.
978 * Fix documentation comment typo - LatLongDistancePostingSource is a posting
979   source, not a match decider!
981 * HACKING: Recommend lcov 1.11 as it uses much less memory
983 tools:
985 * xapian-replicate: Obviously corrupt replicas now self-heal.  If a replica
986   database fails to open with DatabaseCorruptError then a full copy is now
987   forced.
989 portability:
991 * Eliminate arrays of C strings, which result in relocations at library load
992   time, slowing startup and making pages containing them unsharable.
994 * Refactor MSet::fetch() to reduce load time relocations.
996 debug code:
998 * Fix to build when configured with --enable-assertions.
1000 * Fix to build when configured with --enable-log.  Reported by Tim McNamara
1001   on #xapian-discuss.
1003 Xapian-core 1.3.4 (2016-01-01):
1005 This release includes all changes from 1.2.22 which are relevant.
1007 API:
1009 * Update to Unicode 8.0.0.  Fixes #680.
1011 * Overhaul database compaction API.  Add a Xapian::Database::compact() method,
1012   with the Database object specifying the source database(s).
1013   Xapian::Compactor is now just a functor to use if you want to control
1014   progress reporting and/or the merging of user metadata.  The existing API
1015   has been reimplemented using the new one, but is marked as deprecated.
1017 * Add support for a default value when sorting.  Fixes #452, patch from
1018   Richard Boulton.
1020 * Make all functor objects non-copyable.  Previously some were, some weren't,
1021   but it's hard to correctly make use of this ability.  Fixes #681.
1023 * Fix use after free with WILDCARD_LIMIT_MOST_FREQUENT.  If we tried to open a
1024   postlist after processing such a wildcard, the postlist hint could be
1025   pointing to a PostList object which had been deleted.  Fixes #696, reported
1026   by coventry.
1028 * Add support for optional reference counting of MatchSpy objects.
1030 * Improve Document::get_description() - the output is now always valid UTF-8,
1031   doesn't contain implementation details like "Document::Internal", and more
1032   clearly reports if the document is linked to a database.
1034 * Remove XAPIAN_CONST_FUNCTION marker from sortable_serialise_() helper, as it
1035   writes to the passed in buffer, so it isn't const or pure.  Fixes
1036   decvalwtsource2 testcase failure when compiled with clang.
1038 * Make PostingSource::set_maxweight() public - it's hard to wrap for the
1039   bindings as a protected method.  Fixes #498, reported by Richard Boulton.
1041 testsuite:
1043 * Add unit test for internal C_isupper(), etc functions.
1045 matcher:
1047 * Optimise value range which is a superset of the bounds.  If the value
1048   frequency is equal to the doccount, such a range is equivalent to MatchAll,
1049   and we now avoid having to read the valuestream at all.
1051 * Optimise OP_VALUE_RANGE when the upper bound can't be exceeded.  In this
1052   case, we now use ValueGePostList instead of ValueRangePostList.
1054 glass backend:
1056 * Shave 2 bytes of every Btree item (which will probably typically reduce
1057   database size by several percent).
1059 * More compact item format for branch blocks - 2 bytes per item smaller.  This
1060   means each branch block can branch more ways, reducing the number of Btree
1061   levels needed, which is especially helpful for cold-cache search times.
1063 * Track an upper bound on spelling word frequency.  This isn't currently used,
1064   but will be useful for improving the spelling algorithm, and we want to
1065   stabilise the glass backend format.  See #225, reported by Philip Neustrom.
1067 * Support 64-bit docids in the glass backend on-disk format.  This changes the
1068   encoding used by pack_uint_preserving_sort() to one which supports 64 bit
1069   values, and is a byte smaller for values 16384-32767, and the same size for
1070   all other 32 bit values.  Fixes #686, from original report by James Aylett.
1072 * Use memcpy() not memmove() when no risk of overlap.
1074 * Store length of just the key data itself, allowing keys to be up to 255 bytes
1075   long - the previous limit was 252.
1077 * Change glass to store DB stats in the version file.  Previously we stored
1078   them in a special item in the postlist table, but putting them in the version
1079   file reduces the number of block reads required to open the database, is
1080   simpler to deal with, and means we can potentially recalculate tight upper
1081   and lower bounds for an existing database without having to commit a new
1082   revision.
1084 * Add support for a single-file variant for glass.  Currently such databases
1085   can only be opened for reading - to create one you need to use
1086   xapian-compact (or its API equivalent).  You can embed such databases within
1087   another file, and open them by passing in a file descriptor open on that file
1088   and positioned at the offset the database starts at).  Database::check() also
1089   supports them.  Fixes #666, reported by Will Greenberg (and previously
1090   suggested on xapian-discuss by Emmanuel Engelhart).
1092 * Avoid potential DB corruption with full-compaction when using 64K blocks.
1094 * Where posix_fadvise() is available, use it to prefetch postlist Btree blocks
1095   from the level below the root block which will be needed for postlists of
1096   terms in the query, and similarly for the docdata table when MSet::fetch() is
1097   called.  Based on patch by Will Greenberg in #671.
1099 chert backend:
1101 * Where posix_fadvise() is available, use it to prefetch postlist Btree blocks
1102   from the level below the root block which will be needed for postlists of
1103   terms in the query, and similarly for the record table when MSet::fetch() is
1104   called.  Based on patch by Will Greenberg in #671.
1106 remote backend:
1108 * Fix hook for remote support of user weighting schemes.  The commented-out
1109   code used entirely the wrong class - now we use the server object we have
1110   access to, and forward the method to the class which needs it.
1112 build system:
1114 * New configure options --enable-64bit-docid and --enable-64bit-termcount,
1115   which control the size of these types.  Because these types are used in
1116   the API, libraries built with different combinations of them won't be ABI
1117   compatible.  Based heavily on patch from James Aylett and Dylan Griffith.
1118   Fixes #385.
1120 * Sort out hiding most of the internal symbols which had public visibility
1121   for various reason.  Mostly addresses #63.
1123 tools:
1125 * xapian-inspect: We no longer install this - it's really an aid to Xapian
1126   development rather than a user tool.
1128 portability:
1130 * Minimum supported GCC version is now documented as GCC 4.7, for C++11
1131   support.  Previously we documented 4.7 as the oldest known to work.
1133 * Use CLOCK_REALTIME with timer_create() on Cygwin.
1135 * Don't include winsock headers on Cygwin.  Instead include <arpa/inet.h> for
1136   htons() and htonl().
1138 * Handle AI_ADDRCONFIG not being defined by some mingw versions.
1140 * Fix to handle mingw now providing a nanosleep() function.
1142 * Use WSAAddressToString instead of inet_ntop under __WIN32__ - at least under
1143   mingw we don't seem to have inet_ntop().
1145 * Fix testsuite to compile when S_ISSOCK() isn't defined.
1147 debug code:
1149 * Add missing parameters to debug logging for a few methods.
1151 Xapian-core 1.3.3 (2015-06-01):
1153 This release includes all changes from 1.2.20-1.2.21 which are relevant.
1155 API:
1157 * Database:
1159   + Add new flag Xapian::DB_RETRY_LOCK which allows opening a database for
1160     writing to wait until it can get a write lock.  (Fixes #275, reported by
1161     Richard Boulton).
1163   + Fix Database::get_doclength_lower_bound() over multiple databases when some
1164     are empty or consist only of zero-length documents.  Previously this would
1165     report a lower bound of zero, now it reports the same lowest bound as a
1166     single database containing all the same documents.
1168   + Database::check(): When checking a single table, handle the ".glass"
1169     extension on glass database tables, and use the extension to guide the
1170     decision of which backend the table is from.
1172 * Query:
1174   + Add new OP_WILDCARD query operator, which expands wildcards lazily, so now
1175     we create the PostList tree for a wildcard directly, rather than creating
1176     an intermediate Query tree.  OP_WILDCARD offers a choice of ways to limit
1177     wildcard expansion (no limit, throw an exception, use the first N by term
1178     name, or use the most frequent N).  (See tickets #48 and #608).
1180 * QueryParser:
1182   + Add new set_max_expansion() method which provides access to OP_WILDCARD's
1183     choice of ways to limit expansion and can set limits for partial terms as
1184     well as for wildcards.  Partial terms now default to the 100 most frequent
1185     matching terms.  (Completes #608, reported by boomboo).
1187   + Deprecate set_max_wildcard_expansion() in favour of set_max_expansion().
1189 * Add support for optional reference counting of FieldProcessor and
1190   ValueRangeProcessor objects.
1192 testsuite:
1194 * If command line option --verbose/-v isn't specified, set the verbosity level
1195   from environmental variable VERBOSE.
1197 * Re-enable replicate3 for glass, as it no longer fails.
1199 * Add more test coverage for get_unique_terms().
1201 * Don't leave an extra fd open when starting xapian-tcpsrv for remotetcp tests.
1203 glass backend:
1205 * When reporting freelist errors during a database check, distinguish between a
1206   block in use and in the freelist, and a block in the freelist more than once.
1208 * Fix compaction and database checking for the change to the format of keys
1209   in the positionlist table which happened in 1.3.2.
1211 * After splitting a block, we always insert the new block in the parent right
1212   after the block it was split from - there's no need to binary chop.
1214 * Avoid infinite recursion when we hit the end of the freelist block we're
1215   reading and the end of the block we're writing at the same time.
1217 * Fix freelist handling to allow for the newly loaded first block of the
1218   freelist being already used up.
1220 chert backend:
1222 * Fix problems with get_unique_terms() on a modified chert database.
1224 * Fix xapian-check on a single chert table, which seg faulted in 1.3.2.
1226 remote backend:
1228 * Avoid dividing zero by zero when calculating the average length for an empty
1229   database.
1231 build system:
1233 * Merge generate-allsnowballheaders script into collate-sbl.
1235 portability:
1237 * A compiler with good support for C++11 is now required to build Xapian.
1238   Most of the actively developed C++ compilers already have decent support,
1239   or are close to having it, and it makes development easier and more
1240   efficient.  Currently known to work: GCC >= 4.7, recent versions of clang
1241   (3.5 works).  Solaris Studio 12.4 compiles the code, but tests currently
1242   fail.  IBM's xlC doesn't support enough of C++11 yet.  HP's aCC hasn't
1243   been tested, but its documentation suggests it also doesn't support enough
1244   of C++11 yet.
1246 * Drop workarounds and special cases for old versions of various compilers
1247   which don't support C++11.
1249 * Use C++11's static_assert() and unique_ptr instead of custom implementations
1250   of equivalent functionality.
1252 * Building on OS/2 with EMX is no longer supported - EMX was last updated in
1253   2001 and comes with GCC 3.2.1, which is much too old to support C++11.
1255 * Building with SGI's and Compaq's C++ compilers is no longer supported -
1256   both seem to have ceased development, and don't support C++11.
1258 * Building with STLport is no longer supported - STLport was last released in
1259   2008, so it's no longer actively developed and won't support C++11.
1261 * Building on IRIX is no longer supported, because IRIX has reached end of
1262   life.
1264 * Disable "<FUNCTION> is expected to return a value" warning from Sun's C++
1265   compiler, as it fires for functions which end in a "throw" statement.
1266   Genuine instances of missing return values will be caught by compilers with
1267   superior warning machinery.
1269 * Fix warning from GCC 5.1 where template expansion leads to the comparison
1270   (bool_value < 255) which is always true.  Warning introduced by changes in
1271   1.3.2.
1273 * Use getaddrinfo() instead of gethostbyname(), since the latter may not be
1274   thread-safe, and as a step towards IPv6 support (see #374), but currently we
1275   still only look for IPv4 addresses.
1277 * timer_create() seems to always fail on AIX with EAGAIN, so just skip the
1278   matchtimelimit1 testcase there.
1280 * Under __WIN32__, we need to specify Vista as the minimum supported version to
1281   get the AI_ADDRCONFIG flag.  Older versions seem to all be out of support
1282   anyway.
1284 * Change configure probe for log2() to check for a declaration in <cmath>
1285   to get it to fix build on Solaris with Sun C++.  C++11 compilers should all
1286   provide log2(), but let's not rely on that just yet as it's easy to provide a
1287   fallback implementation.
1289 * Use scalbn() instead of ldexp() where possible (which we can in all cases
1290   when FLT_RADIX == 2, as it is on pretty much all current platforms).  On
1291   overflow and underflow ldexp() sets errno, which it seems better to avoid
1292   doing.
1294 * The list of stemmers is now in the same static const struct as the version
1295   info, and Stem::get_available_languages() is just an inlined wrapper which
1296   fetches this structure and returns the appropriate member.  This saves a
1297   relocation, reducing library load time a little.
1299 * Remove "pure" attribute from API functions which could throw an exception.
1300   These functions aren't really pure, and while we're happy for calls to them
1301   to be CSE-ed or eliminated entirely, the compiler might make more assumptions
1302   than that about a pure function - clang seems to assume pure => nothrow and
1303   an exception from such a function can't be caught.
1305 * Remove "pure" attribute from sortable_unserialise(), which can raise floating
1306   point exceptions FE_OVERFLOW and FE_UNDERFLOW.
1308 * Add "nothrow" attribute to more API functions which will never throw an
1309   exception.
1311 * Make sortable_serialise() an inlined wrapper around a function which won't
1312   throw and can be flagged with attribute 'const'.
1314 * Tweak sortable_unserialise() not to compare with a fixed string by
1315   constructing a temporary std::string object (which could throw
1316   std::bad_alloc), and mark it as XAPIAN_NOTHROW.
1318 debug code:
1320 * Only enable assertions in sortable_serialise() and sortable_unserialise() in
1321   the testsuite (since these functions shouldn't throw exceptions), and move
1322   the tests of these functions from queryparsertest to unittest to facilitate
1323   this.
1325 * Add more assertions to the glass backend code.
1327 Xapian-core 1.3.2 (2014-11-24):
1329 This release includes all changes from 1.2.16-1.2.19 which are relevant.
1331 API:
1333 * Update Unicode character database to Unicode 7.0.0.
1335 * New Xapian::Snipper class from Mihai Bivol's GSOC 2012 project.  (mostly
1336   fixes #211)
1338 * Fix all get_description() methods to always return UTF-8 text.  (fixes #620)
1340 * Database::check():
1342   + Alter to take its "out" parameter as a pointer to std::ostream instead of a
1343     reference, and make passing NULL mean "do not produce output", and make
1344     the second and third parameters optional, defaulting to a quiet check.
1346   + Escape invalid UTF-8 data in keys and tags reported by xapian-check, using
1347     the same code we use to clean up strings returned by get_description()
1348     methods.
1350   + Correct failure message which talks above the root block when it's actually
1351     testing a leaf key.
1353   + Rename DBCHECK_SHOW_BITMAP to DBCHECK_SHOW_FREELIST (old name still
1354     provided for now, but flagged as deprecated - DBCHECK_SHOW_BITMAP was new
1355     in 1.3.0, so will likely be removed before 1.4.0).
1357 * Methods and functions which take a string to unserialise now consistently
1358   call that parameter "serialised".
1360 * Weight: Make number of distinct terms indexing each document and the
1361   collection frequency of the term available to subclasses.  Patch from
1362   Gaurav Arora's Language Modelling branch.
1364 * WritableDatabase: Add support for multiple subdatabases, and support opening
1365   a stub database containing multiple subdatabases as a WritableDatabase.
1367 * WritableDatabase can now be constructed from just a pathname (defaulting to
1368   opening the database with DB_CREATE_OR_OPEN).
1370 * WritableDatabase: Add flags which can be bitwise OR-ed into the second
1371   argument when constructing:
1373   + Xapian::DB_NO_SYNC: to disable use of fsync, etc
1375   + Xapian::DB_DANGEROUS: to enable in-place updates
1377   + Xapian::DB_BACKEND_CHERT: if creating, create a chert database
1379   + Xapian::DB_BACKEND_GLASS: if creating, create a glass database
1381   + Xapian::DB_NO_TERMLIST: create a database without a termlist (see #181)
1383   + Xapian::DB_FULL_SYNC flag - if this is set for a database, we use the Mac
1384     OS X F_FULL_SYNC instead of fdatasync()/fsync()/etc on the version file
1385     when committing.
1387 * Database: Add optional flags argument to constructor - the following can be
1388   bitwise OR-ed into it:
1390   + Xapian::DB_BACKEND_CHERT (only open a chert database)
1392   + Xapian::DB_BACKEND_GLASS (only open a glass database)
1394   + Xapian::DB_BACKEND_STUB (only open a stub database)
1396 * Xapian::Auto::open_stub() and Xapian::Chert::open() are now deprecated in
1397   favour of these new flags.
1399 * Add LMWeight class, which implements the Unigram Language Modelling weighting
1400   scheme.  Patch from Gaurav Arora.
1402 * Add implementations of a number of DfR weighting schemes (BB2, DLH, DPH,
1403   IfB2, IneB2, InL2, PL2).  Patches from Aarsh Shah.
1405 * Add support for the Bo1 query expansion scheme.  Patch from Aarsh Shah.
1407 * Add Enquire::set_time_limit() method which sets a timelimit after which
1408   check_at_least will be disabled.
1410 * Database: Trying to perform operations on a database with no subdatabases now
1411   throws InvalidOperationError not DocNotFoundError.
1413 * Query: Implement new OP_MAX query operator, which returns the maximum weight
1414   of any of its subqueries.  (see #360)
1416 * Query: Add methods to allow introspection on Query objects - currently you
1417   can read the leaf type/operator, how many subqueries there are, and get a
1418   particular subquery.  For a query which is a term, Query::get_terms_begin()
1419   allows you to get the term.  (see #159)
1421 * Query: Only simplify OP_SYNONYM with a single subquery if that subquery is a
1422   term or MatchAll.
1424 * Avoid two vector copies when storing term positions in most common cases.
1426 * Reimplement version functions to use a single function in libxapian which
1427   returns a pointer to a static const struct containing the version
1428   information, with inline wrappers in the API header which call this.  This
1429   means we only need one relocation instead of 4, reducing library load time a
1430   little.
1432 * Make TermGenerator flags an anonymous enum, and typedef TermGenerator::flags
1433   to int for backward compatibility with existing user code which uses it.
1435 * Stem: Fix incorrect Unicode codepoints for o-double-acute and u-double-acute
1436   in the Hungarian Snowball stemmer.  Reported by Tom Lane to snowball-discuss.
1438 * Stem: Add an early english stemmer.
1440 * Provide the stopword lists from Snowball plus an Arabic one, installed in
1441   ${prefix}/share/xapian-core/stopwords/.  Patch from Assem Chelli, fixes #269.
1443 * Improve check for direct inclusion of Xapian subheaders in user code to
1444   catch more cases.
1446 * Add simple API to help with creating language-idiomatic iterator wrappers
1447   in <xapian/iterator.h>.
1449 testsuite:
1451 * Extend checkstatsweight1 to check that Weight::get_collection_freq() returns
1452   the same number as Database::get_collection_freq().
1454 * queryparsertest: Add testcase for FieldProcessor on boolean prefix with
1455   quoted contents.
1457 * queryparsertest: Enable some disabled cases which actually work (in some
1458   cases with slightly tweaked expected answers which are equivalent to those
1459   that were shown).
1461 * Make use of the new writable multidatabase feature to simplify the
1462   multi-database handling in the test harness.
1464 * Change querypairwise1_helper to repeat the query build 100 times, as with a
1465   fast modern machine we were sometimes trying with so many subqueries that we
1466   would run out of stack.
1468 * apitest: Use Xapian::Database::check() in cursordelbug1.  (partly addresses
1469   #238)
1471 * apitest: Test Query ops with a single MatchAll subquery.
1473 * apitest: New testcase readonlyparentdir1 to ensure that commit works with a
1474   read-only parent directory.
1476 matcher:
1478 * Streamline collation of statistics for use by weighting schemes - tests show
1479   a 2% or so increase in speed in some cases.
1481 * If a term matches all documents and its weight doesn't depend on its wdf, we
1482   can optimise it to MatchAll (the previous requirement that maxpart == 0 was
1483   unnecessarily strict).
1485 * Fix the check for a term which matches all documents to use the sub-db
1486   termfreq, not the combined db termfreq.
1488 * When we optimise a postlist for a term which matches all documents to use
1489   MatchAll, we still need to set a weight object on it to get percentages
1490   calculated correctly.
1492 glass backend:
1494 * 'brass' backend renamed to 'glass' - we decided to use names in ascending
1495   alphabetical order to make it easier to understand which backend is newest,
1496   and since 'flint' was used recently, we skipped over 'd', 'e' and 'f'.
1498 * Change positionlist keys to be ordered by term first rather than docid first,
1499   which helps phrase searching significantly.  For more efficient indexing,
1500   positionlist changes are now batched up in memory and written out in key
1501   order.
1503 * Use a separate cursor for each position list - now we're ordering the
1504   position B-tree by term first, phrase matching would cause a single cursor
1505   to cycle between disparate areas of the B-tree and reread the same blocks
1506   repeatedly.
1508 * Reference count blocks in the btree cursor, so cursors can cheaply share
1509   blocks.  This can significantly reduce the amount of memory used by cursors
1510   for queries which contain a lot of terms (e.g. wildcards which expand to a
1511   lot of terms).
1513 * Under glass, optimise the turning of a query into a postlist to reuse the
1514   cursor blocks which are the same as the previous term's postlist.  This is
1515   particularly effective for a wildcard query which expands to a lot of terms.
1517 * Keep track of unused blocks in the Btrees using freelists rather than
1518   bitmaps.  (fixes #40)
1520 * Eliminate the base files, and instead store the root block and freelist
1521   pointers in the "iamglass" file.
1523 * When compacting, sync all the tables together at the end.
1525 * In DB_DANGEROUS mode, update the version file in-place.
1527 * Only actually store the document data if it is non-empty.  The table which
1528   holds the document data is now lazily created, so won't exist if you never
1529   set the document data.
1531 chert backend:
1533 * Improve DBCHECK_FIX:
1535   + if fixing a whole database, we now take the revision from the first table
1536     we successfully look at, which should be correct in most cases, and is
1537     definitely better than trying to determine the revision of each broken
1538     table independently.
1540   + handle a zero-sized .DB file.
1542   + After we successfully regenerate baseA, remove any empty baseB file to
1543     prevent it causing problems.  Tracked down with help from Phil Hands.
1545 remote backend:
1547 * Bump remote protocol version to 38.0, due to extra statistics being tracked
1548   for weighting.
1550 * Make Weight::Internal track if any max_part values are set, so we don't need
1551   to serialise them when they've not been set.
1553 build system:
1555 * Fix conditional for enabling replication code - if chert is disabled but
1556   glass isn't, we should still enable it.
1558 * configure: Add hint for which package to install for rst2html
1560 documentation:
1562 * Don't build, ship or install PDF versions of the API docs by default, but
1563   provide an easy way for people to build it for themselves if they want it.
1565 * Convert equations in rst docs to use LaTeX via the math role and directive.
1567 * Actually ship, process and install geospatial.rst.
1569 * postingsource.rst: Use a modern class in postingsource example.  (Noted by
1570   James Aylett)
1572 * Move the protocol docs for the remote and replication protocols into the net/
1573   subdirectory.
1575 * Remove the dir_contents files and all the machinery to handle them.
1577 * HACKING: Note we now use doxygen 1.8.8 for 1.3.x snapshots and releases.
1579 * HACKING: Now using libtool 2.4.3 to bootstrap snapshots and 1.3.x releases.
1581 * HACKING: Now using automake 1.14.1 to bootstrap snapshots and 1.3.x releases.
1583 * HACKING: Drop note about needing git-svn if you're using git - bootstrap now
1584   only uses git-svn if your Xapian tree was checked out using git-svn.
1586 * HACKING: Need sphinx-doc to generate API docs for Python and Python 3 bindings.
1588 * HACKING: Note that MacTeX seems to be the best option if using homebrew.
1590 portability:
1592 * Don't pass an integer argument to log(), to avoid ambiguity errors with xlC
1593   and Sun's C++ compiler.  (fixes #627)
1595 * Fix compilations issues with Sun's C++ compiler (mostly missing library
1596   headers).
1598 * Implement RealTime::now() using clock_gettime() where it's available, since
1599   it can provide nanosecond resolution.
1601 * Implement RealTime::sleep() using nanosleep() where it's available, since it
1602   has a simpler API and a finer resolution than select().
1604 * Use lround() instead of round() in geospatial code, since we want the result
1605   as an int.  GCC 4.4.3 seems to optimise to use lround() anyway, but other
1606   compilers may not.
1608 * Include <math.h> for lround()/round(). (fixes #628)
1610 * Drop code supporting Microsoft Windows 9x which reached EOL in 2006.
1612 * Under C++11, use unique_ptr for AutoPtr.
1614 * Stop using a reference where we may end up passing *NULL, as that's invalid.
1615   Thanks Nick Lewycky and ubsan for helping track this down.
1617 * In DLHWeight and DPHWeight, avoid dividing by zero when the collection size
1618   is 0.
1620 debug code:
1622 * Fix assertion failure when built with --enable-assertions.  The behaviour
1623   when built without assertions happened to be correct.
1625 * Fix assertion in BitReader::decode(), and remove 'Assert(rd);' in two places
1626   where rd is no longer a pointer.
1628 Xapian-core 1.3.1 (2013-05-03):
1630 This release includes all changes from 1.2.10-1.2.15 which are relevant.
1632 API:
1634 * Give an compilation error if user code tries to include API headers other
1635   than xapian.h directly - these other headers are an internal implementation
1636   detail, but experience has shown that some people try to include them
1637   directly.  Please just use '#include <xapian.h>' instead.
1639 * Update Unicode character database to Unicode 6.2.0.
1641 * Add FieldProcessor class (ticket#128) - currently marked as an experimental
1642   API while we sort out how best to sort out exactly how it interacts with
1643   other QueryParser features.
1645 * Add implementation of several TF-IDF weighting schemes via a new TfIdfWeight
1646   class.
1648 * Add ExpandDeciderFilterPrefix class which only return terms with a particular
1649   prefix.  (fixes #467)
1651 * QueryParser: Adjust handling of Unicode opening/closing double quotes - if a
1652   quoted boolean term was started with ASCII double quote, then only ASCII
1653   double quote can end it, as otherwise it's impossible to quote a term
1654   containing Unicode double quotes.
1656 * Database::check(): If the database can't be opened, don't emit a bogus
1657   warning about there being too many documents to cross-check doclens.
1659 * TradWeight,BM25Weight: Throw SerialisationError instead of NetworkError if
1660   unserialise() fails.
1662 * QueryParser: Change the default stemming strategy to STEM_SOME, to eliminate
1663   the API gotcha that setting a stemmer is ignored until you also set a
1664   strategy.
1666 * Deprecate Xapian::ErrorHandler.  (ticket#3)
1668 * Stem: Generate a compact and efficient table to decode language names.  This
1669   is both faster and smaller than the approach we were using, with the added
1670   benefit that the table is auto-generated.
1672 * xapian.h:
1674   + Add check for Qt headers being included before us and defining
1675     'slots' as a macro - if they are, give a clear error advising how to work
1676     around this (previously compilation would fail with a confusing error).
1678   + Add a similar check for Wt headers which also define 'slots' as a macro
1679     by default.
1681 testsuite:
1683 * tests/generate-api_generated: Test that the string returned by a
1684   get_description() method isn't empty.
1686 * Use git commit hash in title of test coverage reports generated from a git
1687   tree.
1689 matcher:
1691 * Drop MatchNothing subqueries in OR-like situations in add_subquery() rather
1692   than adding them and then handling it later.
1694 * Handle the left side of AND_NOT and AND_MAYBE being MatchNothing in
1695   add_subquery() rather than in done().
1697 * Handle QueryAndLike with a MatchNothing subquery in add_subquery() rather
1698   than done().
1700 * Query: Multi-way operators now store their subquery pointers in a custom
1701   class rather than std::vector<Xapian::Query>.  The custom class take the
1702   same amount of space, or often less.  It's particularly efficient when
1703   there are two subqueries, which is very desirable as we no longer flatten a
1704   subtree of the same operator as we build the query.
1706 * Optimise an unweighted query term which matches all the documents in a
1707   subdatabase to use the "MatchAll" postlist.  (ticket#387)
1709 brass backend:
1711 * Iterating positional data now decodes it lazily, which should speed up
1712   phrases which include common words.
1714 * Compress changesets in brass replication. Increments the changeset version.
1715   Ticket #348
1717 * Restore two missing lines in database checking where we report a block with
1718   the wrong level.
1720 * When checking if a block was newly allocated in this revision, just look
1721   at its revision number rather than consulting the base file's bitmap.
1723 chert backend:
1725 * Iterating positional data now decodes it lazily, which should speed up
1726   phrases which include common words.
1728 remote backend:
1730 * Prefix compress list of terms and metadata keys in the remote protocol.
1731   This requires a remote protocol major version bump.
1733 build system:
1735 * Fix the 'libxapian' to be 'libxapian-1.3' and 'xapian.m4' to be
1736   'xapian-1.3.m4' (this was supposed to be the case for 1.3.0, but the
1737   change wasn't made correctly).
1739 * Remove support for 'configure --enable-quiet', 'make QUIET=' and 'make
1740   QUIET=y' - automake now supports 'configure --enable-silent-rules', 'make
1741   V=1' and 'make V=0' which are broadly equivalent and more standard.
1743 * configure: If we fail to find a function needed for the remote backend, don't
1744   autodisable it - it's more helpful to error out so the use can decide if they
1745   want to pass --disable-backend-remote to disable it, or work out what values
1746   to pass for LIBS, etc to make it work.  This also matches what we do for the
1747   disk based backends.
1749 * automake 1.13.1 is now used to generate snapshots and releases.
1751 * Add check-syntax make target to support editor syntax checks.
1753 * Fix to build when configured with --disable-backend-brass
1754   --disable-backend-chert.  (ticket#586)
1756 * Generate a check for compatible _DEBUG settings if built with MSVC.
1757   (ticket#389)
1759 * If you run "make coverage-check" by hand, the previous default of compressed
1760   HTML is unhelpful, so don't default to passing --html-gzip to genhtml, but
1761   instead add support for GENHTML_ARGS.
1763 * API methods and functions are now marked as 'const', 'pure', or 'nothrow'
1764   allowing compilers which support such annotations to generate more efficient
1765   code.  (tickets #151, #454)
1767 documentation:
1769 * HACKING: Note which MacPorts are needed for development work.
1771 * docs/remote_protocol.rst: Correct error in documentation of REPLY_DOCDATA
1772   message.
1774 tools:
1776 * xapian-check: Add "fix" option, which currently will regenerate iamchert if
1777   it isn't valid, and will regenerate base files from the .DB files (only
1778   really tested on databases which have just been compacted).
1780 portability:
1782 * Fix warning with GCC in build with assertions enabled.
1784 * common/fileutils.cc: Add safeunistd.h for mkdir, required by GCC 4.7
1785   (reported by Gaurav Arora).
1787 * backends/brass/brass_databasereplicator.cc: Use new/delete to avoid variable
1788   length array gcc extension and comply with c++98
1790 * Mark file descriptors as close-on-exec where supported.
1792 * api/queryinternal.cc: Need <functional> for mem_fun().
1794 * Work around Apple's OS X SDK defining a check() macro.
1796 * Add an option to use a flock() based locking implementation for brass and
1797   chert - this is much simpler than using fcntl() due to saner semantics around
1798   releasing locks when closing other descriptors on the same file (at least on
1799   platforms where flock() isn't just a compatibility wrapper around fcntl()).
1800   Sadly we can't simply switch to this without breaking locking compatibility
1801   with previous releases, but it's useful for platforms without fcntl()
1802   locking (it's enabled for DJGPP) and may be useful for custom builds for
1803   special purposes.
1805 packaging:
1807 * xapian-core.spec: Remove xapian-chert-update.
1809 debug code:
1811 * Building with --enable-log works once again.
1813 Xapian-core 1.3.0 (2012-03-14):
1815 API:
1817 * Update Unicode character database to Unicode 6.1.0.  (ticket#497)
1819 * TermIterator returned by Enquire::get_matching_terms_begin(),
1820   Query::get_terms_begin(), Database::synonyms_begin(),
1821   QueryParser::stoplist_begin(), and QueryParser::unstem_begin() now stores the
1822   list of terms to iterate much more compactly.
1824 * QueryParser:
1826   + Allow Unicode curly double quote characters to start and/or end phrases.
1828   + The set_default_op() method will now reject operators which don't make
1829     sense to set.  The operators which are allowed are now explicitly
1830     documented in the API docs.
1832 * Query: The internals have been completely reimplemented (ticket#280).  The
1833   notable changes are:
1835   + Query objects are smaller and should be faster.
1837   + More readable format for Query::get_description().
1839   + More compact serialisation format for Query objects.
1841   + Query operators are no longer flattened as you build up a tree (but the
1842     query optimiser still combines groups of the same operator).  This means
1843     that Query objects are truly immutable, and so we don't need to copy Query
1844     objects when composing them.  This should also fix a few O(n*n) cases when
1845     building up an n-way query pair-wise.  (ticket#273)
1847   + The Query optimiser can do a few extra optimisations.
1849 * There's now explicit support for geospatial search (this API is currently
1850   marked as experimental).  (ticket#481)
1852 * There's now an API (currently experimental) for checking the integrity of
1853   databases (partly addresses ticket#238).
1855 * Database::reopen() now returns true if the database may have been reopened
1856   (previously it returned void).  (ticket#548)
1858 * Deprecate Xapian::timeout in favour of POSIX type useconds_t.
1860 * Deprecate Xapian::percent and use int instead in the API and our own code.
1862 * Deprecate Xapian::weight typedef in favour of just using double and change
1863   all uses in the API and our own code.  (ticket#560)
1865 * Rearrange members of Xapian::Error to reduce its size (from 48 to 40 bytes on
1866   x86-64 Linux).
1868 * Assignment operators for PositionIterator and TermIterator now return *this
1869   rather than void.
1871 * PositionIterator, PostingIterator, TermIterator and ValueIterator now
1872   handle their reference counts in hand-crafted code rather than using
1873   intrusive_ptr/RefCntPtr, which means the compiler can inline the destructor
1874   and default constructor, so a comparison to an end iterator should now
1875   optimise to a simple NULL pointer check, but without the issues which the
1876   ValueIteratorEnd_ proxy class approach had (such as not working in templates
1877   or some cases of overload resolution).
1879 * Enquire:
1881   + Previously, Enquire::get_matching_terms_begin() threw InvalidArgumentError
1882     if the query was empty.  Now we just return an end iterator, which is more
1883     consistent with how empty queries behave elsewhere.
1885   + Remove the deprecated old-style match spy approach of using a MatchDecider.
1887 * Remove deprecated Sorter class and MultiValueSorter subclass.
1889 * Xapian::Stem:
1891   + Add stemmers for Armenian (hy), Basque (eu), and Catalan (ca).
1893   + Stem::operator= now returns a reference to the assigned-to object.
1895 testsuite:
1897 * Make unittest use the test harness, so it gets all the valgrind and fd leak
1898   checks, and other handy features all the other tests have.
1900 * Improve test coverage in several places.
1902 * Compress generated HTML files in coverage report.
1904 flint backend:
1906 * Remove flint backend.
1908 remote backend:
1910 * When propagating exceptions from a remote backend server, the protocol now
1911   sends a numeric code to represent which exception is being propagated, rather
1912   than the name of the type, as a number can be turned back into an exception
1913   with a simple switch statement and is also less data to transfer.
1914   (ticket#471)
1916 * Remote protocol (these changes require a protocol major version bump):
1918   + Unify REPLY_GREETING and REPLY_UPDATE.
1920   + Send (last_docid - doccount) instead of last_docid and (doclen_ubound -
1921     doclen_lbound) instead of doclen_ubound.
1923 * Remove special check which gives a more helpful error message when a modern
1924   client is used against a remote server running Xapian <= 0.9.6.
1926 build system:
1928 * Various changes allow us to now remove XAPIAN_VISIBILITY_DEFAULT from a
1929   number of functions which aren't in the public API (partly addresses
1930   ticket#63).
1932 * configure: For this development series, the library gets a -1.3 suffix and
1933   include files are installed with an extra /xapian-1.3 component to make
1934   parallel installs easier.
1936 * configure: Enable -fshow-column for GCC - things like vim's quickfix mode
1937   will then jump to the appropriate column for a compiler error or warning, not
1938   just the appropriate line.
1940 * Snowball compiler now reports "FILE:LINE:" before each error so tools like
1941   vim's quickfix mode can parse this and bring up the line with the error
1942   automatically.
1944 * docs/doxygen_api.conf.in: Don't generate XML from doxygen for the bindings -
1945   the bindings now do this for themselves.  (ticket#262)
1947 documentation:
1949 * INSTALL: Update GCC details - we now recommend 4.3 or newer (was 4.1), and
1950   note that while 3.1 is the hard minimum requirement, the oldest we've tested
1951   with at all recently was 3.3.
1953 * docs/deprecation.rst: Updated.
1955 tools:
1957 * delve:
1959   + Move delve from examples to bin and rename to xapian-delve.
1961   + Send errors to stderr not stdout.
1963 * xapian-check: Now reports useful descriptions rather than cryptic numeric
1964   codes for B-tree errors.
1966 debug code:
1968 * Add assertions that the index is in range when dereferencing MSetIterator and
1969   ESetIterator.
1971 * Fix various errors in debug logging statements.
1973 * Add QUERY category for debug logging.
1975 Xapian-core 1.2.23 (2016-03-28):
1977 API:
1979 * PostingSource: Public member variables are now wrapped by methods (mostly
1980   getters and/or setters, depending on whether they should be readable,
1981   writable or both).  In 1.3.5, the public members variables have been
1982   deprecated - we've added the replacement methods in 1.2.23 as well to make
1983   it easier for people to migrate over.
1985 chert backend:
1987 * xapian-check now performs additional consistency checks for chert. Reported
1988   by Jean-Francois Dockes and Bob Cargill via xapian-discuss.
1990 documentation:
1992 * Update links to Xapian website and trac to use https, which is now supported,
1993   thanks to James Aylett.
1995 portability:
1997 * On older Linux kernels, rename() of a file within a directory on NFS can
1998   sometimes erroneously fail with EXDEV.  This should only happen if you
1999   try to rename a file across filing systems, so workaround this issue by
2000   retrying up to 5 times on EXDEV (which should be plenty to avoid this
2001   bug, and we don't want to risk looping forever).  Fixes #698, reported by
2002   Mark Dufour.
2004 Xapian-core 1.2.22 (2015-12-29):
2006 API:
2008 * Add FLAG_CJK_NGRAM for QueryParser and TermGenerator.  Has the same effect as
2009   setting the environment variable XAPIAN_CJK_NGRAM.  Fixes #180, reported by
2010   Richard Boulton, with contributions from Pavel Strashkin, Mikkel Kamstrup
2011   Erlandsen and Brandon Schaefer.
2013 * Fix bug parsing multiple non-exclusive filter terms - previously this could
2014   result in such filters effectively being ignored.
2016 * Fix Database::get_doclength_lower_bound() over multiple databases when some
2017   are empty or consist only of zero-length documents.  Previously this would
2018   report a lower bound of zero, now it reports the same lowest bound as a
2019   single database containing all the same documents.
2021 * Make Database::get_wdf_upper_bound("") return 0.
2023 * Mark constructors taking a single argument as "explicit" to avoid unwanted
2024   implicit conversions.
2026 testsuite:
2028 * If command line option --verbose/-v isn't specified, set the verbosity level
2029   from environmental variable VERBOSE.
2031 * Skip timed tests if $AUTOMATED_TESTING is set.  Fixes #553, reported by
2032   Dagobert Michelsen.
2034 * Don't leave an extra fd open when starting xapian-tcpsrv for remotetcp tests.
2036 * apitest: Revert disabling of part of adddoc5 for clang - the test failure was
2037   in fact due to a bug in 1.3.x, and 1.2.x was never affected.
2039 * apitest: Tweak bounds checks in dbstats1 testcase - multi backends should
2040   give tight bounds.
2042 brass backend:
2044 * Format limit on docid now correctly imposed when sizeof(int) > 4.
2046 * Avoid potential DB corruption with full-compaction when using 64K blocks.
2048 chert backend:
2050 * Format limit on docid now correctly imposed when sizeof(int) > 4.
2052 * Avoid potential DB corruption with full-compaction when using 64K blocks.
2054 flint backend:
2056 * Format limit on docid now correctly imposed when sizeof(int) > 4.
2058 * Avoid potential DB corruption with full-compaction when using 64K blocks.
2060 remote backend:
2062 * Fix to handle total document length exceeding 34,359,738,368.  (Fixes #678,
2063   reported by matf).
2065 * Avoid dividing by zero when getting the average length for an empty database.
2067 * Stop apparent error from remote server when read-only client disconnects.  A
2068   read-only client just closes the connection when done, but the server
2069   previously reported "Got exception NetworkError: Received EOF", which sounds
2070   like there was a problem.  Now we just say "Connection closed" here, and
2071   "Connection closed unexpectedly" if the client connects in the middle of an
2072   exchange.  Possibly fixes #654, reported by Germán M. Bravo.
2074 * Give a clearer error message when the client and server remote protocol
2075   versions aren't compatible.
2077 * Check length of key in MSG_SETMETADATA.
2079 build system:
2081 * pkg-config: Fix library name in .pc file to say "xapian" not "xapian-core".
2082   Reported by Eric Lindblad to the xapian-devel list.
2084 * Private symbol decode_length() is no longer visible outside the library.
2086 documentation:
2088 * Stop maintaining ChangeLog files.  They make merging patches harder, and stop
2089   'git cherry-pick' from working as it should.  The git repo history should be
2090   sufficient for complying with GPLv2 2(a).
2092 * Strip out "quickstart" examples which are out of date and rather redundant
2093   with the "simple" examples.
2095 * Correct documentation of Enquire::get_query().  If no query has been set,
2096   the documentation said Xapian::InvalidArgumentError was thrown, but in
2097   fact we just return a default initialised Query object (i.e. Query()).  This
2098   seems reasonable behaviour and has been the case since Xapian 0.9.0.
2100 * Document xapian-compact --blocksize takes an argument.
2102 * Update snowball website link to snowballstem.org.
2104 tools:
2106 * xapian-replicate: Fix replication for files > 4GB on 32-bit platforms.
2107   Previously replication would fail to copy a file whose size didn't fit in
2108   size_t.  Fixes #685, reported by Josh Elsasser.
2110 * xapian-tcpsrv: Better error if -p/--port not specified
2112 * quest: Support `-f cjk_ngram`.
2114 examples:
2116 * xapian-metadata: Extend "list" subcommand to take optional key prefix.
2118 portability:
2120 * Fix new warnings from recent versions of GCC and clang.
2122 * Add spaces between literal strings and macros which expand to literal strings
2123   for C++11 compatibility in __WIN32__-specific code.
2125 * Need <unistd.h> for unlink() on FreeBSD, reported by Germán M. Bravo via
2126   github PR 72.
2128 * Fix testsuite to build when S_ISSOCK() isn't defined.
2130 * Don't provide our own implementation of sleep() under __WIN32__ if there
2131   already is one - mingw provides one, and in some situations it seems to clash
2132   with ours.  Reported to xapian-discuss by John Alveris.
2134 * Add missing '#include <arpa/inet.h>' to htons().  Seems to be implicitly
2135   included on most platforms, but Interix needs it.  Reported by Eric Lindblad
2136   on xapian-discuss.
2138 * Disable "<FUNCTION> is expected to return a value" warning from Sun's C++
2139   compiler, as it fires for functions ending in a "throw" statement.  Genuine
2140   instances will be caught by compilers with superior warning machinery.
2142 * Prefer scalbn() to ldexp() where possible, since the former doesn't ever set
2143   errno.
2145 * '#include <config.h>' in the "simple" examples, as when compiling with xlC on
2146   AIX, _LARGE_FILES gets defined by AC_SYS_LARGEFILE to enable large file
2147   support, and defining this changes the ABI of std::string, so it also needs
2148   to be defined when compiling code using Xapian.
2150 * On cygwin, include <arpa/inet.h> instead of winsock headers for htons() and
2151   htonl().
2153 * Include <cygwin/version.h> for CYGWIN_VERSION_API_MAJOR.
2155 * Avoid referencing static members via an object in that object's own
2156   definition, as this doesn't work with all compilers (noted with GCC 3.3), and
2157   is a bit of an odd construct anyway.  Reported by Eric Lindblad on
2158   xapian-discuss.
2160 * GCC < 3.4.2 lacks operator<< overloads for unsigned long long on some
2161   platforms, so simply work around this by using str(), as this isn't
2162   performance sensitive code.  Reported by Eric Lindblad on xapian-discuss.
2164 * Fix delete which should be delete[] in brass backend cursor code.
2166 Xapian-core 1.2.21 (2015-05-20):
2168 API:
2170 * QueryParser: Extend the set of characters allowed in the start of a range to
2171   be anything except for '(' and characters <= ' '.  This better matches what's
2172   accepted for a range end (anything except for ')' and characters <= ' ').
2173   Reported by Jani Nikula.
2175 matcher:
2177 * Reimplement OP_PHRASE for non-exact phrases.  The previous implementation was
2178   buggy, giving both false positives and false negatives in rare cases when
2179   three or more terms were involved.  Fixes #653, reported by Jean-Francois
2180   Dockes.
2182 * Reimplement OP_NEAR - the new implementation consistently requires the terms
2183   to occur at different positions, and fixes some previously missed matches.
2185 * Fix a reversed check for picking the shorter position list for an exact
2186   phrase of two terms.  The difference this makes isn't dramatic, but can be
2187   measured (at least with cachegrind).  Thanks to kbwt for spotting this.
2189 * When matching an exact phrase, if a term doesn't occur where we want, use
2190   its actual position to advance the anchor term, rather than just checking
2191   the next position of the anchor term.
2193 brass backend:
2195 * Fix cursor versioning to consider cancel() and reopen() as events where
2196   the cursor version may need incrementing, and flag the current cursor version
2197   as used when a cursor is rebuilt.  Fixes #675, reported by Germán M. Bravo.
2199 * Avoid using file descriptions < 3 for writable database tables, as it risks
2200   corruption if some code in the same process tries to write to stdout or
2201   stderr without realising it is closed.  (Partly addresses #651)
2203 chert backend:
2205 * Fix cursor versioning to consider cancel() and reopen() as events where
2206   the cursor version may need incrementing, and flag the current cursor version
2207   as used when a cursor is rebuilt.  Fixes #675, reported by Germán M. Bravo.
2209 * Avoid using file descriptions < 3 for writable database tables, as it risks
2210   corruption if some code in the same process tries to write to stdout or
2211   stderr without realising it is closed.  (Partly addresses #651)
2213 flint backend:
2215 * Fix cursor versioning to consider cancel() and reopen() as events where
2216   the cursor version may need incrementing, and flag the current cursor version
2217   as used when a cursor is rebuilt.  Fixes #675, reported by Germán M. Bravo.
2219 remote backend:
2221 * Fix sort by value when multiple databases are in use and one or more are
2222   remote.  This change necessitated a minor version bump in the remote
2223   protocol.  Fixes #674, reported by Dylan Griffith.  If you are upgrading a
2224   live system which uses the remote backend, upgrade the servers before the
2225   clients.
2227 build system:
2229 * The compiler ABI check in the public API headers now issues a warning
2230   (instead of an error) for an ABI mismatch for ABI versions 2 and later
2231   (which means GCC >= 3.4).  The changes in these ABI versions are bug fixes
2232   for corner cases, so there's a good chance of things working - e.g. building
2233   xapian-bindings with GCC 5.1 (which defaults to ABI version 8) against
2234   xapian-core built with GCC 4.9 (which defaults to ABI version 2) seems to
2235   work OK.  A warning is still useful as a clue to what is going on if linking
2236   fails due to a missing symbol.
2238 * xapian-config,xapian-core.pc: When compiling with xlC on AIX, the reported
2239   --cxxflags/--cflags now include -D_LARGE_FILES=1 as this is defined for the
2240   library, and defining it changes the ABI of std::string with this compiler,
2241   so it must also be defined when building code using the Xapian API.
2243 * xapian-core.pc: Include --enable-runtime-pseudo-reloc in --libs output for
2244   mingw and cygwin, like xapian-config does.
2246 * xapian-core.pc: Fix include directory reported by `pkg-config --cflags`.
2247   This bug was harmless if xapian-core was installed to a directory which was
2248   on the default header search path (such as /usr/include).
2250 * xapian-config: Fix typo so cached result of test in is_uninstalled() is
2251   actually used on subsequent calls.  Fixes #676, reported (with patch) by Ryan
2252   Schmidt.
2254 * configure: Changes in 1.2.19 broke the custom macro we use to probe for
2255   supported compiler flags such that the flags never got used.  This release
2256   fixes this problem.
2258 * configure: Set default value for AUTOM4TE before AC_OUTPUT so the default
2259   will actually get used.  Only relevant when building in maintainer mode
2260   (e.g. from git).
2262 * soaktest: Link with libtool's '-no-install' or '-no-fast-install', like we
2263   already do for other test programs, which means that libtool doesn't need to
2264   generate shell script wrappers for them on most platforms.
2266 documentation:
2268 * API documentation: Minor wording tweaks and formatting improvements.
2270 * docs/deprecation.rst: Add deprecation of omindex --preserve-nonduplicates
2271   which happened in 1.2.4.
2273 * HACKING: Update URL.
2275 * HACKING: libtool 2.4.6 is now used for bootstrapping snapshots and releases.
2277 tools:
2279 * xapian-compact: Make sure we open all the tables of input databases at the
2280   same revision.  (Fixes #649)
2282 * xapian-metadata: Add 'list' subcommand to list all the metadata keys.
2284 * xapian-replicate: Fix connection timeout to be 10 seconds rather than 10000
2285   seconds (the incorrect timeout has been the case since 1.2.3).
2287 * xapian-replicate: Set SO_KEEPALIVE for xapian-replicate's connection to the
2288   master, and add command line option to allow setting socket-level timeouts
2289   (SO_RCVTIMEO and SO_SNDTIMEO) on platforms that support them.  Fixes #546,
2290   reported by nkvoll.
2292 * xapian-replicate-server: Avoid potentially reading uninitialised data if a
2293   changeset file is truncated.
2295 portability:
2297 * Add spaces between literal strings and macros which expand to literal strings
2298   for C++11 compatibility.
2300 * ValueCountMatchSpy::top_values_begin(): Fix the comparison function not to
2301   return true for two equal elements, which manifests as incorrect sorting in
2302   some cases when using clang's libc++ (which recent OS X versions do).
2304 * apitest: The adddoc5 testcase fails under clang due to an exception handling
2305   bug, so just #ifdef out the problematic part of the testcase when building
2306   with clang for now.
2308 * Fix clang warnings on OS X.  Reported by Germán M. Bravo.
2310 * Fix examples to build with IBM's xlC compiler on AIX - they were failing due
2311   to _LARGE_FILES being defined for the library build but not for the examples,
2312   and defining this changes the ABI of std::string with this compiler.
2314 * configure: Improve the probe for whether the test harness can use RTTI to
2315   work for IBM's xlC compiler (which defaults to not generating RTTI).
2317 * Fix to build with Sun's C++ compiler.
2319 * Use F_DUPFD where available to dup to a file descriptor which is >= 2, rather
2320   than calling dup() until we get one.
2322 * When unserialising a double, avoid reading one byte past the end of the
2323   serialised value.  In practice this was harmless on most platforms, as
2324   dbl_max_mantissa is 255 for IEEE-754 format doubles, and at least GCC's
2325   std::string keeps the buffer nul-terminated.  Reported by Germán M. Bravo in
2326   github PR#67.
2328 * When unserialising a double, add missing cast to unsigned char when we check
2329   if the value will fit in the double type.  On machines with IEEE-754 doubles
2330   (which is most current platforms) this happened to work OK before.  It would
2331   also have been fine on machines where char is unsigned by default.
2333 * Fix incorrect use of "delete" which should be "delete []".  This is
2334   undefined behaviour in C++, though the type is POD, so in practice this
2335   probably worked OK on many platforms.
2337 debug code:
2339 * Fix some overly strict assertions in flint, which caused apitest's
2340   cursordelbug1 to fail with assertions on.
2342 Xapian-core 1.2.20 (2015-03-04):
2344 chert backend:
2346 * After splitting a block, we always insert the new block in the parent right
2347   after the block it was split from - there's no need to binary chop.
2349 build system:
2351 * Generate and install a file for pkg-config.  (Fixes#540)
2353 * configure: Update link to cygwin FAQ in error message.
2355 documentation:
2357 * include/xapian/weight.h: Document the enum stat_flags values.
2359 * docs/postingsource.rst: Use a modern class in postingsource example.  (Noted
2360   by James Aylett)
2362 * docs/deprecation.rst,docs/replication.rst: Fix typos.
2364 * Update doxygen configuration files to avoid warnings about obsolete tags from
2365   newer doxygen versions.
2367 * HACKING: Update details of building Xapian packages.
2369 tools:
2371 * xapian-check: For chert and brass, cross-check the position and postlist
2372   tables to detect positional data for non-existent documents.
2374 portability:
2376 * When locking a database for writing, use F_OFD_SETLK where available, which
2377   avoids having to fork() a child process to hold the lock.  This currently
2378   requires Linux kernel >= 3.15, but it has been submitted to POSIX so
2379   hopefully will be widely supported eventually.  Thanks to Austin Clements for
2380   pointing out this now exists.
2382 * Fix detection of fdatasync(), which appears to have been broken practically
2383   forever - this means we've probably been using fsync() instead, which
2384   probably isn't a big additional overhead.  Thanks to Vlad Shablinsky for
2385   helping with Mac OS X portability of this fix.
2387 * configure: Define MINGW_HAS_SECURE_API under mingw to get _putenv_s()
2388   declared in stdlib.h.
2390 * Use POSIX O_NONBLOCK in preference to O_NDELAY - the semantics of the latter
2391   differ between BSD and System V.
2393 * According to POSIX, strerror() may not be thread safe, so use alternative
2394   thread-safe ways to translate errno values where possible.
2396 * On Microsoft Windows, avoid defining EADDRINUSE, etc if they're already
2397   defined, and use WSAE* constants un-negated - they start from a high value
2398   so won't collide with E* constants.
2400 debug code:
2402 * Add more assertions to the chert backend code.
2404 Xapian-core 1.2.19 (2014-10-21):
2406 API:
2408 * Xapian::BM25Weight:
2410   + Improve BM25 upper bound in the case when our wdf upper bound > our
2411     document length lower bound.  Thanks to Craig Macdonald for pointing out
2412     this trick.
2414   + Pre-multiply termweight by (param_k1 + 1) rather than doing it for
2415     every weighted term in every document considered.
2417 testsuite:
2419 * Don't report apparent leaks of fds opened on /dev/urandom - at least on
2420   Linux, something in the C library seems to lazily open it, and the report of
2421   a possible leak followed by assurance that it's OK really is just noise we
2422   can do without.
2424 matcher:
2426 * Fix false matches reported for non-exact phrases in some cases.  Fixes the
2427   reduced testcase in #657, reported by Jean-Francois Dockes.
2429 brass backend:
2431 * Only full sync after writing the final base file (only affects Max OS X).
2433 chert backend:
2435 * Only full sync after writing the final base file (only affects Max OS X).
2437 flint backend:
2439 * Only full sync after writing the final base file (only affects Max OS X).
2441 build system:
2443 * For Sun's C++ compiler, pass -library=Crun separately since libtool looks for
2444   " -library=stlport4 " (with the spaces).  (fixes#650)
2446 * Remove .replicatmp (created by the test suite) upon "make clean".
2448 documentation:
2450 * include/xapian/compactor.h: Fix formatting of doxygen comment.
2452 * HACKING: freecode no longer accepts updates, so drop that item from the
2453   release checklist.
2455 * docs/overview.rst: Add missing database path to example of using
2456   xapian-progsrv in a stub database file.
2458 portability:
2460 * Suppress unused typedef warnings from debugging logging macros, which occur
2461   in functions which always exit via throwing an exception when compiling with
2462   recent versions of GCC or clang.
2464 * Fix debug logging code to compile with clang.  (fixes #657, reported by
2465   Germán M. Bravo)
2467 debug code:
2469 * Add missing RETURN() markup for debug logging in a few places, highlighted by
2470   warnings from recent GCC.
2472 * Fix incorrect return types in debug logging annotations so that code compiles
2473   when configured with --enable-log.
2475 Xapian-core 1.2.18 (2014-06-22):
2477 API:
2479 * Document: Fix get_docid() to return the docid for the sub-database (as it
2480   is explicitly documented to) for Document objects passed to functors like
2481   KeyMaker during the match.  (fixes#636, reported by Jeff Rand).
2483 * Document: Don't store the termname in OmDocumentTerm - we were only using it
2484   in get_description() output and an exception message.  Speeds up indexing
2485   etext.txt using simpleindex by 0.4%, and should reduce memory usage a bit
2486   too.  (Change inspired by comments from Vishesh Handa on xapian-devel).
2488 * Database: Iterating the values in a particular slot is now a bit more
2489   efficient for inmemory and remote backends (but still slow compared to
2490   flint, chert and brass).
2492 testsuite:
2494 * apitest: Expand crashrecovery1 to check that the expected base files exist
2495   and ones which shouldn't exist don't.
2497 * queryparsertest: Fix testcase for empty wildcard followed by negation to
2498   enable FLAG_LOVEHATE so the negation is actually parsed.  Fortunately the
2499   fixed testcase passes.
2501 matcher:
2503 * OP_SYNONYM: avoid fetching the doclength if the weighting scheme doesn't
2504   need it and the calculated wdf for the synonym is <= doclength_lower_bound
2505   for the current subdatabase.  (fixes #360)
2507 build system:
2509 * Releases are now bootstrapped with libtool 2.4.2 instead of 2.4, and with
2510   config.guess and config.sub updated to the latest versions.
2512 documentation:
2514 * Add an example of initializing SimpleStopper using a file listing stopwords.
2515   (Patch from Assem Chelli)
2517 * Improve the descriptions of the stem_strategy values in the API docs.
2518   (Reported by "oilap" on #xapian)
2520 * docs/sorting.rst: Fix incorrect parameter types in Xapian::Weight
2521   subclass example.
2523 * docs/glossary.rst: Add definition of "collection frequency".
2525 * HACKING:
2527   + makeindex is now in Debian package texlive-binaries.
2529   + Replace a link to the outdated autotools "goat book" with a link to the
2530     "Portable Shell" chapter of the autoconf manual.
2532 * include/xapian/base.h: Remove very out of date comments talking about atomic
2533   assignment and locking - since 0.5.0 we've adopted a "user locks" policy.
2534   (Reported by Jean-Francois Dockes)
2536 examples:
2538 * delve:
2540   + Add -A <prefix> option to list all terms with a particular prefix.
2542   + Send errors to stderr not stdout.
2544   + If -v is specified more than once, show even more info in some cases.
2545     (NEWS file claimed this was backported in 1.2.15, but it actually wasn't).
2547 * quest:
2549   + Add --default-op option.
2551   + Add --weight option to allow the weighting scheme to be specified.
2553 portability:
2555 * Explicitly '#include <algorithm>' for std::max(), fixing build with VS2013.
2556   (Fixes#641, reported by "boomboo").
2558 * Fix testcase blocksize1 not to try to delete an open database, which isn't
2559   possible under Windows.  (Fixes #643, reported by Chris Olds)
2561 * docs/quickstart.rst: Split --cxxflags and --libs for portability (noted by
2562   "Hurricane Tong" on xapian-devel).
2564 * Fix warnings with clang 5.0.
2566 debug code:
2568 * Add assertions that weighting scheme upper bounds aren't exceeded.
2570 Xapian-core 1.2.17 (2014-01-29):
2572 API:
2574 * Enquire::set_sort_by_relevance_then_value() and
2575   Enquire::set_sort_by_relevance_then_key(): Fix sense of reverse parameter.
2576   Reported by "boomboo" on IRC.
2578 * BM25Weight: Fix case where (k1 == 0 || b == 0) but k2 != 0.  Reported by
2579   "boomboo" on IRC.
2581 * Unicode::tolower(): Fix to give correct results for U+01C5, U+01C8, U+01CB,
2582   and U+01F2 (previously these were left unchanged).
2584 testsuite:
2586 * Automatically probe for and hook in eatmydata to the testsuite using the
2587   wrapper script it now includes.
2589 * Fix apitest to build when brass, chert or flint are disabled.
2591 brass backend:
2593 * Fix handling of invalid block sizes passed to Xapian::Brass::open() - the
2594   size gets fixed as documented, but the uncorrected size was passed to the
2595   base file (and abort() was called if 0 was passed).
2597 * Validate "dir_end" when reading a block.  (fixes #592)
2599 chert backend:
2601 * Fix handling of invalid block sizes passed to Xapian::Chert::open() - the
2602   size gets fixed as documented, but the uncorrected size was passed to the
2603   base file (and abort() was called if 0 was passed).
2605 * Validate "dir_end" when reading a block.  (fixes #592)
2607 flint backend:
2609 * Fix handling of invalid block sizes passed to Xapian::Flint::open() - the
2610   size gets fixed as documented, but the uncorrected size was passed to the
2611   base file (and abort() was called if 0 was passed).
2613 * Validate "dir_end" when reading a block.  (fixes #592)
2615 build system:
2617 * configure: Improve reporting of GCC version.
2619 * Use -no-fast-install on platforms where -no-install causes libtool to emit a
2620   warning.
2622 * docs/Makefile.am: Fix handling of MAINTAINER_NO_DOCS.
2624 * Include UnicodeData.txt and the script to generate the unicode tables from
2625   it.
2627 documentation:
2629 * postingsource.rst: Clarify a couple of points (reported by "vHanda" on IRC).
2631 portability:
2633 * Protect the ValueIterator::check() method against Mac OS X SDK headers
2634   which define a check() macro.
2636 * Fix warning from xlC compiler.
2638 * Avoid use of grep -e in configure, as /usr/bin/grep on Solaris doesn't
2639   support -e.
2641 * Fix check for flags which might be needed for ANSI mode for compilers called
2642   'cxx'.
2644 * configure: Improve handling of Sun's C++ compiler - trick libtool into not
2645   adding -library=Cstd, and prefer -library=stdcxx4 if supported.  Explicitly
2646   add -library=Crun which seems to be required, even though the documentation
2647   suggests otherwise.
2649 Xapian-core 1.2.16 (2013-12-04):
2651 API:
2653 * PositionIterator,PostingIterator,TermIterator,ValueIterator: Don't segfault
2654   if skip_to() or check() is called on an iterator which is already at_end().
2655   Reported by David Bremner.
2657 * ValueCountMatchSpy: get_description() on a default-constructed
2658   ValueCountMatchSpy object no longer fails when xapian-core is built with
2659   --enable-log.
2661 * ValueCountMatchSpy: get_total() on a default-constructed ValueCountMatchSpy
2662   object now returns 0 rather than segfaulting.
2664 testsuite:
2666 * If -v/--verbose is specified more than once to a test program, show the
2667   diagnostic output for passing tests as well as failing/skipped ones.
2669 * queryparsertest: Change qp_scale1 to time 5 repetitions of the large query to
2670   help average out variations.
2672 * queryparsertest: Add test coverage for explicit synonym of a term with a
2673   prefix (e.g. ~foo:search).
2675 * apitest: Remove code from registry* testcases which tries to test the
2676   consequences of throwing an exception from a destructor - it's complex to
2677   ensure we don't leak memory while doing this (it seems GCC doesn't release
2678   the object in this case, but clang does), and it's generally frowned upon,
2679   plus C++11 makes destructors noexcept by default.
2681 * Fix "make check" to actually removed cached databases first, as is
2682   intended.
2684 brass backend:
2686 * When moving a cursor on a read-only table, check if the block we want is in
2687   the internal cursor.  We already do this for a writable table, as it is
2688   necessary for correctness, but it's a cheap check and may avoid asking the
2689   OS for a block we actually already have.
2691 * Correctly report the database as closed rather than 'Bad file descriptor'
2692   in certain cases.
2694 * Reuse a cursor for reading values from valuestreams rather than creating
2695   a new one each time.  This can dramatically reduce the number of blocks
2696   redundantly reread when sorting by value.  The rereads will generally get
2697   served from VM cache, but there's still an overhead to that.
2699 chert backend:
2701 * When moving a cursor on a read-only table, check if the block we want is in
2702   the internal cursor.  We already do this for a writable table, as it is
2703   necessary for correctness, but it's a cheap check and may avoid asking the
2704   OS for a block we actually already have.
2706 * Correctly report the database as closed rather than 'Bad file descriptor'
2707   in certain cases.
2709 * Reuse a cursor for reading values from valuestreams rather than creating
2710   a new one each time.  This can dramatically reduce the number of blocks
2711   redundantly reread when sorting by value.  The rereads will generally get
2712   served from VM cache, but there's still an overhead to that.
2714 flint backend:
2716 * When moving a cursor on a read-only table, check if the block we want is in
2717   the internal cursor.  We already do this for a writable table, as it is
2718   necessary for correctness, but it's a cheap check and may avoid asking the
2719   OS for a block we actually already have.
2721 * Correctly report the database as closed rather than 'Bad file descriptor'
2722   in certain cases.
2724 build system:
2726 * Compress source tarballs with xz instead of gzip.
2728 * Split XAPIAN_LIBS out of XAPIAN_LDFLAGS so that -l flags for libraries
2729   configure detects are needed appear after -L flags specified by the user
2730   that may be needed to find such libraries.  (fixes#626)
2732 * XO_LIB_XAPIAN now handles the user specifying a relative path in
2733   XAPIAN_CONFIG, e.g.: "./configure XAPIAN_CONFIG=../xapian-core/xapian-config"
2735 * Adjust XO_LIB_XAPIAN to strip _gitNNN suffix from snapshot versions.
2737 * configure: Handle git snapshot naming when calculating REVISION.
2739 * configure: Enable -fshow-column for GCC - things like vim's quickfix mode
2740   will then jump to the appropriate column for a compiler error or warning, not
2741   just the appropriate line.
2743 * configure: Report GCC version in configure output.
2745 documentation:
2747 * The API documentation shipped with the release is now generated with
2748   doxygen 1.8.5 instead of 1.5.9, which is most evident in the different
2749   HTML styling newer doxygen uses.
2751 * Document how Utf8Iterator handles invalid UTF-8 in API documentation.
2753 * Improve how descriptions of deprecated features appear in the API
2754   documentation.
2756 * docs/remote_protocol.rst: Correct error in documentation of REPLY_DOCDATA
2757   message.
2759 * docs/overview.rst: Correct documentation for how to specify "prog" remote
2760   databases in stub files.
2762 * Direct users to git in preference to SVN - we'll be switching entirely in
2763   the near future.
2765 tools:
2767 * xapian-chert-update: Fix -b to work rather than always segfaulting (reported
2768   in http://bugs.debian.org/716484).
2770 * xapian-chert-update: The documented alias --blocksize for -b has never
2771   actually been supported, so just drop mentions of it from --help and the man
2772   page.
2774 * xapian-check:
2776   + Fix chert database check that first docid in each doclength chunk is more
2777     than the last docid in the previous chunk - previously this didn't actually
2778     work.
2780   + Fix database check not to falsely report "position table: Junk after
2781     position data" whenever there are 7 unused bits (7 is OK, *more* than 7
2782     isn't).
2784   + Fix to report block numbers correctly for links within the B-tree.
2786   + If the METAINFO key is missing, only report it once per table.
2788   + Fix database consistency checking to always open all the tables at the same
2789     revision - not doing this could lead to false errors being reported after a
2790     commit interrupted by the process being killed or the machine crashing.
2791     Reported by Joey Hess in http://bugs.debian.org/724610
2793 examples:
2795 * quest: Add --check-at-least option.
2797 portability:
2799 * configure: clang doesn't support -Wstrict-null-sentinel or -Wlogical-op, so
2800   don't pass it these options.
2802 * Fix build errors and warnings with mingw.
2804 * Suppress "unused local typedef" warnings from GCC 4.8.
2806 * If the compiler supports C++11, use static_assert to implement
2807   CompileTimeAssert.
2809 * tests/zlib-vg.c: Fix two warnings when compiled with clang.
2811 * Fix failure when built with -D_GLIBCXX_DEBUG - we were modifying the top()
2812   element of a heap before calling pop(), such that the heap comparison
2813   operation (which is called when -D_GLIBCXX_DEBUG is on to verify the heap is
2814   valid) would read off the end of the data.  In a normal build, this issue
2815   would likely never manifest.
2817 * configure: When generating ABI compatibility checks in xapian/version.h, pass
2818   $CXXFLAGS and $CPPFLAGS to $CXXCPP as they could contain options which affect
2819   the ABI (such as -fabi-version for GCC).  (Fixes #622)
2821 * Microsoft GUIDs in binary form have reversed byte order in the first three
2822   components compared to standard UUIDs, so the same database would report a
2823   different UUID on Windows to on other platforms.  We now swap the bytes to
2824   match the standard order.  With this fix, the UUIDs of existing databases
2825   will appear to change on Windows (except in rare "palindronic" cases).
2827 * Fix a couple of issues to get Xapian to build and work on AIX.
2829 * common/safeuuid.h: Remove bogus take-address-of from uuid handling code for
2830   NetBSD and OpenBSD.
2832 * Under cygwin, use cygwin_conv_path() if using a new enough cygwin version,
2833   rather than the now deprecated cygwin_conv_to_win32_path().  Reported by
2834   "Haroogan" on the xapian-devel mailing list.
2836 * common/safeuuid.h: Add missing '#include <cstdlib>' and qualify free with std.
2838 * Fix 'unused label' warning when chert backend is disabled.
2840 * xapian.h: Add check for Wt headers being included before us and defining
2841   'slots' as a macro - if they are, give a clear error advising how to work
2842   around this (previously compilation would fail with a confusing error).
2844 debug code:
2846 * Fix assertion failure for when an OrPostList decays to an AndPostList - the
2847   ordering of the subqueries by estimated termfreq may not be the same as it
2848   was when the OrPostList was constructed, as the subqueries may themselves
2849   have decayed.  Reported by Michel Pelletier.
2851 * Fix -Wcast-qual warning from GCC 4.7 when configured with --enable-log.
2853 Xapian-core 1.2.15 (2013-04-16):
2855 API:
2857 * QueryParser/TermGenerator: Don't include CJK codepoints which are
2858   punctuation in N-grams.
2860 * TermGenerator: Fix bug where we failed to generate the first bigram
2861   from the second sequence of N-grammable CJK characters in a piece of text.
2863 brass backend:
2865 * Call fdatasync()/fsync() when creating the "iambrass" file.
2867 chert backend:
2869 * Call fdatasync()/fsync() when creating the "iamchert" file.
2871 flint backend:
2873 * Call fdatasync()/fsync() when creating the "iamflint" file.
2875 build system:
2877 * XO_LIB_XAPIAN now handles the user specifying XAPIAN_CONFIG without a path,
2878   for example: ./configure XAPIAN_CONFIG=xapian-config-1.3
2880 tools:
2882 * delve: If -v is specified more than once, show even more info in some cases.
2884 portability:
2886 * Fix warning due to needlessly casting away const-ness in debug logging.
2888 * Fix pointer truncation bug in lemon parser generator, which probably affects
2889   regenerating the query parser on WIN64.
2891 debug code:
2893 * Fix to build when configured with --enable-log.
2895 Xapian-core 1.2.14 (2013-03-14):
2897 API:
2899 * MSet::get_document(): Don't cache retrieved Document objects unless they
2900   were requested with fetch().  This avoids using a lot of memory when many
2901   MSet entries are retrieved.  (Fixes #604)
2903 testsuite:
2905 * apitest: Improved test coverage.
2907 matcher:
2909 * Check if a candidate document has at least the minimum weight needed
2910   before checking positional information, which speeds up slow phrase
2911   searches (partly addresses #394).
2913 brass backend:
2915 * Fix multipass compaction not to damage document values, and to merge the
2916   database stats correctly.  (fixes #615)
2918 chert backend:
2920 * Fix multipass compaction not to damage document values, and to merge the
2921   database stats correctly.  (fixes #615)
2923 flint backend:
2925 * Fix multipass compaction bug.  (fixes #615)
2927 tools:
2929 * xapian-replicate:
2931   + Fix handling of delays between replication events - the subtraction of the
2932     target time and the current time was reversed, so we wouldn't sleep when
2933     before the deadline, but would sleep after it for the amount we'd missed it
2934     by.
2936   + On Microsoft Windows, we no longer sleep for more than 43 years if the
2937     target time for a replication event had already passed.  (Fixes #472)
2939 portability:
2941 * matcher/queryoptimiser.cc: Need <functional> for mem_fun().
2943 * tests/harness/testsuite.cc: Don't provide explicit template types to
2944   make_pair - it isn't useful, and breaks with C++11.  Fixes build error with
2945   MSVC2012.
2947 * examples/quest.cc: Fix to build with Sun Studio 12 compiler.  (ticket#611)
2949 Xapian-core 1.2.13 (2013-01-09):
2951 API:
2953 * TermGenerator: Add new method TermGenerator::set_max_word_length() to allow
2954   this limit to be adjusted by the user.
2956 * QueryParser: Implicitly close any unclosed brackets at the end of the query
2957   string.  Patch from Sehaj Singh Kalra.
2959 * DateValueRangeProcessor: Add extra constructor overloaded form so that in
2960   DateValueRangeProcessor(1, "date:"), the const char * gets interpreted as
2961   std::string rather than bool.
2963 testsuite:
2965 * apitest: Assorted test coverage improvements.
2967 * When reporting valgrind errors, skip any warnings before the error in the
2968   valgrind log.
2970 matcher:
2972 * Improved fix for #590 - count all matching LeafPostList objects with a Weight
2973   object rather than trying to prune at the MultiAndPostList level based on
2974   max_wt (if wdf is always zero for a term, BM25 gives max_wt of 0, which lead
2975   to us never counting that subquery.
2977 * Fix calculation of 0.0/0.0 in some cases.  This then got used as a minimum
2978   weight, but it seems this gives -nan (at least on x86-64 Linux) so it may
2979   have been harmless in practice.
2981 * We no longer use the highest weighted MSet entry to calculate percentages, so
2982   remove code which finds it.
2984 brass backend:
2986 * Close excess file handles before we get the fcntl lock, which avoids the
2987   lock being released again if one is open on the lock file.  Notably this
2988   avoids a situation where multiple threads in the same process could succeed
2989   in locking a database concurrently.
2991 chert backend:
2993 * Close excess file handles before we get the fcntl lock, which avoids the
2994   lock being released again if one is open on the lock file.  Notably this
2995   avoids a situation where multiple threads in the same process could succeed
2996   in locking a database concurrently.
2998 flint backend:
3000 * Close excess file handles before we get the fcntl lock, which avoids the
3001   lock being released again if one is open on the lock file.  Notably this
3002   avoids a situation where multiple threads in the same process could succeed
3003   in locking a database concurrently.
3005 remote backend:
3007 * Improve the UnimplementedError message for a MatchSpy subclass which doesn't
3008   implement name() so it's clearer that it is this particular subclass which
3009   can't be used remotely, rather than all MatchSpy objects.
3011 build system:
3013 * The build system is now generated with automake 1.11.6 rather than 1.11.1,
3014   which fixes a security issue in "make distcheck" (not something users will
3015   usually run, but it seems worth addressing).
3017 * Use user-specified LIBS for configure tests, which is what you'd expect to
3018   happen, and provides a way for the user to tell configure where to find
3019   library functions which configure can't find for itself.
3021 * INCLUDES is now deprecated in automake, so use AM_CPPFLAGS instead.
3023 * Test coverage rules now assume lcov 1.10 which allows them to be simpler
3024   and not to require a patched version of lcov.
3026 documentation:
3028 * valueranges.html: Update documentation to reflect change in Xapian 1.1.2 -
3029   DateValueRangeProcessor and StringValueRangeProcessor now support a prefix or
3030   suffix.
3032 * Clarify that the "reverse" parameter of set_sort_by_relevance_then_value()
3033   and set_sort_by_relevance_then_key() only affects the ordering of the
3034   value/key part of the sort.
3036 * docs/quickstart.html: Fix seriously outdated statement that Xapian doesn't
3037   create the database directory - that changed in 0.7.2 (released 2003-07-11).
3039 * HACKING: Try to make it clearer we're looking for a dual-licence on submitted
3040   patches.
3042 tools:
3044 * xapian-replicate:
3046   + Add a --full-copy option to force a full copy to be sent.  (ticket#436)
3048   + Add --quiet option, and be a little more verbose by default.
3050   + Allow files > 32G to be be copied by replication.
3052   + Fix "if (fd > 0)" tests in some replication code to be "if (fd >= 0)".
3053     In practice this is unlikely to actually have caused problems since
3054     stdin is typically still open and using fd 0.
3056   + Simplify how we open the .DB file on the replication slave to just call
3057     open() once with O_CREAT, rather than once without, than stat() if that
3058     fails, and then again with O_CREAT|O_TRUNC if stat() doesn't show an
3059     ordinary file exists.
3061 examples:
3063 * quest:
3065   + New --flags command line option to allow setting arbitrary QueryParser
3066     flags.
3068   + Align option descriptions in --help output, and make the initial letter of
3069     such descriptions consistently lowercase.
3071 portability:
3073 * Fix testsuite harness to compile with GCC 4.7.
3075 * On platforms with the F_MAXFD fcntl but without closefrom(), we were failing
3076   to close the highest numbered open fd in our closefrom() replacement.
3078 * Our closefrom() replacement on Linux now works around valgrind not hiding
3079   some extra fds it has open, but then complaining if we try to close them.
3081 + Pass O_BINARY when opening replication related files in some cases where we
3082   weren't before, which will probably help solve ticket #472.
3084 * configure: socketpair() needs -lnetwork on Haiku.
3086 * Micro-optimisation in Unicode handling - GCC doesn't currently optimise the
3087   arithmetic shift right idiom we use, but it documents that signed right shift
3088   does sign extension so we now just use a right shift for GCC.
3090 debug code:
3092 * Preserve errno over debug logging calls, so they can safely be added to code
3093   which expects errno not to change.
3095 Xapian-core 1.2.12 (2012-06-27):
3097 build system:
3099 * 1.2.11 had its library version information incorrectly set.  This resulted in
3100   the shared library having an incorrect SONAME - e.g. on Linux,
3101   libxapian.so.21 instead of libxapian.so.22.  This release has been made to
3102   fix this problem.
3104 documentation:
3106 * AUTHORS: Add the GSoC students.
3108 Xapian-core 1.2.11 (2012-06-26):
3110 API:
3112 * Add new QueryParser::STEM_ALL_Z stemming strategy, which stems all terms and
3113   adds a Z prefix.  (Patch from Sehaj Singh Kalra, fixes ticket#562)
3115 * Add TermGenerator::set_stemming_strategy() method, with strategies which
3116   correspond to those of QueryParser.  Based on patch from Sehaj Singh Kalra,
3117   with some tweaks for adding term positions in more cases.  (Fixes ticket#563)
3119 * Correct "BM25Weight" to "TradWeight" in exception message from TradWeight.
3121 * We were failing to call init() for user-defined Weight objects providing the
3122   term-independent weight.  These now get called with init(0.0).
3124 * Xapian::Auto::open_stub() now throws a Xapian::DatabaseOpeningError exception
3125   if the stub file can't be opened.  Previously we failed to check for this
3126   condition, which resulted in us treating the file as empty.
3128 testsuite:
3130 * When the testsuite is using valgrind, we used to run remote servers under
3131   valgrind too (but with --tool=none) to get consistent behaviour as valgrind's
3132   emulation of x87 excess precision isn't exact.  Now we only do this if x87 FP
3133   instructions are actually in use (which means x86 architecture and configure
3134   run with --disable-sse).
3136 * Make sure XAPIAN_MAX_CHANGESETS gets unset after replication testcases which
3137   set it, so further testcases don't waste time generating changesets.
3139 * Improved test coverage (including more tests for closed databases -
3140   ticket#337).
3142 brass backend:
3144 * After closing the database, methods which try to use the termlist would throw
3145   FeatureUnavailableError with message "Database has no termlist", assuming
3146   that the termlist table not being open meant it wasn't present.  Fix to check
3147   if the postlist_table is open to determine which case we're in.
3149 chert backend:
3151 * After closing the database, methods which try to use the termlist would throw
3152   FeatureUnavailableError with message "Database has no termlist", assuming
3153   that the termlist table not being open meant it wasn't present.  Fix to check
3154   if the postlist_table is open to determine which case we're in.
3156 inmemory backend:
3158 * Check if the database is closed in metadata_keys_begin() for InMemory
3159   Databases.
3161 build system:
3163 * xapian-config: Don't interpret a missing .la file as meaning that we only
3164   have static libraries.
3166 documentation:
3168 * Fix API documentation for Query constructors - both XOR and ELITE_SET can
3169   take any number of subqueries, not only exactly two.
3171 * Backport missing API documentation comments for operator++ and operator*
3172   methods or PositionIterator, PostingIterator and TermGenerator.
3174 * docs/replication.rst: Update documentation - since 1.2.5, the value of
3175   XAPIAN_MAX_CHANGESETS determines how many changesets we keep.
3177 * docs/admin_notes.rst: Correction - we don't "create a lock file", we "lock a
3178   file".
3180 * Fix API documentation for TradWeight constructor - "k1" should be "k".
3182 portability:
3184 * configure: Overhaul handling of compilers which pretend to be GCC.  Clang
3185   is now detected, and we only pass it warning flags it actually understands.
3186   And we now check for symbol visibility support with Intel's compiler.
3188 * configure: Solaris automatically pulls in library dependencies, so set
3189   link_all_deplibs_CXX=no there.
3191 * configure: We now check -Bsymbolic-functions for all compilers.
3193 * configure: Enable -Wdouble-promotion for GCC >= 4.6.
3195 * Pass -ldl last when compiling zlib-vg.so, as that seems to be needed on
3196   Ubuntu 12.04.
3198 * Fix incorrect use of "delete" which should be "delete []".  This is
3199   undefined behaviour in C++, though the type is POD, so in practice this
3200   probably worked OK on many platforms.
3202 * In BM25Weight when k1 or b is zero (not the default), we used to multiply
3203   an uninitialised double by zero, which is undefined behaviour, but in
3204   practice will often give zero, leading to the desired results.
3206 * xapian.h: Add check for Qt headers being included before us and defining
3207   'slots' as a macro - if they are, give a clear error advising how to work
3208   around this (previously compilation would fail with a confusing error).
3210 Xapian-core 1.2.10 (2012-05-09):
3212 API:
3214 testsuite:
3216 * apitest: Extend tradweight1 to test that TradWeight(0) means that wdf and
3217   document length don't affect the weight of a term.
3219 * termgentest: Check that TermGenerator discards words > 64 bytes.
3221 matcher:
3223 * Don't count unweighted subqueries of MultiAndPostList in percentage
3224   calculations, as OP_FILTER maps to MultiAndPostList now.  (ticket#590)
3226 brass backend:
3228 * When compacting, if the output database is empty, don't write out a metainfo
3229   tag.  Take care not to divide by zero when computing the percentage size
3230   change for a table.
3232 chert backend:
3234 * When compacting, if the output database is empty, don't write out a metainfo
3235   tag.  Take care not to divide by zero when computing the percentage size
3236   change for a table.
3238 documentation:
3240 * API documentation:
3242  + Note version when Database::close() was added.
3244  + Fix switched lower and upper in API documentation for Weight methods
3245    get_doclength_lower_bound() and get_doclength_upper_bound().  Correct
3246    maximum to minimum in get_doclength_lower_bound() comment and note that this
3247    excludes zero length documents.  Fix "An lower" to "A lower".
3249 * docs/admin_notes.html: Mention that postlist and termlist tables also hold
3250   value info for chert.  Mention that xapian-chert-update was removed in 1.3.0.
3251   Mention that you need to use copydatabase from 1.2.x to convert flint to
3252   chert.
3254 * HACKING: Update section on patches to mention git (git diff and git
3255   format-patch), and using "-r" with normal diff, and also that ptardiff offers
3256   a nice way to diff against an unpacked tarball.
3258 debug code:
3260 * Fix use of AssertEq() on NULL, which doesn't compile, at least with recent
3261   GCC.
3263 Xapian-core 1.2.9 (2012-03-08):
3265 API:
3267 * QueryParser: Fix FLAG_AUTO_SYNONYMS not to enable auto multi-word synonyms
3268   too (but in a different way to trunk so as to not break the ABI).
3270 matcher:
3272 * Fix issue with running AND, OR and XOR queries against a database with no
3273   documents in it - this was leading to a divide by zero, which led to
3274   MSet::get_matches_estimated() reporting 2147483648 on i386.
3276 build system:
3278 * Remove configure's --with-stlport and --with-stlport-compiler options, as
3279   they don't allow you to actually specify what you need to (at least to use
3280   the Debian STLport package), and instead document what to pass to configure
3281   to enable building with STLport (though it seems to no longer be actively
3282   maintained, and the debug mode (which is probably the most interesting
3283   feature now) doesn't seem to work on Debian stable).
3285 documentation:
3287 * Document that OP_ELITE_SET with non-term subqueries might pick subqueries
3288   which don't match anything.  Closes ticket#49.
3290 * Document that you can define a static operator delete method in your subclass
3291   if deallocation needs to be handled specially.  (Closes ticket#554)
3293 * Assorted minor documentation improvements.
3295 portability:
3297 * Address new warnings from GCC 4.6.
3299 * Fix argument order when linking xapian-check to fix mingw build.
3300   (ticket#567)
3302 * Add some missing explicit header includes to fix build with STLport.
3304 Xapian-core 1.2.8 (2011-12-13):
3306 API:
3308 * Add support to TermGenerator and QueryParser for indexing and searching CJK
3309   text using n-grams.  Currently this is only enabled when the environmental
3310   variable XAPIAN_CJK_NGRAM is set to a non-empty value.
3312 documentation:
3314 * Add link from index page to apidoc.pdf.
3316 * quickstart.html: Correct link which was to quickstartsearch.cc.html but
3317   should be to quickstartindex.cc.html.
3319 * overview.html,quickstart.html: Fix several factual errors.
3321 * API documentation:
3323   + Improve documentation comments for several methods.
3325   + Add documentation for function parameters which didn't have it.
3327   + Remove bogus paragraph in WritableDatabase::replace_document()
3328     documentation comment which had been cut and pasted from delete_document()
3329     documentation comment.  (Fixes ticket#579)
3331   + Explicitly document which value slot numbers are valid.  (Fixes ticket#555)
3333   + Escape < and > in doxygen comments so "<foo>" doesn't get eaten by doxygen.
3335 portability:
3337 + Some fixes for warnings when cross-compiling to mingw.
3339 * tests/soaktest/soaktest.cc: With Sun's compiler, random() and srandom()
3340   aren't in <cstdlib> so we need to use <stdlib.h> instead.
3342 Xapian-core 1.2.7 (2011-08-10):
3344 API:
3346 * Document objects now track whether any document positions have been modified
3347   so that replacing a modified document can completely skip considering
3348   updating positions if none have changed.  Currently the flint, chert, and
3349   brass backends implement this optimisation.  A common case this speeds up is
3350   adding and/or removing boolean filter terms to/from existing documents - for
3351   example this gives an 18% speedup for adding tags in notmuch.
3353 testsuite:
3355 * Make sure that perftest isn't run with libeatmydata preloaded, as making
3356   fsync() a no-op makes performance tests rather bogus.
3358 remote backend:
3360 * Remove unnecessary call to reopen() in the remote servers in a case where
3361   either we had just called it or we are using a writable database and so
3362   reopen() doesn't do anything.
3364 build system:
3366 * configure: -Wshadow gives bogus warnings with 4.0 (at least on Mac OS X), so
3367   disable it for GCC < 4.1 (like the comments already said we did!)
3369 documentation:
3371 * Improve the documentation comment for Database::close().  (ticket#504)
3373 * Fix typo in documentation comment for Enquire constructor which reversed the
3374   intended sense (though the text was fairly obviously wrong before).
3376 * Improve documentation of QueryParser::add_boolean_prefix()'s exclusive
3377   parameter to talk about terms and prefixes rather than values and fields
3378   (which was confusing since "document value" has a particular meaning in
3379   Xapian).
3381 * docs/facets.html: Expand descriptions for indexing and finding facets.
3382   Fix errors in example code.
3384 * docs/index.html: Add links to Omega and bindings documentation.
3386 * docs/remote_protocol.html: Fixed typo which reversed the intended sense.
3388 * xapian-check --help: Document that checking a whole database performs
3389   additional cross-checks between the tables.
3391 * docs/admin_notes.html: Add note about xapian-chert-update.
3393 * docs/deprecation.html: Note here that WritableDatabase::flush() is
3394   deprecated in favour of WritableDatabase::commit().
3396 portability:
3398 * Fix -Wshadow warnings from GCC 4.6.
3400 * Fix warning from GCC 3.3.
3402 debug code:
3404 * Fix some problems with the templates used to implement output of parameters
3405   and return values in debug logging.
3407 Xapian-core 1.2.6 (2011-06-12):
3409 API:
3411 * QueryParser:
3413   + Add new set_max_wildcard_expansion() method to allow limiting the number of
3414     terms a wildcard can expand to.  (ticket#350)
3416   + If default_op is OP_NEAR or OP_PHRASE then disable stemming of the terms,
3417     since we don't index positional information for stemmed terms by default.
3419 * Spelling correction was failing to correctly handle words which had the same
3420   trigram in an even number of times.
3422 testsuite:
3424 * We now actually include the soaktest code in the release tarballs.
3426 matcher:
3428 * Eliminate some vector copies when handling phrase subqueries in the query
3429   optimiser.
3431 brass backend:
3433 * Kill the child process which holds the lock with SIGKILL as that can't be
3434   ignored, whereas SIGHUP can be in some cases.
3436 chert backend:
3438 * Kill the child process which holds the lock with SIGKILL as that can't be
3439   ignored, whereas SIGHUP can be in some cases.
3441 flint backend:
3443 * Kill the child process which holds the lock with SIGKILL as that can't be
3444   ignored, whereas SIGHUP can be in some cases.
3446 documentation:
3448 * The HTML documentation is now maintained in reStructured Text format.
3450 * docs/queryparser.html: Document the precedence order of operators.
3452 * docs/scalability.html: Bring up-to-date.
3454 * docs/overview.html: Document "remote" in stub databases.
3456 * docs/postingsource.html: Add PostingSource example.  (ticket#503)
3458 * include/xapian/database.h: Add @exception InvalidArgumentError for
3459   Database::get_document() (ticket#542).
3461 * Ship ChangeLog.0 in the tarball.
3463 * Assorted minor improvements.
3465 examples:
3467 * examples/delve: Report has_positions().
3469 * examples/simpleindex: Add short description to usage message.
3471 portability:
3473 * Fix to build for mingw.
3475 Xapian-core 1.2.5 (2011-04-04):
3477 API:
3479 * Enquire::get_eset() now accepts a min_wt argument to allow the minimum wanted
3480   weight to be specified.  Default is 0, which gives the previous behaviour.
3482 * QueryParser: Handle NEAR/<offset> and ADJ/<offset> where offset isn't an
3483   integer the same way at the end of the query as in the middle.
3485 * Replication:
3487   + Only keep $XAPIAN_MAX_CHANGESETS changeset files when generating a new one
3488     (previously this variable only controlled if we generated changesets or
3489     not).  Closes ticket#278.
3491   + $XAPIAN_MAX_CHANGESETS is reread each time, rather than only when the
3492     database is opened.
3494   + If you build Xapian with DANGEROUS mode enabled, changeset files now
3495     actually have the appropriate flag set (the reader will currently throw an
3496     exception, but that's better than quietly handling them incorrectly).
3498 testsuite:
3500 * Compaction tests which generate stub files now close them before performing
3501   the actual compaction, to avoid issues on Microsoft Windows (ticket#525).
3503 * Improve test coverage.
3505 matcher:
3507 * Fix memory leak if an exception is thrown during the match.
3509 brass backend:
3511 * Bumped format version number (we now store the oldest revision for which we
3512   might have a replication changeset).
3514 * Optimise not to read the bitmaps from the base files when opening a database
3515   for reading (cross-port of equivalent change to chert).
3517 * Optimise not to update doclength when it hasn't changed (cross-port of
3518   equivalent change to chert).
3520 * If we try to delete an old base file and it isn't there, just continue rather
3521   than throwing an exception.  We wanted to get rid of it anyway, and it may be
3522   NFS issues telling us the wrong thing.  In particular, DatabaseCorruptError
3523   was rather a pessimistic assessment.
3525 chert backend:
3527 * Optimise not to read the bitmaps from the base files when opening a database
3528   for reading.
3530 * Optimise not to update doclength when it hasn't changed.
3532 * xapian-chert-update: Fix to handle larger databases, and databases which
3533   have values set.
3535 * If we try to delete an old base file and it isn't there, just continue rather
3536   than throwing an exception.  We wanted to get rid of it anyway, and it may be
3537   NFS issues telling us the wrong thing.  In particular, DatabaseCorruptError
3538   was rather a pessimistic assessment.
3540 flint backend:
3542 * Optimise not to read the bitmaps from the base files when opening a database
3543   for reading (cross-port of equivalent change to chert).
3545 * Optimise not to update doclength when it hasn't changed (cross-port of
3546   equivalent change to chert).
3548 * If we try to delete an old base file and it isn't there, just continue rather
3549   than throwing an exception.  We wanted to get rid of it anyway, and it may be
3550   NFS issues telling us the wrong thing.  In particular, DatabaseCorruptError
3551   was rather a pessimistic assessment.
3553 remote backend:
3555 * xapian-tcpsrv: If we can't bind to the specified port because it is a
3556   privileged one, exit with code 77 (EX_NOPERM) to make it easier to
3557   automatically handle failure when starting the server from a script.
3559 build system:
3561 * Snapshots and releases are now bootstrapped with autoconf 2.68 and libtool
3562   2.4.
3564 * configure: -Wstrict-null-sentinel was added in GCC 4.0.1 and so doesn't work
3565   with GCC 4.0.0.  For simplicity, only enable it for GCC >= 4.1.
3567 documentation:
3569 * INSTALL: Note how to build for a non-default arch on a multi-arch platform.
3571 * include/xapian/enquire.h: Fix doxygen markup so alternative overloaded forms
3572   of Enquire::get_mset() appear in the API documentation.
3574 * collapsing.html: Add missing document (written some time ago, but never
3575   actually added to builds).
3577 * replication.html: Update documentation to make it clear that users shouldn't
3578   create the destination directory for replication themselves.
3580 * docs/intro_ir.html: Update link to a paper.  Update text about book "to be
3581   published in 2008".
3583 * docs/deprecation.html:
3585   + PostingSource now offers a replacement for Enquire::set_bias().
3587   + OmegaScript: $set{spelling,true} is now deprecated.
3589   + Add note about botched removal of Enquire.get_matching_terms from Python
3590     bindings (now fully removed).
3592   + Note removal of "if idx in mset" from Python bindings.
3594   + Deprecate MSet.items and ESet.items from Python bindings (ticket#531).
3596 * docs/admin_notes.html: Update for 1.2.5.
3598 * Updates to documentation of internals.
3600 tools:
3602 * xapian-replicate-server: Fix race condition between checking if a file
3603   exists and opening it to replicate it.
3605 * xapian-replicate: Complain unless host name and port number are specified -
3606   previously these defaulted to an empty string and 0, which resulted in
3607   potentially confusing error messages.
3609 * xapian-replicate: If --master isn't specified, default to DATABASE.
3611 examples:
3613 * quest: Report any spelling correction (requires the database contains
3614   spelling data of course).
3616 * copydatabase: Add --no-renumber option.
3618 portability:
3620 * api/compactor.cc: Add missing header <ctime> for time() (ticket#530).
3622 * api/compactor.cc: Use msvc_posix_rename() under __WIN32__ to atomically
3623   update stub file after compaction (ticket#525).
3625 * Fix uninitialised variable warnings with gcc -O3.
3627 * Eliminate std::string member of global static object used when compiled with
3628   --enable-log which was causes problems on Mac OS X.
3630 * Fix some issues highlighted by clang++ warnings.
3632 Xapian-core 1.2.4 (2010-12-19):
3634 API:
3636 * QueryParser:
3638   + Avoid a double free if Query construction throws an exception in a
3639     particular case.  Fixes ticket#515.
3641   + Allow phrase generators between a probabilistic prefix and the term itself
3642     (e.g. path:/usr/local).
3644   + The correct window size wasn't being set in some cases when default_op was
3645     set to OP_PHRASE.
3647 * Enquire::get_mset():
3649   + Avoid pointlessly trying to allocate lots of memory if the first document
3650     requested is larger than the size of the database.
3652   + An empty query now returns an MSet with firstitem set correctly -
3653     previously firstitem was always 0 in this case.
3655 * Document: Initialise docid to 0 when creating a document from
3656   scratch, as documented.
3658 * Compactor:
3660   + Move the database compaction and merging functionality into this new class,
3661     and make xapian-compact a simple wrapper around this class.  (ticket#175)
3663   + Inputs can now be stub database directories or files, in which case the
3664     databases in the stub are used as inputs.
3666   + Add support for compacting to a stub database, which can be one of the
3667     inputs (for atomic update).
3669   + If spellings and/or synonyms were only present in some source databases,
3670     they weren't copied to the output database, but now they are.
3672 testsuite:
3674 * Improve test coverage (particularly for Xapian::Utf8Iterator and
3675   Xapian::Stem).
3677 * Add zlib-vg.c to distribution tarballs.
3679 * tests/runtest: Add XAPIAN_TESTSUITE_LD_PRELOAD hook to allow libeatmydata to
3680   easily be used to speed up testsuite runs.
3682 matcher:
3684 * The matcher wasn't recalculating the max possible weight after a subquery of
3685   XOR reached its end.  This caused an assertion failure in debug builds, and
3686   is a missed optimisation opportunity.
3688 * Implement SelectPostList::check() so that check() on OP_NEAR and OP_PHRASE
3689   subqueries will just check a single document, not a potentially huge numbers
3690   of documents.
3692 * BM25Weight: Fix calculation order to avoid inconsistent weights due to
3693   rounding when certain non-default parameter combinations are used.
3695 * TradWeight: Fix calculation order to avoid inconsistent weights due to
3696   rounding with TradWeight(0).
3698 * Fix regression in speed of OP_OR queries in certain cases due to optimisation
3699   added in 1.0.21/1.2.1.
3701 * In the query optimiser, use value range bounds to detect value ranges which
3702   must be empty.
3704 remote backend:
3706 * Add support for iterating metadata keys with the remote backend.  This change
3707   necessitated an increase in the minor version of the remote protocol.  If you
3708   are upgrading a live system which uses the remote backend, upgrade the
3709   servers before the clients.
3711 build system:
3713 * xapian-config: Add --static option which makes other options report values
3714   for static linking.
3716 * xapian-config is now removed by "make distclean" not "make clean".
3718 * configure: FreeBSD and OpenBSD don't need explicit dependency libraries, so
3719   set link_all_deplibs_CXX=no there.
3721 * This release uses autoconf 2.67 rather than 2.65.
3723 documentation:
3725 * INSTALL: Raise recommended GCC version from 3.3 to 4.1, since that's the
3726   oldest we regularly test with.
3728 * replication.html: Update and improve in various ways.
3730 * Remove lingering "experimental" marker from PostingSource and
3731   ValueCountMatchSpy API documentation.
3733 * index.html: Add links to replication and facets documents, and fix typo in
3734   serialisation document link.
3736 * internals.html: Add link to replication protocol.
3738 * Change the categorisation document to talk about facets, since that's the
3739   terminology that seems to be most widely used these days, and
3740   "categorisation" can also mean automatically assigning categories to
3741   documents.  Also update to reflect the final API.
3743 * deprecation.html: Add guidelines for supporting other software.
3745 * Document cases where QueryParser's FLAG_WILDCARD and FLAG_PARTIAL aren't
3746   currently supported.
3748 * PLATFORMS: Move PLATFORMS information to the wiki and replace with a pointer.
3750 tools:
3752 * xapian-compact: Fix access to empty priority_queue while merging synonyms.
3753   This could have caused problems, though we've had no reports of any (the
3754   bug was found with _GLIBCXX_DEBUG).
3756 * xapian-compact: Add --quiet/-q option to suppress progress output.
3757   (ticket#437)
3759 * xapian-replicate: If a full copy was attempted, but was not put live, display
3760   an explanatory message (in verbose mode).
3762 examples:
3764 * examples/quest: Add command line options to allow prefixes to be specified
3765   for the QueryParser.
3767 * examples/delve: Add '-z' option to count zero-length documents.
3769 * examples/simplesearch: Fix cut-and-paste errors in usage message and
3770   --version output.
3772 portability:
3774 * configure: Add support for --enable-sse=sse and --enable-sse=sse2 to allow
3775   control of which SSE instructions to use.
3777 * configure: Enable use of SSE maths on x86 by default with Sun's compiler.
3779 * configure: Beef up the test for whether -lm is required and add a special
3780   case to force it to be for Sun's C++ compiler - there's some interaction with
3781   libtool and/or shared objects which means that the previous configure test
3782   didn't think -lm is needed here when it is.
3784 * Fix to build on OpenBSD 4.5 with GCC 3.3.5.
3786 * Need to avoid excess precision on m68k when targeting models 68010, 68020,
3787   68030 as well as 68000.
3789 * Fix compilation with Sun's C++ compiler.
3791 * Fix testsuite to build on Solaris < 10.
3793 Xapian-core 1.2.3 (2010-08-24):
3795 API:
3797 * Database::get_spelling_suggestion() will now suggest a correction even if the
3798   passed word is in the dictionary, provided the correction has at least the
3799   same frequency.  Partly addresses #225.
3801 * QueryParser:
3803   + Fix handling of groups of terms which are all stopwords - in situations
3804     where this causes a problem we now disable stopword checks for such groups.
3805     (ticket#245)
3807   + Fix to be smarter about handling a boolean filter term containing ".." in
3808     the presence of valuerangeprocessors.
3810 testsuite:
3812 * New "unittest" program for testing low level functions directly.  Currently
3813   this has tests for the internal resolve_relative_path() function.
3814   (ticket#243)
3816 remote backend:
3818 * Retry select() if it fails with EINTR while waiting for connect(), and
3819   discriminate cases with same failure message to aid debugging.
3821 documentation:
3823 * Fix documentation comment for Xapian::timeout type - it holds a time interval
3824   in milliseconds not microseconds (the API docs for the methods which use it
3825   explicitly correctly document that the timeouts are in milliseconds).
3827 * libuuid moved from e2fsprogs to util-linux-ng about a year ago, so update
3828   documentation, comments, and configure error messages to reflect this.
3830 portability:
3832 * configure: Don't pass -mtune=generic unless GCC >= 4.2 is in use
3833   (ticket#492).
3835 * Fix handling of some obscure cases of resolving relative paths on Microsoft
3836   Windows.  (ticket#243).
3838 * Optimise closing of all unwanted file descriptors after forking by using
3839   closefrom() if available, and otherwise providing our own implementation
3840   (optimised to some extent for many platforms).
3842 * Fix test harness to build under Microsoft Windows (ticket#495).
3844 packaging:
3846 * xapian-core.spec: Add xapian-metadata and cmake related files to RPM
3847   packaging.
3849 * xapian-core.spec: Update BuildRequires to specify libuuid-devel instead of
3850   e2fsprogs-devel.
3852 debug code:
3854 * Improve logging of function parameter placeholder strings.
3856 Xapian-core 1.2.2 (2010-06-27):
3858 brass backend:
3860 * Sync changes from each Btree table to disk right after syncing changes to
3861   its base file, which allows more time for the table changes to be written
3862   and may also be more efficient with some Linux kernel versions.
3864 chert backend:
3866 * Sync changes from each Btree table to disk right after syncing changes to
3867   its base file, which allows more time for the table changes to be written
3868   and may also be more efficient with some Linux kernel versions.
3870 tools:
3872 * xapian-check: Don't try to check document lengths are consistent between the
3873   postlist and termlist tables if it would use more than 1GB of memory, and
3874   handle std::bad_alloc or std::length_error when trying to allocate space
3875   for this.  This issue affected sup users, as sup allocates docids such that
3876   they are sparse and large docids can easily occur.
3878 examples:
3880 * delve: Show the database's UUID.
3882 portability:
3884 * Revert 1.2.1 change to visibility of Xapian::Weight's copy constructor as
3885   it making it private broke compilation with GCC 4.1 (which seems to be a
3886   bug in this compiler version).
3888 * tests/harness/testsuite.cc: Need <cstdio> for sprintf().  Fixes compilation
3889   error which was masked if valgrind was installed.  (ticket#489)
3891 packaging:
3893 * xapian-core.spec: Update for 1.2.x - add e2fsprogs-devel to BuildRequires and
3894   add new files to install.
3896 Xapian-core 1.2.1 (2010-06-22):
3898 This release includes all changes from 1.0.21 which are relevant.
3900 API:
3902 * QueryParser: Add support for open-ended ranges (ticket#480).
3904 * Add new optional parameter to QueryParser::add_boolean_prefix() to allow the
3905   user to indicate a prefix isn't "exclusive" and that multiple instances
3906   should be combined with OP_AND rather than OP_OR.  Fixes ticket#402.  This
3907   change should also improve efficiency as it avoids copying the lists of
3908   prefixes and compares them more efficiently.
3910 * You can now specify a custom stemming algorithm by subclassing
3911   Xapian::StemImplementation, mostly based on patch from Evgeny Sizikov in
3912   ticket#448.
3914 * Fix replication bug: when multiple commits were made to the master database
3915   while a client was performing a full copy, the client would only apply the
3916   first changeset and then try to make the database live, but fail due to
3917   trying to set the wrong revision number.
3919 * Replication no longer sleeps between applying changesets to an offline
3920   database.  It's only necessary to sleep for a live database (to allow readers
3921   to complete a search without getting DatabaseModifiedErrror.
3923 * xapian-replicate: Add new "-r" command line option to specify how long
3924   replication sleeps for between applying changesets to a live database.
3926 * If a Btree table doesn't exist when applying a replication changeset, create
3927   it.  This fixes replicating a revision where a lazy table is created.
3928   (ticket#468)
3930 testsuite:
3932 * zlib can produce "uninitialised" output from "initialised" input - the
3933   output does decode to the input, so this is presumably just some unused bits
3934   in the output, so we use an LD_PRELOAD hack to get valgrind to check the
3935   input is initialised and then tell it that the output is initialised.
3937 * Don't pass NULL to closedir(), which fixes test harness failures on platforms
3938   without /proc/self/fd.
3940 * Use safesyswait.h, fixing build failure on "make check" on FreeBSD.
3942 * Check is SA_SIGINFO is defined before using it as it isn't available
3943   everywhere.  Fixes testsuite build failure on GNU Hurd.
3945 * Add a "soaktest" testsuite, intended to contain long-running tests with
3946   random data.  Currently contains a single test which builds and runs random
3947   queries, checking that the results returned are consistent when asking for
3948   different result ranges.
3950 * Test UUID returned by Database::get_uuid() is 36 characters long.
3952 matcher:
3954 * Xapian no longer forces the wdf_max value to be at least one in
3955   BM25Weight::get_maxpart().  We used to do this so that a non-existent term in
3956   the query would cause it not to achieve 100%, but now we calculate
3957   percentages based on the number of matching subqueries, and it is more
3958   natural for a non-existent term to get zero weight (ditto for a term which
3959   always has wdf 0).
3961 * OP_VALUE_RANGE and OP_VALUE_GE now use value streams directly which is much
3962   more efficient for chert (the default backend in 2.2.x).  As an example, a
3963   range query testcase which previously took 29 seconds now takes 0.4 seconds
3964   (70 times faster).  (ticket#432)
3966 * The term statistics from multiple databases are now gathered in a simpler
3967   way which is a bit faster and uses less memory.
3969 build system:
3971 * Install headers under PREFIX/include not PREFIX/include/xapian.  If you used
3972   XO_LIB_XAPIAN or xapian-config in your build system, the headers would still
3973   have been found.
3975 * Releases and snapshots are now generated with libtool 2.2.10 instead of
3976   2.2.6.
3978 * Fix build failures with some combinations of backends disabled (partially
3979   addresses ticket#361 - some combinations still fail).
3981 * Add check to configure that GCC actually supports visibility for the platform
3982   being built for, which fixes compiler warnings with platforms which don't
3983   (such as Mac OS X and mingw).
3985 documentation:
3987 * Update documentation - replication and PostingSource aren't experimental in
3988   1.2.x.
3990 portability:
3992 * Make use of built-in UUID API on FreeBSD and NetBSD.  (ticket#470)
3994 * Fix mingw build.
3996 debug code:
3998 * Add new pretty printer for values reported by calls and returns in debug
3999   logging - in particular, strings are now reported with non-printable
4000   characters escaped.
4002 * Debug logging should have less runtime overhead when built in but not in use.
4004 * Drop support for --enable-log=profile - dedicated profiling tools are likely
4005   to return more useful results.
4007 Xapian-core 1.2.0 (2010-04-28):
4009 This release includes all changes from 1.0.20 which are relevant.
4011 testsuite:
4013 * Fix --abort-on-error to actually work.
4015 * Exit with status 1 not 0 if we caught an exception from the harness itself.
4017 Xapian-core 1.1.5 (2010-04-16):
4019 This release includes all changes from 1.0.19 which are relevant.
4021 API:
4023 * Database replication now handles an exception while applying a changeset
4024   better.
4026 * If environment variable XAPIAN_MAX_CHANGESETS is set on a replication client
4027   then any changesets read are saved so the replicated copy can itself be
4028   replicated.
4030 testsuite:
4032 * Use sigsetjmp() and siglongjmp() where available so that the set of blocked
4033   signals get restored and the test harness can catch a second incidence of a
4034   particular signal in a run.  Use sigaction() instead of signal() where
4035   available, which allows us to report the address associated with SIGSEGV,
4036   SIGFPE, SIGILL, and SIGBUS.
4038 * Add machinery to check for leaked file descriptors.  Currently this requires
4039   /proc/self/fd to work (which is present on Linux and some other platforms).
4040   Remove the crude ulimit in runtest which has caused problems on some Debian
4041   buildds.
4043 * The test harness now explicitly catches const char * exceptions and reports
4044   their contents.
4046 brass backend:
4048 * Ensure that the wdf upper bound is correctly updated when replacing
4049   documents.
4051 * xapian-compact: Now sets lastdocid correctly when using --no-renumber.
4053 chert backend:
4055 * Ensure that the wdf upper bound is correctly updated when replacing
4056   documents.
4058 * xapian-compact: Now sets lastdocid correctly when using --no-renumber.
4060 * xapian-check: Check that the initial doclen chunk exists.
4062 flint backend:
4064 * xapian-compact: Now sets lastdocid correctly when using --no-renumber.
4066 remote backend:
4068 * Add remote backend support for WritableDatabase::add_spelling() and
4069   WritableDatabase::remove_spelling().  This bumps the remote protocol to
4070   version 35.0 (so both client and servers will need updating).  Suggesting
4071   spelling corrections isn't yet supported.  (ticket#178)
4073 build system:
4075 * XO_LIB_XAPIAN: Give a more specific error message for the cases where
4076   XAPIAN_CONFIG isn't found, is a directory, or isn't executable.
4078 examples:
4080 * delve:
4082   + If any documents are specified with "-d<docid>", "-V<slot>" now only show
4083     values for those documents.
4085   + Remove undocumented -k option, which has been a compatibility alias for -V
4086     since 0.9.10.  Just use -V instead.
4088 * xapian-metadata: Add new example program which allows you to get and set
4089   individual user metadata entries.
4091 Xapian-core 1.1.4 (2010-02-15):
4093 This release includes all changes from 1.0.18 which are relevant.
4095 API:
4097 * Xapian::TermGenerator,Xapian::QueryParser,Xapian::Unicode::is_wordchar():
4098   Add ENCLOSING_MARK and COMBINING_SPACING_MARK categories to is_wordchar(),
4099   which is used by TermGenerator and QueryParser.  Also make TermGenerator and
4100   QueryParser ignore several zero-width space characters.  This is a better
4101   but less compatible version of a fix in 1.0.18.
4103 * Implement support for iterating valuestreams for multidatabases.
4105 * Xapian::Stem: Update the german and german2 stemming algorithms to the latest
4106   versions from Snowball.  These add an extra rule for the "-nisse" ending.
4108 * Xapian::ValueCountMatchSpy: Replace get_values() with values_begin() and
4109   values_end().
4111 * Xapian::MatchSpy: Provide an iterator for accessing the top values found
4112   instead of taking a vector by reference to return them in.
4114 * Xapian::NumericRanges: Remove experimental API we aren't happy with yet.
4116 * Xapian::DatabaseReplica, Xapian::DatabaseMaster: Remove experimental
4117   API we aren't happy with.  Replication is still supported via the
4118   command line programs.  (ticket#347)
4120 * Xapian::score_evenness(): Remove as it turns out not to be useful in practice.
4121   (ticket#435)
4123 * Xapian::ValueWeightPostingSource: A ValueWeightPostingSource with no entries
4124   would report -infinity as its upper bound, which could cause no results to be
4125   incorrectly returned for some queries involving such an object.
4127 * Xapian::WritableDatabase::close() fixed to commit() changes (unless a
4128   transaction is in progress).
4130 testsuite:
4132 * apitest: Improve test coverage in various places.
4134 matcher:
4136 * Uses of values during the match (sorting by value or Sorter, MatchSpy,
4137   MatchDecider, and collapsing) now use value stream iteration which is
4138   a lot more efficient for chert and brass (but may be slower for flint).
4140 brass backend:
4142 * New development backend.  Changes over chert:
4144   + Batched posting list changes during indexing use significantly less memory.
4146   + Instead of using complex code to iterate modified posting lists and
4147     documents length lists, brass can flush individual such lists to disk
4148     and then iterates them from there.
4150   + To iterate all terms, chert flushes all pending postlist changes.  In the
4151     case where a prefix is specified, brass only flushes postlist changes for
4152     terms starting with the specified prefix, and doesn't flush document length
4153     changes.
4155 chert backend:
4157 * Promote chert to being the stable backend.
4159 * Change the packing of integers and strings into sortable keys, which reduces
4160   database size by 2.5% in tests.  This means an incompatible change in the
4161   chert format.  You can use the new xapian-chert-update utility to update a
4162   chert database from the old format to the new format.  It works much like
4163   xapian-compact so should take a similar amount of time (and results in a
4164   compact database).
4166 * xapian-compact:
4168   + Prune unused docids off the end of each database when merging multiple
4169     databases with renumbering.
4171   + Extend --no-renumber to support merging databases, but only if they have
4172     disjoint ranges of used document ids.
4174   + Ensure that the resultant database has a fresh UUID (previously chert
4175     copied the UUID from the first input).
4177 * xapian-check:
4179   + Fix checking of the METAINFO key in chert.  For small databases, the
4180     statistics fit in few enough bytes that incorrect check appeared to
4181     succeed and no errors were reported, but for larger databases an
4182     error was incorrectly reported.
4184   + Rework the checking of postlist chunks to use a cleaner approach which
4185     should report errors better.
4187   + Use a type wider than 32 bits to keep count of items in a table.
4188     Previously xapian-check would report the number of entries modulo
4189     4294967296.
4191 * When iterating a value stream, skip_to() now only assigns the value to a
4192   std::string when it reaches its target.  This saves a lot of unnecessary
4193   string copying - in a real-world test it improved the time for 100 queries
4194   from 3.66s to 3.10s.
4196 * When skipping through a chunk of postings to find the one we want, don't
4197   bother to unpack the wdf values we're skipping over.  This should save a
4198   significant amount of time in certain cases where the profile data shows
4199   about a third of the time is spent in the function where this happens.
4201 * Report locking failure due to running out of file descriptors better.
4203 flint backend:
4205 * xapian-compact:
4207   + Prune unused docids off the end of each database when merging multiple
4208     databases with renumbering.
4210   + Ensure that the resultant database has a fresh UUID (previously flint
4211     didn't set a UUID so one would be generated on demand when next requested,
4212     but only if the database was writable).
4214 * Report locking failure due to running out of file descriptors better.
4216 remote backend:
4218 * Add support for WritableDatabase::set_metadata() and Database::get_metadata()
4219   to the remote backend (based largely on patch in #178).
4221 inmemory backend:
4223 * Read the document data and values lazily for the inmemory backend like we do
4224   for other backends.  They're much less costly to fetch than if a disk or
4225   network access is involved, but it avoids copying potentially large data
4226   which may not be needed.  Consistency here also makes things easier to
4227   understand for both users and developers.
4229 build system:
4231 * This release uses autoconf 2.65 rather than 2.64.
4233 documentation:
4235 * docs/replication.html: Add note about not using reopen() with databases being
4236   updated by the replication client.
4238 * docs/admin_notes.html: Update for chert and other recent changes.
4240 * Remove out-of-date reference in the API documentation comment to an
4241   add_slot() method.  This no longer exists - you need to use multiple
4242   ValueCountMatchSpy objects to monitor more than one slot.
4244 examples:
4246 * simpleexpand,simpleindex,simplesearch: Handle --help and --version.
4248 debug code:
4250 * The debug log now reports boolean values as "true" and "false" (instead of
4251   "1" and "0").
4253 Xapian-core 1.1.3 (2009-09-18):
4255 This release includes all changes from 1.0.15-1.0.17 which are relevant.
4257 API:
4259 * Update Unicode character database to Unicode 5.2.  (ticket#351)
4261 * Rename Xapian::Sorter to Xapian::KeyMaker, paving the way for using it to
4262   build collapse keys too.  Xapian::Sorter remains for compatibility (and is
4263   now a subclass of Xapian::KeyMaker) but is deprecated.
4265 * Resolve the inconsistency in MultiValueSorter::add()'s "forward" parameter
4266   versus the "reverse" parameters which the Enquire sorting functions now take
4267   by replacing the class with MultiKeyMaker with a renamed method add_value()
4268   with a "reverse" parameter.  MultiValueSorter remains with the old semantics
4269   for compatibility but is deprecated.  (ticket#359)
4271 * QueryParser: Don't apply spelling correction to wildcarded terms, or to terms
4272   at the end of the query which we expand under FLAG_PARTIAL.
4274 * Add new Error subclass SerialisationError which we throw for serialisation
4275   related errors (which previously mostly threw NetworkError.
4277 * Rename Xapian::SerialisationContext to Xapian::Registry.
4279 * Add DecreasingValueWeightPostingSource class, which reads weights from a
4280   value slot in which a significant range of the values are in decreasing
4281   order.  This functions similarly to ValueWeightPostingSource, but can be much
4282   more efficient.
4284 * Add new Xapian::MatchSpy class:
4286   + This replaces the use of Xapian::MatchDecider as a "matchspy", which is now
4287     deprecated.  The new class only inspects, and can't reject.  It can work
4288     with remote databases, with the results being serialised to return them
4289     across the link.
4291   + Add subclass ValueCountMatchSpy, which counts the occurrences of each value
4292     in a slot in the search results seen (useful for faceted or categorisation
4293     systems).  The results can be grouped into ranges using the NumericRange
4294     and NumericRanges classes, and the score_evenness() function.  This API is
4295     currently experimental.
4297 * Remove default implementation of Weight::clone() which returns NULL.  We
4298   always need clone() to be implemented because it's called for every term
4299   in the query, not just used for the remote backend.
4301 chert backend:
4303 * Rewrite the low level packing and unpacking functions more efficiently.  As
4304   well as being generally faster, the pack functions now take a reference to a
4305   string to append to, which avoids creating a lot of temporary string objects.
4306   Indexing HTML files with omindex is 5-10% faster.  Searching for "The" on
4307   gmane (which results in a lot of unpacking of postings and document lengths)
4308   is about 35% faster.  (ticket#326)
4310 * xapian-compact: Don't report an absent lazy input table as 0 size.
4312 * Fix ChertModifiedPostList to skip added-but-then-deleted-before-flush
4313   documents.  (ticket#392)
4315 * Fix WritableDatabase::get_doclength() to work properly after a call to commit
4316   for the chert backend (ticket#397).
4318 * Fix to work with the metainfo key stored in the latest format of chert
4319   databases.
4321 * Avoid doing pointless work by trying to delete non-existent lists of values
4322   when we're just adding documents.
4324 * Fix code to find the first docid in the next chunk (ticket#399).
4326 * Add support for chert databases without a termlist table (ticket#181).
4327   Currently the only way to create such a database is to create a chert
4328   database and do "rm termlist.*".
4330 flint backend:
4332 * xapian-compact: Don't report an absent lazy input table as 0 size.
4334 remote backend:
4336 * Remote protocol major version has changed to support serialising MatchSpy
4337   objects.
4339 * Fixed not to sometimes read off the end of the returned matches when
4340   searching multiple databases, some of which are remote, and when the primary
4341   ordering is by relevance.
4343 build system:
4345 * This release uses autoconf 2.64 rather than 2.63.  This means configure now
4346   makes use of shell functions, which makes it ~13% smaller, and should also
4347   make it execute faster.
4349 * configure: Send stderr output from ldconfig to config.log.
4351 * Add optional third parameter to XO_LIB_XAPIAN autoconf macro which specifies
4352   the basename for the "xapian-config" script (defaults to "xapian-config" to
4353   give the current behaviour).
4355 * This release uses doxygen 1.5.9 to generate the API documentation.
4357 documentation:
4359 * Minor improvements to the formatting of the collated API documentation.
4361 portability:
4363 * Fix code to compile with Sun's C++ compiler.
4365 * Fix our uuid_unparse_lower() replacement for older libuuid to actually
4366   compile (really fixes ticket#368).
4368 * Fix xapian-config to work with Solaris 10 /bin/sh.  (ticket#405)
4370 debug code:
4372 * Use C++ syntax for NULL with a type in log output.
4374 Xapian-core 1.1.2 (2009-07-23):
4376 This release includes all changes from 1.0.14 which are relevant.
4378 API:
4380 * Move support for a prefix/suffix from NumberValueRangeProcessor to
4381   StringValueRangeProcessor, and change NumberValueRangeProcessor and
4382   DateValueRangeProcessor to inherit from StringValueRangeProcessor so all
4383   three now support a prefix/suffix.  (ticket#220)
4385 * Query: Trim 4 bytes off the internals.  (ticket#280)
4387 * QueryParser: If default_op is OP_NEAR or OP_PHRASE then make the window size
4388   (9 + no_of_terms) to match the default for an explicit NEAR or PHRASE.
4389   (ticket#254)
4391 testsuite:
4393 * Sort out the clash between two different patches to fix leaking file
4394   descriptors when running tests with the remotetcp backend (broken by
4395   changes in 1.1.1).
4397 matcher:
4399 * If the highest weighted document doesn't match all the terms in the query,
4400   its percentage weight is now calculated by simply counting how many weighted
4401   leaf subqueries match it instead of scaling by the proportion of the weight
4402   which matches (which required accessing the termlist for that document).
4403   (ticket#363).
4405 * XOR with a SYNONYM subquery could previously achieve 100% - this has been
4406   fixed.
4408 flint backend:
4410 * Backport the lazy update changes from chert to flint:
4412   WritableDatabase::replace_document() now updates the database lazily in
4413   simple cases - for example, if you just change a document's values and
4414   replace it with the same docid, then the terms and document data aren't
4415   needlessly rewritten.  Caveats: currently we only check if you've looked at
4416   the values/terms/data, not if they've actually been modified, and only keep
4417   track of the last document read.
4419 build system:
4421 * Update to always use C++ forms for ISO C standard headers (ticket#330).
4423 * Fix several places where Xapian::doccount is used instead of
4424   Xapian::termcount, and similar issues.  It's still not possible to make
4425   these types different sizes, but we're now closer to this goal.
4426   (ticket#385).
4428 documentation:
4430 * Note that PostingSource and Weight objects returned by clone() and
4431   unserialise() methods will be deallocated with "delete".
4433 debug code:
4435 * Fix debug logging not to segfault on NULL Query::Internal pointers.
4437 Xapian-core 1.1.1 (2009-06-09):
4439 This release includes all changes from 1.0.13 which are relevant.
4441 API:
4443 * New Query::OP_SYNONYM operator, which matches the same documents as OP_OR,
4444   but attempts to weight as if the all the subqueries were a single term with
4445   their combined wdf, which should give better relevance weights.
4447 * QueryParser's synonym, wildcard, and partial query features now use
4448   the new OP_SYNONYM operator.
4450 * PostingSource: Add new set_maxweight() method to allow subclasses to tell
4451   the matcher that their maximum weight has decreased.  Make get_maxweight()
4452   a non-virtual method of the baseclass which returns the last set maxweight
4453   (which will require updates to most user subclasses. (ticket#340)
4455 * DatabaseReplica: Fix SEGV when calling get_description() on a default
4456   constructed DatabaseReplica.
4458 * Make Query::MatchAll and Query::MatchNothing const since they're immutable.
4459   All the public methods of Query are const, so this should be completely API
4460   compatible.
4462 * Methods returning an end iterator for a ValueIterator now actually return a
4463   proxy object which silently converts to ValueIterator if required.  This
4464   proxy object allows a comparison with an "_end()" method to be optimised
4465   better so that it just ends up comparing the internal member of the iterator
4466   class with NULL (previously a call to ValueIterator's destructor remained).
4467   This should be API compatible, but note that it is definitely now more
4468   efficient just to compare against the return value of the relevant _end()
4469   method than to store the end iterator explicitly.
4471 testsuite:
4473 * Testcase valuestats4 requires transactions, so indicate that and remove the
4474   explicit SKIP for inmemory.
4476 * Testcase changemaxweightsource1 uses ChangeMaxweightPostingSource, which
4477   doesn't work with multi or remote, so mark the test accordingly.
4479 * We've decided that "going back" with skip_to() or check() should have
4480   unspecified behaviour, so stop testing how this case behaves!
4482 matcher:
4484 * Subclass MultiPostList directly from PostList instead of from LeafPostList.
4485   This gets rid of two unused data members per MultiPostList in exchange for
4486   having to define 5 extra "never called" methods, but 4 of these just
4487   tailcall.
4489 * Store termfreqs and reltermfreqs for query terms in a single map rather than
4490   one map for each, which saves is more compact and likely to be faster.
4492 chert backend:
4494 * xapian-check: For chert, check value stats are the correct format and that
4495   the streamed values are consistent with their stats (ticket#277).
4497 * xapian-check: Chert doesn't store termlist entries for documents without
4498   terms, which resulted in us reporting an error when we found document ids in
4499   the doclength "postlist" which were greater than any with an entry in the
4500   termlist.  Instead compare these entries against db.get_last_docid() if we
4501   are checking a whole db and the db can be opened.  If not, suppress this
4502   check.
4504 remote backend:
4506 * When serialising stats, serialise the termfreq and reltermfreq together,
4507   rather than in separate lists.  This gives a smaller serialised form, and
4508   matches these both being stored in the same map now.  This is an incompatible
4509   remote protocol change, so bump the major version to 32.  (ticket#362)
4511 build system:
4513 * Some build failures with --disable-backend-XXX options have been fixed, but
4514   we haven't exhaustively tested all combinations.
4516 * Ship common/win32_uuid.cc and common/win32_uuid.h (ticket#367).
4518 documentation:
4520 * Update PostingSource documentation to describe how init() is called again if
4521   a PostingSource is reused.  Fixes #352.
4523 portability:
4525 * Fixed to build with GCC 4.4.
4527 * Drop support for GCC 2.95.3 and 3.0.x - we now require at least 3.1 as doing
4528   so eliminates some preprocessor conditionals which we aren't able to test
4529   regularly as we don't have easy access to such old GCC versions.  GCC 3.1 is
4530   nearly 7 years old now, and GCC3 didn't get widespread use until later
4531   versions anyway.  If you still need to use GCC < 3.1, Xapian 1.0.x should
4532   build with 2.95.3 or newer.
4534 * Older versions of libuuid don't have uuid_unparse_lower() so probe for it in
4535   configure, and if it isn't present provide an inline version in safeuuid.h
4536   (ticket#368).
4538 * Fixed to build with MSVC (ticket#379).
4540 * Add static_cast<char>() to str(bool) overload to suppress bogus MSVC warning
4541   (ticket#377).
4543 debug code:
4545 * common/debuglog.h: Add missing initialisation of uncaught_exception variable
4546   in a couple of places.
4548 Xapian-core 1.1.0 (2009-04-22):
4550 API:
4552 * All deprecated xapian-core features listed for removal in 1.1.0 have been
4553   removed.  See deprecation.html for details, and suggested updates.
4555 * The Unicode character categorisation functions have been updated from
4556   Unicode 5.0 to 5.1.
4558 * Add NON_SPACING_MARK to is_wordchar() for better tokenisation of languages
4559   which use such marks - for example, Arabic.  This is better than the stop-gap
4560   fix in 1.0 of treating NON_SPACING_MARK as a phrase-generator character
4561   when parsing queries, but it does mean that databases built from data
4562   containing such characters will need to be rebuilt.  (ticket#355)
4564 * The details of how to subclass Xapian::Weight to implement your own
4565   weighting scheme have changed incompatibly to allow user weighting schemes
4566   to have access to the same statistics as built-in schemes (ticket#213)
4567   If you have a existing subclass of Xapian::Weight you'll need to update it.
4569 * New Database methods get_doclength_upper_bound(), get_doclength_lower_bound()
4570   and get_wdf_upper_bound(), primarily intended for allowing weighting schemes
4571   to calculate tighter upper bounds on weights (which BM25Weight and TradWeight
4572   now do) which allows matcher weight-based optimisations to be more effective.
4573   Chert actually tracks doclength bounds and a global (rather than per term)
4574   upper bound on wdf; other backends return much less tight bounds, but these
4575   still lead to better upper bounds on weights.
4577 * Enquire::get_eset() now uses an unmodified of probabilistic formula, and
4578   doesn't return terms which would get a negative weight from it (since that
4579   means they are expected to be harmful not helpful).
4581 * Add Database::close() method, which will release system resources (in
4582   particular, close filehandles) held by a database.  This is particularly
4583   useful when wrapping the API for languages with garbage collection.
4585 * Change Database::positionlist_begin() not to throw exceptions if the term or
4586   document doesn't exist.
4588 * Xapian databases now have a UUID, readable with Database::get_uuid().
4590 * A new Database replication API has been added (currently experimental).
4592 * MSet::get_termfreq() will now fall back to looking up the term frequency in
4593   the database rather than raising an exception if a term wasn't present in
4594   the query.
4596 * Calling RSet:add_document() with argument 0 now throws InvalidArgumentError.
4598 * QueryParser sped up (new version of lemon); queryparsertest runs 2.2% faster.
4600 * Add ValueSetMatchDecider, which is a matchdecider which is intended to be
4601   passed a set of values to look for in documents, and selects documents based
4602   on the presence of those values.
4604 * Add new Xapian::PostingSource class to allow passing custom sources of
4605   postings and weights to the matcher.  Built-in PostingSource subclasses:
4606   FixedWeightPostingSource, ValueMapPostingSource, ValuePostingSource, and
4607   ValueWeightPostingSource.  (Currently experimental).
4609 * Database: Add get_value_freq(), get_value_lower_bound() and
4610   get_value_upper_bound() methods to get statistics about the values stored in
4611   a slot.  Add support for the value statistics methods to chert, inmemory,
4612   multi and remote databases.
4614 * Enquire::get_eset() now faster for large ESet size.
4616 * Xapian::Document objects now have a reduced memory footprint.
4618 * Enquire::set_collapse_key() now allows you to specify a maximum number of
4619   matches with each collapse key to keep (which defaults to 1, giving the
4620   previous behaviour).  Enquire can now report bounds and an estimate of what
4621   the total number of matches would have been if collapsing wasn't in use.
4623 * WritableDatabase::commit() is a new, preferred alias for
4624   WritableDatabase::flush().  (ticket#266)
4626 * Add methods for serialising documents and queries to strings, and
4627   unserialising back from strings.  (ticket#206)
4629 testsuite:
4631 * stemtest: No longer checks environment variables OM_STEMTEST_SKIP_RANDOM,
4632   OM_STEMTEST_LANGUAGES, and OM_STEMTEST_SEED.
4634 * perftest: New performance testsuite.  This is intended to contain intended to
4635   contain potentially time-consuming performance tests, which log output to
4636   an XML file for later analysis.  It's not run by "make check" - use "make
4637   check-perf" to run it.
4639 * apitest: Now runs tests over both flint and chert for multi, remotetcp, and
4640   remoteprog.
4642 * Wait for subprocesses to finish at end of tests with remotetcp backend, to
4643   avoid test failures when the same database is used for the next testcase.
4645 matcher:
4647 * Internally, pass around non-normalised document lengths as Xapian::termcount
4648   (unsigned integer) not Xapian::doclength (double).  This gives a 3% speedup
4649   for 10 term OR queries!
4651 chert backend:
4653 * New development backend.  Use Chert::open() to explicitly create a chert
4654   format database, or set XAPIAN_PREFER_CHERT=1 in the environment to
4655   prefer chert when creating a new database without an explicit type.
4657 * Quartz and Flint stored the document length alongside every posting list
4658   entry.  Chert instead stores a chunked list of all the document lengths
4659   which saves a lot of space, and is a big win for large queries or those
4660   which don't need the document lengths.  This structure is used to
4661   implement much faster iteration (six times faster in a test) over all
4662   document ids (which speeds up queries using unary NOT, e.g. `NOT apples'),
4663   and to test for the existence of documents (instead of checking the record
4664   table for an entry).
4666 * Document values are now stored in a chunked stream for each slot for
4667   efficient access to the same slot in lots of documents.  This makes
4668   operations like sort by value much more efficient.
4670 * WritableDatabase::replace_document() now updates the database lazily in
4671   simple cases - for example, if you just change a document's values and
4672   replace it with the same docid, then the terms and document data aren't
4673   needlessly rewritten.  Caveats: currently we only check if you've looked at
4674   the values/terms/data, not if they've actually been modified, and only keep
4675   track of the last document read.
4677 flint backend:
4679 * If we can't obtain a write lock while trying to create a new database
4680   we now report the lock failure with DatabaseLockError, not
4681   DatabaseOpeningError - it's more useful to know that the lock attempt failed
4682   in this situation.
4684 * Improve reporting of failures to obtain lock due to unexpected errors.
4686 * xapian-check: Don't stop checking a table after an error in certain cases -
4687   instead increment the error counter and try to continue checking from the
4688   next item.
4690 remote backend:
4692 * The remote database protocol major version has been increased, allowing
4693   a significant amount of compatibility code to be removed.  This change means
4694   that new clients won't work with old servers, and old clients won't work
4695   with new servers.  If upgrading a live system, you will need to take this
4696   into account.
4698 * The remote servers now always default to opening a Database and the client
4699   has to send a protocol message to explicitly request write access.  This
4700   allows a single server to support multiple readers and one writer
4701   simultaneously.  (ticket#145)
4703 * Database::get_document() no longer does an unnecessary copy of the document's
4704   values.
4706 * Change serialisation of queries to be more compact and easier to parse.
4708 stub databases:
4710 * Stub databases used to assume that any relative paths were relative to the
4711   current working directory.  They now assume that relative paths are
4712   relative to the directory holding the stub database file.
4714 * Stub database lines which begin with a '#' character are now ignored,
4715   allowing comments in stub database files.
4717 * New "stub directory" database type - this is a directory containing a stub
4718   database file named "XAPIANDB".
4720 * Don't just ignore lines with no spaces in a stub database file.
4722 * Bad lines in a stub file were being ignored after we'd seen a good entry.
4724 * Add new Auto::open_stub() overload which opens a stub database file
4725   containing a single entry as a WritableDatabase.
4727 * Add support for "inmemory" to stub database (which is useful now that stub
4728   databases can be opened for writing).
4730 * A stub database file is now allowed to contain no database entries, which
4731   results in an empty Database object (this avoids user code having to special
4732   case to handle "0 or more" databases).
4734 build system:
4736 * To allow installations of Xapian 1.0 and 1.1 to easily coexist, the library
4737   is now libxapian-1.1; xapian.m4 is now xapian-1.1.m4; headers are now
4738   installed in $prefix/include/xapian-1.1.  If you use XO_LIB_XAPIAN or
4739   xapian-config as we recommend, this should all be transparent.  Also
4740   programs and scripts have a default program suffix to -1.1 unless overridden
4741   using the --program-suffix argument to configure (if you really want no
4742   suffix, "./configure --program-suffix=" will achieve this).
4744 * On Linux and k*bsd-gnu, override libtool's link_all_deplibs_CXX to "no".
4746 * On Linux, override libtool's sys_lib_dlsearch_path_spec to a list generated
4747   in a more reliable way which includes all the default directories.
4749 * configure: --enable-debug and --enable-debug-verbose have been deprecated
4750   since 1.0.0, so remove specific errors pointing to the replacements.
4752 documentation:
4754 * Disable "JAVADOC_AUTOBRIEF" in doxygen configuration since we always try to
4755   write a brief description explicitly, and JAVADOC_AUTOBRIEF causes problems
4756   in some cases.
4758 * docs/deprecation.html: Describe what "experimental" features are, and why
4759   replication and posting sources are currently experimental.
4761 * docs/deprecation.html: Deprecate Stem_get_available_languages() from the
4762   python bindings.
4764 examples:
4766 * Use C++ forms of C headers in examples (ticket#330).
4768 packaging:
4770 * xapian-core.spec: We no longer need to run autoreconf to work around
4771   libtool's incomplete sys_lib_dlsearch_path_spec or to pick up distro-specific
4772   patches for link_all_deplibs.
4774 debug code:
4776 * Report get_description() rather than the pointer value for
4777   Xapian::Query::Internal* parameters to internal functions.
4779 * The debug logging framework has been overhauled.  See HACKING for details
4780   of how it now works.
4782 * Faster integer to string functions inside the library (this is a general
4783   improvement, but will particularly speed up debug logging as that converts a
4784   lot of integers to strings).
4786 Xapian-core 1.0.23 (2011-01-14):
4788 API:
4790 * QueryParser: Avoid a double free if Query construction throws an exception
4791   in a particular case.  Fixes ticket#515.
4793 * QueryParser: Handle NEAR/<offset> and ADJ/<offset> where offset isn't an
4794   integer the same way at the end of the query as in the middle.
4796 * Enquire::get_mset(): Avoid pointlessly trying to allocate lots of memory
4797   if the first document requested is larger than the size of the database.
4799 * Enquire::get_mset(): An empty query now returns an MSet with firstitem set
4800   correctly - previously firstitem was always 0 in this case.
4802 matcher:
4804 * The matcher wasn't recalculating the max possible weight after a subquery of
4805   XOR reached its end.  This caused an assertion failure in debug builds, and
4806   is a missed optimisation opportunity.
4808 tools:
4810 * xapian-compact: Fix access to empty priority_queue while merging synonyms.
4811   This could have caused problems, though we've had no reports of any (the
4812   bug was found with _GLIBCXX_DEBUG).
4814 Xapian-core 1.0.22 (2010-10-03):
4816 API:
4818 * Xapian::Document: Initialise docid to 0 when creating a document from
4819   scratch, as documented.
4821 * Xapian::QueryParser: Allow phrase generators between a probabilistic prefix
4822   and the term itself (e.g. path:/usr/local).
4824 matcher:
4826 * Back out the OP_OR efficiency improvement made in 1.0.21 since this change
4827   slows down some other common cases.  We'll address this fully in 1.2.4, but
4828   that fix is more invasive than we are comfortable with for 1.0.x at this
4829   point.
4831 build system:
4833 * xapian-config: Add --static option which makes other options report values
4834   for static linking.
4836 documentation:
4838 * deprecation.html: Add guidelines for supporting other software.
4840 * Document cases where QueryParser's FLAG_WILDCARD and FLAG_PARTIAL aren't
4841   currently supported.
4843 * Fix documentation for Xapian::timeout type - it holds a time interval in
4844   milliseconds not microseconds (the API docs for the methods which use it
4845   explicitly correctly document that the timeouts are in milliseconds).
4847 portability:
4849 * configure: Don't pass -mtune=generic unless GCC >= 4.2 is in use
4850   (ticket#492).
4852 * configure: Add support for --enable-sse=sse and --enable-sse=sse2 to allow
4853   control of which SSE instructions to use.
4855 * configure: Enable use of SSE maths on x86 by default with Sun's compiler.
4857 * configure: Beef up the test for whether -lm is required and add a special
4858   case to force it to be for Sun's C++ compiler - there's some interaction with
4859   libtool and/or shared objects which means that the previous configure test
4860   didn't think -lm is needed here when it is.
4862 * Fix test harness to build under Microsoft Windows (ticket#495).
4864 * Fix to build on OpenBSD 4.5 with GCC 3.3.5.
4866 * Need to avoid excess precision on m68k when targeting models 68010, 68020,
4867   68030 as well as 68000.
4869 packaging:
4871 * xapian-core.spec: Add cmake related files to RPM packaging.
4873 Xapian-core 1.0.21 (2010-06-18):
4875 API:
4877 * Xapian::Stem now recognises "nb" and "nn" as additional codes for the
4878   Norwegian stemmer.
4880 * Xapian::QueryParser now correctly parses a wildcarded term in between two
4881   other terms (ticket#484).
4883 testsuite:
4885 * Improve test coverage of OP_VALUE_RANGE and MSet::get_percent().
4887 matcher:
4889 * OP_OR could skip a matching document if it decayed to OP_AND or OP_AND_MAYBE
4890   during the match in some cases.  Fixes ticket#476.
4892 * OP_XOR with non-leaf subqueries could skip matching documents in some cases,
4893   and OP_XOR of three or more sub-queries could return incorrect weights.
4894   Fixes ticket#475.
4896 * OP_OR is now more efficient if a subquery is potentially expensive (e.g.
4897   ValueRangePostList, OP_NEAR, OP_PHRASE).  A 10-fold speed-up with
4898   ValueRangePostList has been observed.
4900 flint backend:
4902 * When iterating a table, if the table changes underneath we could end up
4903   returning the same entry twice.  (Debian#579951)
4905 * A cancelled transaction (or a failing operation implicitly cancelling
4906   pending changes) now marks the tables as unmodified, which fixes an exception
4907   trying to read block 0 if one of the tables is empty on disk.
4909 quartz backend:
4911 * When iterating a table, if the table changes underneath we could end up
4912   returning the same entry twice.  (Debian#579951)
4914 remote backend:
4916 * When daemonising, read the max fd to close with sysconf() instead of using
4917   a hardcoded value of 256, and work even if stdin and stdout have been closed.
4919 build system:
4921 * Install files to make Xapian easier to use with cmake.
4923 documentation:
4925 * Update the list of languages that the Xapian::Stem constructor recognises.
4927 * Assorted minor improvements to the collated API documentation.
4929 portability:
4931 * On x86 processors, Xapian now defaults to using SSE2 FP instructions.  This
4932   avoids issues with excess precision and it a bit faster too.  If you need
4933   to support processors without SSE2 (this means pre-Pentium4 for Intel) then
4934   configure with --disable-sse.  (ticket#387)
4936 * Fix warning when compiling for mingw with GCC 4.2.1.
4938 * Remove mutable from a couple of reference class members - mutable doesn't
4939   make sense for a reference and some compilers warn about it.
4941 Xapian-core 1.0.20 (2010-04-27):
4943 API:
4945 * MSet: Fix incorrect values reported by get_matches_estimated(),
4946   get_matches_lower_bound(), and get_matches_upper_bound() in certain cases
4947   when sorting and collapsing (ticket#464).
4949 documentation:
4951 * deprecation.html: Note how to disable deprecation warnings. (ticket#393)
4953 examples:
4955 * delve: Add -a option to list all terms in a database.
4957 * delve: -d and -V command line options now report out of range and invalid
4958   numbers.
4960 portability:
4962 * The getopt warning fix for Cygwin in 1.0.19 caused build failures on Mac OS X
4963   (and probably some other platforms with non-GNU getopt implementations), so
4964   replace with a fix which is only enabled for Cygwin. (ticket#469)
4966 Xapian-core 1.0.19 (2010-04-15):
4968 API:
4970 * QueryParser: Fix leak if Xapian::Database throws an exception during parsing
4971   (ticket#462).
4973 testsuite:
4975 * Explicitly flush after indexing for quartz and flint, so we see any
4976   exceptions from the flush (the implicit flush from the destructor swallows
4977   any exceptions).
4979 * apitest: Add databasemodified1 testcase to provide some test coverage for
4980   DatabaseModifiedError.
4982 flint backend:
4984 * When updating a document, rather than decoding the old positions, comparing
4985   with the new, and then encoding the new if different, we now just encode the
4986   new and then compare the encoded forms.  (ticket#428)
4988 * Avoid trying to delete the document positions when we know there aren't any.
4990 * Fix memory leak if Database::allterms_begin() throws an exception
4991   (ticket#462).
4993 * xapian-check: Report document id for document length mismatch.
4995 * Fix potential issues with iterators over a WritableDatabase which is modified
4996   during iteration.  No problems have actually been observed with flint, only
4997   in 1.1.4 with chert in cases which don't occur in flint, but it seems likely
4998   the issue can manifest for flint in other situations.  Fixes ticket#455.
5000 * Initialise zlib z_stream structure members zalloc, zfree, and opaque with
5001   Z_NULL rather than 0 cast to the appropriate type, as that's what the zlib
5002   documentation says to do.  Add missing initialisation of opaque for the
5003   inflate z_stream which the zlib docs say is needed (reading the zlib code,
5004   this isn't true for current versions, so this improves robustness rather
5005   than fixing an observable bug).
5007 * Don't memcpy() a block to itself - it's a waste of effort, and (probably)
5008   undefined behaviour (as a block overlaps itself).
5010 quartz backend:
5012 * Fix potential issues with iterators over a WritableDatabase which is modified
5013   during iteration.  No problems have actually been observed with quartz, only
5014   in 1.1.4 with chert in cases which don't occur in quartz, but it seems likely
5015   the issue can manifest for quartz in other situations.  Fixes ticket#455.
5017 * Don't memcpy() a block to itself - it's a waste of effort, and (probably)
5018   undefined behaviour (as a block overlaps itself).
5020 build system:
5022 * Force -fno-strict-aliasing for GCC 4.2 to avoid bad code being generated due
5023   to a bug in that compiler version.  Fixes ticket#449.  This issue hasn't been
5024   observed to affect Xapian 1.0.x, but it seems prudent to backport the fix.
5026 documentation:
5028 * INSTALL: Correct description of --enable-assertions.  It does NOT enable
5029   debugging symbols, and shouldn't control checks on bad data passed to API
5030   calls (if it does anywhere, that's a bug).  Note that Xapian will run more
5031   slowly with assertions on.
5033 * spelling.html:
5035   + Add section on indexing.
5037   + Add a note about removing automatically added spelling dictionary entries.
5039   + Move the "algorithm" section to the end, as it is really just background
5040     information for the curious.
5042 * include/xapian/queryparser.h: Document the possible exception messages from
5043   QueryParser::parse_query().
5045 * include/xapian/termgenerator.h: Note how TermGenerator handles stopwords.
5047 examples:
5049 * delve: Display the lastdocid value when displaying general database
5050   statistics.
5052 * simpleindex: Explicitly call flush() on the database, as that is good
5053   practice (since you see any exceptions).
5055 portability:
5057 * Fix compilation failure in testsuite on OpenBSD, introduced by new regression
5058   test in 1.0.18.  Fixes ticket#458.
5060 * Fix getopt-related warning on Cygwin.
5062 Xapian-core 1.0.18 (2009-02-14):
5064 API:
5066 * Document: Add new add_boolean_term() method, which is an alias for add_term()
5067   with wdfinc=0.
5069 * QueryParser:
5071   + Add support for quoting boolean terms so they can contain arbitrary
5072     characters (partly addresses ticket#128).
5074   + Add ENCLOSING_MARK and COMBINING_SPACING_MARK categories, plus several
5075     zero-width space characters, as phrase generators.  This mirrors a better
5076     fix in 1.1.4, but without losing compatibility with existing databases.
5078   + Fix handling of an explicit AND before a hated term (foo AND -bar).
5079     (ticket#447)
5081 * TermIterator: Only include trailing '+' or '#' on a term if it isn't followed
5082   by a word character (makes more sense and matches QueryParser's behaviour).
5083   (ticket#446)
5085 * Database: Fix many methods to behave better on a database with no
5086   subdatabases, such as is constructed by Database().  Fixes ticket#415.
5088 testsuite:
5090 * Add test coverage for xapian-compact, and improve coverage for
5091   WritableDatabase::replace_document().
5093 * apitest: Rename matchfunctor<n> to matchdecider<n> to match current
5094   terminology.
5096 flint backend:
5098 * When updating documents, don't update posting entries which haven't changed.
5099   Largely fixes ticket #250.
5101 * If the number of entries in the position table happened to be 4294967296 or
5102   an exact multiple, Xapian would ignore positional data for that table when
5103   running queries, and xapian-compact wouldn't copy its contents.
5105 * Iterating all the terms in the database with a prefix is now slightly more
5106   efficient.
5108 * Fix locking code to work if stdin and/or stdout have been closed.
5110 * If a document is replaced with itself unmodified, we no longer increase the
5111   automatic flush counter.
5113 * When iterating a posting list modified since the last flush(), the reported
5114   wdf is now correct (previously it was too high by its old value).
5116 * Replacing a document deleted since the last flush failed to update the
5117   collection frequency and wdf, and caused an assertion failure when assertions
5118   were enabled.
5120 * WritableDatabase::replace_document() didn't always remove old positional
5121   data (the only effect is that the position table was bloated by unwanted
5122   entries).
5124 * xapian-inspect:
5126   + New "until" command which shows entries until a specified key is reached.
5128   + New "open" command which allows easy switching between tables.
5130 * xapian-compact: Fix typos in --help output.
5132 quartz backend:
5134 * Replacing a document deleted since the last flush failed to update the
5135   collection frequency and wdf, and caused an assertion failure when assertions
5136   were enabled.
5138 * WritableDatabase::replace_document() didn't always remove old positional
5139   data (the only effect is that the position table was bloated by unwanted
5140   entries).
5142 remote backend:
5144 * Throw UnimplementedError if a MatchDecider is used with the remote backend.
5145   Previously Xapian returned incorrect results in this case.
5147 build system:
5149 * configure: With --enable-maintainer-mode, enable -Werror for GCC >= 4.1
5150   rather than >= 4.0 as Apple's GCC 4.0 gives bogus uninitialised variable
5151   warnings.
5153 documentation:
5155 * The API documentation now includes Xapian::Error and subclasses, and doesn't
5156   mention Xapian::Query::Internal.
5158 * Make clear in the Xapian::Document API documentation that this class is a
5159   lazy handle and discuss the issues this can cause.
5161 * INSTALL: Improve text about zlib dependency.
5163 * HACKING: Add details of our licensing policy for accepting patches.
5165 examples:
5167 * quest: If no database is specified, still parse the query and report
5168   Query::get_description() to provide an easy way to check how a query parses.
5170 portability:
5172 * Fix GCC 4.2 warning.
5174 xapian-core 1.0.17 (2009-11-18):
5176 API:
5178 * QueryParser:
5180   + Fix handling of a group of two or more terms which are all stopwords which
5181     notably caused issues when default_op was OP_AND, but could probably
5182     manifest in other cases too.  Fixes ticket#406.
5184   + Fix interaction of FLAG_PARTIAL and FLAG_SYNONYM.  (ticket#407)
5186 * Database: A database created via the default constructor no longer causes a
5187   segfault when the methods get_metadata() or metadata_keys_begin() are called.
5189 flint backend:
5191 * Don't try to close the fd one more than the maximum allowable when locking
5192   the database.  Harmless, except it causes a warning when running under
5193   valgrind.  (ticket#408)
5195 remote backend:
5197 * Xapian::Sorter isn't supported with the remote backend so throw
5198   UnimplementedError rather than giving incorrect results.  (ticket#384)
5200 * Fix potential reading off the end of the MSet which is returned internally
5201   by the remote server.
5203 documentation:
5205 * Various documentation comment improvements for the Database class.
5207 examples:
5209 * examples/quest.cc: Tighten up the type of the error we catch to detect an
5210   unknown stemming language.
5212 portability:
5214 * xapian-config: Need to quote ^ for Solaris /bin/sh.
5216 * configure: Actually use any flags we determine are needed to switch the
5217   compiler to proper ANSI C++ mode, when building xapian-core - this stopped
5218   working in 1.0.12, breaking support for HP's aCC, Compaq's cxx, Sun's CC, and
5219   SGI's CC.
5221 Xapian-core 1.0.16 (2009-09-10):
5223 flint backend:
5225 * Fix a typo which stopped this fix in 1.0.12 from working (ticket #398):
5227   If we fail to get the lock after we spawn the child lock process (the common
5228   case is because the database is already open for writing) then we now clean
5229   up the child process properly.
5231 documentation:
5233 * Improve API documentation of QueryParser::set_default_op() and
5234   QueryParser::get_default_op().
5236 portability:
5238 * Fix build failure on Mac OS X 10.6.
5240 Xapian-core 1.0.15 (2009-08-26):
5242 testsuite:
5244 * Fix the test harness not to report heaps of bogus errors when using valgrind
5245   3.5.0.
5247 flint backend:
5249 * Backport the lazy update changes from 1.1.2:
5251   WritableDatabase::replace_document() now updates the database lazily in
5252   simple cases - for example, if you just change a document's values and
5253   replace it with the same docid, then the terms and document data aren't
5254   needlessly rewritten.  Caveats: currently we only check if you've looked at
5255   the values/terms/data, not if they've actually been modified, and only keep
5256   track of the last document read.
5258 * Fix PostingIterator::skip_to() on an unflushed WritableDatabase to skip
5259   documents which were added and deleted since the last flush.  (ticket#392)
5261 documentation:
5263 * Overhaul the doxygen options we use and tweak various documentation comments
5264   to improve the generated API documentation.
5266 * Explicitly document that an empty prefix argument to
5267   QueryParser::add_prefix() means "no prefix".
5269 * Update the documentation comments for Enable::set_sort_by_value(),
5270   set_sort_by_value_then_relevance(), and set_sort_by_relevance_then_value() to
5271   mention sortable_serialise() as a good way to store numeric values for
5272   sorting.
5274 Xapian-core 1.0.14 (2009-07-21):
5276 API:
5278 * When using more than one ValueRangeProcessor, QueryParser didn't reset the
5279   begin and end strings to ignore any changes made by a ValueRangeProcessor
5280   which returned false, so further ValueRangeProcessors would see any changes
5281   it had made.  This is now fixed, and test coverage improved.
5283 testsuite:
5285 * The test harness code which launches xapian-tcpsrv child processes was
5286   failing to close a file descriptor for each one launched due to a bug in
5287   the code which is meant to track them.  This was causing apitest to fail
5288   on OpenBSD (ticket#382).  Also wait between testcases for any spawned
5289   xapian-tcpsrv processes to exit to avoid spurious failures when a database is
5290   reused by the next testcase.
5292 * tests/runtest.in: Use "ulimit -n" where available to limit the number of
5293   available file descriptors to 64 so we catch file descriptor leaks sooner.
5295 * When measuring CPU time used for scalability tests, we no longer try to
5296   include the CPU time used by child processes, as we can only get that for
5297   child processes which have exited and it's hard to ensure that they have
5298   with the current framework.  Although this means we only tests the
5299   client-side scaling for remote tests, the local backend tests cover most of
5300   the work done by the server part of the remote backend.
5302 * apitest: In testcase topercent2, don't expect max_attained or max_possible to
5303   be exact as rounding errors in different ways of calculating can cause small
5304   variations.  On trunk we already have similar code because the new weighting
5305   scheme stuff gives different bounds in the different cases.  This should fix
5306   testsuite failures seen on some of the Debian and Ubuntu buildds.
5308 * The test harness now always reports the full exception message (was
5309   conditional on --verbose), and output for different exception types and
5310   other causes of failure is now more consistent.
5312 * For scalability tests, the test harness now increases the number of
5313   repetitions until the first run takes more than 0.001 seconds, to avoid
5314   trying to base calculations on a length of time we probably can't reliably
5315   measure to start with.
5317 * Add test coverage for Stem::get_description() for each supported language.
5319 * queryparsertest: Reenable tests which require the inmemory backend to be
5320   enabled by fixing typo XAPIAN_HAS_BACKEND_INMEMORY ->
5321   XAPIAN_HAS_INMEMORY_BACKEND.
5323 flint backend:
5325 * Use F_FULLFSYNC where available (Mac OS X currently) to ensure that changes
5326   have been committed to disk.  (ticket#288)
5328 remote backend:
5330 * Fix handling of percentage weights in various cases when we're searching
5331   multiple remote databases or a mix of local and remote databases.
5333 build system:
5335 * configure: -Wshadow produces false positives with GCC 4.0, so only enable it
5336   for >= 4.1 since we enable -Werror for maintainer-mode builds for GCC >= 4.0.
5338 * configure: Check that we can find the valgrind/memcheck.h header as well as
5339   the valgrind binary.
5341 * Change how snowball generates the data used by its among operation - instead
5342   of using pointers to the strings in struct among, store an offset into a
5343   constant pool, as this reduces the number of relocations by about 2300, which
5344   should decrease the time taken by the dynamic linker when loading the
5345   library.  This also reduces the size of the shared library significantly
5346   (on x86-64 Linux, the stripped shared library is 4% smaller).
5348 Xapian-core 1.0.13 (2009-05-23):
5350 API:
5352 * Xapian::Document no longer ever stores empty values explicitly.  This
5353   wasn't intentional behaviour, and how this case was handled wasn't
5354   documented.  The amended behaviour is consistent with how user metadata
5355   is handled.  This change isn't observable using Document::get_value(),
5356   but can be noticed when iterating with Document::values_begin(), using
5357   Document::values_count(), or trying to delete the value with
5358   Document::remove_value().
5360 testsuite:
5362 * Fix testcase scaleweight4 not to fail on x86 when compiled with -O0.  The
5363   problem was in the testcase code, and was caused by excess precision in
5364   intermediate FP values.
5366 * Testcases which check that operations have the expected O(...) behaviour now
5367   check CPU time instead of wallclock time on most platforms, which should
5368   eliminate occasional failures due to load spikes from other processes.
5369   (ticket#308)
5371 * Fix test failures due to SKIP_TEST_FOR_BACKEND("inmemory") not skipping when
5372   it should due to comparing char * strings with == (on trunk the return value
5373   being tested is std::string rather than const char *).
5375 * Improve test coverage in several corner cases.
5377 * Fix testcase consistency2 to actually be run (fortunately it passes).
5379 * In the generated testcases, call get_description() on the default
5380   constructed object of each class to make sure that works (and doesn't try to
5381   dereference NULL, or fail some assertion, etc).  All currently checked
5382   classes are fine - this is to avoid future regressions or such problems with
5383   new classes.
5385 * In the test coverage build, use "--coverage" instead of "-fprofile-arcs
5386   -ftest-coverage".
5388 * The test harness now has the inmemory backend flagged as supporting
5389   user-specified metadata (apart from iteration over metadata keys).
5391 matcher:
5393 * If a query contains a MatchAll subquery, check for it before checking the
5394   other terms so that the loop which checks how many terms match can exit
5395   early if they all match.
5397 * When an OR or ANY_MAYBE decayed to an AND, we were carefully swapping the
5398   children for maximum efficiency, but the condition was reversed so we were
5399   in fact making things worse.  This was noticed because it was resulting in
5400   the same query running faster when more results were asked for!
5402 * Only build the termname to termfreq and weight map for the first subdatabase
5403   instead of rebuilding it for each one.  Also don't copy this map to return
5404   it.  This should speed up searches a little, especially those over multiple
5405   databases.
5407 * If a submatcher fails but ErrorHandler tells us to continue without it, we
5408   just use a NULL pointer to stand in rather than allocating a special dummy
5409   place-holder object.
5411 * Remove AndPostList, in favour of MultiAndPostList.  AndPostList was only used
5412   as a decay product (by AndMaybePostList and OrPostList), and doesn't appear
5413   to be any faster.  Removing it reduces CPU cache pressure, and is less code
5414   to maintain.
5416 * Call check() instead of skip_to() on the optional branch of AND_MAYBE.
5418 flint backend:
5420 * Fix a bug in TermIterator::skip_to() over metadata keys.
5422 remote backend:
5424 * Fix xapian-tcpsrv --interface option to work on MacOS X (ticket#373).
5426 * Fix typo which caused us to return the docid instead of the maximum weight
5427   a document from a remote match could return!  This could have led to wrong
5428   results when searching multiple databases with the remote backend, but
5429   probably usually didn't matter as with BM25 the weights are generally small
5430   (often all < 1) while docids are inevitably >= 1.
5432 inmemory backend:
5434 * The inmemory backend doesn't support iterating over metadata keys.  Trying
5435   to do so used to give an empty iteration, but has now been fixed to throw
5436   UnimplementedError (and this limitation has now been documented).
5438 build system:
5440 * Remove a lot of unused header inclusions and some unused code which should
5441   make the build faster and slightly smaller.
5443 * Fix to compile under --disable-backend-flint, --disable-backend-remote, and
5444   --disable-backend-inmemory.
5446 * Don't remove any built sources in "make clean" even under
5447   --make-maintainer-mode as that breaks switching a tree away from
5448   maintainer-mode with: make distclean;./configure
5450 * configure: Enable more GCC warnings - "-Woverloaded-virtual" for all
5451   versions, "-Wstrict-null-sentinel" for 4.0+, "-Wlogical-op
5452   -Wmissing-declarations" for 4.3+.  Notably "-Wmissing-declarations" caught
5453   that consistency2 wasn't being run.
5455 * Internally, fix the few places where we pass std::string by value to pass
5456   by const reference instead (except where we need a modifiable copy anyway) as
5457   benchmarking shows that const reference is slightly faster and generates
5458   less code with GCC's reference counted std::string implementation - with a
5459   non-reference counted implementation, const reference should be much faster.
5460   (ticket#140)
5462 documentation:
5464 * INSTALL: We no longer regularly test build with GCC 2.95.4 and we're raising
5465   the minimum GCC version required to 3.1 for Xapian 1.1.x.
5467 * Document what passing maxitems=0 to Enquire::get_mset() does.
5469 * docs/queryparser.html: Add examples of using a prefix on a phrase or
5470   subexpression.
5472 * Correct doxygen comments for user metadata functions:
5473   Database::get_metadata() can't throw UnimplementedError but
5474   WritableDatabase::set_metadata() can.
5476 * Document that Database::metadata_keys_begin() returns an end iterator if the
5477   backend doesn't support metadata.
5479 * HACKING: Update the list of Debian/Ubuntu packages needed for a development
5480   environment.
5482 debug code:
5484 * Fix build with --enable-debug.
5486 * Added some more assertions.
5488 Xapian-core 1.0.12 (2009-04-19):
5490 API:
5492 * WritableDatabase::remove_spelling() now works properly.
5494 * The QueryParser now treats NON_SPACING_MARK Unicode characters as phrase
5495   generators, which improves handling of Arabic.  This is a stop-gap solution
5496   for 1.0.x which will work with existing databases without requiring
5497   reindexing - in 1.1.0, NON_SPACING_MARK will be regarded as part of a word.
5498   (ticket#355)
5500 * Fix undefined behaviour in distribution of OP_NEAR and OP_PHRASE over a
5501   non-leaf subquery (indentified by valgrind on testcase nearsubqueries1).
5502   (ticket#349)
5504 * Enhance distribution of OP_NEAR/OP_PHRASE over non-leaf subqueries to work
5505   when there are multiple non-leaf subqueries (ticket#201).
5507 * Enquire::get_mset() no longer needlessly checks if the documents exist.
5509 * PostingIterator::get_description() output improved visually in some cases.
5511 testsuite:
5513 * Add make targets to assist generating a testsuite code coverage report with
5514   lcov.  See HACKING for details.
5516 * Improved test coverage in a number of places and removed some used code as
5517   shown by lcov's coverage report.
5519 flint backend:
5521 * xapian-compact:
5523   + Now handles databases which contains no documents but have user metadata
5524     (ticket#356).
5526   + Fix test for the total document length overflowing.
5528 * Release the database lock if the database is closed due to an unrecoverable
5529   error during modifications. (ticket#354)
5531 * If we fail to get the lock after we spawn the child lock process (the common
5532   case is because the database is already open for writing) then we now clean
5533   up the child process properly.
5535 build system:
5537 * Overriding CXXFLAGS at make-time (e.g. "make CXXFLAGS=-Os") no longer
5538   overrides any flags configure detected to be required to make the compiler
5539   accept ISO C++ (for GCC, no such flags are required, so this doesn't
5540   change anything).
5542 documentation:
5544 * Update documentation and code comments to reflect that 1.1 will be a
5545   development series, and 1.2 the next release series.
5547 * docs/admin_notes.html: Document the child process used for locking which
5548   exec-s "cat" (ticket #258).
5550 * include/xapian/unicode.h: Fix documentation comment typos.
5552 * include/xapian/matchspy.h: Removed currently unused header to stop doxygen
5553   from generating documentation for it.
5555 Xapian-core 1.0.11 (2009-03-15):
5557 API:
5559 * Enquire::get_mset():
5561   + Now throws UnimplementedError if there's a percentage cutoff and sorting is
5562     primarily by value - this has never been correctly supported and it's
5563     better to warn people than give incorrect results.
5565   + No longer needlessly copies the results internally.
5567   + When searching multiple databases, now recalculates the maximum attainable
5568     weight after each database which may allow it to terminate earlier.
5569     (ticket#336).
5571   + Fix inconsistent percentage scores when sorting primarily by value, except
5572     when a MatchDecider is also being used; document this remaining problem
5573     case.  (ticket#216)
5575 * Enquire::set_sort_by_value() (and similar methods): Rename the wrongly named
5576   "ascending" parameter to "reverse", and note that its value should always be
5577   explicitly given since defaulting to "reverse=true" is confusing and the
5578   default will be deprecated in 1.1.0.  (ticket#311)
5580 * Database::allterms_begin(): Fix memory leak when iterating all terms from
5581   more than one database.
5583 * Query::get_terms_begin(): Don't return "" from the TermIterator (happened
5584   when the query contained or was Query::MatchAll).
5586 * Add QueryParser::FLAG_DEFAULT to make it easier to add flags to those set by
5587   default.
5589 testsuite:
5591 * The testsuite now reports problems detected by valgrind with newer valgrind
5592   versions.  Drop support for running the testsuite under valgrind < 3.3.0
5593   (well over a year old) as this greatly simplifies the configure tests.
5595 * Fix usage message for options which take arguments in --help output from test
5596   programs - "-x=foo" doesn't work, the correct syntax is "-x foo".
5598 * If comparing MSet percentages fails, report the differing percentages if in
5599   verbose mode.
5601 * Add test that backends don't truncate total document length to 32 bits.
5603 * Disable lockfileumask1 (regression testcase added in 1.0.10) on Cygwin and on
5604   OS/2.
5606 flint backend:
5608 * The configure test for pread() and pwrite() got accidentally disabled in
5609   0.8.4 and we've always been using llseek() followed by read() or write()
5610   since then.  The configure test is now fixed, and gives a slight speedup
5611   (3% measured for searching).
5613 * The child process used to implement WritableDatabase locking now changes
5614   directory to / so that it doesn't block unmounting of any partitions and
5615   closes any open file descriptors which aren't relating to locking so that
5616   if those files are closed by our parent and deleted the disk space gets
5617   released right away.
5619 * We now reuse the same zlib zstream structures rather than using a fresh
5620   one for each operation.  This doesn't make a measurable difference in
5621   our own tests on Linux but reportedly is measurably faster on some
5622   systems.  (ticket #325)
5624 quartz backend:
5626 * The pread()/pwrite() fix also speeds up quartz.
5628 remote backend:
5630 * Avoid copying Query::Internal objects needlessly when unserialising Query
5631   objects.
5633 inmemory backend:
5635 * Store the (non-normalised) document lengths as Xapian::termcount (unsigned
5636   int) rather than Xapian::doclength (double) which saves 4 bytes per document.
5638 build system:
5640 * configure: The output of g++ --version changed format (again) with GCC 4.3
5641   which meant configure got "g++" for the version.  Instead use the (hopefully)
5642   more robust technique of using g++ -E to pull out __GNUC__ and
5643   __GNUC_MINOR__.
5645 documentation:
5647 * API documentation:
5649   + WritableDatabase::flush() can't throw DatabaseLockError.
5651   + WritableDatabase's constructor can throw at least DatabaseCorruptError or
5652     DatabaseLockError.
5654   + Document how to get all matches from Enquire::get_mset().
5656   + Other minor improvements.
5658 * docs/sorting.html: Clarify meaning.
5660 portability:
5662 * Fix "#line" directives in generated file queryparser/queryparser_internal.cc
5663   to give a relative path - previously they had a full path when generated by a
5664   VPATH build (as release tarballs are), and this confused GCC 2.95 and
5665   depcomp.
5667 * Fix for compiling with Sun's compiler (untested as we no longer have access
5668   to it).
5670 Xapian-core 1.0.10 (2008-12-23):
5672 API:
5674 * Composing an OP_NEAR query with two non-term subqueries now throws
5675   UnimplementedError instead of AssertionError (in a --enable-assertions build)
5676   or leading to unexpected results (otherwise).  This partly addresses bug#201.
5678 * Using a MultiValueSorter with no values set no longer causes a hang or
5679   segmentation fault (but it is still rather pointless!)
5681 matcher:
5683 * If we're using values for sorting and for another purpose, cache the
5684   Document::Internal object created to get the value for sorting, like we do
5685   between other uses.
5687 flint backend:
5689 * If the disk became full while flushing database changes to disk, the
5690   WritableDatabase object would throw a DatabaseError exception but be left in
5691   an inconsistent state such that further use could lead to the database on
5692   disk ending up in a "corrupt" state (theoretically fixable, but no tool
5693   to fix such a database exists).  Now we try to ensure that the object is
5694   left in a consistent state, but if doing so throws a further exception, we
5695   put the WritableDatabase object in a "closed" state such that further
5696   attempts to use it throw an exception.
5698 * Create the lockfile "flintlock" with permissions 0666 so that the umask is
5699   honoured just like we do for the other files (previously we used 0600).
5700   Previously it wasn't possible to lock a database for update if it was
5701   owned by another user, even if you otherwise had sufficient permissions via
5702   "group" or "other".
5704 * Fix garbled exception message when a base file can't be reread.
5706 quartz backend:
5708 * Fix garbled exception message when a base file can't be reread.
5710 remote backend:
5712 * xapian-tcpsrv and xapian-progsrv now accept -w as a short form of --writable,
5713   as was always intended.
5715 build system:
5717 * This release now uses newer versions of the autotools (autoconf 2.62 ->
5718   2.63; automake 1.10.1 -> 1.10.2).
5720 documentation:
5722 * INSTALL: Add new paragraphs about HP's aCC and IRIX (adapted from footnotes
5723   in PLATFORMS).
5725 * PLATFORMS: HP testdrive has been shut down, so all mark all those machines as
5726   "no longer available".  Update atreus' build report to 1.0.10.
5728 * docs/queryparser.html: Add link to valueranges.html.
5730 examples:
5732 * delve: Add missing "and" to --help output.  Report termfreq and collection
5733   freq for each term we're asked about.
5735 portability:
5737 * Fix to build with GCC 4.4 snapshot.
5739 Xapian-core 1.0.9 (2008-10-31):
5741 API:
5743 * Database::get_spelling_suggestion() is now faster (15% speed up for parsing
5744   queries with FLAG_SPELLING_CORRECTION set in a test on real world data).
5746 * Fix OP_ELITE_SET segmentation fault due to excess floating point precision
5747   on x86 Linux (and possibly other platforms).
5749 * Database::allterms_begin() over multiple databases now gives a TermIterator
5750   with operations O(log(n)) rather than potentially O(n) in the number of
5751   databases.
5753 * Add new Database methods metadata_keys_begin() and metadata_keys_end() to
5754   allow the complete list of metadata in a database to be retrieved (this
5755   API addition is needed so that copydatabase can copy database metadata).
5757 testsuite:
5759 * Remove the cached test databases before running the testsuite.
5761 * apitest: Fix cursordelbug1 to work on Microsoft Windows (bug#301).
5763 * apitest,queryparsertest: Skip tests which fail because the timer granularity
5764   is too coarse to measure how long the test took.  In practice, this is only
5765   an issue on Microsoft Windows (bug#300 and bug#308).
5767 matcher:
5769 * Adjust percent cutoff calculations in the matcher in a way which corresponds
5770   to the change to percentage calculations made in 1.0.7 to allow for excess
5771   precision.
5773 * Query::MatchAll no longer gives match results ranked by increasing document
5774   length.
5776 flint backend:
5778 * xapian-compact: Fix crash while compacting spelling table for a single
5779   database when built with MSVC, and probably other platforms, though Linux
5780   got lucky and happened to work (bug#305).
5782 build system:
5784 * configure: Disable -Wconversion for now - it's not useful for older GCC and
5785   is buggy in GCC 4.3.
5787 * configure: Set -Wstrict-overflow to 1 instead of 5, to avoid unreasonable
5788   warnings under GCC 4.3.
5790 documentation:
5792 * Minor improvements to API documentation, including documenting the
5793   XAPIAN_FLUSH_THRESHOLD environmental variable in WriteableDatabase::flush()
5794   (bug#306).
5796 * valueranges.html: Fix typos in example code, and drop superfluous empty
5797   destructor from ValueRangeProcessor subclass.
5799 * HACKING: Several improvements.
5801 examples:
5803 * copydatabase: Also copy user metadata.
5805 Xapian-core 1.0.8 (2008-09-04):
5807 API:
5809 * Fix output of RSet::get_description
5811 testsuite:
5813 * Report subtotals per backend, rather than per testgroup per backend to make
5814   the output easier to read.
5816 flint backend:
5818 * Fix WritableDatabase::add_document() and replace_document() not to be O(n*n)
5819   in the number of values in the new document.
5821 * Fix handling of a table created lazily after the database has had commits,
5822   and which is then cursored while still in sequential mode.
5824 * Fix failure to remove all the Btree entries in some cases when all the
5825   postings for a term are removed.  (bug#287)
5827 * xapian-inspect: Show the help message on start-up.  Correct the documented
5828   alias for next from ' ' to ''.  Avoid reading outside of input string when it
5829   is empty.  (bug#286)
5831 quartz backend:
5833 * Backport fix from flint for WritableDatabase::add_document() and
5834   replace_document() not to be O(n*n) in the number of values in the new
5835   document.
5837 build system:
5839 * configure: Report bug report URL in --help output.
5841 * xapian-config: Report bug report URL in --help output.
5843 * configure: Fix deprecation error for --enable-debug=full to say to instead
5844   use '--enable-assertions --enable-log' not '--enable-debug --enable-log'.
5846 documentation:
5848 * valueranges.html: Expand on some sections.
5850 examples:
5852 * quest: Fix to catch QueryParserError instead of const char * which
5853   QueryParser threw in Xapian < 1.0.0.
5855 * copydatabase: Use C++ forms of C headers.  Only treat '\' as a directory
5856   separator on platforms where it is.  Update counter every 13 counting up to
5857   the end so that the digits all "rotate" and the counter ends up on the exact
5858   total.
5860 portability:
5862 * Eliminate literal top-bit-set characters in testsuite source code.
5864 Xapian-core 1.0.7 (2008-07-15):
5866 API:
5868 * OP_VALUE_RANGE, OP_VALUE_GE, and OP_VALUE_LE:
5870   + If there were gaps in the document id numbering, these operators could
5871     return document ids which weren't present in the database.  This has been
5872     fixed.
5874   + These operators are now more efficient when there are a lot of "missing"
5875     document ids (bug#270).
5877   + Optimise Query(OP_VALUE_GE, <n>, "") to Query::MatchAll.
5879 * Xapian::QueryParser:
5881   + QueryParser now stops parsing immediately when it hits a syntax error.
5882     This doesn't change behaviour, but does mean failing to parse queries is
5883     now more efficient.
5885   + Cases of O(N*N) behaviour have been fixed.
5887 * Xapian::Stem now recognises "nl" as an alias for "dutch" (debian bug 484458).
5889 * Setting sort by value was being ignored by a Xapian::Enquire object which had
5890   previously had a Xapian::Sorter set (bug#256).
5892 testsuite:
5894 * Improved test coverage in a few places.
5896 matcher:
5898 * When using a MatchDecider, we weren't reducing matches_lower_bound unless
5899   all the potential results were retrieved, which led to the lower bound
5900   being too high in some such cases.
5902 * We now track how many documents were tested by a MatchDecider and how many
5903   of those it rejected, and set matches_estimated based on this rate.  Also,
5904   matches_upper_bound is reduced by the number of rejected documents.
5906 * Fixed matches_upper_bound in some cases when collapsing and using a
5907   MatchDecider.
5909 * Fixed matches_lower_bound when collapsing and using a percentage cutoff.
5911 * When using two or more of a MatchDecider, collapsing, or a percentage
5912   cutoff, we now only round the scaled estimate once, and we also round it to
5913   the nearest rather than always rounding down.  Hopefully this should
5914   improve the estimate a little in such cases.
5916 * Fix problem on x86 with the top match getting 99% rather than 100% (caused
5917   by excess precision in an intermediate value).
5919 flint backend:
5921 * If Database::reopen() is called and the database revision on disk hasn't
5922   changed, then do as little work as possible.  Even if it has changed, don't
5923   bother to recheck the version file (bug#261).
5925 * xapian-compact:
5927   + Fix check for user metadata key to not match other key types we may add in
5928     the future.  When compacting, we can't assume how we should handle them.
5930   + If the same user metadata key is present in more than one source database
5931     with different tag values, issue a warning and copy an arbitrary tag value.
5933   + Fix potential SEGV when compacting database(s) with user metadata but no
5934     postings.
5936   + In error message, refer to "iamflint" as the "version file", not the
5937     "meta file".
5939 * xapian-inspect:
5941   + Print top-bit-set characters as escaped hex forms as they often won't be
5942     valid UTF-8 sequences.
5944   + If we're passed a database directory rather than a single table, issue a
5945     special error message since this is an obvious mistake for users to make.
5947 * Fix cursor handling for a modified table which has previously only had
5948   sequential updates which usually manifested as zlib errors (bug#259).
5950 quartz backend:
5952 * Fix cursor handling for a modified table which has previously only had
5953   sequential updates which usually manifested as incorrect data being returned
5954   (bug#259).
5956 * Calling skip_to() as the first operation on an all-documents PostingIterator
5957   now works correctly.
5959 remote backend:
5961 * Improve performance of matches with multiple databases at least one of which
5962   is remote, and when the top hit is from a remote database (bug#279).
5964 * When remote protocol version doesn't match, the error message displayed
5965   now shows the minor version number supplied by the server correctly.
5967 * We now wait for the connection to close after sending MSG_SHUTDOWN for a
5968   WritableDatabase, which ensures that changes have been written to disk
5969   and the lock released before the WritableDatabase destructor returns
5970   (as is the case with a local database).
5972 * We no longer ever send MSG_SHUTDOWN for a read-only Database - just closing
5973   the connection is enough (and is protocol compatible).
5975 inmemory backend:
5977 * Fix bug which resulted in the values not being stored correctly when
5978   replacing an existing document, or if there are gaps in the document id
5979   numbering.
5981 build system:
5983 * This release now uses newer versions of the autotools (autoconf 2.61 ->
5984   2.62; automake 1.10 -> 1.10.1; libtool 1.5.24 -> 1.5.26).  The newer
5985   autoconf reportedly results in a faster configure script, and warns about
5986   use of unrecognised configure options.
5988 * Fix configure to recognise --enable-log=profile and fix build problems when
5989   this is enabled.
5991 * "make up" in the "tests" subdirectory now does "make" in the top-level.
5993 * Fix "make distcheck" by using dist-hook to install generated files from
5994   either srcdir or builddir, with the appropriate dependency to generate them
5995   automatically in maintainer mode builds.
5997 documentation:
5999 * intro_ir.html: Improve wording a bit.
6001 * The documentation now links to trac instead of bugzilla.  For links to the
6002   main website, we now prefer xapian.org to www.xapian.org.
6004 * Doxygen-generated API documentation:
6006   + Improved documentation in several places.
6008   + The helper macro XAPIAN_VISIBILITY_DEFAULT no longer appears in the output.
6010   + Header and directory relationship graphs are no longer generated as they
6011     aren't actually informative here.
6013 * HACKING: Numerous updates and improvements.
6015 examples:
6017 * quest: Output get_description() of the parsed query.
6019 portability:
6021 * Fix build with GCC 2.95.3.
6023 * Fix build with GCC 4.3.
6025 * Newer libtool features improved support for Mac OS X Leopard and added
6026   support for AIX 6.1.
6028 debug code:
6030 * Database::get_spelling_suggestion() now debug logs with category APICALL
6031   rather than SPELLING, for consistency with all other API methods.
6033 * Added APICALL logging to a few Database methods which didn't have it.
6035 * Remove debug log tracing from get_description() methods since logging for
6036   other methods calls get_description() methods on parameters, so logging these
6037   calls just makes for more confusing debug logs.  A get_description() method
6038   should have no side-effects so it's not very interesting even when explicitly
6039   called by the user.
6041 Xapian-core 1.0.6 (2008-03-17):
6043 API:
6045 * Add new query operators OP_VALUE_LE and OP_VALUE_GE which perform "single
6046   ended" range checks, and a corresponding new Query constructor.
6048 * Add Unicode::toupper() to complement Unicode::tolower().
6050 * Xapian::Stem has been further optimised - stemtest now runs ~2.5% faster.
6052 testsuite:
6054 * tests/runtest: Fixed to handle test programs with a ".exe" extension.
6056 * tests/queryparsertest: Add a couple more testcases which already work to
6057   improve test coverage.
6059 * tests/apitest: Add caseconvert1 testcase to test Unicode::tolower() and
6060   Unicode::toupper().
6062 flint backend:
6064 * xapian-check: Fix not to report an error for a database containing no
6065   postings but some user metadata.
6067 * Update the base files atomically to avoid problems with reading processes
6068   finding partially written ones.
6070 * Create lazy tables with the correct revision to avoid producing a database
6071   which we later report as "corrupt" (bug#232).
6073 * xapian-compact: Fix compaction for databases which contain user metadata
6074   keys.
6076 quartz backend:
6078 * Update the base files atomically to avoid problems with reading processes
6079   finding partially written ones.
6081 remote backend:
6083 * The addition of OP_VALUE_LE and OP_VALUE_GE required an update to the Query
6084   serialisation, which required a minor remote protocol version bump.
6086 * Fix to actually set the writing half as the connection as non-blocking when
6087   a timeout is specified.  This would have prevented timeouts from operating
6088   correctly in some situations.
6090 build system:
6092 * configure: GCC warning flag overhaul:  Stop passing "-Wno-multichar" since
6093   any multi-character character literal is bound to be a typo (I believe we
6094   were only passing it after misinterpreting its sense!)  Pass
6095   "-Wformat-security", and "-Wconversion" for all GCC versions.  Add
6096   "-Winit-self" and "-Wstrict-overflow=5" for GCC >= 4.2.  The latter might
6097   prove too aggressive, but seems reasonable so far.  Fix some minor niggles
6098   revealed by "-Wconversion" and "-Wstrict-overflow=5".
6100 * Add XAPIAN_NORETURN() annotations to functions and non-virtual methods which
6101   don't return.
6103 documentation:
6105 * docs/intro_ir.html: Briefly mention how pure boolean retrieval is supported.
6107 * docs/valueranges.html: Fix example of using multiple VRPs to come out as a
6108   "program listing".
6110 * include/xapian/queryparser.h: Fix incorrect example in doccomment.
6112 * docs/quickstart.html: Remove information covered by INSTALL since
6113   there's no good reason to repeat it and two copies just risks one
6114   getting out of date (as has happened here!)
6116 * docs/quickstart.html: Fix very out of date reference to MSet::items
6117   (bug#237).
6119 * PLATFORMS: Remove reports for 0.8.x as they're too old to be interesting.
6120   Separate out 0.9.x reports.  Add Solaris 9 and 10 success reports from James
6121   Aylett.  Update from Debian buildd logs.
6123 portability:
6125 * Now builds on OS/2, thanks to a patch by Yuri Dario.
6127 * Fix testsuite to build on mingw (broken by changes in 1.0.5).
6129 debug code:
6131 * Fix --enable-assertions build, broken by changes in 1.0.5.
6133 Xapian-core 1.0.5 (2007-12-21):
6135 API:
6137 * More sophisticated sorting of results is now possible by defining a
6138   functor subclassing Xapian::Sorter (bug#100).
6140 * Xapian::Enquire now provides a public copy constructor and assignment
6141   operator (bug#219).
6143 * Xapian::Document::values_begin() didn't ensure that values had been read
6144   when working on a Document read from a database.  However, values_end() did
6145   (and so did values_count()) so this wasn't generally a problem in practice.
6147 * Xapian::PostingIterator::skip_to() now works correctly when running over
6148   multiple databases.
6150 * Xapian::Database::postlist_begin() no longer adds a "MultiPostList" wrapper
6151   for the common case when there's only one subdatabase.
6153 * Xapian::TradWeight now avoids division by zero in the (rare) situation of the
6154   average document length being zero (which can only happen if all documents
6155   are empty or only have terms with wdf 0).
6157 * Calling Xapian::WritableDatabase methods when we don't have exactly one
6158   subdatabase now throws InvalidOperationError.
6160 testsuite:
6162 * apitest:
6164   + Testcases now describe the conditions they need to run, and are
6165     automatically collated by a Perl script.  This makes it significantly
6166     easier to add a new testcase.
6168   + The test harness's "BackendManager" has been overhauled to allow
6169     cleaner implementations of testcases which are currently hard to
6170     write cleanly, and to make it easier to add new backend settings.
6172   + Add a "multi" backend setting which runs suitable tests over two
6173     subdatabases combined.  There's a corresponding new make target
6174     "check-multi".
6176   + Add more feature tests of document values.
6178   + sortrel1 now runs for inmemory too.
6180   + Add simple feature test for TradWeight being used to run a query.
6182   + Fix spell3 to work on Microsoft Windows (bug#177).
6184   + API classes are now tested to check they have copy constructors and
6185     assignment operators, and also that most have a default constructor.
6187   + quartztest testcases adddoc2 and adddoc3 have been reworked as apitest
6188     testcases adddoc5 and adddoc6, which run for other backends.
6190   + stubdb1 now explicitly creates the database it needs - generally this
6191     bug didn't manifest because an earlier test has already created it.
6193 * queryparsertest: Add feature tests to check that ':' is being inserted
6194   between prefix and term when it should be.
6196 * Fix extracting of valgrind error messages in the test harness.
6198 * tests/valgrind.supp: Add more variants of the zlib suppressions.
6200 matcher:
6202 * Xapian::Enquire: When the "first" parameter to get_mset() is non-zero, avoid
6203   copying all the wanted items after performing the match.
6205 * Fix bug in handling a pure boolean match over more than one database under
6206   set_docid_order(ASCENDING) - we used to exit early which isn't correct.
6208 * When collapsing on a value, give a better lower bound on the number of
6209   matches by keeping track of the number of empty collapse values seen.
6211 * Xapian::BM25Weight: Fix bug when k2 is non-zero: a non-initialised value
6212   influenced the weight calculations.  By default k2 is zero, so this bug
6213   probably won't have affected most users.
6215 * The mechanism used to collate term statistics across multiple databases has
6216   been greatly simplified (bug#45).
6218 flint backend:
6220 * xapian-check:
6222   + Update to handle flint databases produced by Xapian 1.0.3 and later.
6224   + Fix not to go into an infinite loop if certain checks fail.
6226 quartz backend:
6228 * quartzcompact: Fix equality testing of C strings to use strcmp() rather than
6229   '=='!  In practice, using '==' often gives the desired effect due to pooling
6230   of constant strings, but this may have resulted in a bug on some platforms.
6232 remote backend:
6234 * If we're doing a match with only one database which is remote then just
6235   return the unserialised MSet from the remote match.  This requires an
6236   update to the MSet serialisation, which requires a minor remote protocol
6237   version bump.
6239 build system:
6241 * XO_LIB_XAPIAN now hooks LT_INIT as well as AC_PROG_LIBTOOL and
6242   AM_PROG_LIBTOOL.
6244 * Distribute preautoreconf, dir_contents, docs/dir_contents and
6245   tests/dir_contents.
6247 * Fix preautoreconf to correctly handle all the sources passed to doxygen to
6248   create the collated internal source documentation, and to work in a VPATH
6249   build.
6251 documentation:
6253 * sorting.html: New document on the topic of sorting match results.
6255 * HACKING,admin_notes.html,bm25.html,glossary.html,intro_ir.html,overview.html,
6256   quickstart.html,scalability.html,termgenerator,html,synonyms.html: Assorted
6257   minor improvements.
6259 * valueranges.html: State explicitly that Xapian::sortable_serialise() is used
6260   to encode values at index time, and give an example of how it is called.
6262 * API documentation:
6264  + Clarify get_wdf() versus get_termfreq().
6266  + We now use pngcrush to reduce the size of PNG files in the HTML version.
6268  + The HTML version no longer includes various intermediate files which doxygen
6269    generates.
6271  + Hide the v102 namespace from Doxygen as it isn't user visible.
6273  + Stop describing get_description() as an "Introspection method", as this
6274    doesn't help to explain what it does, and get_description() doesn't really
6275    fall under common formal definitions of "introspection".
6277 * index.html: Add a list of documents on particular topics and include links to
6278   previously unlinked-to documents.  Weed down the top navigation bar which had
6279   grown to unwieldy length.
6281 * PLATFORMS: Update for Debian buildds.
6283 * Improve documentation comment for Document::termlist_count().
6285 * admin_notes.html: Note that this document is up-to-date for 1.0.5.
6287 * INSTALL: zlib 1.2.0 apparently fixes a memory leak in deflateInit2(), which
6288   we use, so that's another reason to prefer 1.2.x.
6290 portability:
6292 * Add explicit includes of C headers needed to build with the latest snapshots
6293   of GCC 4.3.  Fix new warnings.
6295 * xapian-config: On platforms which we know don't need explicit dependencies,
6296   --ltlibs now gives the same output as --libs.
6298 * The minimum supported GCC version is now 2.95.3 (rather than 2.95) as 2.95.3
6299   added support for '#include <sstream>' which means we no longer need to
6300   maintain our own version.
6302 * Fix build with SGI's compiler on IRIX.
6304 * Fix or suppress some MSVC warnings.
6306 debug code:
6308 * Remove incorrect assertion in MultiAndPostList (bug#209).
6310 * Fix build when configured with "--enable-log --disable-assertions".
6312 Xapian-core 1.0.4 (2007-10-30):
6314 API:
6316 * Query:
6318   + Add OP_SCALE_WEIGHT operator (and a corresponding constructor which
6319     takes a single subquery and a parameter of type "double").  This
6320     multiplies the weights from the subquery by the parameter, allowing
6321     adjustment of the importance of parts of the query tree.
6323   + Deprecate the essentially useless constructor Query(Query::op, Query).
6325 * QueryParser:
6327   + A field prefix can now be set to expand to more than one term prefix.
6328     Similarly, multiple term prefixes can now be applied by default.  This is
6329     done by calling QueryParser::add_boolean_prefix() or
6330     QueryParser::add_prefix() more than once with the same field name but a
6331     different term prefix (previously subsequent calls with the same field name
6332     had no effect).
6334   + Trying to set the same field as probabilistic and boolean now throws
6335     InvalidOperationError.
6337   + Fix parsing of `term1 site:example.org term2', broken by changes in 1.0.2.
6339   + Drop special treatment for unmatched ')' at the start of the query, as it
6340     seems rather arbitrary and not particularly useful and was causing us to
6341     parse `(site:example.org) -term' incorrectly.
6343   + The QueryParser now generates pure boolean Query objects for strings such
6344     as `site:example.org' by applying OP_SCALE_WEIGHT with a factor of 0.0.
6346   + Fix handling of `"quoted phrase" +term' and `"quoted phrase" -term'.
6348   + Fix handling of `site:example.org -term'.
6350   + Fix problem with spelling correction of hyphenated terms (or other terms
6351     joined with phrase generators): the position of the start of the term
6352     wasn't being reset for the second term in the generated phrase, resulting
6353     in out of bounds errors when substituting the new value in the corrected
6354     query string.
6356   + The parser stack is now a std::vector<> rather than a fixed size, so it
6357     will typically use less memory, and can't hit the fixed limit.
6359   + Fix handling of STEM_ALL and update the documentation comment for
6360     QueryParser::set_stemming_strategy() to explain how it works clearly.
6362 * PostingIterator: positionlist_begin() and get_wdf() should now always
6363   throw InvalidOperationError where they aren't meaningful (before in some
6364   cases UnimplementedError was thrown).
6366 testsuite:
6368 * Add tests for new features.
6370 * Add another valgrind suppression for a slightly different error from zlib
6371   in Ubuntu gutsy.
6373 * Remove quartztest's test_postlist1 and test_postlist2, replacing the coverage
6374   lost by extending and adding tests which work with other backends as well.
6376 * If a test throws a subclass of std::exception, the test harness now
6377   reports the class name and the extra information returned by std::exception's
6378   what() method.
6380 matcher:
6382 * Several performance improvements have been made, mainly to the handling
6383   of OP_AND and related operations (OP_FILTER, OP_NEAR, and OP_PHRASE).
6384   In combination, these are likely to speed up searching significantly
6385   for most users - in tests on real world data we've seen savings of 15-55%
6386   in search times).  These improvements are:
6388   + OP_AND of 3 or more sub-queries is now processed more efficiently.
6390   + Sub-queries from adjacent OP_AND, OP_FILTER, OP_NEAR, and OP_PHRASE are now
6391     combined into a single multi-way OP_AND operation, and the filters which
6392     implement the near/phrase restrictions are hoisted above this so they need
6393     to check fewer documents (bug#23).
6395   + If an OP_OR or OP_AND_MAYBE decays to OP_AND, we now ensure that the less
6396     frequent sub-query is on the left, which OP_AND is optimised to expect.
6398 * When the Enquire::get_mset() parameter checkatleast is set, and we're sorting
6399   by relevance with forward ordering by docid, and the query is pure boolean,
6400   the matcher was deciding it was done before the checkatleast requirement was
6401   satisfied.  Then the adjustments made to the estimated and max statistics
6402   based on checkatleast meant the results claimed there were exactly msize
6403   results.  This bug has now been fixed.
6405 * Queries involving an OP_VALUE_RANGE filter now run around 3.5 times faster
6406   (bug#164).
6408 * The calculations behind MSet::get_matches_estimated() were always rounding
6409   down fractions, but now round to the nearest integer.  Due to cumulative
6410   rounding, this could mean that the estimate is now a few documents higher in
6411   some cases (and hopefully a better estimate).
6413 * Implement explicit swap() methods for internal classes MSetItem and ESetItem
6414   which should make the final sort of the MSet and ESet a little more
6415   efficient.
6417 flint backend:
6419 * Fixed a bug introduced in 1.0.3 - trying to open a flint database for reading
6420   no longer fails if it isn't writable.
6422 * We no longer use member function pointers in the Btree implementation which
6423   seems to speed up searching a little.
6425 remote backend:
6427 * The remote protocol minor version has been increased (to accommodate
6428   OP_SCALE_WEIGHT).  If you are upgrading a live system which uses the
6429   remote backend, upgrade the servers before the clients.
6431 build system:
6433 * Added macro machinery to allow branch prediction hints to be specified and
6434   used by compilers which support this (current GCC and Intel C++).
6436 * In a developer build, look for rst2html.py if rst2html isn't found as some
6437   Linux distros have it installed under with an extension.
6439 documentation:
6441 * In the API documentation, explicitly note that Database::get_metadata()
6442   returns an empty string when the backend doesn't support user-specified
6443   metadata, and that WritableDatabase::set_metadata() throws UnimplementedError
6444   in this case.  Also describe the current behaviour with multidatabases.
6446 * README: Remove the ancient history lesson - this material is better left to
6447   the history page on the website.
6449 * deprecation.html:
6451   + Deprecate the non-pythonic iterators in favour of the pythonic ones.
6453   + Move "Stem::stem_word(word)" in the bindings to the right section (it was
6454     done in 1.0.0, as already indicated).
6456   + Improve formatting.
6458 * When running rst2html, using "--verbose" was causing "info" messages to be
6459   included in the HTML output, so drop this option and really fix this issue
6460   (which was thought to have been fixed by changes in 1.0.3).
6462 * install.html: Reworked - this document now concentrates on giving
6463   a brief overview of building which should be suitable for most common cases,
6464   and defers to the INSTALL document in each tarball for more details.
6466 * PLATFORMS: Update from tinderbox and buildbot.
6468 * remote.html: xapian-tcpsrv has been able to handle concurrent read
6469   access since 0.3.1 (7 years ago) so update the very out-of-date information
6470   here.  Also, note that some newer features aren't supported by the remote
6471   backend yet.
6473 * HACKING: Note specifically that std::list::size() is O(n) for GCC.
6475 * intro_ir.html: Add link to the forthcoming book "Introduction to
6476   Information Retrieval", which can be read online.
6478 * scalability.html: Update size of gmane.
6480 * quartzdesign.html: Note that Quartz is now deprecated.
6482 debug code:
6484 * The debug assertion code has been rewritten from scratch to be cleaner and
6485   pull in fewer other headers.
6487 Xapian-core 1.0.3 (2007-09-28):
6489 API:
6491 * Add support for user specified metadata (bug#143).  Currently supported by
6492   the flint and inmemory backends.
6494 * Deprecate Enquire::register_match_decider() which has always been a no-op.
6496 * Improve the lower bound on the number of matching documents for an AND query
6497   - if the sum of the lower bounds for the two sides is greater than the
6498   number of documents in the database, then some of them must have both terms.
6500 * Spelling correction: Fix off-by-one error in loop bounds when initialising
6501   (bug#194).
6503 * If the check_at_least parameter to Enquire::get_mset() is used, but there
6504   aren't that many results, then MSet::get_matches_lower_bound() and
6505   MSet::get_matches_upper_bound() weren't always reported as equal - this
6506   bug is now fixed.
6508 * When sorting by value, and using the check_at_least parameter to
6509   Enquire::get_mset(), some potential matches weren't being counted.
6511 * Failing to create a flint or quartz database because we couldn't create the
6512   directory for it now throws DatabaseCreateError not DatabaseOpeningError.
6514 testsuite:
6516 * Fix display of valgrind output when a test fails because valgrind detected
6517   a problem.
6519 * Add another version of valgrind suppression for the zlib end condition check
6520   as this gives a different backtrace for zlib in Ubuntu gutsy.
6522 flint backend:
6524 * The Flint database format has been extended to support user metadata, and
6525   each termlist entry is now a byte shorter (before compression).  As a
6526   result, Xapian 1.0.2 and earlier won't be able to read Xapian 1.0.3
6527   databases.  However, Xapian 1.0.3 can read older databases.  If you open an
6528   older flint database for writing with Xapian 1.0.3, it will be upgraded
6529   such that it cannot then be read by Xapian 1.0.2 and earlier.
6531 * Zlib compression wasn't being used for the spelling or synonym tables (due
6532   to a typo - Z_DEFAULT_COMPRESSION where it should be Z_DEFAULT_STRATEGY).
6534 * xapian-check: Allow "db/record." and "db/record.DB" as arguments.
6536 * Fix "key too long" exception message by substituting FLINT_BTREE_MAX_KEY_LEN
6537   with its numeric value.
6539 * Assorted minor efficiency improvements.
6541 * If we reach the flush threshold during a transaction, we now write out the
6542   postlist changes, but don't actually commit them.
6544 * Check length of new terms is at most 245 bytes for flint in add_document()
6545   and replace_document() so that the API user gets an error there rather
6546   than when flush() is called (explicitly or implicitly).  Fixes bug#44.
6548 * Flint used to read the value of the environmental variable
6549   XAPIAN_FLUSH_THRESHOLD when the first WritableDatabase was opened and would
6550   then cache this value.  However the program using Xapian may have changed
6551   it, so we now reread it each time a WritableDatabase is opened.
6553 * Implement TermIterator::positionlist_count() for the flint backend.
6555 remote backend:
6557 * Fix the result of MSet::get_matches_lower_bound() when using the
6558   check_at_least parameter to get_mset().
6560 inmemory backend:
6562 * Implement TermIterator::positionlist_count() for the inmemory backend.
6564 build system:
6566 * xapian-config: We always need to include dependency_libs in the output of
6567   `xapian-config --libs` if shared libraries are disabled.
6569 * Distribution tarballs are now in the POSIX "ustar" format.  This supports
6570   pathnames longer than 99 characters (which we now have a few instances of
6571   in the doxygen generated documentation) and also results in a distribution
6572   tarball that is about half the size!  This format should be readable by any
6573   tar program in current use - if your tar program doesn't support it, we'd
6574   like to know (but note that the GNU tar tarball is smaller than the size
6575   reduction in the xapian-core tarball...)
6577 * configure no longer generates msvc/version.h - this is now entirely handled
6578   by the MSVC-specific makefiles.
6580 documentation:
6582 * Add a glossary.
6584 * docs/stemming.html: Reorder the initial paragraphs so we actually answer the
6585   question "What is a stemming algorithm?" up front.
6587 * When running rst2html, use "--exit-status=warning" rather than "--strict".
6588   The former actually gives a non-zero exit status for a warning or worse,
6589   while the former doesn't, but does include any "info" messages in the output
6590   HTML.
6592 * docs/deprecation.rst: Add "Database::positionlist_begin() throwing
6593   RangeError and DocNotFoundError".
6595 * valueranges.rst: Correct out-of-date reference to float_to_string.
6597 * HACKING: Document a few more "coding standards".
6599 * PLATFORMS: Updated.
6601 * docs/overview.html: Restore HTML header accidentally deleted in November
6602   2006.
6604 * Fix several typos.
6606 portability:
6608 * Add missing instances of "#include <string.h>" to fix compilation with recent
6609   GCC 4.3 snapshots.
6611 * Fix some warnings for various compilers and platforms.
6613 Xapian-core 1.0.2 (2007-07-05):
6615 API:
6617 * Xapian now offers spelling correction, based on a dynamically maintained
6618   list of spelling "target" words.  This is currently supported by the
6619   flint backend, and works when searching multiple databases.
6621 * Xapian now offers search-time synonym expansion, based on an externally
6622   provided synonym dictionary.  This is currently supported by the flint
6623   backend, and works when searching multiple databases.
6625 * TermGenerator: now offers support for generating spelling correction
6626   data.
6628 * QueryParser:
6630   + New flag FLAG_SPELLING_CORRECTION to enable spelling correction, and a new
6631     method, "get_corrected_query_string()" to get the spelling corrected
6632     query string.
6634   + New flags have been added to allow the new synonym expansion feature to be
6635     enabled and controlled.  Synonym expansion can either be automatic, or only
6636     for terms explicitly indicated in the query string by the new "~" operator.
6638   + The precedence of the boolean operators has been adjusted to match their
6639     usual precedence in mathematics and programming languages.  "NOT" now binds
6640     as tightly as "AND" (previously "AND NOT" would bind like "AND", but just
6641     "NOT" would bind like "OR"!)  Also "XOR" now binds more tightly than "OR",
6642     but less tightly than "AND" (previously it bound just like "OR").
6644   + '+' and '-' have been fixed to work on bracketed subexpressions as
6645     documented.
6647   + If the stemmer is "none", no longer put a Z prefix on terms; this now
6648     matches the output of TermGenerator.
6650 * Add new Xapian::sortable_serialise() and Xapian::sortable_unserialise()
6651   functions which serialise and unserialise numbers (currently only
6652   doubles) to a string representation which sorts in numeric order.  Small
6653   integers have a short representation.
6655 * NumberValueRangeProcessor has been changed to work usefully.  Previously
6656   the numbers had to be the same length; now numbers are serialised to
6657   strings such that a string sort on the string orders the numbers correctly.
6658   Negative and floating point numbers are also supported now.  The old
6659   NumberValueRangeProcessor is still present in the library to preserve
6660   ABI compatibility, but code linking against 1.0.2 or later will pick
6661   up the new implementation, which really lives in a sub-namespace.
6663 * Documents now have a get_docid() method, to get the document ID from the
6664   database they came from.
6666 * Add support for a new type of match decider, called a "matchspy".  Unlike
6667   the old deciders, this will reliably be tested on every candidate
6668   document, so can be used to tally statistics on them.
6670 * Fixed a segfault when getting a description for a MatchNothing query
6671   joined with AND_NOT (bug #176).
6673 * Header files have been tidied up to remove some unnecessary includes.
6674   Applications using "#include <xapian.h>" will not be affected.  We don't
6675   intend to support direct inclusion of individual header files from the xapian
6676   directory, but if you do that, you may have to update you code.
6678 testsuite:
6680 * Feature tests added for all new features.
6682 * Improved test coverage in queryparsertest.  Some tests in queryparsertest
6683   now use flint databases, so the test now ensures that the .flint
6684   subdirectory exists.
6686 * The test harness no longer creates <dbdir>/log for flint (flint doesn't
6687   create a log like quartz does).
6689 * apitest: "-bremote" must now be "-bremoteprog" (to better match
6690   "-bremotetcp"); "-bvoid" must now be "-bnone" (to better describe not
6691   using a database backend).
6693 * To complement "make check-flint", "make check-quartz", and "make
6694   check-remote", you can now run tests for the remotetcp backend with
6695   "make check-remotetcp", for the remoteprog backend with "make
6696   check-remoteprog", for the inmemory backend with "make check-inmemory", and
6697   tests not requiring a backend with "make check-none".
6699 * Several extra tests of the check_at_least parameter supplied to
6700   get_mset() were added.
6702 * Fix memory leak and fd leak in remotetcp handling, so apitest now passes
6703   under valgrind.
6705 * quartztest: no longer test QuartzPostList::get_collection_freq(), which
6706   has been removed.
6708 * Add regression test emptyquery2 for bug #176.
6710 * Add regression test matchall1 for bug with MatchAll queries.
6712 * Enhanced test coverage of match functor, to check that it returns all
6713   matching documents.
6715 matcher:
6717 * Fix bug when check_at_least was supplied - the matches after the
6718   requested MSet size were being returned to the user.  The parameter is
6719   also now handled in a more efficient way - no extra memory is required
6720   (previously, extra memory proportional to the value of check_at_least was
6721   required).
6723 * Fix bug which used incorrect statistics, and caused assertion failures,
6724   when performing a search using a MatchAll query.
6726 * Optimisation for single term queries: we don't need to look at the top
6727   document's termlist to determine that it matches all the query terms.
6729 flint backend:
6731 * The value and position tables are now only created if there is anything to
6732   add to them.  So if you never use document values, there's no value.DB,
6733   value.baseA, or value.baseB.  This means the table doesn't need to be opened
6734   for searching (saving a file handle and a number of syscalls) and when
6735   flushing changes, we don't need to update baseA/baseB just to keep the
6736   revisions in step.  The flint database version has been increased, but the
6737   new code will happily open and read/update flint databases from Xapian 1.0.0
6738   and 1.0.1.  Xapian 1.0.2 flint databases can't be read by Xapian 1.0.1 or
6739   earlier though.
6741 * Two new optional tables are now supported: "spelling", which is used to
6742   store information for spelling correction, and "synonym", which is used
6743   to store synonym information.
6745 * xapian-compact: Now compacts and merges spelling and synonym tables.
6746   Also has a new option "--no-renumber" to preserve document ids from
6747   source databases.
6749 * xapian-check: Now checks the spelling and synonym tables (only the Btree
6750   structure is currently checked, not the information inside).
6752 * Database::term_exists(), Database::get_termfreq(), and
6753   Database::get_collection_freq() are now slightly more efficient for flint
6754   databases.
6756 * New utility 'xapian-inspect' which allowing interactive inspection of key/tag
6757   pairs in a flint Btree.  Useful for development and debugging, and an
6758   approximate equivalent to quartzdump.
6760 * WritableDatabase::delete_document() no longer cancels pending changes if the
6761   document doesn't exist.
6763 * Fix handling of exceptions during commit - previously, this could result
6764   in tables getting out-of-sync, perhaps even resulting in a corrupt database.
6766 * Optimise iteration of all documents in the case where all the document
6767   IDs up to lastdocid are used; in this case, we no longer need to access disk
6768   to get the document IDs.
6770 quartz backend:
6772 * WritableDatabase::delete_document() no longer cancels pending changes if the
6773   document doesn't exist.
6775 * We no longer create a postlist just to find the termfreq or collection
6776   frequency.
6778 remote backend:
6780 * Calling WritableDatabase::delete_document() on a non-existent document now
6781   correctly propagates DocNotFoundError.
6783 * The minor remote protocol version has increased (to fix the previous issue).
6784   You should be able to cleanly upgrade a live system by upgrading servers
6785   first and then clients.
6787 * progclient: Reopen stderr on the child process to /dev/null rather than
6788   closing it.  This fixes apitest with the remoteprog backend to pass when run
6789   under valgrind (it failed in this case in 1.0.0 and 1.0.1).  It probably
6790   has no effect otherwise.
6792 * check_at_least is now passed to the remote server to reduce the work
6793   needed to produce the match, and the serialised size of the returned MSet.
6795 inmemory backend:
6797 * Bug fix: using replace_document() to add a document with a specific
6798   document id above the highest currently used would create empty documents
6799   for all document ids in between.
6801 build system:
6803 * Work around an apparent bug in automake which causes the entries in .libs
6804   subdirectories generated for targets of bin_PROGRAMS not to be removed on
6805   make clean.  This was causing make distcheck to fail.
6807 * Snapshots and releases are now bootstrapped with automake 1.10, and
6808   libtool 1.5.24.
6810 * HTML documentation generated from RST files is now installed.
6812 documentation:
6814 * The API documentation is now generated with Doxygen 1.5.2, which fixes the
6815   missing docs for Xapian::Query.
6817 * Ship and install internals.html.
6819 * Generating the doxygen-collated documentation of the library internals (with
6820   "make doxygen_source_docs") now only tries to generate an HTML version.  The
6821   PDF version kept exceeding TeX limits, and HTML is a more useful format for
6822   this anyway.
6824 * API docs for Xapian::QueryParser now make it clear that the default value for
6825   the stemming strategy is STEM_NONE.
6827 * API docs now describe the NumberValueRangeProcessor more clearly.
6829 * Several typo fixes and assorted wording improvements.
6831 * queryparser.html: Mention "AND NOT" as an alternative way to write "NOT",
6832   and document synonym expansion.
6834 * admin_notes.html: Updated for changes in this release, and corrected a
6835   few minor errors.
6837 * spelling.rst: New file, documenting the spelling correction feature.
6839 * synonyms.rst: New file, documenting the synonyms expansion feature.
6841 * valueranges.rst: The NumberValueRangeProcessor is now documented.
6843 * HACKING: Mention new libtool, and more details about preferring
6844   pre-increment.  Also add a note about 2 space indentation of protection
6845   level declarations in classes.
6847 * INSTALL: note that zlib must be installed before you can build.
6849 examples:
6851 * copydatabase: Now copies synonym and spelling data.  Also, fix a cosmetic
6852   bug with progress output when a specified database directory has a trailing
6853   slash.
6855 portability:
6857 * Fix to build on with OpenBSD's zlib (xapian-core 1.0.0 and 1.0.1 didn't).
6859 * Fixed to build with older zlib such as zlib 1.1.5 which Solaris apparently
6860   uses (xapian-core 1.0.0 and 1.0.1 didn't).  However, we recommend using zlib
6861   1.2.x as decompressing is apparently about 20% faster.
6863 * msvc/version.h.in: Generated version.h for MSVC build no longer has the
6864   remote backend marked as disabled.
6866 * Fix warnings from Intel's C++ compiler.
6868 * Fixes for compilation with gcc-2.95 and GCC 4.3 snapshots.
6870 packaging:
6872 * RPMs:
6874   + Rename xapian.spec to xapian-core.spec to match tarball name.
6876   + Append the user name to BuildRoot.
6878 debug code:
6880 * Better debug logging from the queryparser internals.
6882 Xapian-core 1.0.1 (2007-06-11):
6884 API:
6886 * Xapian::Error:
6888   + Make Error::error_string member std::string rather than char * to avoid
6889     problems with double free() with copied Error objects.  Unfortunately
6890     this mean an incompatible ABI change which we had hoped to avoid until
6891     1.1.0, but in this case there didn't seem to be a sane way to fix the
6892     problem without an ABI change.
6894   + Error::get_description() now converts my_errno to error_string if it hasn't
6895     been already rather than not including any error description in this case.
6897   + Add new method "get_description()" to get a string describing the error
6898     object.  This is used in various examples and scripts, improving their
6899     error reporting.
6901 * Xapian::Database: Add new form of allterms_begin() and allterms_end()
6902   which allow iterating of all terms with a particular prefix.  This
6903   is easier to use than checking the end condition yourself, and is
6904   more efficiently implemented for the remote backend (fixes bug#153).
6906 * Xapian::Enquire: Passing an uninitialised Database object to Enquire will
6907   now cause InvalidArgumentError to be thrown, rather than causing a segfault
6908   when you call Enquire::get_mset().  If you really want an empty database,
6909   you can use Xapian::InMemory::open() to create one.
6911 * Xapian::QueryParser: Multiple boolean prefixed terms with the same term
6912   prefix are now combined with OR before such groups are combined with AND
6913   (bug#157).  Multiple value ranges on the same value are handled similarly.
6915 * Xapian::Query OP_VALUE_RANGE: Avoid calling db->get_lastdocid() repeatedly
6916   as we know the answer won't change - this reduces the run time of a
6917   particular test case by 25%.
6919 testsuite:
6921 * Add test for serialisation of error strings.
6923 * Improved output in various situations:
6925   + Quote strings in TEST_STRINGS_EQUAL().
6927   + queryparsertest: Use TEST_STRINGS_EQUAL when comparing query descriptions
6928     against their expected output, since this makes it much easier to see the
6929     differences.
6931   + Report whole message for exceptions, rather than a truncated version, in
6932     verbose mode.
6934   + Make use of Xapian::Error::get_description(), giving better error
6935     reports.
6937 * queryparsertest: New test of custom ValueRangeProcessor subclass
6938   (qp_value_customrange1).
6940 * apitest: flintdatabaseformaterror1 and flintdatabaseformaterror2 now use a
6941   genuine Xapian 0.9.9 flint database for their tests, and more cases are
6942   tested.  The two tests have also been split into 3 now.
6944 * Fix test harness not to invoke undefined behaviour in cases where a paragraph
6945   of test data contains two or fewer characters.
6947 * Implement a better fix for the MSVC ifstream issue which was fixed in 1.0.0.
6948   This fixes an unintentional side-effect of the previous fix which meant that
6949   apitest's consistency1 wasn't working as intended (it now has a regression
6950   test to make sure it is testing what we intend).
6952 flint backend:
6954 * xapian-compact: Don't uncompress and recompress tags when compacting a
6955   database.  This speeds up xapian-compact rather a lot (by more than 50% in a
6956   quick test).
6958 * If the docid counter wraps, Flint now throws DatabaseError (fixes bug#152).
6960 * Remove the special case error message for pre-0.6 databases since they'll
6961   be quartz format (the check is only in flint because this code was taken from
6962   quartz).
6964 quartz backend:
6966 * If the docid counter wraps, Quartz now throws DatabaseError (fixes bug#152).
6968 remote backend:
6970 * The remote protocol now has a minor version number.  If the major
6971   version number is the same, a client can work with any server with
6972   the same or higher minor version number, which makes upgrading live
6973   systems easier for most remote protocol changes - just upgrade the servers
6974   first.
6976 * When a read-only remote database is closed, the client no longer sends a
6977   (totally bogus) MSG_FLUSH to the server, and the reply is also eliminated.
6978   This reduces the time taken to close a remote database a little (fixes
6979   bug#149).
6981 inmemory backend:
6983 * skip_to() on an allterms TermIterator from an InMemory Database can no longer
6984   move backwards.
6986 * An allterms TermIterator now initialises lazily, which can save some work if
6987   the first operation is a skip_to() (as it often will be).
6989 build system:
6991 * Fix VPATH compilation in maintainer mode with gcc-2.95.
6993 * Fix multiple target rule for generating the queryparser source files in
6994   parallel builds.
6996 * Distribute missing stub Makefiles for "bin", "examples", and
6997   "include/xapian".
6999 documentation:
7001 * Document the design flaw with NumberValueRangeProcessor and why it shouldn't
7002   be used.
7004 * ValueRangeProcessor and subclasses now have API documentation and an overview
7005   document.
7007 * Expand documentation of value range Query constructor.
7009 * Improved API documentation for the TermGenerator class.
7011 * docs/deprecation.rst:
7013   + Fix copy and paste error - set_sort_forward() should be changed to
7014     set_docid_order().
7016   + Improve entry for QueryParserError.
7018 * PLATFORMS: Updated from tinderbox.
7020 examples:
7022 * copydatabase: Rewritten to use the ability to iterate over all the documents
7023   in a database.  Should be much more efficient for databases with sparsely
7024   distributed document IDs.
7026 * simpleindex: Rewritten to use the TermGenerator class, which eliminates a
7027   lot of non-Xapian related code and is more typical of what a user is likely
7028   to want to do.
7030 * simplesearch,simpleexpand: Rewritten to use the QueryParser class, which
7031   is more typical of what a user is likely to want to do.
7033 portability:
7035 * xapian-config: Add special case check for host_os matching linux* or
7036   k*bsd-gnu since vanilla libtool doesn't correctly probe link_all_deplibs=no
7037   for them.
7039 packaging:
7041 * RPMs: Add "# norootforbuild" comment which SuSE's build scripts look for.
7042   Rename "Source0:" to "Source:" as there's only one tarball now.  Add gcc-c++
7043   and zlib-devel to "Build-Requires:".
7045 * The required automake version has been lowered to 1.8.3, so RPMs can now be
7046   built on RHEL 4 and SLES 9.
7048 Xapian-core 1.0.0 (2007-05-17):
7050 API:
7052 * Xapian::Database:
7054   + The Database(const std::string &) constructor has been marked as "explicit".
7055     Hopefully this won't affect real code, but it's possible.  Instead of
7056     passing a std::string where a Xapian::Database is expected, you'll now
7057     have to explicitly write `Xapian::Database(path)' instead of `path'.
7059   + Fixed problem when calling skip_to() on an allterms iterator over multiple
7060     databases which could cause a debug assertion in debug builds, and possible
7061     misbehaviour in normal builds.
7063 * Xapian::Error:
7065   + The constructors of Error subclasses which take a `const std::string &'
7066     parameter are now explicit.  This is very unlikely to affect any real code
7067     but if it does, just write `Xapian::Error(msg)' instead of `msg'.
7069   + Xapian::Error::get_type() now returns const char* rather than std::string.
7070     Generally existing code will just work (only one change was required in
7071     Xapian itself) - the simplest change is to write `std::string(e.get_type())'
7072     instead of `e.get_type()'.
7074   + Previously, the errno value was lost when an error was propagated from
7075     a remote server to the client, because errno values aren't portable
7076     between platforms.  To fix this, Error::get_errno() is now deprecated and
7077     you should use Error::get_error_string() instead, which returns a string
7078     expanded from the errno value (or other system error code).
7080 * Xapian::QueryParser:
7082   + Now assumes input text is encoded as UTF-8.
7084   + We've made several changes to term generation strategy.  Most notably:
7085     Unicode support has been added; '_' now counts as a word character; numbers
7086     and version numbers are now parsed as a single term; single apostrophes are
7087     now included in a term; we now store unstemmed forms of all terms; and we
7088     no longer try to "normalise" accents.
7090   + parse_query() now throws the new Xapian::Error subclass QueryParserError
7091     instead of throwing const char * (bug#101).
7093   + Pure NOT queries are now supported (for example, `NOT apples' will match
7094     all documents not indexed by the stemmed form of `apples').  You need
7095     to enable this feature by passing QueryParser::FLAG_PURE_NOT in flags
7096     to QueryParser::parse_query().
7098   + We now clear the stoplist when we parse a new query.
7100   + Queries such as `+foo* bar', where no terms in the database match the
7101     wildcard `foo*', now match no documents, even if `bar' exists.  Handling
7102     of `-foo*' has also been fixed.
7104   + Now supports wildcarding the last term of a query to provide better support
7105     for incremental searching.  Enabled by QueryParser::FLAG_PARTIAL.
7107   + The default prefix can now be specified to parse_query() to allow parsing
7108     of text entry boxes for particular fields.
7110   + QueryParser::set_stemming_options() has been deprecated since 0.9.0 and
7111     has now been removed.
7113 * Xapian::Stem:
7115   + Now assumes input text is encoded as UTF-8.
7117   + We've updated to the latest version of the Snowball stemmers.  This means
7118     that a small number of words produce different (and generally better)
7119     stems and that some new stemmers are supported: german2 (like german but
7120     normalises umlauts), hungarian, kraaij_pohlmann (a different Dutch
7121     stemmer), romanian, and turkish.
7123 * Xapian::TermGenerator:
7125   + New class which generates terms from a piece of text.
7127 * Xapian::Enquire:
7129   + The Enquire(const Database &) constructor has been marked as "explicit".
7130     This probably won't affect real code - certainly no Xapian API methods
7131     or functions take an Enquire object as a parameter - but calls to user
7132     methods or functions taking an Enquire object could be affected.  In
7133     such cases, you'll now have to explicitly write `Xapian::Enquire(db)'
7134     instead of `db'.
7136   + Enquire::get_eset() now produces better results when used with multiple
7137     databases - without USE_EXACT_TERMFREQ they should be much more similar to
7138     results from an equivalent single database; with USE_EXACT_TERMFREQ they
7139     should be identical.
7141   + Track the minimum weight required to be considered for the MSet separately
7142     from the minimum item which could be considered.  Trying to combine the two
7143     caused several subtle bugs (bug#86).
7145   + Enquire::get_query() is now `const'.  Should have no effect on user code.
7147   + Enquire::get_mset() now handles the common case of an "exact" phrase search
7148     (where the window size is equal to the number of terms) specially.
7150   + Enquire::include_query_terms and Enquire::use_exact_termfreq are now
7151     deprecated in favour of capitalised versions Enquire::INCLUDE_QUERY_TERMS
7152     and Enquire::USE_EXACT_TERMFREQ (for consistency with our other manifest
7153     constants, and general C/C++ conventions).
7155 * Xapian::RSet:
7157   + RSet::contains(MSetIterator) is now `const'.  Should have no effect on user
7158     code.
7160 * Xapian::SimpleStopper::add() now takes `const std::string &' not `const
7161   std::string'.  Should have no effect on user code.
7163 * Xapian::Query:
7165   + We now only perform internal validation on a Query object when it's either
7166     constructed or changed, to avoid O(n^2) behaviour in some cases.
7168   + Xapian::Query::MatchAll (an alias for Query("")) matches all terms in the
7169     document (useful for "pure NOT" queries) and Xapian::Query:MatchNothing
7170     is now a more memorable alias for Query().
7172 * Instead of explicitly checking that a term exists before opening its
7173   postlist, we now do both in one operation, which is more efficient.
7175 * MatchDecider::operator() now returns `bool' not `int'.
7177 * ExpandDecider::operator() now returns `bool' not `int'.
7179 * Xapian::TermIterator::get_termfreq() now throws InvalidOperationError
7180   if called on a TermIterator from a freshly created Document (since
7181   there's no meaningful term frequency as there's no Database for
7182   context).
7184 * <xapian/output.h> is no longer available as an externally visible header.
7185   It's not been included by <xapian.h> since 0.7.0.  Instead of using
7186   `cout << obj;' use `cout << obj.get_description();'.
7188 * New constant Xapian::BAD_VALUENO which is -1 cast to Xapian::valueno.
7190 * New Xapian::ValueRangeProcessor hierarchy: DateValueRangeProcessor,
7191   NumberValueRangeProcessor, and StringValueRangeProcessor.  In
7192   conjunction with the new QueryParser::add_valuerangeprocessor()
7193   method and the new Query::OP_VALUE_RANGE op these allow you to
7194   implement ranges in the query parser, such as `$50..100',
7195   `10..20kg', `01/02/2007..03/04/2007'.
7197 testsuite:
7199 * Many new and improved testcases in various areas.
7201 * If a test throws an unknown exception, say so in the test failure message.
7202   If it throws std::string, report the first 40 characters (or first line if
7203   less than 40 characters) of the string even in non-verbose mode.
7205 * Use of valgrind improved:
7207   + The test harness now only hooks into valgrind if environment variable
7208     XAPIAN_TESTSUITE_VALGRIND is set, which makes it easy to run test programs
7209     under valgrind in the normal way.  The runtest script sets this
7210     automatically.
7212   + runtest now passes "--leak-resolution=high" to valgrind to prevent
7213     unrelated leak reports related to STL classes from being combined.
7215   + configure tests for valgrind improved and streamlined.
7217   + New runsrv script to run xapian-tcpsrv and xapian-progsrv.  We need to
7218     run these under valgrind to avoid issues with excess numerical precision
7219     in valgrind's FP handling, but we can use "--tool=none" which is a lot
7220     faster than running them under valgrind's default memcheck tool.
7222 * The test harness now starts xapian-tcpsrv in a more reliable way - it will
7223   try sequentially higher port numbers, rather than failing because a
7224   xapian-tcpsrv (or something else) is already using the default port.
7225   It also no longer leaks file descriptors (which was causing later tests
7226   to fail on some platforms), and if xapian-tcpsrv fails to start, the error
7227   message is now reported.
7229 * remotetest has been removed and its testcases have either been added to
7230   apitest or just removed if redundant with tests already in apitest.
7232 * termgentest is a new test program which tests the Xapian::TermGenerator
7233   class.
7235 * TEST_EQUAL_DOUBLE() now uses a slightly less stringent threshold -
7236   DBL_EPSILON is too strict for calculations which include multiple
7237   steps.  Also, we now use it instead of doubles_are_equal_enough() and
7238   weights_are_equal_enough() which try to perform the same job.
7240 * New macro TEST_STRINGS_EQUAL() which displays the strings on separate lines
7241   so the differences can be clearly seen.
7243 * Test programs are now linked with '-no-install' which means that libtool
7244   doesn't need to generate shell script wrappers for them on most platforms.
7246 * runtest: Now turns on MALLOC_CHECK_ and MALLOC_PERTURB_ for glibc if
7247   valgrind isn't being used.
7249 * Better support for Microsoft Windows:
7251   + test_emptyterm2 no longer tries to delete a database from disk while a
7252     WritableDatabase object still exists for it, since this isn't supported
7253     under Microsoft Windows.
7255   + Fallback handling when srcdir isn't specified how takes into account .exe
7256     extensions and different path separators.
7258 flint backend:
7260 * Flint is now the default backend.
7262 * xapian-check: New program which performs consistency checks on a flint
7263   database or table.
7265 * xapian-compact: Now prunes unused docids off the start of each source
7266   database's range of docids.
7268 * Positional information is now encoded using a highly optimised fls()
7269   implementation, which is much faster than the FP code 0.9.x used.
7270   Unfortunately the old encoding could occasionally add extra bits
7271   on some architectures, which was harmless except the databases
7272   wouldn't be portable.  Because of this, the flint format has had to
7273   be changed incompatibly.
7275 * The lock file is now called "flintlock" rather than "flicklock" (which
7276   was a typo!)
7278 * Flint now releases its lock correctly if there's an error in
7279   WritableDatabase's constructor.  Previously the lock would remain until
7280   the process exited.
7282 * Flint now throws new Xapian::Error subclass DatabaseVersionError instead of
7283   DatabaseOpeningError when it fails to open a database because it has an
7284   unsupported version.  DatabaseVersionError is a subclass of
7285   DatabaseOpeningError so existing code should continue to work, but it's
7286   now much easier to determine if the problem is that a database needs
7287   rebuilding.
7289 * If you try to open a flint database with an older or newer version than
7290   flint understands, the exception message now gives the version understood,
7291   rather than "I only understand FLINT_VERSION" (literally).
7293 * If we fail to obtain the lock, report why in the exception message.
7295 * Flint now compresses tags in the record and termlist tables using zlib.
7297 * More robust code to handle the flint locking child process, in case of
7298   unexpected errors.
7300 * If a document was replaced more than once between flushes, the document
7301   length wouldn't be updated after the first change.
7303 quartz backend:
7305 * Quartz is still supported, but use in new projects is deprecated (use Flint
7306   instead).  Quartz will be removed eventually.
7308 * quartzcheck: Test if this is a quartz database by looking at "meta" not
7309   "record_DB".  If "record_DB" is >= 2GB and we don't have a LFS aware stat
7310   function then stat can fail even though the file is there.  Also open the
7311   database explicitly as a Quartz database for extra robustness.
7313 * If a document was replaced more than once between flushes, the document
7314   length wouldn't be updated after the first change.
7316 remote backend:
7318 * The remote backend is now supported under Microsoft Windows.
7320 * Open a fresh copy of the database(s) on each connection to a xapian-tcpsrv
7321   rather than relying on being able to share a database across fork() or
7322   between threads (which we don't promise will work).
7324 * xapian-tcpsrv: New "--interface" option allows the hostname or address of the
7325   interface to listen on to be specified (the default is the previous behaviour
7326   of listening on all interfaces).
7328 * If name lookup fails, report the h_errno code from gethostbyname() rather
7329   than whatever value errno happens to currently have!
7331 * Fix bugs in query unserialisation.
7333 * The remote backend now supports all operations (get_lastdocid(), and
7334   postlist_begin() have now been implemented).
7336 * Currently a read-only server can be opened as a WritableDatabase (which is
7337   a minor bug we plan to fix).  In this case, operations which write will fail
7338   and the exception is now InvalidOperationError not NetworkError.
7340 * If a remote server catches NetworkTimeoutError then it will now only
7341   propagate it if we can send it right away (since the connection is
7342   probably unhappy).  After that (and for any other NetworkError) we now
7343   just rethrow it locally to close the connection and let it be logged if
7344   required.
7346 * The timeout parameter to RemoteDatabase wasn't being used, instead the
7347   client would wait indefinitely for the server to respond.
7349 * A timeout of zero to the remote backend now means "never timeout".  This
7350   is now the default idle timeout for WritableDatabase (the connection
7351   timeout default is now 10 seconds, rather than defaulting to the idle
7352   timeout).
7354 * Fix handling of the document length in remote termlists.
7356 * The remote backend now checks when decoding serialised string that the
7357   length isn't more than the amount of data available (bug#117).
7359 * The remote backend now handles the unique term variants of delete_document
7360   and replace_document on the server side.
7362 * The RSet serialisation now encodes deltas between docids (rather than the
7363   docids themselves) which greatly reduces the size of the encoding of a
7364   sparse RSet for a large database.
7366 * We now encode deltas between term positions when sending data after calling
7367   positionlist_begin() on a remote database.
7369 * When using a MatchDecider with remote database(s), don't rerun the
7370   MatchDecider on documents which a remote server has already checked.
7372 * Apply the "decreasing weights with remote database" optimisation which we use
7373   in the sort_by_relevance case in the sort_by_relevance_then_value case too.
7375 * We now throw NetworkError rather than InternalError for invalid data received
7376   over the remote protocol.
7378 * We now close stderr of the spawned backend program when using the "prog" form
7379   of the remote backend.  Previously stderr output would go to the client
7380   application's stderr.
7382 muscat36 backend:
7384 * Support for the old Muscat 3.6 backends has been completely removed.  It's
7385   still possible to convert Muscat 3.6 databases to Xapian databases by
7386   building 0.9.10 and using copydatabase to create a quartz database, which can
7387   then be read by 1.0.0 (and converted to a flint database using copydatabase
7388   again).
7390 build system:
7392 * We've added GCC visibility annotations to the library, which when using GCC
7393   version 4.0 or later reduce the size and load time of the library and
7394   increase the runtime speed a little.  Under x86_64, the stripped library is
7395   6.4% smaller (1.5% smaller with debug information).
7397 * configure: If using GCC, use -Bsymbolic-functions if it is supported
7398   (it requires a very recent version of ld currently).  This option reduces the
7399   size and load time of the shared library by resolving references within the
7400   library when it's created.
7402 * We automatically define _FORTIFY_SOURCE in config.h if GCC is in use
7403   and it's not already set (you can override this as documented in INSTALL).
7404   This adds some checking (mostly at compile time) that important return
7405   values aren't ignored and that array bounds aren't exceeded.
7407 * `./configure --enable-quiet' already allows you to specify at configure time
7408   to pass `--quiet' to libtool.  Now you can override this at make-time by
7409   using `make QUIET=' (to turn off `--quiet') or `make QUIET=y' (to turn on
7410   `--quiet').
7412 * In non-maintainer mode, we don't need the tools required to rebuild some of
7413   the documentation, so speed up configure by not even probing for them in
7414   this common case.
7416 * The makefiles now use non-recursive make in all directories except "docs" and
7417   "tests".  For users, this means that the build is faster and requires less
7418   disk space (bug#97).
7420 * configure: Add proper detection for SGI's C++ (check stderr output of
7421   "CC -v") and automatically pass -ptused in CXXFLAGS for xapian-core and any
7422   applications using xapian-config --cxxflags since it seems to be required to
7423   avoid template linking errors.
7425 * XO_LIB_XAPIAN now checks for the case where XAPIAN_CONFIG wasn't specified
7426   and xapian-config wasn't found, but the library appears to be installed -
7427   this almost certainly means that the user has installed xapian-core from
7428   a package, but hasn't installed the -dev or -devel package, so include
7429   that advice in the error message.
7431 * `./configure --with-stlport-compiler' now requires a compiler name as an
7432   argument.
7434 * configure: Disable probes for f77, gcj, and rc completely by preventing
7435   the probe code from even appearing in configure - this reduces the size of
7436   configure by 209KB (~25%) and should speed it up significantly.
7438 * configure: Suppress more unhelpful warnings and "remarks" for HP's aCC, and
7439   turn on "+wlint", which seems useful.
7441 * A number of cases of unnecessary header inclusions have been addressed,
7442   which should speed up compilation (fewer headers to parse when compiling
7443   many source files).  This also reduces dependencies within the source code,
7444   and thus the number of files which need to be rebuilt when a header is
7445   changed.
7447 * configure: Cache the results of some of our custom tests.
7449 documentation:
7451 * The documentation has all been updated for changes in Xapian 1.0.0.
7453 * Many of the documentation comments in the API headers (which are collated
7454   using doxygen to generated the API reference) have been improved, and some
7455   missing ones added.  Also, internal classes, members, and methods are now all
7456   marked as such so that none should appear in the generated documentation.  In
7457   particular, the class inheritance graphs should be a lot clearer.  A few other
7458   problems have also been addressed.
7460 * docs/internals.html: New separate index page for the "internal"
7461   documentation.
7463 * docs/deprecated.html: New document describing deprecation policy.  This
7464   includes lists of features which have been removed, or which are deprecated
7465   and scheduled for removal, along with suggested replacements.
7467 * docs/admin_notes.html: New document introducing Xapian for sysadmins.
7469 * docs/termgenerator.html: New document describing the new term generation
7470   strategy implemented by the Term::Generator class.
7472 * docs/bm25.html,docs/intro_ir.html: These have been overhauled to make them
7473   fit better with the rest of the documentation, and with Xapian itself.
7475 * docs/overview.html: Fixed links to error classes in generated API
7476   documentation.
7478 * HACKING,INSTALL: Many updates and improvements.
7480 * xapian-config: Improve --version output so that help2man produces a better
7481   man page.
7483 * PLATFORMS: Remove reports for 0.7.* and demote reports for 0.8.* to "older
7484   reports" status.  All SF compilefarm machines are now "no longer available",
7485   so update the symbols and key to reflect this.  Update with recent success
7486   reports from the tinderbox and other sources.
7488 * AUTHORS: Thanks several bug reporters I missed before, as well as recent
7489   contributors.
7491 * docs/code_structure.html now looks nicer and includes links to
7492   svn.xapian.org.
7494 * docs/remote_protocol.html: Fixed several typos and other errors, and document
7495   all the new messages.
7497 * We no longer include docs/apidoc/latex/* in the xapian-core tarballs since
7498   it's just useless bloat.
7500 examples:
7502 * delve:
7504   + Report the exception error string if open a database fails.
7506   + Rename "-k" to "-V" since "keys" were renamed to "values" long ago.  Keep
7507     "-k" as an alias for now, but don't advertise it.  Add handling so "-V3"
7508     shows value #3 for every document in the database.
7510   + No longer stems terms by default.  Add "-s/--stemmer" option to allow a
7511     stemmer to be specified.
7513 * quest: Add "--stemmer" option to allow stemming language to be set, or
7514   stemming to be disabled.
7516 portability:
7518 * Fix compilation with GCC 4.3 snapshot.
7520 * Always use pid_t not int for holding a process id, and use AC_TYPE_PID_T to
7521   `#define pid_t int' if <sys/types.h> doesn't provide pid_t.
7523 * Pass the 4th parameter of setsockopt() as char* which works whether the
7524   function actually takes char* or void* (since C++ allows implicit conversion
7525   from char* to void*).
7527 * Most warnings in the MSVC build have been fixed.
7529 * Refactored most portability workarounds into safeXXXX.h headers.
7531 * Building for mingw in a cygwin environment should work better now.
7533 packaging:
7535 * RPM spec file:
7537   + Updated for the changes in this release.
7539   + ChangeLog.examples is now packaged.
7541 debug code:
7543 * Rename --enable-debug* configure options - conflating the options to "turn on
7544   assertions" and "turn on logging" is confusing. `--enable-debug[=partial]'
7545   becomes `--enable-assertions'; `--enable-debug-verbose' becomes
7546   `--enable-log' and `--enable-debug=full' becomes `--enable-assertions
7547   --enable-log'.  For now the old options give an error telling you the new
7548   equivalent.
7550 * Debug logging from expand is now all of type EXPAND (some was of types
7551   MATCHER and WTCALC before).
7553 * Hook the debug tracing in the lemon generated parser into Xapian's debug
7554   logging framework.
7556 * New assertion types: AssertEqParanoid() and AssertNeParanoid().
7558 * Retry write() if it fails when writing a debug log entry to ensure to avoid
7559   the risk of a partial write.
7561 Xapian-core 0.9.10 (2007-03-04):
7563 API:
7565 * Fix WritableDatabase::replace_document() not to lose positional information
7566   for a document if it is replaced with itself with unmodified postings.
7568 * QueryParser: Add entries to the "unstem" map for prefixed boolean filters
7569   (e.g. type:html).
7571 * Fix inconsistent ordering of documents between pages with
7572   Enquire::set_sort_by_value_then_relevance (fixes bug#110).
7574 testsuite:
7576 * Workaround apparent bug in MSVC's ifstream class.
7578 flint and quartz backends:
7580 * Fix possible double-free after a transaction fails.
7582 * Fix code for recovering from failing to open a table for reading
7583   mid-modification.  If modifications are so frequent that opening for reading
7584   fails 100 times in a row, throw DatabaseModifiedError not
7585   DatabaseOpeningError.
7587 * Don't call std::string::append(ptr, 0) when ptr may be uninitialised
7588   or NULL (rather suspect, and reported to cause SEGV-like behaviour with
7589   MSVC).
7591 * Ensure both_bases is set to false if we don't have both bases when
7592   opening a table using an existing object.
7594 * Use MS Windows API calls to delete files and open files we might want to
7595   delete while they are still open (i.e. the flint and quartz btree base
7596   files).  This fixes a problem when a writer can't discard an old revision at
7597   the exact moment a reader is opening it (bug #108).
7599 remote backend:
7601 * Fix WritableDatabase::has_positions() to refetch the cached value if it
7602   might be out of date.
7604 * Fix incorrect serialisation of a query with non-default termpositions.
7606 inmemory backend:
7608 * If replace_document is used to set the docid of a newly added document which
7609   has previously existed, ensure we mark that document as valid.
7611 documentation:
7613 * Assorted improvements to API documentation.
7615 * docs/Makefile.am: The larger pool_size we set in 0.9.9 for building
7616   sourcedoc.pdf was a bit marginal, so increase it further.
7618 * docs/stemming.html,docs/install.html: Correct 2 references to "CVS" to say
7619   "SVN" instead.
7621 * HACKING: Update the release checklist.
7623 portability:
7625 * Fix flint and quartz to allow 2GB+ B-tree tables when compiling with MSVC.
7627 packaging:
7629 * RPMs: Remove "." from end of "Summary:".  Package the new man page for
7630   xapian-progsrv.
7632 Xapian-core 0.9.9 (2006-11-09):
7634 testsuite:
7636 * Use popen() to run xapian-tcpsrv and wait for "Listening..." before returning
7637   rather than just sleeping for 1 second and hoping that's enough.
7639 * If we can't start xapian-tcpsrv because the port is in use, try higher
7640   numbered ports.
7642 remote backend:
7644 * xapian-tcpsrv: If the port requested is in use, exit with code 69
7645   (EX_UNAVAILABLE) which is useful if you're trying to automate launching of
7646   xapian-tcpsrv instances.
7648 * xapian-tcpsrv: Output "Listening..." once the socket is open and read for
7649   connections (this allows the testsuite to wait until xapian-tcpsrv is ready
7650   before connecting to it).
7652 * xapian-progsrv: Now supports --help, --version, and has a man page.  Fixes
7653   Bug #98.
7655 * Turn on TCP_NODELAY for the TCP variant of the remote backend which
7656   dramatically improves the latency of operations on the database.
7658 build system:
7660 * internaltest: Disable serialiselength1 and serialisedoc1 when the remote
7661   backend is disabled to fix build error in this case.
7663 * Move libbtreecheck.la from testsuite/ to backends/quartz/.
7665 * Move the testsuite harness from testsuite/ to tests/harness/.
7667 documentation:
7669 * Ship our custom INSTALL file rather than the generic one from autoconf which
7670   we've accidentally been shipping instead since 0.9.5.
7672 * docs/Makefile.am: Building sourcedoc.pdf needs a larger pool_size now we're
7673   using pdflatex.
7675 * HACKING: Update debian packaging checklist.
7677 * PLATFORMS: Updated with results from tinderbox.
7679 portability:
7681 * Create "safefcntl.h" as a replacement for <fcntl.h> instead of using
7682   "utils.h" for this purpose, since "utils.h" pulls in many other things we
7683   often don't need.
7685 packaging:
7687 * RPMs: Prevent binaries getting an rpath for /usr/lib64 on FC6.
7689 Xapian-core 0.9.8 (2006-11-02):
7691 API:
7693 * QueryParser: Don't require a prefixed boolean term to start with an
7694   alphanumeric - allow the same set of characters as we do for the second
7695   and subsequent characters.
7697 flint backend:
7699 * Only force a flush on WritableDatabase::allterms_begin() if there are
7700   actually pending changes.
7702 quartz backend:
7704 * Only force a flush on WritableDatabase::allterms_begin() if there are
7705   actually pending changes.
7707 * quartzcheck: Avoid dying because of an unhandled exception if the Btree
7708   checking code finds an error in the low-level Btree structure.  Add a
7709   catch for any other unknown exceptions.
7711 build system:
7713 * When building with GCC, turn on warning flag -Wshadow even when not in
7714   maintainer mode (provided it is supported by the GCC version being used).
7716 * testsuite/backendmanager.cc: Fix compilation when valgrind is detected by
7717   configure.
7719 * If generating apidoc.pdf fails, display the logfile pdflatex generates since
7720   that is likely to show what failed.
7722 documentation:
7724 * Produce a PDF for apidoc rather than PostScript, since the PDF is smaller,
7725   plus at least as easy to print and easier to view for most users.  Use
7726   pdflatex to generate the PDF directly rather than going via a DVI file which
7727   apparently produces a better result and also avoids problems on some Linux
7728   distros where latex is a symlink to pdfelatex (bug#81, bug#95).
7730 * HACKING: Mention automake 1.10 is out but we've not tested it yet.
7732 * HACKING: Add entries to release checklist: make sure new API methods
7733   are wrapped by the bindings, and that bug submitters are thanked.
7735 * HACKING: Note that on Debian, tetex-extra is needed for
7736   fancyhdr.sty.
7738 * HACKING: Note that dch can be used to update debian/changelog.
7740 * docs/code_structure.html: Document backends/remote.
7742 * PLATFORMS: Update from tinderbox.
7744 portability:
7746 * configure: When checking if we need -lm, don't use a constant argument to
7747   log() as the compiler might simply evaluate the whole expression at compile
7748   time.
7750 * configure: Redhat's GCC 2.96 doesn't support -Wundef even though real GCC
7751   version before and after it do!
7753 * configure: Avoid use of double quotes in double-quoted backticks since
7754   it causes problems on some platforms.
7756 * backends/flint/flint_io.cc: Fix compilation on windows (needs to
7757   #include "safewindows.h" to get definition of SSIZE_T).
7759 * Fix our implementation of om_ostringstream to compile so that the build
7760   works once more on older compilers without <sstream> (regression probably
7761   introduced in 0.9.7).
7763 packaging:
7765 * xapian.spec: Package xapian-progsrv.
7767 Xapian-core 0.9.7 (2006-10-10):
7769 API:
7771 * QueryParser:
7773   + Allow a distance to be optionally specified for NEAR - e.g.
7774     "cats NEAR/3 dogs" (bug#92).
7776   + Implement "ADJ" operator - like "NEAR" except the terms must
7777     appear in matching documents in the same order as in the query.
7779   + Fix bug in how we handle prefixed quoted phrases and prefixed brackets.
7781   + Fix parsing of loved and hated prefixed phrases and bracketted expressions.
7783   + Fix handling of stopwords in boolean expressions.
7785   + Don't ignore a stopword if it's the only query term.
7787 * Document::add_value() failed to replace an existing value with the same
7788   number, contrary to what the documentation says (bug #82).
7790 * Enquire::set_sort_by_value(): Don't fetch the document data when fetching
7791   the value to sort on.  Simple benchmarking showed this to speed up sort by
7792   value by a factor of between 3 and 9!
7794 * Implement transactions for flint and quartz.  Also supported are "unflushed"
7795   transactions, which provided an efficient way to atomically group a number
7796   of database modifications.
7798 * The Xapian::Error and Xapian::ErrorHandler classes have been reimplemented.
7799   The new versions have better, clearer documentation comments and are cleaner
7800   internally.
7802 * Change how doubles are serialised by TradWeight, BM25Weight, and in the
7803   remote backend protocol.  The new encoding allows us to transfer any double
7804   value which can be represented by both machines precisely and compactly.
7806 testsuite:
7808 * Add targets "check-flint", "check-quartz", and "check-remote" in tests and at
7809   the top level which run the subset of tests which test the respective backend.
7811 * apitest: Run tests on flint if flint is enabled, rather than if quartz is
7812   enabled!
7814 * apitest: Speed up deldoc4 when run in verbose mode - some stringstream
7815   implementations are very inefficient when the string grows long.
7817 * Turn on GLIBCXX_FORCE_NEW when running tests under valgrind to stop the GNU
7818   C++ STL from using a pooling allocator.  This helps make velgrind's leak
7819   tracking more reliable.
7821 * Probe for required valgrind logging options at configure time rather than
7822   when running the test program.  This saves about 2 seconds per test program
7823   invocation.
7825 * Fix testsuite harness to show valgrind output when a test fails (when running
7826   under valgrind in verbose mode).  This had stopped working, probably due to
7827   changes in valgrind 3.
7829 * internaltest: Check that the destructor on a temporary object gets called
7830   at the correct time (Sun C++ deliberately gets this wrong by default, and it
7831   would be good to catch any other compilers which do the same).
7833 * apitest: When running tests on the remote backend and running under valgrind,
7834   run xapian-tcpsrv and xapian-progsrv under valgrind too to avoid issues
7835   with the precision of doubles (bug#94).
7837 flint backend:
7839 * Retry on EINTR from fcntl or waitpid when creating or releasing the flint
7840   lock file.
7842 * xapian-compact: Add --blocksize option to allow the blocksize to be set
7843   (default is 8K as before.)
7845 * WritableDatabase::replace_document(did, doc) was double-incrementing the
7846   "changes" counter when document did didn't exist so it would flush twice
7847   as often - fixed.
7849 * WritableDatabase::postlist_begin(): Remove forced flush when iterating the
7850   posting list of a term which has modified postings pending.
7852 quartz backend:
7854 * quartzcompact: Add --blocksize option to allow the blocksize to be set
7855   (default is 8K as before.)
7857 * WritableDatabase::replace_document(did, doc) was double-incrementing the
7858   "changes" counter when document did didn't exist so it would flush twice
7859   as often - fixed.
7861 remote backend:
7863 * Most of the remote backend has been rewritten.  It now supports most
7864   operations which a local database does (including writing!), the protocol
7865   used is more compact, and a number of layers of classes have been eliminated
7866   and the sequences of method calls simplified, so the code should be easier to
7867   understand and maintain despite doing more.  A number of bugs have been fixed
7868   in the process.
7870 * xapian-tcpsrv: Report errno if we catch a Xapian::Error which has it set.
7872 * xapian-tcpsrv: Fix memory leak in query unserialisation.
7874 build system:
7876 * Now using autoconf 2.60 for snapshots and releases.  Also now using a
7877   libtool patch which improves support for Sun C++'s -library=stlport4 option.
7879 * configure: Fix generation of version.h to work with Solaris sed.
7881 * automake adds suitable rules for rebuilding doxygen_api_conf and
7882   doxygen_source_conf, so remove our less accurate versions.  Also fix
7883   dependencies for regenerating the doxygen documentation, and make the
7884   documentation build work with parallel make.
7886 * Make use of the dist_ prefix to avoid having to list files in EXTRA_DIST as
7887   well as in *_DATA and man_MANS.
7889 * Removed a few unused #include-s.
7891 * include/xapian/error.h: Add hook to allow SWIG bindings to be built using
7892   GCC's visibility support.
7894 * configure: Turn on automake's -Wportability to help ensure our Makefile.am's
7895   are written in a portable way.
7897 * configure: Disable probing and short-cut tests for a FORTRAN compiler.  We
7898   don't use one, but current libtool versions always check for it regardless.
7900 * xapian-config: Prune -L/usr/lib from output of `xapian-config --libs'.
7902 documentation:
7904 * docs/scalability.html: quartzcompact and xapian-compact now allow you to set
7905   the blocksize, so there's no need to use copydatabase if you want to migrate
7906   a database to a larger blocksize.  Mention gmane.  Other minor tweaks.
7908 * Eliminate "XAPIAN_DEPRECATED" from generated documentation.
7910 * PLATFORMS: Added success report for Nexenta (alpha 5), MSVC, and sparc linux.
7911   Updated other results from tinderbox.
7913 * Add links to the wiki from README and the documentation index.
7915 * docs/overview.html: Add discussion of uses of terms vs values.
7917 * docs/overview.html: Rewrite the section on Xapian::Document to remove some
7918   very out-of-date information and make it clearer.
7920 * include/xapian/database.h: Note that automatically allocated document IDs
7921   don't reuse IDs from deleted documents.
7923 * include/xapian/enquire.h: Note that "set_sort_by_relevance" is the default
7924   setting.
7926 * docs/queryparser.html,include/xapian/queryparser.h: Add note that
7927   FLAG_WILDCARD requires you to call set_database.
7929 * HACKING: Add some advice regarding debugging using -D_GLIBCXX_DEBUG,
7930   valgrind, and gdb.
7932 * HACKING: Give URL to Alexandre Duret-Lutz's autotools tutorial, which is much
7933   more up-to-date than the "goat book".
7935 * HACKING: Update and expand the information about the debian packaging.
7937 * Add missing dir_contents files.
7939 portability:
7941 * xapian/version.h: Add a check that _GLIBCXX_DEBUG is set compatibly if we're
7942   compiling with GNU C++ 3.4 or newer.
7944 * Add configure check to see if "-lm" is needed to get maths functions since
7945   newer versions of Sun's C++ compiler seem to require this.
7947 * Automatically put Sun's C++ compiler into "ANSI C++ compliant library" mode
7948   (using -library=stlport4).  This allows us to remove most of the special
7949   case bits of code we've accumulated for just this compiler, which improves
7950   maintainability.
7952 * Sun's C++ compiler implements non-standards-conforming lifetimes for
7953   temporary objects by default.  This means database locks don't get released
7954   when they should, so we now always pass "-features=tmplife" for Sun C++
7955   which selects the behaviour specified by the C++ standard.
7957 Xapian-core 0.9.6 (2006-05-15):
7959 API:
7961 * Rename Xapian::xapian_version_string() and companions to
7962   Xapian::version_string(), etc.  Keep the old functions as aliases which are
7963   marked as deprecated.
7965 * QueryParser: Add rules to handle a boolean filter with a "+" in front (such
7966   as +site:xapian.org).
7968 testsuite:
7970 * queryparsertest: Add another prefix testcase to improve coverage.
7972 build system:
7974 * configure: Simpler check for VALGRIND being set to empty value.
7976 * include/Makefile.am: Add xapian/version.h.timestamp as a dependency on
7977   all-local so that xapian/version.h actually gets regenerated when required.
7979 * Eliminate XAPIAN_BUILD_BACKEND_* from config.h and just use
7980   XAPIAN_HAS_*_BACKEND from xapian/version.h instead.
7982 documentation:
7984 * remote_protocol.html: Document keep-alive messages.
7986 * xapian/enquire.h: Remove bogus documentation for a parameter which doesn't
7987   exist.
7989 * PLATFORMS: Added a summary.  Updated and pruned old entries for which we
7990   have a newer close match.
7992 * HACKING: Expand on details of what's required when changing Xapian (discuss
7993   documentation requirements, and more on why feature tests are vital).
7995 * HACKING: Update section on building debian packages.
7997 portability:
7999 * The tarball is generated with a patched version of libtool 1.5.22 which
8000   fixes libtool bugs on HP-UX and some BSD platforms.
8002 * configure: Fix problems with test for snprintf which affected cygwin, and
8003   possibly some other platforms.
8005 * configure: Tweak version.h generation to cope with CXXCPP putting carriage
8006   returns into its output as can happen on cygwin.
8008 * Fix renaming of "iamflint.tmp" for MS Windows where you can't rename an open
8009   file.
8011 * Fixed MSVC7 warnings.
8013 * Added workaround for newlib header bug.
8015 Xapian-core 0.9.5 (2006-04-08):
8017 API:
8019 * QueryParser:
8021   + Fix FLAG_BOOLEAN_ANY_CASE to really allow any case combination - previously
8022     it only allowed all uppercase or all lowercase.
8024   + Fix QueryParser's handling of terms with trailing "#", "+", or "-" when
8025     set_database has been called and the term doesn't exist in the database
8026     with the suffix.
8028 * Add mechanism to allow xapian-bindings to override deprecation warnings so
8029   we can continue to wrap deprecated methods without lots of warnings.
8031 * Move Enquire::get_matching_terms_end() and Document::termlist_end() inline in
8032   header.
8034 * Database::termlist_begin(): Eliminate the MultiTermList wrapper in the common
8035   case where we're only dealing with a single database.
8037 * Fix TermIterator::positionlist_begin() to work on TermIterator from
8038   Database::termlist_begin().  Make TermList::positionlist_begin() pure
8039   virtual and put dummy implementations in BranchTermList and other
8040   subclasses which can't (or don't) implement it.  This makes it hard to
8041   accidentally fail to implement it in a backend's TermList subclass.
8043 * TermIterator::positionlist_begin() with the remote backend now throws
8044   UnimplementedError instead of InvalidOperationError.
8046 * Implement Enquire::set_sort_by_relevance_then_value().
8048 testsuite:
8050 * Added missing feature test for QueryParser::FLAG_BOOLEAN_ANY_CASE.
8052 * remotetest: Check mset size in tcpmatch1.
8054 flint backend:
8056 * xapian-compact: Fixed segfault from passing an unknown option (e.g.
8057   "xapian-compact --foo").
8059 quartz backend:
8061 * quartzdump,quartzcompact: Fixed segfault from passing an unknown option
8062   (e.g.  "quartzdump --foo").
8064 remote backend:
8066 * xapian-tcpsrv: Don't perform a name lookup on the IP address which an
8067   incoming connection is from as that could easily slow down the search
8068   response - instead just print the IP address itself if output is verbose.
8070 * xapian-tcpsrv: Allow up to 5 connections in the listen queue instead of just
8071   one.
8073 build system:
8075 * Removed unused code from the matcher and the remote, quartz, and flint
8076   backends.
8078 documentation:
8080 * All installed binaries now support --help and --version and have a man page
8081   (which is generated using help2man).
8083 * docs/overview.html: Bring up to date.
8085 * docs/remote_protocol.html: Document messages for requesting and sending a
8086   termlist and a document.
8088 * PLATFORMS, AUTHORS: Updated.
8090 * INSTALL: Improve wording.
8092 * HACKING: Note that we now use a lightly patched version of libtool 1.5.22.
8094 * HACKING: aclocal is part of automake, not autoconf.
8096 portability:
8098 * Added some tweaks to help support compilation with MSVC.
8100 packaging:
8102 * RPMs: package the new man pages.
8104 debug code:
8106 * Add missing spaces in some debug output.
8108 Xapian-core 0.9.4 (2006-02-21):
8110 API:
8112 * Flag deprecated methods such that the compiler gives a warning, for compilers
8113   which support such a feature (most notably GCC >= 3.1).
8115 * Correct typo in name of definition of function xapian_revision().
8117 testsuite:
8119 * Updated uses of deprecated methods in the testsuite.
8121 build system:
8123 * xapian-config: Set exec_prefix and prefix at top of script so that
8124   xapian-config works after xapian-core is installed.
8126 documentation:
8128 * Add documentation comment for Enquire::set_sort_by_value_then_relevance().
8130 * README: Add pointer to HACKING.  Change "CVS access" to "SVN access".
8132 * PLATFORMS: Updated from tinderbox.
8134 * COPYING: Update second occurrence of old FSF address.
8136 Xapian-core 0.9.3 (2006-02-16):
8138 API:
8140 * Added 4 functions to report version information for the library version being
8141   used (which may not be the same as that compiled against if shared libraries
8142   are in use):  xapian_version_string(), xapian_major_version(),
8143   xapian_minor_version(), xapian_revision().
8145 * Xapian::QueryParser:
8147   + Fix handling of "+" terms in a query when the default query operator is
8148     AND.  Added regression test for this.
8150   + Added "AND NOT" as a synonym for "NOT".  Added feature tests for this.
8152 * Fix prototype for ESet::operator[] to take parameter of type termcount
8153   instead of doccount (doccount and termcount are both typedefs to the same
8154   type so this really just makes the prototype more consistent).
8156 * Xapian::Stem: Check for malloc and calloc failing to allocate memory and
8157   throw an exception.  Richard has fixed this upstream in snowball, so this is
8158   a temporary fix until we import a new version of snowball.
8160 * Xapian::Database: Trying to open a database for reading which doesn't exist
8161   now fails with DatabaseOpeningError instead of FeatureUnavailableError.
8162   Added regression test for this.
8164 * Add Stopper::get_description() and SimpleStopper::get_description().
8166 testsuite:
8168 * Fixed testsuite harness to work with valgrind on 64 bit platforms.
8170 * Merged the "running tests" section of docs/tests.html into the similar
8171   section in HACKING, and make docs/tests.html refer the reader to HACKING for
8172   more information.
8174 * Tidied and enhanced environmental variables which the test suite harness
8175   recongnises:
8177   + OM_TEST_BACKEND: Removed support since the "-b" switch to apitest allows
8178     you control which backend is used, making OM_TEST_BACKEND pretty much
8179     redundant.
8181   + XAPIAN_SIG_DFL: Renamed to XAPIAN_TESTSUITE_SIG_DFL.
8183   + XAPIAN_TESTSUITE_OUTPUT: New environmental variable to control use of
8184     ANSI colour escape sequences in test output (set to "plain" to disable
8185     them, unset, empty, or "auto" to check if stdout is a tty, or anything
8186     else to force colour).
8188 flint backend:
8190 * xapian-compact: Added "--multipass" option to merge postlists in pairs or
8191   triples until all are merged.  Generally this is faster than an N-way merge,
8192   but it does require more disk space for temporary files so it's not the
8193   default.
8195 quartz backend:
8197 * quartzcheck: If the database is too broken to open, emit a warning message
8198   and bump the error count.
8200 build system:
8202 * Now generate snapshots and releases with automake 1.9.6 (was 1.9.5) and
8203   libtool 1.5.22 (was 1.5.18).
8205 * configure: If not cross-compiling, try to actually run a test program built
8206   with the C++ compiler, not just link one.
8208 * configure: Fix to actually skip the check for valgrind if VALGRIND is set to
8209   an empty value.
8211 * configure: Add sanity check for MS Windows that "find" is Unix-like find, not
8212   MSDOS-like.
8214 * Fix conditional compilation of flint backend - it was being disabled when
8215   quartz was, not when flint was supposed to be.
8217 documentation:
8219 * INSTALL,README: Updated.
8221 * Give pointer to replacements for the deprecated Enquire sorting methods
8222   in the doxygen collated documentation.
8224 * PLATFORMS: Added success reports for ppc64 linux and Fedora Core 4.  Updated
8225   from the tinderbox.
8227 * HACKING: Note platforms valgrind now has solid support for; Improve
8228   phrasing in a few places.
8230 * Upgrade to using doxygen 1.4.6 for generating API documentation.
8232 * Change title of the "full source" documentation to "Internal Source
8233   Documentation" rather than "Full source documentation" to make it
8234   clearer it's only useful if you want to modify Xapian itself.
8236 * Fix documentation comments for the values of QueryParser::feature_flag so
8237   doxygen actually pulls out the documentation for them.  Add documentation for
8238   the parameters of QueryParser::parse_query().
8240 * queryparser.html: Document wildcards.
8242 portability:
8244 * Fix compilation with GCC 4.0.1 and later (need to forward declare class
8245   InMemoryDatabase) (bug #69).
8247 * Fix compilation under cygwin (broken in 0.9.2).
8249 * Don't pass NULL for the second parameter of execl() - the Linux man page
8250   says execl takes "one or more pointers to null-terminated strings".  Also
8251   cast the NULL to (void*) to avoid "missing sentinel" warning from GCC4.
8253 * Use snprintf instead of sprintf where available (we were attempting to
8254   do this in some places before, but the configure test was broken so
8255   sprintf was always being used).
8257 * Enable more warnings under aCC and fix minor issues highlighted.  Suppress
8258   "Entire translation unit was empty" warning which isn't useful to us.
8260 * Write top-bit set characters in the source using \xXX notation to avoid
8261   warnings from Intel's C++ compiler.
8263 * configure: TYPE_SOCKLEN_T fails hard, so only run it if we've successfully
8264   run other socket tests.
8266 * queryparser/accentnormalisingitor.h: #include <limits.h> for CHAR_BIT.
8268 * bin/xapian-compact.cc: Fix printf type mismatch on 64 bit platforms.
8270 * Replace pair<bool, string> with a simple class BoolAndString - the pair
8271   results in a 4328 byte symbol on HP-UX which gets truncated (to 4000 bytes).
8272   Most likely this is harmless, but it causes a warning.
8274 * configure: Disable flint backend by default if building for djgpp or msdos.
8276 * xapian-config: Previously when linking without libtool we've always thrown
8277   in dependency_libs, even though only some platforms need it (because it's
8278   generally pretty harmless).  However some Linux distros have an unhelpful
8279   policy of not packaging .la files, so libxapian.la isn't available to
8280   extract dependency_libs from.  Linux is a platform which doesn't require
8281   dependency_libs to be explicitly linked, so extend xapian-config to not
8282   pull in dependency_libs if libtool's link_all_deplibs_CXX=no.
8284 * xapian-config: If the current platform needs dependency_libs and
8285   libxapian.la's dependency_libs contains another .la file, transform it into a
8286   pair of -L and -l options, and recursively expand its dependency_libs (if
8287   any).
8289 * Don't pass functions with C++ linkage to places wanting pointers to functions
8290   with C linkage.  So far this has worked for us, but it causes warnings with
8291   some compilers, and may not be portable.
8293 * Compaq C++ 7.1 doesn't suffer from the problem which previously prevented
8294   it from building Xapian.  This release includes workarounds for some
8295   oddities with errno.h support in this compiler, but currently the build
8296   fails when trying to link a binary with the library.
8298 packaging:
8300 * RPM: Invoke %setup correctly in xapian.spec.
8302 debug code:
8304 * Add missing '#include <iostream>' when TIMING_PATCH is defined.
8306 Xapian-core 0.9.2 (2005-07-15):
8308 API:
8310 * QueryParser:
8312   + Added optional "flags" argument to parse_query method.
8314   + Add flag FLAG_BOOLEAN_ANY_CASE which tells the QueryParser that boolean
8315     operators such as "AND", "OR", and "NEAR" should be recognised even if
8316     they aren't fully capitalised (so "and", "And", "aNd", etc will work too).
8318   + Add flag FLAG_WILDCARD which tells the QueryParser to allow right
8319     truncation e.g. "xap*".
8321   + Fixed to handle "-site:microsoft.com" where site is a boolean prefix.
8322     Added testcases for this.
8324 testsuite:
8326 * The test harness was incorrectly creating a quartz database when a flint one
8327   was requested, which meant tests weren't being run against flint and so it
8328   had bugs rendering it pretty much unusable.
8330 * Added regression test longpositionlist1 (to check encoding/decoding a long
8331   position list, which flint had problems with).
8333 flint backend:
8335 * Bumped format version number.
8337 * Added new "xapian-compact" program which can compact and merge flint
8338   databases in a similar way to how quartzcompact does for quartz databases.
8340 * Fixed to auto-detect database type when opening an existing Flint database
8341   as a WritableDatabase.
8343 * The code to encode the position list size, first entry, and last entry
8344   didn't match the code to decode them!  Reworked both to match, using a
8345   slightly more compact encoding.
8347 * We were failing to append "DB" to the path when opening a table for reading.
8349 * Rewrite of FlintAllTermsList with several fewer member variables.  The
8350   rewrite fixes a bug too - the old version wasn't ignoring the metainfo
8351   entry which is now in the postlist table.
8353 * It seems we need to explicitly kill the child process used for locking.
8354   Otherwise when we have two databases locked just closing the connection
8355   doesn't cause the child to die.  I don't understand why it's needed, but this
8356   fix is at least clean.
8358 quartz backend:
8360 * quartzcompact: Fix mis-repacking of keys in positionlist table when merging
8361   several databases.
8363 * Disable assertion in allterms iteration which is incorrect in a corner case.
8364   This is only a problem if a termname contains zero bytes and you're using a
8365   debug build.  Add regression test test_specialterms2.
8367 remote backend:
8369 * Implement sorting on a value with the remote backend.
8371 build system:
8373 * Pass automake options to AM_INIT_AUTOMAKE rather than specifying them in
8374   Makefile.am.  This way, the version requirements for autoconf and automake
8375   are stated close together.
8377 * configure: -Wshadow causes false positives with GCC 3.0.4, so only enable it
8378   for 3.1 and up.
8380 * configure: Eliminate use of "ln -s" when generating include/xapian/version.h
8381   since it seems to cause problems on Solaris in some setups and isn't really
8382   necessary.
8384 * Add dependency mechanism so version.h gets regenerated when the template is
8385   changed.
8387 * configure: Check for spaces in build directory, source directory, or install
8388   prefix and die with a helpful message.
8390 * Add dependency to generate queryparser_token.h.
8392 * Eliminated TOP_SRCDIR and TOP_BUILDDIR - it's better to just use top_srcdir
8393   and top_builddir directly.
8395 * configure: Generate the list of source files to feed to doxygen by inspecting
8396   all the Makefile.am files prior to running autoreconf rather than by using
8397   "find" when the user runs ./configure.  This speeds up configure, avoids
8398   generating docs for random .cc and .h files which aren't part of xapian-core,
8399   and avoids problems with picking up FIND.EXE on MS Windows.
8401 documentation:
8403 * Expanded explanation of the "descending docid with boolean weighting" trick
8404   for fast date ordered searching in Enquire::set_docid_order() API docs.
8406 * docs/intro_ir.html: Citeseer has moved, so update link.
8408 * testsuite/testsuite.cc: Update URL for valgrind FAQ in comment.
8410 * COPYING: Update FSF address.
8412 * HACKING: Minor updates to release checklist.
8414 portability:
8416 * Assorted tweaks towards allowing compilation with MSVC.
8418 packaging:
8420 * xapian.spec.in: Package xapian-compact.
8422 Xapian-core 0.9.1 (2005-06-06):
8424 API:
8426 * Fix SEGV on get_terms_begin() on an empty Query object.  This was causing
8427   a SEGV in Omega with an empty query.
8429 * Put Query::get_terms_end() inline in header.
8431 flint backend:
8433 * Added the new "flint" backend, which starts out as a copy of the quartz
8434   backend plus some modifications and replacements.  When creating a database
8435   without a specified backend, quartz is still used unless the environmental
8436   variable XAPIAN_PREFER_FLINT is set to a non-empty value.
8438 * apitest now runs tests on flint as well as the other backends.
8440 * Removed undocumented (and hence the little used) quartz "log" feature.
8442 * Implement new fork+fcntl+exec based locking (for Unix) and CreateFile based
8443   locking (for Windows - currently untested).
8445 * Move the special key/tag pair holding the total document length and doc id
8446   high water mark from the record table to the postlist table.  This means that
8447   when appending documents, the insertion point will now always be at the end
8448   of the record table which is more efficient.  We need to jump around the
8449   postlist table to merge postings in anyway.
8451 * Changed metafile magic to be different from quartz, and make the metafile
8452   version a datestamp which we'll change each time the format changes.
8454 * Check the return value of close() when writing the metafile.
8456 * Flint position list table now stores entries using interpolative coding
8457   (which is significantly more compact).
8459 quartz backend:
8461 * quartzcheck: Fixed corner case where you couldn't check a single Btree table
8462   which was just the DB and baseA/baseB files in a directory (Xapian doesn't
8463   produce anything like this, but btreetest does while unit testing the
8464   Btree code).
8466 build system:
8468 * Releases are now created using libtool 1.5.18 and automake 1.9.5.
8470 * configure: Pass more -W flags to g++ (including -Wundef which caught the
8471   getopt problem fixed in this release).  Fixed new GCC warnings from these new
8472   flags.
8474 * Fixed a lingering DOXYGEN_HAVE_DOT reference.
8476 * Fixed accidentally pruned #define which meant that getopt code was being
8477   included even on systems which use glibc (on such systems, we should use
8478   the glibc copy of the code instead).
8480 * queryparser/queryparser.lemony: Add missing '#include <config.h>'.
8482 documentation:
8484 * Added missing documentation comments for a QueryParser methods added in
8485   0.9.0.
8487 * docs/quartzdesign.html: Removed warning that quartz is still in development.
8489 * PLATFORMS: Updated from tinderbox.
8491 * configure: Describe CC_FOR_BUILD in configure --help output.
8493 * HACKING: Updated release instructions to refer to SVN, and note that release
8494   tarballs are now built specially rather than being copies of snapshots.
8495   Update information about the SVN tag name to use for debian files.
8497 * HACKING: Add "email Fabrice" to the release checklist so that RPM
8498   spec files don't lag behind.
8500 * Fixed a few spelling mistakes.
8502 packaging:
8504 * xapian.spec: Remove bogus %setup line left over from when we packaged
8505   xapian-core and xapian-examples together from separate tarballs.
8507 debug code:
8509 * api/omqueryinternal.cc: Fixed compilation with --enable-debug.
8511 * common/omdebug.h: Replace C style cast with static_cast<> which reveals that
8512   we were discarding const (harmlessly though).
8514 Xapian-core 0.9.0 (2005-05-13):
8516 API:
8518 * Query objects really need to be immutable after construction (otherwise we
8519   need a copy-on-write mechanism).  To achieve this the following API changes
8520   were required:
8522   + Remove Query::set_length() in favour of an optional length
8523     parameter to Enquire::set_query().
8525   + Eliminated Query::set_elite_set_size() in favour of optional parameter
8526     to constructor.
8528   + Eliminated Query::set_window() in favour of an optional parameter to the
8529     constructor.
8531 * Removed OP_WEIGHT_CUTOFF, since it doesn't actually seem to add useful
8532   functionality over using Enquire::set_cutoff().
8534 * MSet::max_size() (which only exists so that MSet is an STL container) now
8535   returns MSet::size() and is inlined from the header.
8537 * Added ESet::max_size() (for STL compatibility).
8539 * Fixed Xapian::RSet to have the same "it's a handle" copy semantics as most of
8540   the other classes.
8542 * Rewritten QueryParser class:
8544   + Uses Lemon instead of Bison to generate the parser, which enables us to
8545     stop using static data, so this class is at last reentrant.
8547   + QueryParser now uses a PIMPL style with reference counted internals like
8548     most of the other Xapian classes.
8550   + Direct access to member variables has gone, which unfortunately forces an
8551     API change (but this fixes bug #39).  Instead of accessing
8552     QueryParser::termlist member variable, iterate over terms using
8553     Query::get_terms_begin() and get_terms_end() on the returned Query object.
8554     Direct access to stoplist is replaced by QueryParser::get_stoplist_begin()
8555     and get_stoplist_end(); and to unstem by get_unstem_begin() and
8556     get_unstem_end().
8558   + The rewrite parses many real world examples better than the old version.
8560   + Now allow searches for C#, etc.  If a database has been set, for this and +
8561     and - suffixes, check if the term actually exists, and if not, ignore the
8562     suffix if the unsuffixed term exists.
8564   + Added QueryParser::get_description() method (not very descriptive yet!)
8566   + Added backward compatibility wrapper for old version of
8567     QueryParser::set_stemming_options().
8569   + xapian.h now automatically includes xapian/queryparser.h.  Directly
8570     including xapian/queryparser.h will continue to work for now, but is
8571     deprecated.
8573   + QueryParser::parse_query() was failing to clear termlist and unstem
8574     - the rewrite fixes this.
8576   + New QueryParser parses "term prefix:(term2 term3)" correctly.
8578 * Added Xapian::SimpleStopper which just stops terms specified by a pair of
8579   iterators.  This should be sufficient for the majority of uses.
8581 * Tidied up the Enquire sorting API and added ability to reverse sort on a
8582   value.  Removed sort_bands support.
8584 * Enquire::get_description() improved.
8586 * Methods which return an end iterator where the internals are just NULL are
8587   now inline in the header for efficiency.  Should we ever need to change an
8588   implementation, we can easily move methods back into the library and bump the
8589   library version suitably.
8591 * Added Stem::operator() as preferred alternative to Stem::stem_word().
8593 * Simplified Stem internal design by restructuring to eliminate a few internal
8594   methods.
8596 * BM25Weight: Avoid fetching document length if we're simply going to multiply
8597   it by zero!
8599 testsuite:
8601 * Fixed TEST_EQUAL_DOUBLE to use DBL_EPSILON correctly.
8603 * Rewrite of index_utils test harness code, removing unused and unusual
8604   features.  Data files for tests are now easier to write.  These changes
8605   also fix the bug that ^x didn't actually decode hex values correctly.
8607 * tests/testdata/etext.txt: Stripped carriage returns.
8609 * apitest: Extended stemlang1 to check that trying to create
8610   a stemmer for a non-existent language throws InvalidArgumentError.
8612 * queryparsertest:
8614   + Moved into tests/ subdirectory.
8616   + Reworked to use the standard testsuite harness.
8618   + Added tests for new features in the rewritten QueryParser.
8620 quartz backend:
8622 * quartzcheck: Now checks the structure of all the tables, not
8623   just the postlist table, and cross-checks doclen values between
8624   termlist and postlist tables.  Recognises "--help" option.  Should
8625   now continue after an error (typically it would crash before), and
8626   counts the number of errors found.  Now exits with non-zero status
8627   if any errors were found.  More readable output.
8629 * quartzcompact: Extended to allow merging several quartz
8630   databases to produce a single compact quartz database.  This
8631   allows for faster building - simple index in chunks, then merge
8632   the chunks.
8634 * quartzcompact: Made full compaction a tiny bit more compact.
8636 * quartzcompact: Added "fuller compaction" mode, which ignores the usual "at
8637   least 4 items per block" rule.  This achieves slightly tighter compaction,
8638   though it's probably not advisable to use this option if you plan to update
8639   the compacted database.
8641 * Improved compaction by a few % in non-full case.  Tighter bound on amount of
8642   memory to reserve to read the tag into.
8644 * Fix skip_to on an allterms TermIterator to set the current term when the
8645   skip_to-ed term is in the database.  Add regression test for this
8646   (allterms5).
8648 * Values are stored in sorted order so we can stop unpacking the list once we
8649   get to one after the one we're looking for (in the case where the one we're
8650   looking for doesn't exist).
8652 build system:
8654 * configure: Check that the C++ compiler can actually link a program.
8655   AC_LANG_CXX doesn't, and if it can't find a C++ compiler it'll just return
8656   "g++" which just leads to a later configure test failing in a confusing way.
8658 * configure: corrected configure output of "none known for yes" or "none known
8659   for no" to "none known for g++-3.2" or similar.
8661 * include/xapian/version.h: Define XAPIAN_HAS_xxx_BACKEND for each backend
8662   which is enabled.  The bindings need this, and user code might find it useful
8663   too.
8665 * include/xapian/database.h: Don't declare the backend factory functions if the
8666   corresponding backend has been disabled.  This means that trying to use a
8667   disabled backend will be caught at compile time rather than link time.
8669 * configure: Enhanced valgrind test to (a) see if --tool=memcheck
8670   is needed and (b) see if valgrind actually works (we don't want to
8671   try to use an x86 valgrind on an x86_64 box).
8673 * configure: Suppress 2 Intel C++ warnings which we can't easily code around,
8674   and enable -Werror automatically with --enable-maintainer-mode.
8676 * Clearer make rules for building Postscript doxygen docs.
8678 * Removed some no longer used code.
8680 * Moved a number of method definitions out of headers because they are virtual,
8681   or too large to be sensible candidates for inlining.
8683 * Eliminated the extra library for the queryparser - it's tiny compared to the
8684   main library and having it around just complicates things.
8686 * configure: We no longer need Bison, but we do need CC_FOR_BUILD to compile
8687   Lemon with.
8689 * Snapshot generator now appends _svn6789 or similar to the version string.
8690   Adjusted configure and XO_LIB_XAPIAN macro to take this into account.
8692 * configure: If any tools needed for documentation are missing
8693   and we're in maintainer mode, die with a suitable error in
8694   configure rather than with strange errors when building the
8695   documentation.
8697 * docs/Makefile.am: Explicitly set the pool_size for latex, because we
8698   now seem to overflow the default setting on some systems.
8700 * docs/Makefile.am: Use $(MAKE) instead of make.
8702 documentation:
8704 * Numerous improvements to documentation comments.  Added documentation
8705   comments for QueryParser class.
8707 * HACKING: Added better description of how reference-counted API
8708   classes are structured.
8710 * HACKING: Note that '#include <limits>' isn't supported by GCC 2.95,
8711   and other assorted minor tweaks.
8713 * HACKING: Note how to disable use of VALGRIND on the make check
8714   command line, or when using runtest directly.
8716 * Updated all documentation mentions of CVS to talk about Subversion
8717   instead.
8719 * PLATFORMS: Updated from tinderbox and other sources.
8721 * PLATFORMS: Added minimal testcase which fails to compile with
8722   Compaq's C++ compiler (cxx).
8724 * INSTALL,README: Updated.
8726 * docs/queryparser.html: Note that + and - work on phrases and
8727   bracketed expressions.
8729 * docs/intro_ir.html: Corrected two errors.
8731 * docs/stemming.html: Stemming appears to be applicable to Japanese
8732   so don't say it isn't!
8734 examples:
8736 * Moved xapian-examples module to examples subdirectory of xapian-core.
8738 * quest: Added stopword handling.
8740 portability:
8742 * configure: autoconf identifies Intel's C++ compiler as GCC, so probe for
8743   which we actually have.
8745 * Xapian will now compile cleanly with Intel C++ 8.1 on ia64 Linux and
8746   on x86 Linux.
8748 * backends/quartz/btree.cc: Fixed GCC compilation warning.
8750 * tests/api_db.cc: Fixed warning from Sun's C++ compiler.
8752 * configure: Automatically enable ANSI C++ mode for SGI's compiler
8753   with '-LANG:std'; check that any automatically determined flags
8754   for ANSI C++ mode actually allow us to compile a trivial program
8755   - if they don't it probably means the compiler isn't the one we
8756   were expecting, but one installed with the same name, so we now
8757   drop the flags in this case.
8759 * The compile on IRIX with SGI compiler is now warning free, apart from two
8760   "unused variable" warnings in Snowball generated code.
8762 * On WIN32, don't define NOMINMAX if it is already defined.
8764 packaging:
8766 * xapian.spec: Don't say "%makeinstall" in a comment since rpm
8767   tries to expand it and explodes.
8769 * xapian.spec: '/usr/share' -> '%{_datadir}'.
8771 * xapian.spec: Put the .so in the -devel package (it's only useful
8772   for linking to - the .so.* files are all that's needed at runtime).
8774 debug code:
8776 * net/socketserver.cc: Fixed typo in debug code.
8778 Xapian-core 0.8.5 (2004-12-23):
8780 quartz backend:
8782 * quartzcompact: When full_compaction is enabled, don't fill the last few bytes
8783   of a block if that would mean we needed an extra item and the overhead for
8784   that item would use up more of the next block than we save.  This reduces the
8785   table size after full compaction by up to 0.2% in my tests!
8787 * quartzcompact: Tables sizes will always be a whole number of Kbytes, since
8788   the blocksize is, so report the size in K.  Also report the change in size as
8789   well as the before and after sizes.
8791 * quartzcompact: Added missing '#include <config.h>' so that largefile support
8792   is enabled when we call stat() and we report compression statistics for
8793   tables > 2G.
8795 * quartzcompact: Added --no-full / -n option to disable full compaction.  This
8796   may be useful if you want to update the database after compacting it (need to
8797   test to see if this option is actually useful).
8799 * Renamed Btree::compress() to Btree::compact() for consistency with
8800   "full_compaction" and "quartzcompact".  Also, "compress" is confusing since
8801   we use that term in the zlib patch.
8803 build system:
8805 * xapian-config: Fixed --libs output to not include libxapian.la.
8807 * Added missing '#include <config.h>' to various .cc files (the omissions were
8808   probably harmless, but config.h should be included as the first thing any
8809   source file does).
8811 documentation:
8813 * Minor updates.
8815 packaging:
8817 * RPM spec file: %makeinstall puts the wrong paths in the .la files so use
8818   "make DESTDIR=... install" instead.
8820 debug code:
8822 * Fixed to build with AssertParanoid enabled.
8824 Xapian-core 0.8.4 (2004-12-08):
8826 API:
8828 * Added constructors to Database and WritableDatabase which fulfil the role
8829   that the Auto::open() factory functions currently do.  Auto::open() is
8830   now deprecated.
8832 * Removed the ability to write a Xapian object to an ostream directly, as
8833   it's little used and potentially dangerous ('cout << mset[i];' will
8834   compile, but you almost certainly meant 'cout << *mset[i];').  You can
8835   get the old effect by writing 'cout << obj->get_description();' instead
8836   of 'cout << obj;'.  Note that including xapian.h no longer pulls in
8837   fstream, which code may have been implicitly relying on - if this is
8838   a problem add '#include <fstream>' after '#include <xapian.h>'.
8840 * QueryParser: Be smarter about when to add a ':' when adding a term prefix.
8842 * BoolWeight::unserialise() now returns BoolWeight*, and similarly for
8843   TradWeight and BM25Weight.  BoolWeight::clone() now returns BoolWeight *.
8845 * If a database contains no positional information, change NEAR and PHRASE
8846   queries into AND queries (as otherwise they'd return no matches at all)
8847   (bug #56).  Added feature test phraseorneartoand1.
8849 * Renamed BM25 parameters to match standard naming in papers and elsewhere
8850   (A->k3, B->k1, C->k2, D->b), eliminated the extra factor of 2 which our C
8851   had, and reordered the parameters to k1, k2, k3.  This is an incompatible API
8852   change for BM25Weight(), so if you are using custom parameters for BM25
8853   you'll need to update your code.
8855 * During query expansion, if we estimate the term frequency, ensure it has a
8856   sane value (>= r and <= N - R + r) rather than bodging around the problem
8857   later on.
8859 * TradWeight, BM25Weight: termfreq is always exact for matching (we only
8860   approximate it for query expansion) so replace code to work around bad
8861   approximations with Assert() to make sure this never happens.
8863 testsuite:
8865 * runtest: Enhanced to allow it to run test programs under valgrind and other
8866   tools (gdb was already supported).
8868 * runtest: now works with valgrind 2.1.2 and later (valgrind's --logfile-fd
8869   option was renamed to --log-fd).
8871 * runtest: Allow VALGRIND environmental variable to override the value we got
8872   from configure.
8874 * Added a dependency so "make check" regenerates runtest if necessary.
8876 * The test programs now point the user to the runtest script if srcdir can't
8877   be guessed.  And they no longer look for the test program in the tests
8878   subdirectory of the current directory.
8880 * btreetest: Fixed memory leaks in test_cursor1 (the testcase itself was
8881   causing the leak, not the library).
8883 * apitest: Fixed mset_range_is_same() and mset_range_is_same_weights() helper
8884   functions which were only comparing the first item in the range.  Thankfully
8885   the tests still all pass so this wasn't hiding any bugs.
8887 * apitest: A modified version of changequery1 fails - the bug is obscure and
8888   subtle, and the fix is tricky so set the modified test to SKIP for now.
8890 * apitest: Added test_weight1 which tests the built-in Xapian::Weight
8891   subclasses and test_userweight1 which tests user defined weighting schemes
8892   (bug#8).
8894 * quartztest: Test with DB_CREATE_OR_OPEN in writelock1.
8896 quartz backend:
8898 * An interrupted update could cause any further updates to fail with "New
8899   revision too low" because the new revision was being calculated incorrectly -
8900   fixed (bug#55).
8902 * Fixed Bcursor::del() which didn't always leave the cursor on the next item
8903   like it should.  This may have been causing problems when trying to remove
8904   the last references to a particular term.
8906 * Fixed ultra-obscure bug in the code which finds a key suitable to
8907   discriminating between two blocks in a B-tree branch (discovered by reading
8908   the code).  Comparing the keys didn't consider the length of the second, so
8909   it is possible the code would miscompare.  But in reality this is extremely
8910   unlikely to happen, and even then would probably just mean that the
8911   discriminating key wouldn't be as short as it could be (wasting a few bytes
8912   but otherwise harmless).
8914 * If we're removing a posting list entirely, often there will only be one
8915   chunk, so avoid creating a Bcursor in this case.
8917 * Simplified Btree::compare_keys() by removing the last case which was dead
8918   code as it was covered by an earlier case.
8920 * Check that any user specified block size is a power of 2.  If the block
8921   size passed is invalid, use the default of 8192 rather than throwing an
8922   exception.
8924 * Started to refactor the Btree manager by introducing Item and Key classes
8925   which take care of handling the on-disk format, and eliminated duplicated
8926   tag reading code in Btree and Bcursor.  These changes will pave the way for
8927   improvements to the on disk format.
8929 * Applied the Quartz "DANGEROUS" patch, but disabled for now.  This way it
8930   won't keep being broken by changes to the code.
8932 * quartzcompact: Added --help and --version; Check that the source path and
8933   desitination path aren't the same; Report each table name when we start
8934   compacting it, and some simple stats on the compaction achieved when we
8935   finish.
8937 muscat36 backend:
8939 * Removed a default parameter value from one variant of
8940   Xapian::Muscat36::open_db() so that there's only one candidate for
8941   open_db(string).
8943 build system:
8945 * xapian-config: If flags are needed to select ANSI mode with the current
8946   compiler, then make xapian-config --cxxflags include them so that Xapian
8947   users don't have to jump through the same hoops we do.
8949 * xapian-config: Added --swigflags option for use with SWIG.
8951 * XO_LIB_XAPIAN now passes ac_top_srcdir to xapian-config which uses it
8952   (if provided) to say "configure.ac" or "configure.in" rather than
8953   "configure.in (or configure.ac)" in the "Add AC_PROG_LIBTOOL"
8954   error message.
8956 * Cleaned up the build system in a few places.
8958 * Removed a few totally unneeded header includes.
8960 * Moved a number of functions and methods out of headers because they're not
8961   good inlining candidates (too big or virtual methods).
8963 * Changed C style casts to C++ style.  The syntax is ugly, but they do make the
8964   intent clearer which is a good thing.  Note this as a coding style guideline
8965   in HACKING.
8967 * configure.ac: Automatically add -Werror to CFLAGS and CXXFLAGS if
8968   maintainer mode is enabled and we're using GCC3 or newer.  Don't do
8969   this for older GCCs as GCC 2.95 issues spurious warnings.
8971 * Reworked how include/xapian/version.h is generated so that it works
8972   better with compilers other than GCC, and with HP-UX sed.
8974 * XAPIAN_VERSION is now a string (e.g. "0.8.4").
8976 * Added new #define XAPIAN_REVISION (which is 4 for version 0.8.4).
8978 documentation:
8980 * docs/bm25.html,docs/intro_ir.html: Reworked to talk about Xapian
8981   rather than Muscat.  Also improved the appearance of the formulae.
8983 * HACKING: Valgrind now supports x86 FreeBSD and PowerPC Linux.
8985 * Documented parameters of Enquire::register_match_decider().
8987 * We now use doxygen 1.3.8 to build documentation for snapshots and releases.
8989 * PLATFORMS: Updated from the tinderbox (which now runs builds on machines
8990   available in HP's testdrive scheme) and other assorted reports.
8992 * PLATFORMS: Removed reports from versions prior to 0.7.0.  So much
8993   has changed that these are of little value.
8995 * docs/scalability.html: Added note warning about benchmarking from cold.
8997 * Assorted other minor documentation improvements.
8999 portability:
9001 * configure.ac: Improved snprintf configure test to actually
9002   check that it works (older implementations may have different
9003   semantics for the return value, and at least one ignores the length
9004   restriction entirely!)
9006 * Reworked the GNU getopt source we use so that the header is clean and
9007   suitable for use from a reasonably ISO-conforming C++ compiler instead of
9008   being full of cruft for working around quirky C compilers which C++ compilers
9009   tend to stumble over.
9011 * Use SOCKLEN_T for the type we need to pass to various socket calls, since
9012   HPUX defines socklen_t yet wants int in those calls.  Reworked the
9013   TYPE_SOCKLEN_T test we use.
9015 * On Windows, we want winsock2.h instead of sys/socket.h.  Mingw doesn't seem
9016   to even have the latter, so I think previously we've been compiling by
9017   picking one up from somewhere random!
9019 * Change the small number of C sources we have to be C++ so we can compile
9020   everything with the C++ compiler.  This way we don't need to worry about
9021   configure choosing a mismatching pair of compilers, or about whether
9022   configure tests with the C compiler don't apply to the C++ compiler, or vice
9023   versa.
9025 * Compiles and passes testsuite with HP's aCC (we have to compile in
9026   ANSI mode, so we automatically add -AA to CXXFLAGS).
9028 * If the link test detects pread and pwrite are present, get configure to try
9029   out prototypes for pread and pwrite.  This is much cleaner than trying to
9030   find the right combination of preprocessor defines to get each platform's
9031   system headers to provide prototypes.
9033 * configure: Disable probing for pread/pwrite on HP-UX as they're present but
9034   don't work when LFS (Large File Support) is enabled, and we definitely want
9035   LFS.
9037 * Fixed some warnings from Sun's C++ compiler.
9039 * Provide our own C_isalpha(), etc replacements for isalpha(), etc
9040   which always work in the C locale and avoid signed char problems.
9042 * For mingw/cygwin, pass -no-undefined when linking libxapianqueryparser.la
9043   so libtool builds a shared library.  Also pass the magic linker flag
9044   -Wl,--enable-runtime-pseudo-reloc if configure has determined it is needed.
9046 * For cygwin, use the underlying MoveFile API call for locking, as link()
9047   doesn't work on FAT partitions.  And don't rely on HAVE_LINK to control
9048   whether we use link() otherwise - if the configure test somehow misfires, a
9049   compilation error is better than using rename() on Unix as that would cause a
9050   second writer to smash the lock of the first.
9052 * Closer to building with Compaq C++ - add "-std strict_ansi" to CXXFLAGS, and
9053   tweaked the code in several places.  It currently dies trying to compile
9054   the PIMPL smart pointer template code which looks hard to fix.
9056 debug code:
9058 * HACKING: Document that %% in XAPIAN_DEBUG_LOG is substituted with
9059   the process-id, and that setting XAPIAN_DEBUG_FLAGS to -1 enables
9060   all debug messages.
9062 * Removed compatibility code for checking environment variables OM_DEBUG_FILE
9063   and OM_DEBUG_TYPES.
9065 Xapian-core 0.8.3 (2004-09-20):
9067 API:
9069 * Fixed bug which caused a segmentation fault or odd "Document not found"
9070   exceptions when new check_at_least parameter to Enquire::get_mset() was used
9071   and there weren't many matches (regression test checkatleast1).
9073 remote backend:
9075 * Renamed omtcpsrv to xapian-tcpsrv and omprogsrv to xapian-progsrv.
9077 packaging:
9079 * RPM packaging now has a separate package for the runtime libraries to
9080   allow 32 and 64 bit versions to be installed concurrently.
9082 * RPM for xapian-core now includes binaries from xapian-examples.
9084 debug code:
9086 * Fixed to compile with debug tracing enabled.
9088 Xapian-core 0.8.2 (2004-09-13):
9090 API:
9092 * Removed the compatibility layer which allowed programs written against the
9093   pre-0.7.0 API to be compiled.
9095 * Added new ESet methods swap(), back() and operator[].
9097 * Xapian::WritableDatabase::replace_document can now be used
9098   to add a document with a specific docid (to allow keeping docids
9099   in sync with numeric UIDs from another system).
9101 * Added Xapian::WritableDatabase::replace_document and
9102   delete_document variants which take a unique id term name rather
9103   than a document id.
9105 * Enquire::get_mset(): If a matchdecider is specified and no matches
9106   are requested, the lower bound on the number of matches must be 0
9107   (since the matchdecider could reject all the matches).
9109 * Renamed Query::is_empty() to Query::empty() for consistency.  Keep
9110   Query::is_empty() for now as a deprecated alias.
9112 * Enquire::set_sorting() now takes an optional third parameter which allows
9113   you to specify a sort by value, then relevance, then docid instead of
9114   by value then docid.
9116 * Enquire::get_mset() now takes an optional "check_at_least" parameter
9117   which allows Omega's MIN_HITS functionality to be implemented in the matcher
9118   (where it can be done a bit more efficiently).
9120 testsuite:
9122 * Reworked quartztest's positionlist1 into a generic api test as apitest's
9123   poslist3.
9125 * apitest: Reenabled allterms2, but with the iterator copying parts removed -
9126   TermIterator is an input_iterator so that part was invalid.
9128 * Overhauled btreetest and quartztest - tests at the Btree level are now all
9129   in btreetest.  Those at the QuartzDatabase level are in quartztest.
9131 * Split api_db.cc into 3 files as it has grown rather large.
9133 * tests/runtest: Added support for easily running gdb on a test program,
9134   automatically sorting out srcdir and libtool.
9136 quartz backend:
9138 * Refactored the quartz backend code to reduce the number of layered classes
9139   and eliminate unnecessary buffering, reducing memory usage so that more
9140   posting list changes can be batched together (see next change) and database
9141   building can be done several times faster.
9143 * Added tunable flush threshold - set XAPIAN_FLUSH_THRESHOLD=50000 to flush
9144   every 50000 documents.  The default is now every 10000 documents (was
9145   every 1000 documents previously).  The optimum value will most likely
9146   depend on your data and hardware.
9148 * WritableDatabase::get_document() no longer forces pending changes to be
9149   flushed.  The document will read things lazily from the database, and that
9150   reading may trigger a forced flush).
9152 * WritableDatabase::get_avlength() no longer forces pending changes to be
9153   flushed.  This means you can now search a modified WritableDatabase without
9154   causing a flush unless the search includes a term whose postlist has pending
9155   modifications.
9157 * Reduced quartz postlist chunk threshold from "2048 or a few bytes more" to
9158   "2000 or a few bytes more" so that full size chunks won't get split by the
9159   Btree.
9161 * Improved the "Db block overwritten" message.  The DatabaseCorruptError
9162   version now suggests multiple writers may be the cause, while the
9163   DatabaseModifiedError version uses less alarming wording and says to call
9164   Database::reopen().
9166 * QuartzWritableDatabase now stores the total document length and the last
9167   docid itself rather than tallying added and removed document length and
9168   writing the last docid back every time a document is added.  This gives
9169   cleaner code and a small performance win.
9171 * Make the first key null for blocks more than 1 away from the leaves.
9172   It saves disk space for a tiny CPU and RAM cost so is bound to be
9173   a win overall.
9175 * matcher/localmatch.cc: Fixed problems handling termweights in queries with
9176   the same term repeated (bug #37) and added regression test (qterminfo2).
9178 * Sped up iteration over all the terms in a database (QuartzCursor now only
9179   reads the tag from the Btree if asked to).
9181 * Cancelling an operation is now implemented more efficiently.
9183 inmemory backend:
9185 * Fixed bugs with deleting a document while a PostingIterator over it is
9186   active.
9188 muscat36 backend:
9190 * Fixed to compile now that internal_end_session() has gone (broken in 0.8.1).
9192 build system:
9194 * Fixed to compile when configured with --disable-inmemory (bug #33).
9196 * XO_LIB_XAPIAN now AC_SUBSTs XAPIAN_VERSION so your application's build
9197   system can easily check for a particular version of Xapian.
9199 * When compiling with GCC, we check that the compiler used to compile the
9200   library and the compiler used to compile the application have compatible
9201   C++ ABI versions.  Unfortunately GCC 3.1 incorrectly reports the same
9202   ABI version as GCC 3.0, so we now special case that test.
9204 * Bumped the versions of the autotools we require for bootstrapping, and
9205   updated the documentation of these in the HACKING document.
9207 * Quote macro names to fix warnings from newer aclocal.
9209 documentation:
9211 * Improved API documentation for Xapian::WritableDatabase::replace_document and
9212   delete_document.
9214 * Added documentation comments for MSet methods size(), empty(), swap(),
9215   begin(), end(), back().
9217 * Removed bogus documentation comments saying that some Enquire methods can
9218   throw DatabaseOpeningError.
9220 * Updated quartz design docs to reflect recent changes.  Also pulled
9221   out the Btree and Bcursor API docs and slotted them in as doxygen
9222   documentation comments - this way they're much more likely to
9223   be kept up-to-date.
9225 * Corrected multiple occurrences of "an Xapian::XXX" to "a Xapian::XXX"
9226   (presumably these all resulted from replacing "Om" with "Xapian::").
9228 * Various minor updates and improvements.
9230 portability:
9232 * Reworked how we cope with fcntl.h #define-ing open on Solaris.  This change
9233   finally allows Sun's C++ compiler to produce a working Xapian build on
9234   sparc Solaris!
9236 * configure.ac: Don't define DATADIR - we no longer use it and clashes
9237   with more recent mingw headers.
9239 * matcher/andpostlist.cc: Initialise lmax and rmax to 0.  This cures
9240   the SIGFPE on apitest's qterminfo2 on alpha linux.
9242 Xapian-core 0.8.1 (2004-06-30):
9244 API:
9246 * New method Xapian::Database::get_lastdocid which returns the highest used
9247   document id for a database (useful for re-synchronizing an indexer which
9248   was interrupted).  Implemented for quartz and inmemory.
9250 * Xapian::MSet::get_matches_*() methods now take collapsing into account, and
9251   the documentation has been clarified to state explicitly that collapsing and
9252   cutoffs are taken into account (bug#31).
9254 * Xapian::MSet: Need to adjust index by firstitem when indexing into items
9255   (bug#28).
9257 * MSetIterator and ESetIterator are now bidirectional iterators (rather than
9258   just input iterators)
9260 * Fixed post-increment forms of PostingIterator, TermIterator,
9261   PositionIterator, and ValueIterator so that *i++ works (as it must for them
9262   to be true input iterators).
9264 * Xapian::QueryParser: If we fail to parse a query, try stripping out
9265   non-alphanumerics (except '.') and reparsing.
9267 * Fixed memory leaked upon Xapian::QueryParser destruction.
9269 * Removed several unused Xapian::Error subclasses (these were used by the
9270   indexer framework which we decided was a failed experiment).
9272 testsuite:
9274 * queryparsertest: Pruned near-duplicate queryparsertest testcases.
9276 * queryparsertest: Added test case for `term NOT "a phrase'.
9278 * remotetest: Use 127.0.0.1 instead of localhost so that tcpmatch1 doesn't fail
9279   just because the network setup is broken.
9281 * apitest: Make emptyquery1 check that Query("") causes an InvalidArgumentError
9282   exception.
9284 quartz backend:
9286 * Fixed bug which meant we sometimes failed to remove a posting when deleting
9287   or replacing a document.
9289 * Fixed PostlistChunkReader to take a copy of the postlist data being read to
9290   avoid problems with reading data from a string that's been deleted.
9292 * Fixed bug in postlist merging which could occasionally extend a postlist
9293   chunk to overlap the docid range of the next chunk.
9295 * Eliminated the split cursor in each Btree object - we only actually need a
9296   single block buffer to handle splitting blocks.  This reduces the memory
9297   overhead of each Bcursor (and hence each QuartzPostList).
9299 * Changed 2 calls to abort() to throw Xapian::DatabaseCorruptError instead,
9301 * If Btree is writable, throw DatabaseCorruptError if we detect overwritten.
9303 * Check the return value of fdatasync()/fsync()/_commit() and raise an error.
9304   If they fail, we really want to know as it could cause data corruption.
9306 * Assorted clean ups, improved comments, debug tracing, assertions.
9308 * When merging in postlist changes, removed an unneeded call to
9309   QuartzBufferedTable::get_or_make_tag() in a case when we're using a cursor
9310   which has already fetched the tag.
9312 * Added SON_OF_QUARTZ define to disable incompatible changes to database
9313   formats by default, and use it to control the docid encoding for keys such
9314   that we're always inserting at the end of the table when added new documents.
9316 * Reopening the readonly version of a writable Btree is now more efficient
9317   (we used to close and reopen all the files and destroy and recreate a lot
9318   of objects and buffers).
9320 * Share file descriptors between the read and write Btree objects so that a
9321   quartz WritableDatabase now uses 5 fds rather than 10.
9323 * Added configure test for glibc, because otherwise we need to include a header
9324   before we can check for glibc in order to define something we should be
9325   defining before we include any headers!  Defining _XOPEN_SOURCE on OpenBSD
9326   seems to do the opposite to Linux and *disable* pread and pwrite!
9328 backends:
9330 * Stripped out the session machinery - all that is actually required is to
9331   ensure that any unflushed changes are flushed when the destructor runs.
9333 * A few other backend interface cleanups.
9335 build system:
9337 * Unified the shlib version numbers (the small benefit of tracking them
9338   individually makes it hard to justify the extra work required, and having one
9339   version simplifies debian packaging too).
9341 * configure.in: Fix typo (STLPORT_CXXLAGS -> STLPORT_CXXFLAGS)
9343 * Removed trivial m4/Makefile.am and autoconf/Makefile.am and do the work
9344   from the top level Makefile.am instead.  It's easier to see the structure
9345   this way, and it also removes a couple of recursive make invocations which
9346   will speed up builds a little.
9348 documentation:
9350 * HACKING: Added a list of subtasks when doing a release.
9351   Currently it's always me that does this, but it may not always be
9352   and anyhow it'll help me to have a list to run through.
9354 * include/xapian/database.h: Remove references to sessions in doxygen
9355   comments.
9357 * docs/quickstart.html: Corrected lingering reference to "om.h" and
9358   note that we need <iostream>.
9360 * docs/quickstartindex.cc.html,docs/quickstartexpand.cc.html,
9361   docs/quickstartsearch.cc.html: Add <iostream>.
9363 * PLATFORMS,AUTHORS: Updated.
9365 * docs/quartzdesign.html: Corrected various pieces of out of date
9366   information, and improved wording in a couple of places.
9368 * docs/scalability.html: Removed the reference to the Quartz update bottleneck
9369   "currently being addressed for Xapian 0.8" as it's now been addressed!  Also
9370   reworded to remove use of first person (it was originally a message sent to
9371   the mailing list).
9373 Xapian-core 0.8.0 (2004-04-19):
9375 * Omega, xapian-examples and xapian-bindings now have their own NEWS files.
9377 API:
9379 * Throw an exception when an empty query is used to build in the binary
9380   operator Query constructor (previously this caused a segfault.  Added
9381   regression test.
9383 * Made the TradWeight constructor explicit.  This is technically an API change
9384   as before you could pass a double where a Xapian::Weight was required - now
9385   you must pass Xapian::TradWeight(2.0) instead of 2.0.  That seems desirable,
9386   and it's unlikely any existing code will be affected.
9388 * Added "explicit" qualifier to constructors for internal use which take a
9389   single parameter.
9391 * Renamed Xapian::Document::add_term_nopos to Xapian::Document::add_term
9392   (with forwarding wrapper method for compatibility with existing code).
9394 * The reference counting mechanism used by most API classes now handles
9395   creating a new object slightly more efficiently.
9397 * Xapian::QueryParser: Don't use a raw term for a term which starts with a
9398   digit.
9400 testsuite:
9402 * apitest, quartztest: Added a couple of tests, and commented out some test
9403   lines which fail in debug builds.
9405 * quartztest: cause a test to fail if there's still a directory after a call
9406   to rmdir(), or if there isn't a directory after calling mkdir().
9408 * apitest: Check returned docids are the expected values in a couple more
9409   cases.  Improved wording of a comment.
9411 quartz backend:
9413 * We now merge a batch of changes into a posting list in a single pass which
9414   relieves an update bottleneck in previous versions.
9416 * When storing the termlist, pack the wdf into the same byte as the reuse
9417   length when possible - doing so typically makes the termlist 14% smaller!
9418   This change is backward compatible (0.7 database will work with 0.8, but
9419   databases built or updated with 0.8 won't work with 0.7).
9421 * quartzcheck: Check the structure within the postlist Btree as well as
9422   the Btree structures themselves.
9424 * Reduced code duplication in the btree manager and btreechecking code.
9426 * quartzdump: Backslash escape space and backslash in output rather than hex
9427   encoding them; renamed start-term and end-term to start-key and end-key;
9428   removed rather pointless "Calling next" message; if there's an error, write
9429   it to stderr not stdout, and exit with return code 1.
9431 * Corrected a number of comments in the source.
9433 * Removed several needless inclusions of quartz_table_entries.h.
9435 * Removed OLD_TERMLIST_FORMAT code - it has been disabled for since 0.6.0.
9437 * Removed all the quartz lexicon code and docs.  It's been disabled for ages,
9438   and we've not missed it.
9440 build system:
9442 * XO_LIB_XAPIAN autoconf macro can now be called without arguments in the
9443   common case where you want the test to fail if Xapian isn't found.
9445 * Fixed the configure test for valgrind - it wasn't working correctly when
9446   valgrind was installed but was too a version to support VALGRIND_COUNT_ERRORS
9447   and VALGRIND_COUNT_LEAKS.
9449 * GCC 2.95 supported -Wno-long-long and is our minimum recommended version, so
9450   unconditionally use -Wno-long-long with GCC, and don't test for it on other
9451   compilers (the old test incorrectly decided to use it with SGI's compiler
9452   resulting in a warning for every file compiled).
9454 documentation:
9456 * Updated the quickstart tutorial and removed the warning that "this
9457   document isn't up to date".
9459 * docs/intro_ir.html: Added a link to "Information Retrieval" by Keith van
9460   Rijsbergen which can be downloaded from his website!
9462 * docs/quartzdesign.html: Some minor improvements.
9464 * docs/matcherdesign.html: Merged in more details from a message sent to the
9465   mailing list.
9467 * docs/queryparser.html: Grammar fixes.
9469 * Doxygen wasn't picking up the documentation for PostingIterator and
9470   PositionListIterator - fixed.  Added doxygen comments for Xapian::Stopper
9471   and Xapian::QueryParser.
9473 * PLATFORMS: Updated with many results from tinderbox and from users.
9475 * AUTHORS: Updated the list of contributors.
9477 * HACKING: XAPIAN_DEBUG_TYPES should be XAPIAN_DEBUG_FLAGS.
9479 * HACKING: Updated to mention that building from CVS requires
9480   `./configure --enable-maintainer-mode' (or use bootstrap).
9482 * HACKING: Added notes about using "using", and pointers to a couple of useful
9483   C++ web resources.
9485 portability:
9487 * Solaris: Code tweaks for compiling with Sun's C++ compiler.
9489 * IRIX: Code tweaks for compiling with SGI's C++ compiler.
9491 * NetBSD mkdir() doesn't cope with a trailing / on the path - fixed our code to
9492   cope with this.
9494 * mingw/cygwin: Only use O_SYNC (on the debug log) if the headers define it.
9496 * backends/quartz/quartz_table_manager.cc: Fix for building on mingw.
9498 * mingw: Added configure test for link() to avoid infinite loop in our C++
9499   wrapper for link.
9501 * mingw and cygwin both need -Wl,--enable-runtime-pseudo-reloc passing when
9502   linking.  Arrange for xapian-config to include this, and check that the ld
9503   installed is a new enough version (or at least that it was at configure
9504   time).  Also pass to programs linked as part of the xapian-core build.
9506 * cygwin: Close a QuartzDatabase or QuartzWritableDatabase before trying to
9507   overwrite it - cygwin doesn't allow use to delete open/locked files...
9509 * backends/quartz/quartz_termlist.cc: Use Xapian::doccount instead of
9510   unsigned int in set_entries().
9512 * Database::Internal::Internal::keep_alive() should be
9513   Database::Internal::keep_alive().
9515 * Make Xapian::Weight::Weight() protected rather than private as we want to be
9516   able to call it from derived classes (GCC 3.4 flags this, other compilers
9517   seem to miss it).
9519 debug code:
9521 * Open debug log with flag O_WRONLY so that we can actually write to it!
9523 * backends/quartz/quartz_values.cc: Fixed problem with dereferencing
9524   a pointer to the end of a string in debug output.
9526 Xapian 0.7.5 (2003-11-26):
9528 API:
9530 * Xapian::QueryParser now supports prefixes on phrases and expressions (e.g.
9531   author:(twain OR poe) subject:"space flight").
9533 * Added missing default constructors for TermIterator, PostingIterator, and
9534   PositionIterator classes.
9536 * Fixed PositionIterator assignment operator.
9538 testsuite:
9540 * queryparsertest: Added testcase for new phrase and expression prefix support.
9542 * apitest: Added regression tests for API fixes.
9544 backends:
9546 * quartzcompact: Fix the name that the meta file gets copied to (was
9547   /path/to/dbdirmeta rather than /path/to/dbdir/meta).
9549 build system:
9551 * Changed to using AM_MAINTAINER_MODE.  If you're doing development work on
9552   Xapian itself, you should configure with "--enable-maintainer-mode" and
9553   ideally use GNU make.
9555 * Fixed configure test for fdatasync to work (I suspect a change in a recent
9556   autoconf broke it as it relied on autoconf internal naming).
9558 * Fully updated to reflect move of libbtreecheck.la from backends/quartz
9559   to testsuite.  btreetest and quartzcheck should build correctly now.
9561 documentation:
9563 * Added first cut of documentation for Xapian::QueryParser query syntax.
9565 * Fixed incorrectly formatted doxygen documentation comments which resulted in
9566   some missing text in the collated API and internal classes documentation.
9568 * Documented --enable-maintainer-mode and problems with BSD make in HACKING.
9570 * Fixed typo in docs/scalability.html.
9572 * PLATFORMS: Updated from the tinderbox.
9574 omega:
9576 * omega: Parsing of the probabilistic query is now delayed until we need some
9577   information from it.  This means that we can now use options set by the
9578   omegascript template to control the behaviour of the query parser.
9579   $set{stemmer,...} now controls the stemming language (e.g. $set{stemmer,fr})
9580   and $setmap{prefix,...} now sets the QueryParser prefix map (e.g.
9581   $setmap{prefix,subject,XT,abstract,XA}).
9583 * omega: Fixed $setmap not to add bogus entries.
9585 * docs/omegascript.txt: Expanded documentation of $set and $setmap to list
9586   values which Omega itself makes use of.
9588 * omega: Cleaned up the start up code quite a bit.
9590 * omega: Removed the unfinished code for caching omegascript command
9591   expansions.  Added code to cache $dbsize.  The only other value correctly
9592   marked for caching is already being cached!
9594 Xapian 0.7.4 (2003-10-02):
9596 API:
9598 * Fixed small memory leak if Xapian::Enquire::set_query() is called more than
9599   once.
9601 * Xapian::ESet now has reference counted internals (library interface version
9602   bumped because of this).
9604 * Removed unused OmDocumentTerm::termfreq member variable.
9606 * OmDocumentTerm ctor now takes wdf, and replaced set_wdf() with inc_wdf() and
9607   dec_wdf().
9609 * Removed unused open_document() method from SubMatch and derived classes.
9611 * Calls made by the matcher to Document::Internal::open_document() now use the
9612   lazy flag provided for precisely this purpose, but apparently never used -
9613   this should give quite a speed boost to any matcher options which use values
9614   (e.g. sort, collapse).
9616 testsuite:
9618 * Finished off support for running tests under valgrind to check for memory
9619   leaks and access to uninitialised variables.
9621 * apitest: Sped up deldoc4.
9623 * btreetest: Removed superfluous `/'s from constructed paths.
9625 * quartztest: adddoc2 now checks that there weren't any extra values created.
9627 backends:
9629 * quartz: don't start the document's TermIterator from scratch on every
9630   iteration in replace_document().  Should be a small performance win.
9632 * quartz: Pass 0 for the lexicon/postlist table when creating a termlist just
9633   to find the doc length.
9635 * quartz: quartz_table_entries.cc: Removed rather unnecessary use of
9636   const_cast.
9638 * quartz: quartz_table.cc: Removed unused variable.
9640 * quartz: Improved encapsulation of class Btree.
9642 build system:
9644 * libbtreecheck.la now has an explicit dependency on libxapian.la.
9646 * We now set the dependencies for libxapian correctly so that linking
9647   applications will pull in other required libraries.
9649 * matcher/Makefile.am: Ship networkmatch.cc even if "make dist" is run from a
9650   tree with the remote backend disabled.
9652 * configure.in: Sorted out tests for gethostbyname and gethostbyaddr using
9653   standard autoconf macros.
9655 * configure.in: If fork is found, but socketpair isn't, automatically disable
9656   the remote backend rather than configure dying with an error.
9658 * autoconf/: Removed various unused autoconf macros.
9660 portability:
9662 * xapian-config.in: Link with libxapianqueryparser before libxapian, since
9663   that's the dependency order.
9665 * Removed or replaced uses of <iostream> and <iosfwd> in the library sources
9666   - we don't need or want the library to pull in cin and friends.
9668 * extra/queryparser.yy: Fixed to build with Sun's C++ compiler.
9670 * Make the dummy source file C++ rather than C so that automake tells libtool
9671   that this is a C++ library - vital for correct linking on some platforms.
9673 * Makefile.am: Pass -no-undefined to libtool so that we can build build a DLL
9674   on MS Windows.
9676 * configure.in: Fixed check for socketpair - we were automatically disabling
9677   the remote backend on platforms where socketpair is in libsocket
9678   (such as Solaris).
9680 * Use O_BINARY for binary I/O if it exists.
9682 * common/utils.h: mkdir() only takes one argument on mingw.
9684 * common/utils.h,testsuite/backendmanager.cc: Touch file using open() rather
9685   than system().
9687 * common/utils.cc: Fixed to compile if snprintf isn't available.
9689 documentation:
9691 * docs/scalability.html: Fixed slip (32GB should be 32TB);  Added note about
9692   Linux 2.4 and ext2 filesize limits.
9694 * PLATFORMS: Updated.
9696 * NEWS: Fixed a few typos.
9698 bindings:
9700 * xapian.i: using namespace std in SWIG parsed segment to sort out typemaps.
9702 packaging:
9704 * Updated RPM packaging.
9706 omega:
9708 * omega: $topdoc now ensures the match has been run; $date no longer ensures
9709   the match has been run.
9711 * omega: Fixed to build with Sun's C++ compiler.
9713 Xapian 0.7.3 (2003-08-08):
9715 API:
9717 * MSetIterator: Fixed MSetIterator::get_document() to work when get_mset() was
9718   called with first != 0 (regression test msetiterator3).
9720 testsuite:
9722 * internaltest: Changed test exception1 to actually test something (hopefully
9723   what was originally intended!)
9725 * Added long option support to the testsuite programs (and quartzdump).
9727 * Testsuite now builds on platforms for which we use our own stringstream
9728   implementation.
9730 * Only use \r in test output if the output is a tty.
9732 * Increased default timeout used by tests running on the remote backend from 10
9733   seconds to 5 minutes to avoid tests failing just because the machine running
9734   them is slow and/or busy.
9736 * Fixed check for broken exception handling - we were getting "Xapian::"
9737   prefixed to one version and not on the other.
9739 * tests/runtest: Set srcdir if it isn't already to make it easy to manually run
9740   test programs from a VPATH build.
9742 * apitest: Check termfreq in allterms4.
9744 backends:
9746 * quartz: Fixed allterms TermIterator to not give duplicate terms when a
9747   posting list is chunked; added regression test (allterms4).
9749 * quartz: Check for EINTR when reading or writing blocks and retry the
9750   operation.  This should mean quartz won't fail falsely if a signal is
9751   received (e.g. if alarm() is used).
9753 build system:
9755 * Renamed libomqueryparser to libxapianqueryparser - for backward compatibility
9756   we still provide a library with the old name for now.
9758 * xapian.m4: Added XO_LIB_XAPIAN to replace OM_PATH_XAPIAN.  XO_LIB_XAPIAN will
9759   automagically enable use of "xapian-config --ltlibs" if A[CM]_PROG_LIBTOOL is
9760   used in configure.in.
9762 * xapian-config: Now supports linking with libtool - using libtool means that
9763   the run-time library path is set and that you can now link with an
9764   uninstalled libxapian.  Also xapian-config will now work once xapian-core's
9765   configure has been run, rather than only after "make all".
9767 * xapian-config: Now automatically tries to link libxapianqueryparser too.
9769 * bootstrap: Removed bootstrap scripts in favour of top-level bootstrap which
9770   creates a top-level configure you can optionally use to configure all checked
9771   out Xapian modules with one command, and which creates a top level Makefile
9772   to build all checked out Xapian modules with one command.
9774 * Added versioning information to libxapian and libxapianqueryparser.
9776 * xapian-example/omega: Use libtool and XO_LIB_XAPIAN so we can link with an
9777   uninstalled Xapian, and so the run time load path gets built into the
9778   binaries (no need to set LD_LIBRARY_PATH just because you install Xapian with
9779   a non-standard prefix).
9781 * configure: Stop the API documentation from being regenerated when
9782   include/xapian/version.h changes (since it's generated by configure).
9784 * Fixed "make dist" in VPATH builds.
9786 portability:
9788 * common/getopt.h: #include <stdlib.h>, <stdio.h>, and <unistd.h> before
9789   defining getopt as a macro - this avoids problems with clobbering prototypes
9790   of getopt() in system headers.
9792 * bin/quartzcompact.cc: Need stdio.h for rename().
9794 * languages/Makefile.am: Fixed compilation for compilers other than GCC.
9796 * Moved rset serialisation into a method of RSet::Internal, so
9797   omrset_to_string() is now just glue code.  This eliminates the need for it to
9798   be a friend of RSet::Internal which Sun's C++ compiler didn't seem to be able
9799   to cope with.
9801 documentation:
9803 * Fix incorrect documentation comment for Enquire::set_set_forward().  (Looked
9804   like a cut&paste error)
9806 * COPYING: Updated FSF address, and reinstated missing section: "How to Apply
9807   These Terms to Your New Programs"
9809 * PLATFORMS: Updated some linux results: RH7.3 on x86, and Debian on alpha and
9810   arm; Updated FreeBSD success report; Updated with results from the tinderbox.
9812 * docs/mkdoc.pl: Don't choke on a comment at the end of the DIST_SUBDIRS line
9813   in a Makefile.am.
9815 * HACKING: Improved note about why libtool 1.5 is needed.
9817 * HACKING: Added note about additional tools needed for building a
9818   distribution.
9820 bindings:
9822 * Fixed VPATH builds.
9824 * python: Fixed to link with libomqueryparser.
9826 * guile,tcl8: Updated typemaps to SWIG 1.3 style.
9828 omega:
9830 * omindex.cc: Added missing `#include <errno.h>'.
9832 * omindex/scriptindex: Fixed signed character issue in accent normalisation.
9834 * omindex: fixed memory and file descriptor leak on indexing a zero-sized file.
9836 * omindex: Fixed sense of test for unreadable files.
9838 * omindex: Improved log messages to distinguish re-indexed/added.
9840 * omindex,omega,scriptindex: Fixed to compile with mingw.
9842 * omindex: Fixed to compile with GNU getopt so we can build on non-glibc
9843   platforms.
9845 examples:
9847 * msearch: Quick fix to get mingw building going.
9849 * getopt: Copied over our fixes for better C++ compatibility.
9851 * simplesearch: Stem search terms.
9853 * simpleindex: Fixed not to run words together between lines.
9855 * simpleindex: Create database if it doesn't exist.
9857 Xapian 0.7.2 (2003-07-11):
9859 testsuite:
9861 * Fixed NULL pointer dereference when a test threw an unexpected exception.
9863 backends:
9865 * Quartz: When asked to create a quartz database, try to create the directory
9866   if it doesn't already exist.  Then we don't have to do it in every single
9867   Xapian program which wants to create a database...
9869 portability:
9871 * common/getopt.h: Fixed to work better with C++ compilers on non-glibc
9872   platforms.
9874 * common/utils.h: missing #include <ctype.h>
9876 * Quartz: Defined _XOPEN_SOURCE=500 for GLIBC so we get pread() and pwrite().
9878 * common/utils.h: Improved mingw implementation of rmdir().
9880 documentation:
9882 * PLATFORMS: Added MacOS X 10.2 success report.
9884 * Improvements to doxygen-generated documentation.
9886 bindings:
9888 * Moved to separate xapian-bindings module.
9890 * Added configure check for SWIG version (require at least 1.3.14).
9892 * bindings/swig/xapian.i: Fixed over-enthusiastic automatic conversion of
9893   termname to std::string.
9895 * PHP4 bindings much closer to working once again; updated guile and tcl8
9896   somewhat.
9898 omega:
9900 * omega: If the same database is listed more than once, only search the first
9901   occurrence.
9903 * omega: use snprintf to help guard against buffer overflows.
9905 Xapian 0.7.1 (2003-07-08):
9907 testsuite:
9909 * Fixed testsuite programs to not try to use "rm -rf" under mingw.
9911 backends:
9913 * Quartz: Use pread() and pwrite() on platforms which support them.  Doing so
9914   avoids one syscall per block read/write.
9916 * Quartz block count is now unsigned, which should nearly double the size of
9917   database for a given block size.  Not tested this yet.
9919 omega:
9921 * omindex: Fixed compilation problem in 0.7.0.
9923 documentation:
9925 * Added new document discussing scalability issues.
9927 * PLATFORMS: Updated.
9929 Xapian 0.7.0 (2003-07-03):
9931 API:
9933 * Moved everything into a Xapian namespace, which the main header now being
9934   xapian.h (rather than om/om.h).
9936 * Three classes have been renamed for better naming consistency:
9937   OmOpeningError is now Xapian::DatabaseOpeningError, OmPostListIterator is
9938   now Xapian::PostingIterator, and OmPositionListIterator is now
9939   Xapian::PositionIterator.
9941 * xapian.h includes <iosfwd> rather than <iostream> - if you were relying on
9942   the implicit inclusion, you'll need to add an explicit "#include <iostream>".
9944 * Replaced om_termname with explicit use of std::string - om_termname was just
9945   a typedef for std::string and the typedef doesn't really buy us anything.
9947 * Older code can be compiled by continuing to use om/om.h which uses #define
9948   and other tricks to map the old names onto the new ones.
9950 * Define XAPIAN_VERSION (e.g. 0.7.0), XAPIAN_MAJOR_VERSION (e.g. 0), and
9951   XAPIAN_MINOR_VERSION (e.g. 7).
9953 * Updated omega and xapian-examples to use Xapian namespace.
9955 queryparser:
9957 * Xapian::QueryParser: Accent normalisation added; Improved error reporting;
9958   Fixed to handle the most common examples found in the wild which used to give
9959   "parse error".
9961 bindings:
9963 * Python bindings brought up to date - use ./configure --enable-bindings to
9964   build them.  Requires Python >= 2.0 - may require Python >= 2.1.
9966 * Enabled optional building of bindings as part of normal build process.  Old
9967   Perl and Java bindings dropped; for Perl, use Search::Xapian from CPAN; Java
9968   JNI bindings will be replaced with a SWIG-based implmentation.
9970 internal implementation changes:
9972 * Removed one wrapper layer from the internal implementation of most API
9973   classes.
9975 * Xapian::Stem now uses reference counted internals.
9977 * Internally a lot of cases of unnecessary header inclusion have been removed
9978   or replaced with forward declarations of classes.  This should speed up
9979   compilation and recompilation of the Xapian library.
9981 * Suppress warnings in Snowball generated C code.
9983 * Reworked query serialisation in the remote backend so that the code is now
9984   all in one place.  The serialisation is now rather more compact and no longer
9985   relies on flex for parsing.
9987 testsuite:
9989 * Moved all the core library tests to tests subdirectory.
9991 * apitest now allows backend to be specified with "-b" rather than having to
9992   mess with environmental variables.
9994 * Testsuite programs can now hook into valgrind for leak checking, undefined
9995   variable checking, etc.
9997 backends:
9999 * Fixed parsing of port number in remote stub databases.
10001 * Quartz: Improved error message when asked to open a pre-0.6 Quartz database.
10003 * Quartz backend: Workaround for shared_level problem turns out to
10004   be arguably the better approach, so made it permanent and tidied up
10005   code.
10007 build system:
10009 * Build system fixed to never leave partial files in place of the expected
10010   output if a build is interrupted.
10012 * quartzcheck, quartzdump, and quartzcompact are now built by "make" rather
10013   than only by "make check".
10015 * xapian-config: Removed --prefix and --exec-prefix - you can't reliably
10016   install Xapian with a different prefix to the one it was configured with,
10017   yet these options give the impression you can.
10019 miscellaneous:
10021 * Fixed sending debug output to a file with XAPIAN_DEBUG_LOG with a value which
10022   didn't contain "%%" (%% expands to the current PID).
10024 * Fixed Xapian::MSetIterator::get_collapse_count() to work as intended.
10026 omega:
10028 * omindex,scriptindex: Normalise accents in probabilistic terms.
10030 * omindex: Read output from pstotext and pdftotext via pipes rather
10031   than temporary files to side-step the whole problem of secure temporary file
10032   creation; Use pdfinfo to get the title and keywords from when indexing a PDF;
10033   Safe filename escaping tweaked to not escape common safe punctuation.
10035 * omindex: Implement an upper limit on the length of URL terms - this is a
10036   slightly conservative 240 characters.  If the URL term would be longer than
10037   this, its last few bytes are replaced by a hash of the tail of the URL.  This
10038   means that (apart from hopefully very rare collisions) urlterms should still
10039   be unique ids for documents.  This is forward and backward compatible for
10040   URLs less than 240 characters.
10042 * omindex: Clean up processing of HTML documents:
10043   - Ignore the contents of <script> and <style> tags in HTML.
10044   - Strip initial whitespace in each tag in an HTML document.
10045   - Try not to split words in half when truncating title and summary.
10047 * query.cc: Set STEM_LANGUAGE near the start of the file so it's easy
10048   for users to change until we get better configurability.
10050 * omega: Replaced half-hearted logging support with flexible OmegaScript-based
10051   approach with new $log command.  Also added $now to allow the current
10052   date/time to be logged.
10054 * templates/xml: added collapse info to xml template.
10056 documentation:
10058 * Assorted minor documentation improvements.
10060 * PLATFORMS: Updated.
10062 rpms:
10064 * Improved RPM packaging of xapian-core and omega.
10066 Xapian 0.6.5 (2003-04-10):
10068 * OmEnquire: optimised the handling when sort_bands == 1 and fixed incorrect
10069   results in this and some other sorting cases; added some sorting testcases.
10071 * OmMSetIterator: added get_collapse_count() which returns a lower bound on
10072   the number of items which were removed by collapsing onto the current item.
10074 * OmStem: added default OmStem constructor and "none" language.  Both of these
10075   give a stemmer object which leaves terms unchanged which should allow for
10076   simpler logic in programs using Xapian.  The default constructor also removes
10077   the need to mess with pointers in some cases.
10079 * Automatically disable the remote backend if we don't have fork() since the
10080   remote backend requires it in several places.
10082 * Fixed to build with debug enabled.
10084 * testsuite: fixed to still build when some backends are disabled.
10086 * extra/parsequerytest.cc: Fixed to build with GCC 2.95.
10088 * Testsuite: Added regression test for Quartz bug which caused problems with
10089   long terms on machines with signed chars.
10091 * testsuite/index_utils.cc: Handling of ^x was just downright wrong due to a
10092   typo.
10094 * Improved portability: Fix for 64 bit machines.  Fixed btreetest to build with
10095   older compilers lacking <sstream>.  Xapian is now much closer to building
10096   with Sun's CFront-based Sun Pro C++ compiler, and with a Linux to mingw
10097   cross-compiler.
10099 * PLATFORMS: Updated with the results of many test builds.
10101 * Improved RPM packaging of xapian-core and omega.
10103 * Documentation: Use http://www.doxygen.org/ as URL for doxygen; Fixed bad link
10104   to our own website in overview.html; code_structure.html now only includes
10105   directories in the build system.
10107 * HACKING: updated.
10109 * Removed bugs/todo.xml, TODO, TODO.release, docs/todo.html, and
10110   docs/todo-release.html from the distribution.  Bugs and todo items will be
10111   tracked in Bugzilla instead.
10113 * Install docs in /usr/share/doc/xapian-core instead of /usr/share/xapian-core.
10115 * omega: If xP and P are both empty, there may be a boolean query, so don't
10116   force first page of hits.
10118 * omega: Fixed off-by-one error in rounding down topdoc - it was possible to
10119   get to an empty page of hits if there were exactly a multiple of HITSPERPAGE
10120   matches and the matcher over-estimated the number of matches and Omega
10121   displayed page links.
10123 * omega: Fixed handling of multiple DB parameters to be as documented.
10125 * omega: Added $collapsed to report get_collapse_count() for the current hit.
10127 * omega: Added $transform{} which does regexp manipulation (currently disabled
10128   until configure tests for regexp library are added)
10130 * omega: Added $uniq{} to eliminate duplicates from a sorted list.
10132 * omega: Don't force page 1 for a query with repeated terms!
10134 * omega: removed duplicates from terms listed in term frequencies.
10136 * omega: Added cgi parameter COLLAPSE to collapse on key values
10138 * omega: Added $value{key[,docid]} support to omegascript
10140 * omega: Renamed DATE1, DATE2, and DAYSMINUS to the more meaningful START, END,
10141   and SPAN (NB SPAN is days before END, or after START, or before today -
10142   whereas SPAN was before *DATE1* or before today).  The old parameters names
10143   are supported (with the original semantics) for now.
10145 * omega: Actually install documentation!
10147 * templates/query: propagate B boolean filters
10149 * templates/godmode: removed link to EuroFerret image
10151 * templates/godmode: added value dumping, for values from 0-255
10153 * omindex: Report correct version number (was hard-wired to 1.0!)
10155 * scriptindex: Allow '_' in fieldnames.  Diagnose bad characters in fieldnames
10156   better.
10158 * dbi2omega: Added DBUSER and DBPASSWD environmental variable support so that
10159   password protected DBs can easily be used
10161 * scriptindex.cc: added missing "#include <stdio.h>" which caused builds
10162   to fail for some platforms.
10164 Xapian 0.6.4 (2002-12-24):
10166 * Quartz backend: Fixed double setting of position list when updating a
10167   document with term position information (overall result was correct, just
10168   inefficient); when deleting a position_list, don't check if it's empty,
10169   just ask the layer below to delete it and let it handle the case when
10170   there's nothing to delete; Fixed unpacking of termlist on platforms where
10171   char is signed.
10173 * OmQueryParser: Added support for searching probabilistic fields (using
10174   <field>:<term>); the unstem multimap now includes "." on the end of a
10175   term if it was there in the query.
10177 * Don't include "om.h" as a dependency for the api docs since it's generated
10178   a configure time and the dependency was forcing users to regenerate the
10179   documentation, which requires doxygen to be installed.
10181 * Bindings: Python bindings updated to work with the updated API (still
10182   disabled by default).
10184 * Muscat 3.6 backend: Fixed to build with the new database factory functions;
10185   fixed compilation warnings; Muscat 3.6 DA and DB databases don't support
10186   positional information.  Instead of throwing an exception when we try to
10187   access it, return an empty position list (like a quartz database with no
10188   position information would).  This allows copydatabase to be used to convert
10189   a Muscat 3.6 database to a quartz one.
10191 * Documentation: quartzdesign and todo list updated.
10193 * quartzcheck: default mode changed to "v" rather than "+", since "+" is too
10194   verbose for a btree of any size; if you pass a quartz database directory,
10195   quartzcheck will now check all the tables which make up a quartz database.
10197 * quartzcompact: new tool which makes a copy of a quartz database with full
10198   compaction turned on - this results in a smaller database which is faster
10199   to search.  The next update will result in a lot of block splitting though
10200   (since all blocks are as full as possible).
10202 * omega: Added $unstem to map a stemmed term to the form(s) used in the query;
10203   $queryterms now only includes the first occurrence of each stemmed form;
10204   $prettyterm makes use of the unstem map; prefer MINHITS to MIN_HITS and
10205   RAWSEARCH to RAW_SEARCH since none of the other CGI parameter names have
10206   _ separating words (continue to support old names for now); fixed default
10207   template to not generate topterms twice, and fixed topterms to not stick
10208   outside the green box; corrected omegascript docs - it's $setrelevant
10209   not $set_relevant.
10211 * scriptindex: index=nopos with new indexnopos action; index and indexnopos now
10212   take an optional prefix argument; index=nopos is handled specially for
10213   backwards compatibility; added new data action to generate terms for date
10214   range searching.
10216 Xapian 0.6.3 (2002-12-14):
10218 * Updated PLATFORMS and todo list.  Noted in HACKING that Bison 1.50 seems to
10219   work with Xapian.
10221 * OmQueryParser now creates an "unstem" multimap to allow probabilistic
10222   query terms to be converted back to the form the user originally typed.
10224 * Updated documentation for remote protocol description and the quickstart
10225   tutorial which were both very out of date.
10227 * No longer use OmSettings to pass matcher parameters.  This completes the
10228   removal of OmSettings.
10230 * Added workaround for problem with cursors sharing levels in the btree.
10231   This should fix sporadic problems with large databases (small databases
10232   have fewer btree levels so aren't affected).
10234 * Stub databases now work again, though with a different format.  The new
10235   format allows multiple databases to be specified in the stub file.
10237 * OmEnquire::get_eset() now takes a flags argument of bit constants |-ed
10238   together instead of 2 bools.
10240 * Applied Martin Porter's better fix for the btree sequential addition bug
10241   which Richard fixed a few months ago.  Richard's fix resulted in a correct
10242   btree, but didn't always utilise space as efficiently as possible.
10244 * Fixed the remote backend to handle weighting schemes after the OmSettings
10245   changes.  You can now even implement your own weighting scheme and use it
10246   with the remote backend provided you register it with SocketServer at
10247   runtime (this feature has been on the todo list for ages).
10249 Xapian 0.6.2 (2002-12-07):
10251 * Set env var XAPIAN_SIG_DFL to stop the testsuite installing its
10252   signal handler (may be useful with some debugging tools).
10254 * backends/quartz/btree.cc: max_item_size wasn't being set due to
10255   some over-zealous code pruning.  It was defaulting to 0, and
10256   was causing the code to write off the end of allocated memory
10257   blocks.
10259 * matcher/localmatch.cc: fixed handling of wtscheme() - we were
10260   trying to use it for the extra weights, and then double
10261   deleting it!
10263 * common/omdebug.cc,common/omdebug.h: Fixed permissions on newly
10264   created log file (was getting 000!); Simplified class internals;
10265   Renamed env vars: OM_DEBUG_FILE is now XAPIAN_DEBUG_LOG,
10266   OM_DEBUG_TYPES is now XAPIAN_DEBUG_FLAGS (old versions still work
10267   for now).
10269 * testsuite/testsuite.cc: Fixed so running "gdb .libs/apitest"
10270   finds srcdir (for an in-tree build at least).
10272 * Fixed to compile with --enable-debug=full.
10274 * docs/remote.html: Updated from OmSettings to factory functions.
10276 * PLATFORMS: ixion is actually Linux 2.2.
10278 * OmWritableDatabase now has a default constructor.
10280 * Weighting scheme now specified by passing OmWeight object to OmEnquire.
10281   This also allows user weighting schemes (just subclass OmWeight and
10282   pass in an instance of this new class).  [This doesn't currently work
10283   with the remote backend.]
10285 * No longer use OmSettings to specify parameters for constructing databases.
10286   Instead there's a factory function for each database type - temporary naming
10287   scheme is OmXxx__open(), mostly because it's easy to grep for later.
10288   Instead of create and overwrite flags, we pass in a value - a new possible
10289   opening mode is "create or open".  [At present stub databases and the
10290   machinery in InMemory to allow the multierrhandler1 test aren't working.
10291   Everything else should be.]
10293 * OmEnquire::get_eset() takes parameters instead of an OmSettings object.
10295 * Fixed reversed sense of use_query_terms (and fixed reversed sense test in
10296   apitest which meant this wasn't spotted).
10298 * Documentation: Link to annotated class lists in doxygen generated
10299   documentation instead of the rather empty index pages; added doxygen
10300   markup so that apidoc now documents header files; updated todo list.
10302 * Documentation: intro doc thing was very out of date in places - fixed.
10304 * Omega: index .php files as HTML, with the PHP code stripped out; omindex
10305   return non-zero return code if an unexpected exception is caught; fixed
10306   HTML parser to not read one character past the end of the document in
10307   some cases; updated in line with OmSettings related changes to the API;
10308   Fixed $dbname to return "default" for the default database instead of "";
10309   templates/query: Removed now unused xDEFAULTOP hidden field, and superfluous
10310   "}"; dbi2omega now more efficient and can be restricted to listed fields.
10312 Xapian 0.6.1 (2002-11-28):
10314 * Fixed to compile with GCC 3.0.
10316 * PLATFORMS: Updated.
10318 Xapian 0.6.0 (2002-11-27):
10320 * Quartz database backend: lexicon disabled (./configure CXXFLAGS=-DUSE_LEXICON
10321   to reenable it), and encoding schemes simplified and made more compact;
10322   extended and added test cases; minimum block size is now 2048 bytes (as
10323   documented before, but now we actually enforce this); btree checking code
10324   split off and only linked in when required; tidied up btreetest's output.
10326 * Replaced our stemmers with those from Snowball.  These give better results,
10327   and are actively maintained by Martin Porter (who wrote the original Xapian
10328   stemmers too).  It also means that Xapian now has stemmers for Finnish,
10329   and Russian, and an implementation of Lovins' English stemmer.
10331 * Assorted improvements to the documentation, especially the documentation
10332   of the internals of the Quartz backend.
10334 * Removed the three uses of RTTI (typeid() and dynamic_cast<>) - one was
10335   totally superfluous, and the other two easily avoided.
10337 * Omega and simpleindex example: limit probabilistic term length to 64
10338   characters to stop the index filling up with junk terms which nobody will
10339   ever search for.
10341 * Omega: Added dbi2omega perl script to dump any database which perl DBI can
10342   access into the dump format expected by scriptindex.
10344 Xapian 0.5.5 (2002-12-04):
10346 * Fixed compilation with --enable-debug.
10348 * Minor documentation updates.
10350 * Omega: Fixed paging on default database; removed xDEFAULTOP from the query
10351   template as it's no longer used; removed bogus unmatched '}' from query
10352   template; added dbi2omega perl script to dump any database which perl DBI
10353   can access into the dump format expected by scriptindex; limit length of
10354   probabilistic terms generated to 64 characters.
10356 Xapian 0.5.4 (2002-10-16):
10358 * Fixed a compilation error with "make check" when using GCC 3.2.
10360 * PLATFORMS: checked 0.5.3 works on OpenBSD and Solaris 7.
10362 Xapian 0.5.3 (2002-10-12):
10364 Notable changes: Improvements to the test suite, and internal code cleanups:
10366 * Internal code cleanups on Quartz Btree implementation.
10368 * Minor documentation updates (TODO and PLATFORMS updated; Martin Porter's
10369   stemming paper removed - see the Snowball site for background stemmer
10370   info).
10372 * Implemented QuartzAllTermsList::get_approx_size().
10374 * Removed a couple of occurrences of "using std::XXX;" from externally
10375   visible headers.
10377 * With GCC, add warning flags "-Wall -W" rather than "-Wall -Wunused" (-Wall
10378   implies -Wunused anyway).  Fixed all the warnings this throws up, except in
10379   languages/ (that code is to be replaced with Snowball soon).
10381 * Test suite: Disable colour test output if stdout isn't a terminal and
10382   reworked check for broken exception handling as the previous  version never
10383   seemed to fire.  Other assorted minor improvements.
10385 * include/om/om.h is now removed on "make distclean" rather than "make clean".
10387 Xapian 0.5.2 (2002-10-06):
10389 Further improvements to documentation and portability:
10391 * docs/: converted all text docs to HTML (except omsettings which will
10392   has odd markup (LaTeX?) and will probably soon be obsolete anyway).
10394 * remote backend: Fixed handling of timeouts which are now in the past - fixes
10395   test failures with redhat/x86.
10397 * quartz backend: now works on 64 bit platforms.
10399 * test suite: try to spot mishandled exceptions and stop them causing bogus
10400   OMEXCEPT failures.
10402 Xapian 0.5.1 (2002-10-02):
10404 This release fixes features improved documentation and some build system
10405 portability fixes.
10407 * PLATFORMS: updated with more test results.
10409 * docs/: tidied up layout of HTML documentation; converted the notes about
10410   BM25 into HTML; updated stemmer docs to reflect intention to use Snowball
10411   instead; included HTML versions of quickstart*.cc.
10413 * automake 1.6.3 and autoconf 2.54 are now required for those working
10414   from CVS to fix a problem with the generated Makefiles and Solaris
10415   make.
10417 * net/Makefile.am: Fixed building of readquery.cc from readquery.ll.
10419 * buildall script is now deprecated - use the new streamlined bootstrap script
10420   in preference.
10422 Xapian 0.5.0 (2002-09-20):
10424 The last release of the software that is now known as Xapian was OmSee 0.4.1 on
10425 November 24th 2000, not far from 2 years ago.
10427 There's been a significant amount of development in this time, so we've
10428 summarised the most notable changes and improvements:
10430   * The project is now called "Xapian". We've renamed the modules in the light
10431     of this change:
10433       + "om" is now "xapian-core"
10434       + "om-examples" is now "xapian-examples", and now contains small,
10435         instructive examples which demonstrate how to use Xapian to implement
10436         particularly features.
10437       + Added "xapian-applications" which contains larger sample applications
10439   * Much improved build system - should now build "out of the box" on many Unix
10440     platforms. Can now VPATH build with vendor tools on most platforms. Builds
10441     as cleanly as we can achieve with GCC 2.95.* (some bogus warnings due to
10442     compiler bugs). Should build without warnings on GCC 3.0, 3.1, and 3.2.
10444   * If using GCC, om/om.h now contains a check that the compiler used to build
10445     Xapian and the compiler used to build the application have compatible C++
10446     ABIs. So you get a clear error message early from the first attempt to
10447     compile a file rather than a confusing error from the linker near the end
10448     of the build.
10450   * RPM packages are now available. We intend to prepare Debian packages in the
10451     near future too.
10453   * xapian-config no longer support "--uninst". It's hard to make this work
10454     reliably and portably, and the effort is better expended elsewhere.
10455     Configure with a prefix and install to a temporary directory instead.
10457   * Xapian can now work with files > 2Gb on OSes which support them.
10459   * Restructured and reworked documentation.
10461   * Removed thread locks. We intend to be "thread-friendly" so different
10462     threads can access different objects without problems. In the rare event
10463     that you want to concurrently call methods on the same object from
10464     different threads you need to create a mutex and lock it. Thus the thread
10465     lock overhead is only incurred when it's necessary.
10467   * Indexgraph removed from core library. It will reappear as an add-on library
10468     at some point.
10470   * Omega's query parser has now been reworked as a separate library.
10472   * Terminology change - "keys" are now known as "values" to avoid confusion,
10473     since they're not like keys in a relational database. The exception is when
10474     a value is used as a key in some operation, e.g. "match_collapse_key".
10476   * Database backends:
10478       + Auto backend: can now be used to create a new database.
10479       + Auto backend: added support for "stub" databases - a text file
10480         specifying the settings for the database to be opened (particularly
10481         useful for allowing easy access to specific remote databases).
10482       + Quartz backend: many fixes and improvements, and the code has been
10483         cleaned up a lot. Implemented deleting of items from postlists.
10484       + Remote backend: implemented term_exists() and get_termfreq();
10485       + Multi-backend: the document length is now fetched from the sub-postlist
10486         rather than the database, which provides a huge speed-up in some cases.
10487       + Sleepycat backend: this experimental backend has been removed.
10488       + Muscat 3.6 backends: now disabled by default.
10490   * Tests:
10492       + Test cases added for most bug fixes and new features.
10493       + stemtest: rewritten in C++ rather than part C++, part perl. Now 15%
10494         faster.
10495       + includetest: removed - it's no longer useful now the code has matured.
10496       + Removed problematic leak checking from testsuite. We plan to use
10497         valgrind instead soon.
10499   * Matcher:
10501       + Fixed several matcher bugs which could cause incorrect results in some
10502         situations.
10503       + Fix bug in expander due to nth_element being called on the wrong
10504         element.
10505       + Added sorting within relevance bands to the matcher.
10506       + Matcher now calculates percentages differently, such that 100%
10507         relevance is actually achievable.
10508       + Matcher now uses a min-heap rather than nth-element to maintain the
10509         proto-mset. This is cleaner and more efficient.
10510       + New operator OP_ELITE_SET replaces match_max_or_terms option.
10511       + Implemented multiple XOR queries.
10512       + Add a new query operator, OP_WEIGHT_CUTOFF, which returns only those
10513         documents from a query which have a weight greater than a specified
10514         cutoff value.
10515       + Removed OmBatchEnquire from system: it may return at a later date, but
10516         for now it is simply out of date and a maintenance liability, and
10517         gives no significant advantage.
10518       + Added experimental match bias functors.
10520   * The API has been cleaned up in various places:
10522       + OmDocumentContents and OmIndexDoc merged to become OmDocument
10523       + OmQuery interface cleaned up
10524       + OmData and OmKey removed - methods which used them now just pass a
10525         string instead
10526       + OmESetItem replaced by OmESetIterator; OmMSetItem by OmMSetIterator;
10527         om_termname_list by OmTermIterator
10528       + OmDocumentTerm and OmDocumentParams removed
10529       + OmMSet::mbound replaced by OmMSet::matches_
10530         {lower_bound,estimated,upper_bound}, giving more information
10531       + Xapian iterators now have default constructors
10532       + Most API classes now have reference counted internals, so assignment
10533         and copying are cheap
10534       + OmStem now has copy constructor and assignment operator
10535       + and more...