Remove unused header include
[xapian.git] / xapian-core / NEWS
blob56f40cc5c947f0521a0d2e5e37c4c31bc09f56e9
1 Xapian-core 1.3.6 (2016-05-09):
3 API:
5 * TfIdfWeight: Support freq and squared IDF normalisations.  Patch from Vivek
6   Pal.
8 * New Xapian::Query::OP_INVALID to provide an "invalid" query object.
10 * Reject OP_NEAR/OP_PHRASE with non-leaf subqueries early to avoid a
11   potential segmentation fault if the non-leaf subquery decayed at
12   just the wrong moment.  See #508.
14 * Reduce positional queries with a MatchAll or PostingSource subquery to
15   MatchNothing (since these subqueries have no positional information, so
16   the query can't match).
18 * Deprecate ValueRangeProcessor and introduce new RangeProcessor class as
19   a replacement.  RangeProcessor()::operator()() method returns Xapian::Query,
20   so a range can expand to any query.  OP_INVALID is used to signal that
21   a range is not recognised.  Fixes #663.
23 * Combining of ranges over the same quantity with OP_OR is now handled by
24   an explicit "grouping" parameter, with a sensible default which works
25   for value range queries.  Boolean term prefixes and FieldProcessor now
26   support "grouping" too, so ranges and other filters can now be grouped
27   together.
29 * Formally deprecate WritableDatabase::flush().  The replacement commit()
30   method was added in 1.1.0, so code can be switched to use this and still
31   work with 1.2.x.
33 * Fix handling of a self-initialised PIMPL object (e.g. Xapian::Query q(q);).
34   Previously the uninitialised pointer was copied to itself, resulting in
35   undefined behaviour when the object was used to destroyed.  This isn't
36   something you'd see in normal code, but it's a cheap check which can probably
37   be optimised away by the compiler (GCC 6 does).
39 testsuite:
41 * Fix testcase notermlist1 to check correct table extension - ".glass" not
42   ".DB" (chert doesn't support DB_NO_TERMLIST).
44 build system:
46 * Bootstrap with autoconf 2.69.  This requires GNU m4 >= 4.6, but that should
47   no longer be an issue on developer machines.
49 * Fix build with --enable-log.  Debug logging was trying to log
50   compress_strategy parameter which was removed recently.  Reported by Ankit
51   Paliwal on xapian-devel.
53 documentation:
55 * Fix misfiled deprecation notes.  Various things marked as deprecated and
56   removed in 1.3.x have in fact been deprecated but not removed (they were just
57   added to the wrong list).  One instance queried by David Bremner on #xapian,
58   and a review found several more.
60 * Improve docs for lcov makefile targets - say that these are targets in the
61   xapian-core directory (noted by poe_ on #xapian), document
62   coverage-reconfigure-maintainer-mode target, and clarify what the example of
63   how to use GENHTML_ARGS actually does.
65 * Note that Java bindings use xapian/iterator.h.
67 * Update release checklist.  The script to build the release tarballs now
68   automates some of the changes needed in trac.
70 portability:
72 * Fix build with Android NDK which declares sys_errlist and sys_nerr in the
73   C library headers, but doesn't actually define them in the library itself.
74   The configure test now tries to link a trivial program which uses these
75   symbols.  Patch from Tejas Jogi.
77 Xapian-core 1.3.5 (2016-04-01):
79 This release includes all changes from 1.2.23 which are relevant.
81 API:
83 * The Snipper class has been replaced with a new MSet::get_snippet() method.
84   The implementation has also been redone - the existing implementation was
85   slower than ideal, and didn't directly consider the query so would sometimes
86   selects a snippet which doesn't contain any of the query terms (which users
87   quite reasonably found surprising).  The new implementation is faster, will
88   always prefer snippets containing query terms, and also understands exact
89   phrases and wildcards.  Fixes #211.
91 * Add optional reference counting support for ErrorHandler, ExpandDecider,
92   KeyMaker, PostingSource, Stopper and TermGenerator.  Fixes #186, reported
93   by Richard Boulton.  (ErrorHandler's reference counting isn't actually used
94   anywhere in xapian-core currently, but means we can hook it up in 1.4.x if
95   ticket #3 gets addressed).
97 * Deprecate public member variables of PostingSource.  The new getters and/or
98   setters added in 1.2.23 and 1.3.5 are preferred.  Fixes #499, reported by
99   Joost Cassee.
101 * Reimplement MSet and MSetIterator.  MSetIterator internally now counts down
102   to the end of the MSet, so the end test is now against 0, rather than against
103   mset.size().  And more of the trivial methods are now inlined, which reduces
104   the number of relocations needed to load the library, and should give faster
105   code which is a very similar size to before.
107 * Only issue prefetch hints for documents if MSet::fetch() is called.  It's not
108   useful to send the prefetch hint right before the actual read, which was
109   happening since the implementation of prefetch hints in 1.3.4.  Fixes #671,
110   reported by Will Greenberg.
112 * Fix OP_ELITE_SET selection in multi-database case - we were selecting
113   different sets for each subdatabase, but removing the special case check for
114   termfreq_max == 0 solves that.
116 * Remove "experimental" marker from FieldProcessor, since we're happy with the
117   API as-is.  Reported by David Bremner on xapian-discuss.
119 * Remove "experimental" marker from Database::check().  We've not had any
120   negative feedback on the current API.
122 * Databse::check() now checks that doccount <= last_docid.
124 * Database::compact() on a WritableDatabase with uncommitted changes could
125   produce a corrupted output.  We now throw Xapian::InvalidOperationError in
126   this case, with a message suggesting you either commit() or open the database
127   from disk to compact from.  Reported by Will Greenberg on #xapian-discuss
129 * Add Arabic stemmer.  Patch from Assem Chelli in
130   https://github.com/xapian/xapian/pull/45
132 * Improve the Arabic stopword list.  Patch from Assem Chelli.
134 * Make functions defined in xapian/iterator.h 'inline'.
136 * Don't force the user to specify the metric in the geospatial API -
137   GreatCircleMetric is probably what most users will want, so a sensible
138   default.
140 * Xapian::DBCHECK_SHOW_BITMAP: This was added in 1.3.0 (so has never been in
141   a stable release) and was superseded by Xapian::DBCHECK_SHOW_FREELIST in
142   1.3.2, so just remove it.
144 * Make setting an ErrorHandler a no-op - this feature is deprecated and we're
145   not aware of anyone using it.  We're hoping to rework ErrorHandler in 1.4.x,
146   which will be simpler without having to support the current behaviour as well
147   as the new.  See #3.
149 testsuite:
151 * unittest: We can't use Assert() to unit test noexcept code as it throws an
152   exception if it fails.  Instead set up macros to set a variable and return if
153   an assertion fails in a unittest testcase, and check that variable in the
154   harness.
156 glass backend:
158 * Make glass the default backend.  The format should now be stable, except
159   perhaps in the unlikely event that a bug emerges which requires a format
160   change to address.
162 * Don't explicitly store the 2 byte "component_of" counter for the first
163   component of every Btree entry in leaf blocks - instead use one of the upper
164   bits of the length to store a "first component" flag.  This directly saves 2
165   bytes per entry in the Btree, plus additional space due to fewer blocks and
166   fewer levels being needed as a result.  This particularly helps the position
167   table, which has a lot of entries, many of them very small.  The saving would
168   be expected to be a little less than the saving from the change which shaved
169   2 bytes of every Btree item in 1.3.4 (since that saved 2 bytes multiple times
170   for large entries which get split into multiple items).  A simple test
171   suggests a saving of several percent in total DB size, which fits that.  This
172   change reduces the maximum component size to 8194, which affects tables
173   with a 64KB blocksize in normal use and tables with >= 16KB blocksize with
174   full compaction.
176 * Refactor glass backend key comparison - == and < operations are replaced by
177   a compare() function returns negative, 0 or positive (like strcmp(), memcmp()
178   and std::string::compare()).  This allows us to avoid a final compare to
179   check for equality when binary chopping, and to terminate early if the binary
180   chop hits the exact entry.
182 * If a cursor is moved to an entry which doesn't exist, we need to step back to
183   the first component of previous entry before we can read its tag.  However we
184   often don't actually read its tag (e.g. if we only wanted the key), so make
185   this stepping back lazy so we can avoid doing it when we don't want to read
186   the tag.
188 * Avoid creating std::string objects to hold data when compressing and
189   decompressing tags with zlib.
191 * Store minimum compression length per table in the version file, with 0
192   meaning "don't compress".  Currently you can only change this setting with a
193   hex editor on the file, but now it is there we can later make use of it
194   without needing a database format change.
196 * Database::check() now performs additional consistency checks for glass.
197   Reported by Jean-Francois Dockes and Bob Cargill via xapian-discuss.
199 * Database::check(): check docids don't exceed db_last_docid when checking
200   a single glass table.
202 * We now throw DatabaseCorruptError in a few cases where it's appropriate
203   but we didn't previously, in particular in the case where all the files in a
204   DB have been truncated to zero size (which makes handling of this case
205   consistent with chert).
207 * Fix compaction to a single file which already exists.  This was hanging.
208   Noted by Will Greenberg on #xapian.
210 chert backend:
212 * When using 64-bit Xapian::docid, consistently use the actual maximum valid
213   docid value rather instead of the maximum value the type can hold.
215 build system:
217 * Default to only building shared libraries.  Building both shared and static
218   means having to compile the files which make up the library twice on most
219   platforms.  Shared libraries are the better option for most users, and if
220   anyone really wants static libraries they can configure with --enable-static
221   (or --enable-static=xapian-core if configuring a combined tree with the
222   bindings).
224 * Fix XAPIAN_TEST_LINKER_FLAG macro to actually test if it's possible to link
225   with the option in LDFLAGS - previously we attempted to guess based on
226   whether the error message from $CXX $flag contained the option name, which
227   doesn't actually work very well.
229 documentation:
231 * Document that OP_WILDCARD expansion limits currently work per sub-db.
233 * Remove reference to ChangeLog files, as we are no longer updating them.
235 * Remove link to apidoc.pdf which we no longer generate this by default.
237 * Clarify LatLongCoord::operator< purpose in API documentation.
239 * Fix documentation comment typo - LatLongDistancePostingSource is a posting
240   source, not a match decider!
242 * HACKING: Recommend lcov 1.11 as it uses much less memory
244 tools:
246 * xapian-replicate: Obviously corrupt replicas now self-heal.  If a replica
247   database fails to open with DatabaseCorruptError then a full copy is now
248   forced.
250 portability:
252 * Eliminate arrays of C strings, which result in relocations at library load
253   time, slowing startup and making pages containing them unsharable.
255 * Refactor MSet::fetch() to reduce load time relocations.
257 debug code:
259 * Fix to build when configured with --enable-assertions.
261 * Fix to build when configured with --enable-log.  Reported by Tim McNamara
262   on #xapian-discuss.
264 Xapian-core 1.3.4 (2016-01-01):
266 This release includes all changes from 1.2.22 which are relevant.
268 API:
270 * Update to Unicode 8.0.0.  Fixes #680.
272 * Overhaul database compaction API.  Add a Xapian::Database::compact() method,
273   with the Database object specifying the source database(s).
274   Xapian::Compactor is now just a functor to use if you want to control
275   progress reporting and/or the merging of user metadata.  The existing API
276   has been reimplemented using the new one, but is marked as deprecated.
278 * Add support for a default value when sorting.  Fixes #452, patch from
279   Richard Boulton.
281 * Make all functor objects non-copyable.  Previously some were, some weren't,
282   but it's hard to correctly make use of this ability.  Fixes #681.
284 * Fix use after free with WILDCARD_LIMIT_MOST_FREQUENT.  If we tried to open a
285   postlist after processing such a wildcard, the postlist hint could be
286   pointing to a PostList object which had been deleted.  Fixes #696, reported
287   by coventry.
289 * Add support for optional reference counting of MatchSpy objects.
291 * Improve Document::get_description() - the output is now always valid UTF-8,
292   doesn't contain implementation details like "Document::Internal", and more
293   clearly reports if the document is linked to a database.
295 * Remove XAPIAN_CONST_FUNCTION marker from sortable_serialise_() helper, as it
296   writes to the passed in buffer, so it isn't const or pure.  Fixes
297   decvalwtsource2 testcase failure when compiled with clang.
299 * Make PostingSource::set_maxweight() public - it's hard to wrap for the
300   bindings as a protected method.  Fixes #498, reported by Richard Boulton.
302 testsuite:
304 * Add unit test for internal C_isupper(), etc functions.
306 matcher:
308 * Optimise value range which is a superset of the bounds.  If the value
309   frequency is equal to the doccount, such a range is equivalent to MatchAll,
310   and we now avoid having to read the valuestream at all.
312 * Optimise OP_VALUE_RANGE when the upper bound can't be exceeded.  In this
313   case, we now use ValueGePostList instead of ValueRangePostList.
315 glass backend:
317 * Shave 2 bytes of every Btree item (which will probably typically reduce
318   database size by several percent).
320 * More compact item format for branch blocks - 2 bytes per item smaller.  This
321   means each branch block can branch more ways, reducing the number of Btree
322   levels needed, which is especially helpful for cold-cache search times.
324 * Track an upper bound on spelling word frequency.  This isn't currently used,
325   but will be useful for improving the spelling algorithm, and we want to
326   stabilise the glass backend format.  See #225, reported by Philip Neustrom.
328 * Support 64-bit docids in the glass backend on-disk format.  This changes the
329   encoding used by pack_uint_preserving_sort() to one which supports 64 bit
330   values, and is a byte smaller for values 16384-32767, and the same size for
331   all other 32 bit values.  Fixes #686, from original report by James Aylett.
333 * Use memcpy() not memmove() when no risk of overlap.
335 * Store length of just the key data itself, allowing keys to be up to 255 bytes
336   long - the previous limit was 252.
338 * Change glass to store DB stats in the version file.  Previously we stored
339   them in a special item in the postlist table, but putting them in the version
340   file reduces the number of block reads required to open the database, is
341   simpler to deal with, and means we can potentially recalculate tight upper
342   and lower bounds for an existing database without having to commit a new
343   revision.
345 * Add support for a single-file variant for glass.  Currently such databases
346   can only be opened for reading - to create one you need to use
347   xapian-compact (or its API equivalent).  You can embed such databases within
348   another file, and open them by passing in a file descriptor open on that file
349   and positioned at the offset the database starts at).  Database::check() also
350   supports them.  Fixes #666, reported by Will Greenberg (and previously
351   suggested on xapian-discuss by Emmanuel Engelhart).
353 * Avoid potential DB corruption with full-compaction when using 64K blocks.
355 * Where posix_fadvise() is available, use it to prefetch postlist Btree blocks
356   from the level below the root block which will be needed for postlists of
357   terms in the query, and similarly for the docdata table when MSet::fetch() is
358   called.  Based on patch by Will Greenberg in #671.
360 chert backend:
362 * Where posix_fadvise() is available, use it to prefetch postlist Btree blocks
363   from the level below the root block which will be needed for postlists of
364   terms in the query, and similarly for the record table when MSet::fetch() is
365   called.  Based on patch by Will Greenberg in #671.
367 remote backend:
369 * Fix hook for remote support of user weighting schemes.  The commented-out
370   code used entirely the wrong class - now we use the server object we have
371   access to, and forward the method to the class which needs it.
373 build system:
375 * New configure options --enable-64bit-docid and --enable-64bit-termcount,
376   which control the size of these types.  Because these types are used in
377   the API, libraries built with different combinations of them won't be ABI
378   compatible.  Based heavily on patch from James Aylett and Dylan Griffith.
379   Fixes #385.
381 * Sort out hiding most of the internal symbols which had public visibility
382   for various reason.  Mostly addresses #63.
384 tools:
386 * xapian-inspect: We no longer install this - it's really an aid to Xapian
387   development rather than a user tool.
389 portability:
391 * Minimum supported GCC version is now documented as GCC 4.7, for C++11
392   support.  Previously we documented 4.7 as the oldest known to work.
394 * Use CLOCK_REALTIME with timer_create() on Cygwin.
396 * Don't include winsock headers on Cygwin.  Instead include <arpa/inet.h> for
397   htons() and htonl().
399 * Handle AI_ADDRCONFIG not being defined by some mingw versions.
401 * Fix to handle mingw now providing a nanosleep() function.
403 * Use WSAAddressToString instead of inet_ntop under __WIN32__ - at least under
404   mingw we don't seem to have inet_ntop().
406 * Fix testsuite to compile when S_ISSOCK() isn't defined.
408 debug code:
410 * Add missing parameters to debug logging for a few methods.
412 Xapian-core 1.3.3 (2015-06-01):
414 This release includes all changes from 1.2.20-1.2.21 which are relevant.
416 API:
418 * Database:
420   + Add new flag Xapian::DB_RETRY_LOCK which allows opening a database for
421     writing to wait until it can get a write lock.  (Fixes #275, reported by
422     Richard Boulton).
424   + Fix Database::get_doclength_lower_bound() over multiple databases when some
425     are empty or consist only of zero-length documents.  Previously this would
426     report a lower bound of zero, now it reports the same lowest bound as a
427     single database containing all the same documents.
429   + Database::check(): When checking a single table, handle the ".glass"
430     extension on glass database tables, and use the extension to guide the
431     decision of which backend the table is from.
433 * Query:
435   + Add new OP_WILDCARD query operator, which expands wildcards lazily, so now
436     we create the PostList tree for a wildcard directly, rather than creating
437     an intermediate Query tree.  OP_WILDCARD offers a choice of ways to limit
438     wildcard expansion (no limit, throw an exception, use the first N by term
439     name, or use the most frequent N).  (See tickets #48 and #608).
441 * QueryParser:
443   + Add new set_max_expansion() method which provides access to OP_WILDCARD's
444     choice of ways to limit expansion and can set limits for partial terms as
445     well as for wildcards.  Partial terms now default to the 100 most frequent
446     matching terms.  (Completes #608, reported by boomboo).
448   + Deprecate set_max_wildcard_expansion() in favour of set_max_expansion().
450 * Add support for optional reference counting of FieldProcessor and
451   ValueRangeProcessor objects.
453 testsuite:
455 * If command line option --verbose/-v isn't specified, set the verbosity level
456   from environmental variable VERBOSE.
458 * Re-enable replicate3 for glass, as it no longer fails.
460 * Add more test coverage for get_unique_terms().
462 * Don't leave an extra fd open when starting xapian-tcpsrv for remotetcp tests.
464 glass backend:
466 * When reporting freelist errors during a database check, distinguish between a
467   block in use and in the freelist, and a block in the freelist more than once.
469 * Fix compaction and database checking for the change to the format of keys
470   in the positionlist table which happened in 1.3.2.
472 * After splitting a block, we always insert the new block in the parent right
473   after the block it was split from - there's no need to binary chop.
475 * Avoid infinite recursion when we hit the end of the freelist block we're
476   reading and the end of the block we're writing at the same time.
478 * Fix freelist handling to allow for the newly loaded first block of the
479   freelist being already used up.
481 chert backend:
483 * Fix problems with get_unique_terms() on a modified chert database.
485 * Fix xapian-check on a single chert table, which seg faulted in 1.3.2.
487 remote backend:
489 * Avoid dividing zero by zero when calculating the average length for an empty
490   database.
492 build system:
494 * Merge generate-allsnowballheaders script into collate-sbl.
496 portability:
498 * A compiler with good support for C++11 is now required to build Xapian.
499   Most of the actively developed C++ compilers already have decent support,
500   or are close to having it, and it makes development easier and more
501   efficient.  Currently known to work: GCC >= 4.7, recent versions of clang
502   (3.5 works).  Solaris Studio 12.4 compiles the code, but tests currently
503   fail.  IBM's xlC doesn't support enough of C++11 yet.  HP's aCC hasn't
504   been tested, but its documentation suggests it also doesn't support enough
505   of C++11 yet.
507 * Drop workarounds and special cases for old versions of various compilers
508   which don't support C++11.
510 * Use C++11's static_assert() and unique_ptr instead of custom implementations
511   of equivalent functionality.
513 * Building on OS/2 with EMX is no longer supported - EMX was last updated in
514   2001 and comes with GCC 3.2.1, which is much too old to support C++11.
516 * Building with SGI's and Compaq's C++ compilers is no longer supported -
517   both seem to have ceased development, and don't support C++11.
519 * Building with STLport is no longer supported - STLport was last released in
520   2008, so it's no longer actively developed and won't support C++11.
522 * Building on IRIX is no longer supported, because IRIX has reached end of
523   life.
525 * Disable "<FUNCTION> is expected to return a value" warning from Sun's C++
526   compiler, as it fires for functions which end in a "throw" statement.
527   Genuine instances of missing return values will be caught by compilers with
528   superior warning machinery.
530 * Fix warning from GCC 5.1 where template expansion leads to the comparison
531   (bool_value < 255) which is always true.  Warning introduced by changes in
532   1.3.2.
534 * Use getaddrinfo() instead of gethostbyname(), since the latter may not be
535   thread-safe, and as a step towards IPv6 support (see #374), but currently we
536   still only look for IPv4 addresses.
538 * timer_create() seems to always fail on AIX with EAGAIN, so just skip the
539   matchtimelimit1 testcase there.
541 * Under __WIN32__, we need to specify Vista as the minimum supported version to
542   get the AI_ADDRCONFIG flag.  Older versions seem to all be out of support
543   anyway.
545 * Change configure probe for log2() to check for a declaration in <cmath>
546   to get it to fix build on Solaris with Sun C++.  C++11 compilers should all
547   provide log2(), but let's not rely on that just yet as it's easy to provide a
548   fallback implementation.
550 * Use scalbn() instead of ldexp() where possible (which we can in all cases
551   when FLT_RADIX == 2, as it is on pretty much all current platforms).  On
552   overflow and underflow ldexp() sets errno, which it seems better to avoid
553   doing.
555 * The list of stemmers is now in the same static const struct as the version
556   info, and Stem::get_available_languages() is just an inlined wrapper which
557   fetches this structure and returns the appropriate member.  This saves a
558   relocation, reducing library load time a little.
560 * Remove "pure" attribute from API functions which could throw an exception.
561   These functions aren't really pure, and while we're happy for calls to them
562   to be CSE-ed or eliminated entirely, the compiler might make more assumptions
563   than that about a pure function - clang seems to assume pure => nothrow and
564   an exception from such a function can't be caught.
566 * Remove "pure" attribute from sortable_unserialise(), which can raise floating
567   point exceptions FE_OVERFLOW and FE_UNDERFLOW.
569 * Add "nothrow" attribute to more API functions which will never throw an
570   exception.
572 * Make sortable_serialise() an inlined wrapper around a function which won't
573   throw and can be flagged with attribute 'const'.
575 * Tweak sortable_unserialise() not to compare with a fixed string by
576   constructing a temporary std::string object (which could throw
577   std::bad_alloc), and mark it as XAPIAN_NOTHROW.
579 debug code:
581 * Only enable assertions in sortable_serialise() and sortable_unserialise() in
582   the testsuite (since these functions shouldn't throw exceptions), and move
583   the tests of these functions from queryparsertest to unittest to facilitate
584   this.
586 * Add more assertions to the glass backend code.
588 Xapian-core 1.3.2 (2014-11-24):
590 This release includes all changes from 1.2.16-1.2.19 which are relevant.
592 API:
594 * Update Unicode character database to Unicode 7.0.0.
596 * New Xapian::Snipper class from Mihai Bivol's GSOC 2012 project.  (mostly
597   fixes #211)
599 * Fix all get_description() methods to always return UTF-8 text.  (fixes #620)
601 * Database::check():
603   + Alter to take its "out" parameter as a pointer to std::ostream instead of a
604     reference, and make passing NULL mean "do not produce output", and make
605     the second and third parameters optional, defaulting to a quiet check.
607   + Escape invalid UTF-8 data in keys and tags reported by xapian-check, using
608     the same code we use to clean up strings returned by get_description()
609     methods.
611   + Correct failure message which talks above the root block when it's actually
612     testing a leaf key.
614   + Rename DBCHECK_SHOW_BITMAP to DBCHECK_SHOW_FREELIST (old name still
615     provided for now, but flagged as deprecated - DBCHECK_SHOW_BITMAP was new
616     in 1.3.0, so will likely be removed before 1.4.0).
618 * Methods and functions which take a string to unserialise now consistently
619   call that parameter "serialised".
621 * Weight: Make number of distinct terms indexing each document and the
622   collection frequency of the term available to subclasses.  Patch from
623   Gaurav Arora's Language Modelling branch.
625 * WritableDatabase: Add support for multiple subdatabases, and support opening
626   a stub database containing multiple subdatabases as a WritableDatabase.
628 * WritableDatabase can now be constructed from just a pathname (defaulting to
629   opening the database with DB_CREATE_OR_OPEN).
631 * WritableDatabase: Add flags which can be bitwise OR-ed into the second
632   argument when constructing:
634   + Xapian::DB_NO_SYNC: to disable use of fsync, etc
636   + Xapian::DB_DANGEROUS: to enable in-place updates
638   + Xapian::DB_BACKEND_CHERT: if creating, create a chert database
640   + Xapian::DB_BACKEND_GLASS: if creating, create a glass database
642   + Xapian::DB_NO_TERMLIST: create a database without a termlist (see #181)
644   + Xapian::DB_FULL_SYNC flag - if this is set for a database, we use the Mac
645     OS X F_FULL_SYNC instead of fdatasync()/fsync()/etc on the version file
646     when committing.
648 * Database: Add optional flags argument to constructor - the following can be
649   bitwise OR-ed into it:
651   + Xapian::DB_BACKEND_CHERT (only open a chert database)
653   + Xapian::DB_BACKEND_GLASS (only open a glass database)
655   + Xapian::DB_BACKEND_STUB (only open a stub database)
657 * Xapian::Auto::open_stub() and Xapian::Chert::open() are now deprecated in
658   favour of these new flags.
660 * Add LMWeight class, which implements the Unigram Language Modelling weighting
661   scheme.  Patch from Gaurav Arora.
663 * Add implementations of a number of DfR weighting schemes (BB2, DLH, DPH,
664   IfB2, IneB2, InL2, PL2).  Patches from Aarsh Shah.
666 * Add support for the Bo1 query expansion scheme.  Patch from Aarsh Shah.
668 * Add Enquire::set_time_limit() method which sets a timelimit after which
669   check_at_least will be disabled.
671 * Database: Trying to perform operations on a database with no subdatabases now
672   throws InvalidOperationError not DocNotFoundError.
674 * Query: Implement new OP_MAX query operator, which returns the maximum weight
675   of any of its subqueries.  (see #360)
677 * Query: Add methods to allow introspection on Query objects - currently you
678   can read the leaf type/operator, how many subqueries there are, and get a
679   particular subquery.  For a query which is a term, Query::get_terms_begin()
680   allows you to get the term.  (see #159)
682 * Query: Only simplify OP_SYNONYM with a single subquery if that subquery is a
683   term or MatchAll.
685 * Avoid two vector copies when storing term positions in most common cases.
687 * Reimplement version functions to use a single function in libxapian which
688   returns a pointer to a static const struct containing the version
689   information, with inline wrappers in the API header which call this.  This
690   means we only need one relocation instead of 4, reducing library load time a
691   little.
693 * Make TermGenerator flags an anonymous enum, and typedef TermGenerator::flags
694   to int for backward compatibility with existing user code which uses it.
696 * Stem: Fix incorrect Unicode codepoints for o-double-acute and u-double-acute
697   in the Hungarian Snowball stemmer.  Reported by Tom Lane to snowball-discuss.
699 * Stem: Add an early english stemmer.
701 * Provide the stopword lists from Snowball plus an Arabic one, installed in
702   ${prefix}/share/xapian-core/stopwords/.  Patch from Assem Chelli, fixes #269.
704 * Improve check for direct inclusion of Xapian subheaders in user code to
705   catch more cases.
707 * Add simple API to help with creating language-idiomatic iterator wrappers
708   in <xapian/iterator.h>.
710 testsuite:
712 * Extend checkstatsweight1 to check that Weight::get_collection_freq() returns
713   the same number as Database::get_collection_freq().
715 * queryparsertest: Add testcase for FieldProcessor on boolean prefix with
716   quoted contents.
718 * queryparsertest: Enable some disabled cases which actually work (in some
719   cases with slightly tweaked expected answers which are equivalent to those
720   that were shown).
722 * Make use of the new writable multidatabase feature to simplify the
723   multi-database handling in the test harness.
725 * Change querypairwise1_helper to repeat the query build 100 times, as with a
726   fast modern machine we were sometimes trying with so many subqueries that we
727   would run out of stack.
729 * apitest: Use Xapian::Database::check() in cursordelbug1.  (partly addresses
730   #238)
732 * apitest: Test Query ops with a single MatchAll subquery.
734 * apitest: New testcase readonlyparentdir1 to ensure that commit works with a
735   read-only parent directory.
737 matcher:
739 * Streamline collation of statistics for use by weighting schemes - tests show
740   a 2% or so increase in speed in some cases.
742 * If a term matches all documents and its weight doesn't depend on its wdf, we
743   can optimise it to MatchAll (the previous requirement that maxpart == 0 was
744   unnecessarily strict).
746 * Fix the check for a term which matches all documents to use the sub-db
747   termfreq, not the combined db termfreq.
749 * When we optimise a postlist for a term which matches all documents to use
750   MatchAll, we still need to set a weight object on it to get percentages
751   calculated correctly.
753 glass backend:
755 * 'brass' backend renamed to 'glass' - we decided to use names in ascending
756   alphabetical order to make it easier to understand which backend is newest,
757   and since 'flint' was used recently, we skipped over 'd', 'e' and 'f'.
759 * Change positionlist keys to be ordered by term first rather than docid first,
760   which helps phrase searching significantly.  For more efficient indexing,
761   positionlist changes are now batched up in memory and written out in key
762   order.
764 * Use a separate cursor for each position list - now we're ordering the
765   position B-tree by term first, phrase matching would cause a single cursor
766   to cycle between disparate areas of the B-tree and reread the same blocks
767   repeatedly.
769 * Reference count blocks in the btree cursor, so cursors can cheaply share
770   blocks.  This can significantly reduce the amount of memory used by cursors
771   for queries which contain a lot of terms (e.g. wildcards which expand to a
772   lot of terms).
774 * Under glass, optimise the turning of a query into a postlist to reuse the
775   cursor blocks which are the same as the previous term's postlist.  This is
776   particularly effective for a wildcard query which expands to a lot of terms.
778 * Keep track of unused blocks in the Btrees using freelists rather than
779   bitmaps.  (fixes #40)
781 * Eliminate the base files, and instead store the root block and freelist
782   pointers in the "iamglass" file.
784 * When compacting, sync all the tables together at the end.
786 * In DB_DANGEROUS mode, update the version file in-place.
788 * Only actually store the document data if it is non-empty.  The table which
789   holds the document data is now lazily created, so won't exist if you never
790   set the document data.
792 chert backend:
794 * Improve DBCHECK_FIX:
796   + if fixing a whole database, we now take the revision from the first table
797     we successfully look at, which should be correct in most cases, and is
798     definitely better than trying to determine the revision of each broken
799     table independently.
801   + handle a zero-sized .DB file.
803   + After we successfully regenerate baseA, remove any empty baseB file to
804     prevent it causing problems.  Tracked down with help from Phil Hands.
806 remote backend:
808 * Bump remote protocol version to 38.0, due to extra statistics being tracked
809   for weighting.
811 * Make Weight::Internal track if any max_part values are set, so we don't need
812   to serialise them when they've not been set.
814 build system:
816 * Fix conditional for enabling replication code - if chert is disabled but
817   glass isn't, we should still enable it.
819 * configure: Add hint for which package to install for rst2html
821 documentation:
823 * Don't build, ship or install PDF versions of the API docs by default, but
824   provide an easy way for people to build it for themselves if they want it.
826 * Convert equations in rst docs to use LaTeX via the math role and directive.
828 * Actually ship, process and install geospatial.rst.
830 * postingsource.rst: Use a modern class in postingsource example.  (Noted by
831   James Aylett)
833 * Move the protocol docs for the remote and replication protocols into the net/
834   subdirectory.
836 * Remove the dir_contents files and all the machinery to handle them.
838 * HACKING: Note we now use doxygen 1.8.8 for 1.3.x snapshots and releases.
840 * HACKING: Now using libtool 2.4.3 to bootstrap snapshots and 1.3.x releases.
842 * HACKING: Now using automake 1.14.1 to bootstrap snapshots and 1.3.x releases.
844 * HACKING: Drop note about needing git-svn if you're using git - bootstrap now
845   only uses git-svn if your Xapian tree was checked out using git-svn.
847 * HACKING: Need sphinx-doc to generate API docs for Python and Python 3 bindings.
849 * HACKING: Note that MacTeX seems to be the best option if using homebrew.
851 portability:
853 * Don't pass an integer argument to log(), to avoid ambiguity errors with xlC
854   and Sun's C++ compiler.  (fixes #627)
856 * Fix compilations issues with Sun's C++ compiler (mostly missing library
857   headers).
859 * Implement RealTime::now() using clock_gettime() where it's available, since
860   it can provide nanosecond resolution.
862 * Implement RealTime::sleep() using nanosleep() where it's available, since it
863   has a simpler API and a finer resolution than select().
865 * Use lround() instead of round() in geospatial code, since we want the result
866   as an int.  GCC 4.4.3 seems to optimise to use lround() anyway, but other
867   compilers may not.
869 * Include <math.h> for lround()/round(). (fixes #628)
871 * Drop code supporting Microsoft Windows 9x which reached EOL in 2006.
873 * Under C++11, use unique_ptr for AutoPtr.
875 * Stop using a reference where we may end up passing *NULL, as that's invalid.
876   Thanks Nick Lewycky and ubsan for helping track this down.
878 * In DLHWeight and DPHWeight, avoid dividing by zero when the collection size
879   is 0.
881 debug code:
883 * Fix assertion failure when built with --enable-assertions.  The behaviour
884   when built without assertions happened to be correct.
886 * Fix assertion in BitReader::decode(), and remove 'Assert(rd);' in two places
887   where rd is no longer a pointer.
889 Xapian-core 1.3.1 (2013-05-03):
891 This release includes all changes from 1.2.10-1.2.15 which are relevant.
893 API:
895 * Give an compilation error if user code tries to include API headers other
896   than xapian.h directly - these other headers are an internal implementation
897   detail, but experience has shown that some people try to include them
898   directly.  Please just use '#include <xapian.h>' instead.
900 * Update Unicode character database to Unicode 6.2.0.
902 * Add FieldProcessor class (ticket#128) - currently marked as an experimental
903   API while we sort out how best to sort out exactly how it interacts with
904   other QueryParser features.
906 * Add implementation of several TF-IDF weighting schemes via a new TfIdfWeight
907   class.
909 * Add ExpandDeciderFilterPrefix class which only return terms with a particular
910   prefix.  (fixes #467)
912 * QueryParser: Adjust handling of Unicode opening/closing double quotes - if a
913   quoted boolean term was started with ASCII double quote, then only ASCII
914   double quote can end it, as otherwise it's impossible to quote a term
915   containing Unicode double quotes.
917 * Database::check(): If the database can't be opened, don't emit a bogus
918   warning about there being too many documents to cross-check doclens.
920 * TradWeight,BM25Weight: Throw SerialisationError instead of NetworkError if
921   unserialise() fails.
923 * QueryParser: Change the default stemming strategy to STEM_SOME, to eliminate
924   the API gotcha that setting a stemmer is ignored until you also set a
925   strategy.
927 * Deprecate Xapian::ErrorHandler.  (ticket#3)
929 * Stem: Generate a compact and efficient table to decode language names.  This
930   is both faster and smaller than the approach we were using, with the added
931   benefit that the table is auto-generated.
933 * xapian.h:
935   + Add check for Qt headers being included before us and defining
936     'slots' as a macro - if they are, give a clear error advising how to work
937     around this (previously compilation would fail with a confusing error).
939   + Add a similar check for Wt headers which also define 'slots' as a macro
940     by default.
942 testsuite:
944 * tests/generate-api_generated: Test that the string returned by a
945   get_description() method isn't empty.
947 * Use git commit hash in title of test coverage reports generated from a git
948   tree.
950 matcher:
952 * Drop MatchNothing subqueries in OR-like situations in add_subquery() rather
953   than adding them and then handling it later.
955 * Handle the left side of AND_NOT and AND_MAYBE being MatchNothing in
956   add_subquery() rather than in done().
958 * Handle QueryAndLike with a MatchNothing subquery in add_subquery() rather
959   than done().
961 * Query: Multi-way operators now store their subquery pointers in a custom
962   class rather than std::vector<Xapian::Query>.  The custom class take the
963   same amount of space, or often less.  It's particularly efficient when
964   there are two subqueries, which is very desirable as we no longer flatten a
965   subtree of the same operator as we build the query.
967 * Optimise an unweighted query term which matches all the documents in a
968   subdatabase to use the "MatchAll" postlist.  (ticket#387)
970 brass backend:
972 * Iterating positional data now decodes it lazily, which should speed up
973   phrases which include common words.
975 * Compress changesets in brass replication. Increments the changeset version.
976   Ticket #348
978 * Restore two missing lines in database checking where we report a block with
979   the wrong level.
981 * When checking if a block was newly allocated in this revision, just look
982   at its revision number rather than consulting the base file's bitmap.
984 chert backend:
986 * Iterating positional data now decodes it lazily, which should speed up
987   phrases which include common words.
989 remote backend:
991 * Prefix compress list of terms and metadata keys in the remote protocol.
992   This requires a remote protocol major version bump.
994 build system:
996 * Fix the 'libxapian' to be 'libxapian-1.3' and 'xapian.m4' to be
997   'xapian-1.3.m4' (this was supposed to be the case for 1.3.0, but the
998   change wasn't made correctly).
1000 * Remove support for 'configure --enable-quiet', 'make QUIET=' and 'make
1001   QUIET=y' - automake now supports 'configure --enable-silent-rules', 'make
1002   V=1' and 'make V=0' which are broadly equivalent and more standard.
1004 * configure: If we fail to find a function needed for the remote backend, don't
1005   autodisable it - it's more helpful to error out so the use can decide if they
1006   want to pass --disable-backend-remote to disable it, or work out what values
1007   to pass for LIBS, etc to make it work.  This also matches what we do for the
1008   disk based backends.
1010 * automake 1.13.1 is now used to generate snapshots and releases.
1012 * Add check-syntax make target to support editor syntax checks.
1014 * Fix to build when configured with --disable-backend-brass
1015   --disable-backend-chert.  (ticket#586)
1017 * Generate a check for compatible _DEBUG settings if built with MSVC.
1018   (ticket#389)
1020 * If you run "make coverage-check" by hand, the previous default of compressed
1021   HTML is unhelpful, so don't default to passing --html-gzip to genhtml, but
1022   instead add support for GENHTML_ARGS.
1024 * API methods and functions are now marked as 'const', 'pure', or 'nothrow'
1025   allowing compilers which support such annotations to generate more efficient
1026   code.  (tickets #151, #454)
1028 documentation:
1030 * HACKING: Note which MacPorts are needed for development work.
1032 * docs/remote_protocol.rst: Correct error in documentation of REPLY_DOCDATA
1033   message.
1035 tools:
1037 * xapian-check: Add "fix" option, which currently will regenerate iamchert if
1038   it isn't valid, and will regenerate base files from the .DB files (only
1039   really tested on databases which have just been compacted).
1041 portability:
1043 * Fix warning with GCC in build with assertions enabled.
1045 * common/fileutils.cc: Add safeunistd.h for mkdir, required by GCC 4.7
1046   (reported by Gaurav Arora).
1048 * backends/brass/brass_databasereplicator.cc: Use new/delete to avoid variable
1049   length array gcc extension and comply with c++98
1051 * Mark file descriptors as close-on-exec where supported. 
1053 * api/queryinternal.cc: Need <functional> for mem_fun().
1055 * Work around Apple's OS X SDK defining a check() macro.
1057 * Add an option to use a flock() based locking implementation for brass and
1058   chert - this is much simpler than using fcntl() due to saner semantics around
1059   releasing locks when closing other descriptors on the same file (at least on
1060   platforms where flock() isn't just a compatibility wrapper around fcntl()).
1061   Sadly we can't simply switch to this without breaking locking compatibility
1062   with previous releases, but it's useful for platforms without fcntl()
1063   locking (it's enabled for DJGPP) and may be useful for custom builds for
1064   special purposes.
1066 packaging:
1068 * xapian-core.spec: Remove xapian-chert-update.
1070 debug code:
1072 * Building with --enable-log works once again.
1074 Xapian-core 1.3.0 (2012-03-14):
1076 API:
1078 * Update Unicode character database to Unicode 6.1.0.  (ticket#497)
1080 * TermIterator returned by Enquire::get_matching_terms_begin(),
1081   Query::get_terms_begin(), Database::synonyms_begin(),
1082   QueryParser::stoplist_begin(), and QueryParser::unstem_begin() now stores the
1083   list of terms to iterate much more compactly.
1085 * QueryParser:
1087   + Allow Unicode curly double quote characters to start and/or end phrases.
1089   + The set_default_op() method will now reject operators which don't make
1090     sense to set.  The operators which are allowed are now explicitly
1091     documented in the API docs.
1093 * Query: The internals have been completely reimplemented (ticket#280).  The
1094   notable changes are:
1096   + Query objects are smaller and should be faster.
1098   + More readable format for Query::get_description().
1100   + More compact serialisation format for Query objects.
1102   + Query operators are no longer flattened as you build up a tree (but the
1103     query optimiser still combines groups of the same operator).  This means
1104     that Query objects are truly immutable, and so we don't need to copy Query
1105     objects when composing them.  This should also fix a few O(n*n) cases when
1106     building up an n-way query pair-wise.  (ticket#273)
1108   + The Query optimiser can do a few extra optimisations.
1110 * There's now explicit support for geospatial search (this API is currently
1111   marked as experimental).  (ticket#481)
1113 * There's now an API (currently experimental) for checking the integrity of
1114   databases (partly addresses ticket#238).
1116 * Database::reopen() now returns true if the database may have been reopened
1117   (previously it returned void).  (ticket#548)
1119 * Deprecate Xapian::timeout in favour of POSIX type useconds_t.
1121 * Deprecate Xapian::percent and use int instead in the API and our own code.
1123 * Deprecate Xapian::weight typedef in favour of just using double and change
1124   all uses in the API and our own code.  (ticket#560)
1126 * Rearrange members of Xapian::Error to reduce its size (from 48 to 40 bytes on
1127   x86-64 Linux).
1129 * Assignment operators for PositionIterator and TermIterator now return *this
1130   rather than void.
1132 * PositionIterator, PostingIterator, TermIterator and ValueIterator now
1133   handle their reference counts in hand-crafted code rather than using
1134   intrusive_ptr/RefCntPtr, which means the compiler can inline the destructor
1135   and default constructor, so a comparison to an end iterator should now
1136   optimise to a simple NULL pointer check, but without the issues which the
1137   ValueIteratorEnd_ proxy class approach had (such as not working in templates
1138   or some cases of overload resolution).
1140 * Enquire:
1142   + Previously, Enquire::get_matching_terms_begin() threw InvalidArgumentError
1143     if the query was empty.  Now we just return an end iterator, which is more
1144     consistent with how empty queries behave elsewhere.
1146   + Remove the deprecated old-style match spy approach of using a MatchDecider.
1148 * Remove deprecated Sorter class and MultiValueSorter subclass.
1150 * Xapian::Stem:
1152   + Add stemmers for Armenian (hy), Basque (eu), and Catalan (ca).
1154   + Stem::operator= now returns a reference to the assigned-to object.
1156 testsuite:
1158 * Make unittest use the test harness, so it gets all the valgrind and fd leak
1159   checks, and other handy features all the other tests have.
1161 * Improve test coverage in several places.
1163 * Compress generated HTML files in coverage report.
1165 flint backend:
1167 * Remove flint backend.
1169 remote backend:
1171 * When propagating exceptions from a remote backend server, the protocol now
1172   sends a numeric code to represent which exception is being propagated, rather
1173   than the name of the type, as a number can be turned back into an exception
1174   with a simple switch statement and is also less data to transfer.
1175   (ticket#471)
1177 * Remote protocol (these changes require a protocol major version bump):
1179   + Unify REPLY_GREETING and REPLY_UPDATE.
1181   + Send (last_docid - doccount) instead of last_docid and (doclen_ubound -
1182     doclen_lbound) instead of doclen_ubound.
1184 * Remove special check which gives a more helpful error message when a modern
1185   client is used against a remote server running Xapian <= 0.9.6.
1187 build system:
1189 * Various changes allow us to now remove XAPIAN_VISIBILITY_DEFAULT from a
1190   number of functions which aren't in the public API (partly addresses
1191   ticket#63).
1193 * configure: For this development series, the library gets a -1.3 suffix and
1194   include files are installed with an extra /xapian-1.3 component to make
1195   parallel installs easier.
1197 * configure: Enable -fshow-column for GCC - things like vim's quickfix mode
1198   will then jump to the appropriate column for a compiler error or warning, not
1199   just the appropriate line.
1201 * Snowball compiler now reports "FILE:LINE:" before each error so tools like
1202   vim's quickfix mode can parse this and bring up the line with the error
1203   automatically.
1205 * docs/doxygen_api.conf.in: Don't generate XML from doxygen for the bindings -
1206   the bindings now do this for themselves.  (ticket#262)
1208 documentation:
1210 * INSTALL: Update GCC details - we now recommend 4.3 or newer (was 4.1), and
1211   note that while 3.1 is the hard minimum requirement, the oldest we've tested
1212   with at all recently was 3.3.
1214 * docs/deprecation.rst: Updated.
1216 tools:
1218 * delve:
1220   + Move delve from examples to bin and rename to xapian-delve.
1222   + Send errors to stderr not stdout.
1224 * xapian-check: Now reports useful descriptions rather than cryptic numeric
1225   codes for B-tree errors.
1227 debug code:
1229 * Add assertions that the index is in range when dereferencing MSetIterator and
1230   ESetIterator.
1232 * Fix various errors in debug logging statements.
1234 * Add QUERY category for debug logging.
1236 Xapian-core 1.2.23 (2016-03-28):
1238 API:
1240 * PostingSource: Public member variables are now wrapped by methods (mostly
1241   getters and/or setters, depending on whether they should be readable,
1242   writable or both).  In 1.3.5, the public members variables have been
1243   deprecated - we've added the replacement methods in 1.2.23 as well to make
1244   it easier for people to migrate over.
1246 chert backend:
1248 * xapian-check now performs additional consistency checks for chert. Reported
1249   by Jean-Francois Dockes and Bob Cargill via xapian-discuss.
1251 documentation:
1253 * Update links to Xapian website and trac to use https, which is now supported,
1254   thanks to James Aylett.
1256 portability:
1258 * On older Linux kernels, rename() of a file within a directory on NFS can
1259   sometimes erroneously fail with EXDEV.  This should only happen if you
1260   try to rename a file across filing systems, so workaround this issue by
1261   retrying up to 5 times on EXDEV (which should be plenty to avoid this
1262   bug, and we don't want to risk looping forever).  Fixes #698, reported by
1263   Mark Dufour.
1265 Xapian-core 1.2.22 (2015-12-29):
1267 API:
1269 * Add FLAG_CJK_NGRAM for QueryParser and TermGenerator.  Has the same effect as
1270   setting the environment variable XAPIAN_CJK_NGRAM.  Fixes #180, reported by
1271   Richard Boulton, with contributions from Pavel Strashkin, Mikkel Kamstrup
1272   Erlandsen and Brandon Schaefer.
1274 * Fix bug parsing multiple non-exclusive filter terms - previously this could
1275   result in such filters effectively being ignored.
1277 * Fix Database::get_doclength_lower_bound() over multiple databases when some
1278   are empty or consist only of zero-length documents.  Previously this would
1279   report a lower bound of zero, now it reports the same lowest bound as a
1280   single database containing all the same documents.
1282 * Make Database::get_wdf_upper_bound("") return 0.
1284 * Mark constructors taking a single argument as "explicit" to avoid unwanted
1285   implicit conversions.
1287 testsuite:
1289 * If command line option --verbose/-v isn't specified, set the verbosity level
1290   from environmental variable VERBOSE.
1292 * Skip timed tests if $AUTOMATED_TESTING is set.  Fixes #553, reported by
1293   Dagobert Michelsen.
1295 * Don't leave an extra fd open when starting xapian-tcpsrv for remotetcp tests.
1297 * apitest: Revert disabling of part of adddoc5 for clang - the test failure was
1298   in fact due to a bug in 1.3.x, and 1.2.x was never affected.
1300 * apitest: Tweak bounds checks in dbstats1 testcase - multi backends should
1301   give tight bounds.
1303 brass backend:
1305 * Format limit on docid now correctly imposed when sizeof(int) > 4.
1307 * Avoid potential DB corruption with full-compaction when using 64K blocks.
1309 chert backend:
1311 * Format limit on docid now correctly imposed when sizeof(int) > 4.
1313 * Avoid potential DB corruption with full-compaction when using 64K blocks.
1315 flint backend:
1317 * Format limit on docid now correctly imposed when sizeof(int) > 4.
1319 * Avoid potential DB corruption with full-compaction when using 64K blocks.
1321 remote backend:
1323 * Fix to handle total document length exceeding 34,359,738,368.  (Fixes #678,
1324   reported by matf).
1326 * Avoid dividing by zero when getting the average length for an empty database.
1328 * Stop apparent error from remote server when read-only client disconnects.  A
1329   read-only client just closes the connection when done, but the server
1330   previously reported "Got exception NetworkError: Received EOF", which sounds
1331   like there was a problem.  Now we just say "Connection closed" here, and
1332   "Connection closed unexpectedly" if the client connects in the middle of an
1333   exchange.  Possibly fixes #654, reported by German M. Bravo.
1335 * Give a clearer error message when the client and server remote protocol
1336   versions aren't compatible.
1338 * Check length of key in MSG_SETMETADATA.
1340 build system:
1342 * pkg-config: Fix library name in .pc file to say "xapian" not "xapian-core".
1343   Reported by Eric Lindblad to the xapian-devel list.
1345 * Private symbol decode_length() is no longer visible outside the library.
1347 documentation:
1349 * Stop maintaining ChangeLog files.  They make merging patches harder, and stop
1350   'git cherry-pick' from working as it should.  The git repo history should be
1351   sufficient for complying with GPLv2 2(a).
1353 * Strip out "quickstart" examples which are out of date and rather redundant
1354   with the "simple" examples.
1356 * Correct documentation of Enquire::get_query().  If no query has been set,
1357   the documentation said Xapian::InvalidArgumentError was thrown, but in
1358   fact we just return a default initialised Query object (i.e. Query()).  This
1359   seems reasonable behaviour and has been the case since Xapian 0.9.0.
1361 * Document xapian-compact --blocksize takes an argument.
1363 * Update snowball website link to snowballstem.org.
1365 tools:
1367 * xapian-replicate: Fix replication for files > 4GB on 32-bit platforms.
1368   Previously replication would fail to copy a file whose size didn't fit in
1369   size_t.  Fixes #685, reported by Josh Elsasser.
1371 * xapian-tcpsrv: Better error if -p/--port not specified
1373 * quest: Support `-f cjk_ngram`.
1375 examples:
1377 * xapian-metadata: Extend "list" subcommand to take optional key prefix.
1379 portability:
1381 * Fix new warnings from recent versions of GCC and clang.
1383 * Add spaces between literal strings and macros which expand to literal strings
1384   for C++11 compatibility in __WIN32__-specific code.
1386 * Need <unistd.h> for unlink() on FreeBSD, reported by Germán M. Bravo via
1387   github PR 72.
1389 * Fix testsuite to build when S_ISSOCK() isn't defined.
1391 * Don't provide our own implementation of sleep() under __WIN32__ if there
1392   already is one - mingw provides one, and in some situations it seems to clash
1393   with ours.  Reported to xapian-discuss by John Alveris.
1395 * Add missing '#include <arpa/inet.h>' to htons().  Seems to be implicitly
1396   included on most platforms, but Interix needs it.  Reported by Eric Lindblad
1397   on xapian-discuss.
1399 * Disable "<FUNCTION> is expected to return a value" warning from Sun's C++
1400   compiler, as it fires for functions ending in a "throw" statement.  Genuine
1401   instances will be caught by compilers with superior warning machinery.
1403 * Prefer scalbn() to ldexp() where possible, since the former doesn't ever set
1404   errno.
1406 * '#include <config.h>' in the "simple" examples, as when compiling with xlC on
1407   AIX, _LARGE_FILES gets defined by AC_SYS_LARGEFILE to enable large file
1408   support, and defining this changes the ABI of std::string, so it also needs
1409   to be defined when compiling code using Xapian.
1411 * On cygwin, include <arpa/inet.h> instead of winsock headers for htons() and
1412   htonl().
1414 * Include <cygwin/version.h> for CYGWIN_VERSION_API_MAJOR.
1416 * Avoid referencing static members via an object in that object's own
1417   definition, as this doesn't work with all compilers (noted with GCC 3.3), and
1418   is a bit of an odd construct anyway.  Reported by Eric Lindblad on
1419   xapian-discuss.
1421 * GCC < 3.4.2 lacks operator<< overloads for unsigned long long on some
1422   platforms, so simply work around this by using str(), as this isn't
1423   performance sensitive code.  Reported by Eric Lindblad on xapian-discuss.
1425 * Fix delete which should be delete[] in brass backend cursor code.
1427 Xapian-core 1.2.21 (2015-05-20):
1429 API:
1431 * QueryParser: Extend the set of characters allowed in the start of a range to
1432   be anything except for '(' and characters <= ' '.  This better matches what's
1433   accepted for a range end (anything except for ')' and characters <= ' ').
1434   Reported by Jani Nikula.
1436 matcher:
1438 * Reimplement OP_PHRASE for non-exact phrases.  The previous implementation was
1439   buggy, giving both false positives and false negatives in rare cases when
1440   three or more terms were involved.  Fixes #653, reported by Jean-Francois
1441   Dockes.
1443 * Reimplement OP_NEAR - the new implementation consistently requires the terms
1444   to occur at different positions, and fixes some previously missed matches.
1446 * Fix a reversed check for picking the shorter position list for an exact
1447   phrase of two terms.  The difference this makes isn't dramatic, but can be
1448   measured (at least with cachegrind).  Thanks to kbwt for spotting this.
1450 * When matching an exact phrase, if a term doesn't occur where we want, use
1451   its actual position to advance the anchor term, rather than just checking
1452   the next position of the anchor term.
1454 brass backend:
1456 * Fix cursor versioning to consider cancel() and reopen() as events where
1457   the cursor version may need incrementing, and flag the current cursor version
1458   as used when a cursor is rebuilt.  Fixes #675, reported by Germán M. Bravo.
1460 * Avoid using file descriptions < 3 for writable database tables, as it risks
1461   corruption if some code in the same process tries to write to stdout or
1462   stderr without realising it is closed.  (Partly addresses #651)
1464 chert backend:
1466 * Fix cursor versioning to consider cancel() and reopen() as events where
1467   the cursor version may need incrementing, and flag the current cursor version
1468   as used when a cursor is rebuilt.  Fixes #675, reported by Germán M. Bravo.
1470 * Avoid using file descriptions < 3 for writable database tables, as it risks
1471   corruption if some code in the same process tries to write to stdout or
1472   stderr without realising it is closed.  (Partly addresses #651)
1474 flint backend:
1476 * Fix cursor versioning to consider cancel() and reopen() as events where
1477   the cursor version may need incrementing, and flag the current cursor version
1478   as used when a cursor is rebuilt.  Fixes #675, reported by Germán M. Bravo.
1480 remote backend:
1482 * Fix sort by value when multiple databases are in use and one or more are
1483   remote.  This change necessitated a minor version bump in the remote
1484   protocol.  Fixes #674, reported by Dylan Griffith.  If you are upgrading a
1485   live system which uses the remote backend, upgrade the servers before the
1486   clients.
1488 build system:
1490 * The compiler ABI check in the public API headers now issues a warning
1491   (instead of an error) for an ABI mismatch for ABI versions 2 and later
1492   (which means GCC >= 3.4).  The changes in these ABI versions are bug fixes
1493   for corner cases, so there's a good chance of things working - e.g. building
1494   xapian-bindings with GCC 5.1 (which defaults to ABI version 8) against
1495   xapian-core built with GCC 4.9 (which defaults to ABI version 2) seems to
1496   work OK.  A warning is still useful as a clue to what is going on if linking
1497   fails due to a missing symbol.
1499 * xapian-config,xapian-core.pc: When compiling with xlC on AIX, the reported
1500   --cxxflags/--cflags now include -D_LARGE_FILES=1 as this is defined for the
1501   library, and defining it changes the ABI of std::string with this compiler,
1502   so it must also be defined when building code using the Xapian API.
1504 * xapian-core.pc: Include --enable-runtime-pseudo-reloc in --libs output for
1505   mingw and cygwin, like xapian-config does.
1507 * xapian-core.pc: Fix include directory reported by `pkg-config --cflags`.
1508   This bug was harmless if xapian-core was installed to a directory which was
1509   on the default header search path (such as /usr/include).
1511 * xapian-config: Fix typo so cached result of test in is_uninstalled() is
1512   actually used on subsequent calls.  Fixes #676, reported (with patch) by Ryan
1513   Schmidt.
1515 * configure: Changes in 1.2.19 broke the custom macro we use to probe for
1516   supported compiler flags such that the flags never got used.  This release
1517   fixes this problem.
1519 * configure: Set default value for AUTOM4TE before AC_OUTPUT so the default
1520   will actually get used.  Only relevant when building in maintainer mode
1521   (e.g. from git).
1523 * soaktest: Link with libtool's '-no-install' or '-no-fast-install', like we
1524   already do for other test programs, which means that libtool doesn't need to
1525   generate shell script wrappers for them on most platforms.
1527 documentation:
1529 * API documentation: Minor wording tweaks and formatting improvements.
1531 * docs/deprecation.rst: Add deprecation of omindex --preserve-nonduplicates
1532   which happened in 1.2.4.
1534 * HACKING: Update URL.
1536 * HACKING: libtool 2.4.6 is now used for bootstrapping snapshots and releases.
1538 tools:
1540 * xapian-compact: Make sure we open all the tables of input databases at the
1541   same revision.  (Fixes #649)
1543 * xapian-metadata: Add 'list' subcommand to list all the metadata keys.
1545 * xapian-replicate: Fix connection timeout to be 10 seconds rather than 10000
1546   seconds (the incorrect timeout has been the case since 1.2.3).
1548 * xapian-replicate: Set SO_KEEPALIVE for xapian-replicate's connection to the
1549   master, and add command line option to allow setting socket-level timeouts
1550   (SO_RCVTIMEO and SO_SNDTIMEO) on platforms that support them.  Fixes #546,
1551   reported by nkvoll.
1553 * xapian-replicate-server: Avoid potentially reading uninitialised data if a
1554   changeset file is truncated.
1556 portability:
1558 * Add spaces between literal strings and macros which expand to literal strings
1559   for C++11 compatibility.
1561 * ValueCountMatchSpy::top_values_begin(): Fix the comparison function not to
1562   return true for two equal elements, which manifests as incorrect sorting in
1563   some cases when using clang's libc++ (which recent OS X versions do).
1565 * apitest: The adddoc5 testcase fails under clang due to an exception handling
1566   bug, so just #ifdef out the problematic part of the testcase when building
1567   with clang for now.
1569 * Fix clang warnings on OS X.  Reported by Germán M. Bravo.
1571 * Fix examples to build with IBM's xlC compiler on AIX - they were failing due
1572   to _LARGE_FILES being defined for the library build but not for the examples,
1573   and defining this changes the ABI of std::string with this compiler.
1575 * configure: Improve the probe for whether the test harness can use RTTI to
1576   work for IBM's xlC compiler (which defaults to not generating RTTI).
1578 * Fix to build with Sun's C++ compiler.
1580 * Use F_DUPFD where available to dup to a file descriptor which is >= 2, rather
1581   than calling dup() until we get one.
1583 * When unserialising a double, avoid reading one byte past the end of the
1584   serialised value.  In practice this was harmless on most platforms, as
1585   dbl_max_mantissa is 255 for IEEE-754 format doubles, and at least GCC's
1586   std::string keeps the buffer nul-terminated.  Reported by Germán M. Bravo in
1587   github PR#67.
1589 * When unserialising a double, add missing cast to unsigned char when we check
1590   if the value will fit in the double type.  On machines with IEEE-754 doubles
1591   (which is most current platforms) this happened to work OK before.  It would
1592   also have been fine on machines where char is unsigned by default.
1594 * Fix incorrect use of "delete" which should be "delete []".  This is
1595   undefined behaviour in C++, though the type is POD, so in practice this
1596   probably worked OK on many platforms.
1598 debug code:
1600 * Fix some overly strict assertions in flint, which caused apitest's
1601   cursordelbug1 to fail with assertions on.
1603 Xapian-core 1.2.20 (2015-03-04):
1605 chert backend:
1607 * After splitting a block, we always insert the new block in the parent right
1608   after the block it was split from - there's no need to binary chop.
1610 build system:
1612 * Generate and install a file for pkg-config.  (Fixes#540)
1614 * configure: Update link to cygwin FAQ in error message.
1616 documentation:
1618 * include/xapian/weight.h: Document the enum stat_flags values.
1620 * docs/postingsource.rst: Use a modern class in postingsource example.  (Noted
1621   by James Aylett)
1623 * docs/deprecation.rst,docs/replication.rst: Fix typos.
1625 * Update doxygen configuration files to avoid warnings about obsolete tags from
1626   newer doxygen versions.
1628 * HACKING: Update details of building Xapian packages.
1630 tools:
1632 * xapian-check: For chert and brass, cross-check the position and postlist
1633   tables to detect positional data for non-existent documents.
1635 portability:
1637 * When locking a database for writing, use F_OFD_SETLK where available, which
1638   avoids having to fork() a child process to hold the lock.  This currently
1639   requires Linux kernel >= 3.15, but it has been submitted to POSIX so
1640   hopefully will be widely supported eventually.  Thanks to Austin Clements for
1641   pointing out this now exists.
1643 * Fix detection of fdatasync(), which appears to have been broken practically
1644   forever - this means we've probably been using fsync() instead, which
1645   probably isn't a big additional overhead.  Thanks to Vlad Shablinsky for
1646   helping with Mac OS X portability of this fix.
1648 * configure: Define MINGW_HAS_SECURE_API under mingw to get _putenv_s()
1649   declared in stdlib.h.
1651 * Use POSIX O_NONBLOCK in preference to O_NDELAY - the semantics of the latter
1652   differ between BSD and System V.
1654 * According to POSIX, strerror() may not be thread safe, so use alternative
1655   thread-safe ways to translate errno values where possible.
1657 * On Microsoft Windows, avoid defining EADDRINUSE, etc if they're already
1658   defined, and use WSAE* constants un-negated - they start from a high value
1659   so won't collide with E* constants.
1661 debug code:
1663 * Add more assertions to the chert backend code.
1665 Xapian-core 1.2.19 (2014-10-21):
1667 API:
1669 * Xapian::BM25Weight:
1671   + Improve BM25 upper bound in the case when our wdf upper bound > our
1672     document length lower bound.  Thanks to Craig Macdonald for pointing out
1673     this trick.
1675   + Pre-multiply termweight by (param_k1 + 1) rather than doing it for
1676     every weighted term in every document considered.
1678 testsuite:
1680 * Don't report apparent leaks of fds opened on /dev/urandom - at least on
1681   Linux, something in the C library seems to lazily open it, and the report of
1682   a possible leak followed by assurance that it's OK really is just noise we
1683   can do without.
1685 matcher:
1687 * Fix false matches reported for non-exact phrases in some cases.  Fixes the
1688   reduced testcase in #657, reported by Jean-Francois Dockes.
1690 brass backend:
1692 * Only full sync after writing the final base file (only affects Max OS X).
1694 chert backend:
1696 * Only full sync after writing the final base file (only affects Max OS X).
1698 flint backend:
1700 * Only full sync after writing the final base file (only affects Max OS X).
1702 build system:
1704 * For Sun's C++ compiler, pass -library=Crun separately since libtool looks for
1705   " -library=stlport4 " (with the spaces).  (fixes#650)
1707 * Remove .replicatmp (created by the test suite) upon "make clean".
1709 documentation:
1711 * include/xapian/compactor.h: Fix formatting of doxygen comment.
1713 * HACKING: freecode no longer accepts updates, so drop that item from the
1714   release checklist.
1716 * docs/overview.rst: Add missing database path to example of using
1717   xapian-progsrv in a stub database file.
1719 portability:
1721 * Suppress unused typedef warnings from debugging logging macros, which occur
1722   in functions which always exit via throwing an exception when compiling with
1723   recent versions of GCC or clang.
1725 * Fix debug logging code to compile with clang.  (fixes #657, reported by
1726   Germán M. Bravo)
1728 debug code:
1730 * Add missing RETURN() markup for debug logging in a few places, highlighted by
1731   warnings from recent GCC.
1733 * Fix incorrect return types in debug logging annotations so that code compiles
1734   when configured with --enable-log.
1736 Xapian-core 1.2.18 (2014-06-22):
1738 API:
1740 * Document: Fix get_docid() to return the docid for the sub-database (as it
1741   is explicitly documented to) for Document objects passed to functors like
1742   KeyMaker during the match.  (fixes#636, reported by Jeff Rand).
1744 * Document: Don't store the termname in OmDocumentTerm - we were only using it
1745   in get_description() output and an exception message.  Speeds up indexing
1746   etext.txt using simpleindex by 0.4%, and should reduce memory usage a bit
1747   too.  (Change inspired by comments from Vishesh Handa on xapian-devel).
1749 * Database: Iterating the values in a particular slot is now a bit more
1750   efficient for inmemory and remote backends (but still slow compared to
1751   flint, chert and brass).
1753 testsuite:
1755 * apitest: Expand crashrecovery1 to check that the expected base files exist
1756   and ones which shouldn't exist don't.
1758 * queryparsertest: Fix testcase for empty wildcard followed by negation to
1759   enable FLAG_LOVEHATE so the negation is actually parsed.  Fortunately the
1760   fixed testcase passes.
1762 matcher:
1764 * OP_SYNONYM: avoid fetching the doclength if the weighting scheme doesn't
1765   need it and the calculated wdf for the synonym is <= doclength_lower_bound
1766   for the current subdatabase.  (fixes #360)
1768 build system:
1770 * Releases are now bootstrapped with libtool 2.4.2 instead of 2.4, and with
1771   config.guess and config.sub updated to the latest versions.
1773 documentation:
1775 * Add an example of initializing SimpleStopper using a file listing stopwords.
1776   (Patch from Assem Chelli)
1778 * Improve the descriptions of the stem_strategy values in the API docs.
1779   (Reported by "oilap" on #xapian)
1781 * docs/sorting.rst: Fix incorrect parameter types in Xapian::Weight
1782   subclass example.
1784 * docs/glossary.rst: Add definition of "collection frequency".
1786 * HACKING:
1788   + makeindex is now in Debian package texlive-binaries.
1790   + Replace a link to the outdated autotools "goat book" with a link to the
1791     "Portable Shell" chapter of the autoconf manual.
1793 * include/xapian/base.h: Remove very out of date comments talking about atomic
1794   assignment and locking - since 0.5.0 we've adopted a "user locks" policy.
1795   (Reported by Jean-Francois Dockes)
1797 examples:
1799 * delve:
1801   + Add -A <prefix> option to list all terms with a particular prefix.
1803   + Send errors to stderr not stdout.
1805   + If -v is specified more than once, show even more info in some cases.
1806     (NEWS file claimed this was backported in 1.2.15, but it actually wasn't).
1808 * quest:
1810   + Add --default-op option.
1812   + Add --weight option to allow the weighting scheme to be specified.
1814 portability:
1816 * Explicitly '#include <algorithm>' for std::max(), fixing build with VS2013.
1817   (Fixes#641, reported by "boomboo").
1819 * Fix testcase blocksize1 not to try to delete an open database, which isn't
1820   possible under Windows.  (Fixes #643, reported by Chris Olds)
1822 * docs/quickstart.rst: Split --cxxflags and --libs for portability (noted by
1823   "Hurricane Tong" on xapian-devel).
1825 * Fix warnings with clang 5.0.
1827 debug code:
1829 * Add assertions that weighting scheme upper bounds aren't exceeded.
1831 Xapian-core 1.2.17 (2014-01-29):
1833 API:
1835 * Enquire::set_sort_by_relevance_then_value() and
1836   Enquire::set_sort_by_relevance_then_key(): Fix sense of reverse parameter.
1837   Reported by "boomboo" on IRC.
1839 * BM25Weight: Fix case where (k1 == 0 || b == 0) but k2 != 0.  Reported by
1840   "boomboo" on IRC.
1842 * Unicode::tolower(): Fix to give correct results for U+01C5, U+01C8, U+01CB,
1843   and U+01F2 (previously these were left unchanged).
1845 testsuite:
1847 * Automatically probe for and hook in eatmydata to the testsuite using the
1848   wrapper script it now includes.
1850 * Fix apitest to build when brass, chert or flint are disabled.
1852 brass backend:
1854 * Fix handling of invalid block sizes passed to Xapian::Brass::open() - the
1855   size gets fixed as documented, but the uncorrected size was passed to the
1856   base file (and abort() was called if 0 was passed).
1858 * Validate "dir_end" when reading a block.  (fixes #592)
1860 chert backend:
1862 * Fix handling of invalid block sizes passed to Xapian::Chert::open() - the
1863   size gets fixed as documented, but the uncorrected size was passed to the
1864   base file (and abort() was called if 0 was passed).
1866 * Validate "dir_end" when reading a block.  (fixes #592)
1868 flint backend:
1870 * Fix handling of invalid block sizes passed to Xapian::Flint::open() - the
1871   size gets fixed as documented, but the uncorrected size was passed to the
1872   base file (and abort() was called if 0 was passed).
1874 * Validate "dir_end" when reading a block.  (fixes #592)
1876 build system:
1878 * configure: Improve reporting of GCC version.
1880 * Use -no-fast-install on platforms where -no-install causes libtool to emit a
1881   warning.
1883 * docs/Makefile.am: Fix handling of MAINTAINER_NO_DOCS.
1885 * Include UnicodeData.txt and the script to generate the unicode tables from
1886   it.
1888 documentation:
1890 * postingsource.rst: Clarify a couple of points (reported by "vHanda" on IRC).
1892 portability:
1894 * Protect the ValueIterator::check() method against Mac OS X SDK headers
1895   which define a check() macro.
1897 * Fix warning from xlC compiler.
1899 * Avoid use of grep -e in configure, as /usr/bin/grep on Solaris doesn't
1900   support -e.
1902 * Fix check for flags which might be needed for ANSI mode for compilers called
1903   'cxx'.
1905 * configure: Improve handling of Sun's C++ compiler - trick libtool into not
1906   adding -library=Cstd, and prefer -library=stdcxx4 if supported.  Explicitly
1907   add -library=Crun which seems to be required, even though the documentation
1908   suggests otherwise.
1910 Xapian-core 1.2.16 (2013-12-04):
1912 API:
1914 * PositionIterator,PostingIterator,TermIterator,ValueIterator: Don't segfault
1915   if skip_to() or check() is called on an iterator which is already at_end().
1916   Reported by David Bremner.
1918 * ValueCountMatchSpy: get_description() on a default-constructed
1919   ValueCountMatchSpy object no longer fails when xapian-core is built with
1920   --enable-log.
1922 * ValueCountMatchSpy: get_total() on a default-constructed ValueCountMatchSpy
1923   object now returns 0 rather than segfaulting.
1925 testsuite:
1927 * If -v/--verbose is specified more than once to a test program, show the
1928   diagnostic output for passing tests as well as failing/skipped ones.
1930 * queryparsertest: Change qp_scale1 to time 5 repetitions of the large query to
1931   help average out variations.
1933 * queryparsertest: Add test coverage for explicit synonym of a term with a
1934   prefix (e.g. ~foo:search).
1936 * apitest: Remove code from registry* testcases which tries to test the
1937   consequences of throwing an exception from a destructor - it's complex to
1938   ensure we don't leak memory while doing this (it seems GCC doesn't release
1939   the object in this case, but clang does), and it's generally frowned upon,
1940   plus C++11 makes destructors noexcept by default.
1942 * Fix "make check" to actually removed cached databases first, as is
1943   intended.
1945 brass backend:
1947 * When moving a cursor on a read-only table, check if the block we want is in
1948   the internal cursor.  We already do this for a writable table, as it is
1949   necessary for correctness, but it's a cheap check and may avoid asking the
1950   OS for a block we actually already have.
1952 * Correctly report the database as closed rather than 'Bad file descriptor'
1953   in certain cases.
1955 * Reuse a cursor for reading values from valuestreams rather than creating
1956   a new one each time.  This can dramatically reduce the number of blocks
1957   redundantly reread when sorting by value.  The rereads will generally get
1958   served from VM cache, but there's still an overhead to that.
1960 chert backend:
1962 * When moving a cursor on a read-only table, check if the block we want is in
1963   the internal cursor.  We already do this for a writable table, as it is
1964   necessary for correctness, but it's a cheap check and may avoid asking the
1965   OS for a block we actually already have.
1967 * Correctly report the database as closed rather than 'Bad file descriptor'
1968   in certain cases.
1970 * Reuse a cursor for reading values from valuestreams rather than creating
1971   a new one each time.  This can dramatically reduce the number of blocks
1972   redundantly reread when sorting by value.  The rereads will generally get
1973   served from VM cache, but there's still an overhead to that.
1975 flint backend:
1977 * When moving a cursor on a read-only table, check if the block we want is in
1978   the internal cursor.  We already do this for a writable table, as it is
1979   necessary for correctness, but it's a cheap check and may avoid asking the
1980   OS for a block we actually already have.
1982 * Correctly report the database as closed rather than 'Bad file descriptor'
1983   in certain cases.
1985 build system:
1987 * Compress source tarballs with xz instead of gzip.
1989 * Split XAPIAN_LIBS out of XAPIAN_LDFLAGS so that -l flags for libraries
1990   configure detects are needed appear after -L flags specified by the user
1991   that may be needed to find such libraries.  (fixes#626)
1993 * XO_LIB_XAPIAN now handles the user specifying a relative path in
1994   XAPIAN_CONFIG, e.g.: "./configure XAPIAN_CONFIG=../xapian-core/xapian-config"
1996 * Adjust XO_LIB_XAPIAN to strip _gitNNN suffix from snapshot versions.
1998 * configure: Handle git snapshot naming when calculating REVISION.
2000 * configure: Enable -fshow-column for GCC - things like vim's quickfix mode
2001   will then jump to the appropriate column for a compiler error or warning, not
2002   just the appropriate line.
2004 * configure: Report GCC version in configure output.
2006 documentation:
2008 * The API documentation shipped with the release is now generated with
2009   doxygen 1.8.5 instead of 1.5.9, which is most evident in the different
2010   HTML styling newer doxygen uses.
2012 * Document how Utf8Iterator handles invalid UTF-8 in API documentation.
2014 * Improve how descriptions of deprecated features appear in the API
2015   documentation.
2017 * docs/remote_protocol.rst: Correct error in documentation of REPLY_DOCDATA
2018   message.
2020 * docs/overview.rst: Correct documentation for how to specify "prog" remote
2021   databases in stub files.
2023 * Direct users to git in preference to SVN - we'll be switching entirely in
2024   the near future.
2026 tools:
2028 * xapian-chert-update: Fix -b to work rather than always segfaulting (reported
2029   in http://bugs.debian.org/716484).
2031 * xapian-chert-update: The documented alias --blocksize for -b has never
2032   actually been supported, so just drop mentions of it from --help and the man
2033   page.
2035 * xapian-check:
2037   + Fix chert database check that first docid in each doclength chunk is more
2038     than the last docid in the previous chunk - previously this didn't actually
2039     work.
2041   + Fix database check not to falsely report "position table: Junk after
2042     position data" whenever there are 7 unused bits (7 is OK, *more* than 7
2043     isn't).
2045   + Fix to report block numbers correctly for links within the B-tree.
2047   + If the METAINFO key is missing, only report it once per table.
2049   + Fix database consistency checking to always open all the tables at the same
2050     revision - not doing this could lead to false errors being reported after a
2051     commit interrupted by the process being killed or the machine crashing.
2052     Reported by Joey Hess in http://bugs.debian.org/724610
2054 examples:
2056 * quest: Add --check-at-least option.
2058 portability:
2060 * configure: clang doesn't support -Wstrict-null-sentinel or -Wlogical-op, so
2061   don't pass it these options.
2063 * Fix build errors and warnings with mingw.
2065 * Suppress "unused local typedef" warnings from GCC 4.8.
2067 * If the compiler supports C++11, use static_assert to implement
2068   CompileTimeAssert.
2070 * tests/zlib-vg.c: Fix two warnings when compiled with clang.
2072 * Fix failure when built with -D_GLIBCXX_DEBUG - we were modifying the top()
2073   element of a heap before calling pop(), such that the heap comparison
2074   operation (which is called when -D_GLIBCXX_DEBUG is on to verify the heap is
2075   valid) would read off the end of the data.  In a normal build, this issue
2076   would likely never manifest.
2078 * configure: When generating ABI compatibility checks in xapian/version.h, pass
2079   $CXXFLAGS and $CPPFLAGS to $CXXCPP as they could contain options which affect
2080   the ABI (such as -fabi-version for GCC).  (Fixes #622)
2082 * Microsoft GUIDs in binary form have reversed byte order in the first three
2083   components compared to standard UUIDs, so the same database would report a
2084   different UUID on Windows to on other platforms.  We now swap the bytes to
2085   match the standard order.  With this fix, the UUIDs of existing databases
2086   will appear to change on Windows (except in rare "palindronic" cases).
2088 * Fix a couple of issues to get Xapian to build and work on AIX.
2090 * common/safeuuid.h: Remove bogus take-address-of from uuid handling code for
2091   NetBSD and OpenBSD.
2093 * Under cygwin, use cygwin_conv_path() if using a new enough cygwin version,
2094   rather than the now deprecated cygwin_conv_to_win32_path().  Reported by
2095   "Haroogan" on the xapian-devel mailing list.
2097 * common/safeuuid.h: Add missing '#include <cstdlib>' and qualify free with std.
2099 * Fix 'unused label' warning when chert backend is disabled.
2101 * xapian.h: Add check for Wt headers being included before us and defining
2102   'slots' as a macro - if they are, give a clear error advising how to work
2103   around this (previously compilation would fail with a confusing error).
2105 debug code:
2107 * Fix assertion failure for when an OrPostList decays to an AndPostList - the
2108   ordering of the subqueries by estimated termfreq may not be the same as it
2109   was when the OrPostList was constructed, as the subqueries may themselves
2110   have decayed.  Reported by Michel Pelletier.
2112 * Fix -Wcast-qual warning from GCC 4.7 when configured with --enable-log.
2114 Xapian-core 1.2.15 (2013-04-16):
2116 API:
2118 * QueryParser/TermGenerator: Don't include CJK codepoints which are
2119   punctuation in N-grams.
2121 * TermGenerator: Fix bug where we failed to generate the first bigram
2122   from the second sequence of N-grammable CJK characters in a piece of text.
2124 brass backend:
2126 * Call fdatasync()/fsync() when creating the "iambrass" file.
2128 chert backend:
2130 * Call fdatasync()/fsync() when creating the "iamchert" file.
2132 flint backend:
2134 * Call fdatasync()/fsync() when creating the "iamflint" file.
2136 build system:
2138 * XO_LIB_XAPIAN now handles the user specifying XAPIAN_CONFIG without a path,
2139   for example: ./configure XAPIAN_CONFIG=xapian-config-1.3
2141 tools:
2143 * delve: If -v is specified more than once, show even more info in some cases.
2145 portability:
2147 * Fix warning due to needlessly casting away const-ness in debug logging.
2149 * Fix pointer truncation bug in lemon parser generator, which probably affects
2150   regenerating the query parser on WIN64.
2152 debug code:
2154 * Fix to build when configured with --enable-log.
2156 Xapian-core 1.2.14 (2013-03-14):
2158 API:
2160 * MSet::get_document(): Don't cache retrieved Document objects unless they
2161   were requested with fetch().  This avoids using a lot of memory when many
2162   MSet entries are retrieved.  (Fixes #604)
2164 testsuite:
2166 * apitest: Improved test coverage.
2168 matcher:
2170 * Check if a candidate document has at least the minimum weight needed
2171   before checking positional information, which speeds up slow phrase
2172   searches (partly addresses #394).
2174 brass backend:
2176 * Fix multipass compaction not to damage document values, and to merge the
2177   database stats correctly.  (fixes #615)
2179 chert backend:
2181 * Fix multipass compaction not to damage document values, and to merge the
2182   database stats correctly.  (fixes #615)
2184 flint backend:
2186 * Fix multipass compaction bug.  (fixes #615)
2188 tools:
2190 * xapian-replicate:
2192   + Fix handling of delays between replication events - the subtraction of the
2193     target time and the current time was reversed, so we wouldn't sleep when
2194     before the deadline, but would sleep after it for the amount we'd missed it
2195     by.
2197   + On Microsoft Windows, we no longer sleep for more than 43 years if the
2198     target time for a replication event had already passed.  (Fixes #472)
2200 portability:
2202 * matcher/queryoptimiser.cc: Need <functional> for mem_fun().
2204 * tests/harness/testsuite.cc: Don't provide explicit template types to
2205   make_pair - it isn't useful, and breaks with C++11.  Fixes build error with
2206   MSVC2012.
2208 * examples/quest.cc: Fix to build with Sun Studio 12 compiler.  (ticket#611)
2210 Xapian-core 1.2.13 (2013-01-09):
2212 API:
2214 * TermGenerator: Add new method TermGenerator::set_max_word_length() to allow
2215   this limit to be adjusted by the user.
2217 * QueryParser: Implicitly close any unclosed brackets at the end of the query
2218   string.  Patch from Sehaj Singh Kalra.
2220 * DateValueRangeProcessor: Add extra constructor overloaded form so that in
2221   DateValueRangeProcessor(1, "date:"), the const char * gets interpreted as
2222   std::string rather than bool.
2224 testsuite:
2226 * apitest: Assorted test coverage improvements.
2228 * When reporting valgrind errors, skip any warnings before the error in the
2229   valgrind log.
2231 matcher:
2233 * Improved fix for #590 - count all matching LeafPostList objects with a Weight
2234   object rather than trying to prune at the MultiAndPostList level based on
2235   max_wt (if wdf is always zero for a term, BM25 gives max_wt of 0, which lead
2236   to us never counting that subquery.
2238 * Fix calculation of 0.0/0.0 in some cases.  This then got used as a minimum
2239   weight, but it seems this gives -nan (at least on x86-64 Linux) so it may
2240   have been harmless in practice.
2242 * We no longer use the highest weighted MSet entry to calculate percentages, so
2243   remove code which finds it.
2245 brass backend:
2247 * Close excess file handles before we get the fcntl lock, which avoids the
2248   lock being released again if one is open on the lock file.  Notably this
2249   avoids a situation where multiple threads in the same process could succeed
2250   in locking a database concurrently.
2252 chert backend:
2254 * Close excess file handles before we get the fcntl lock, which avoids the
2255   lock being released again if one is open on the lock file.  Notably this
2256   avoids a situation where multiple threads in the same process could succeed
2257   in locking a database concurrently.
2259 flint backend:
2261 * Close excess file handles before we get the fcntl lock, which avoids the
2262   lock being released again if one is open on the lock file.  Notably this
2263   avoids a situation where multiple threads in the same process could succeed
2264   in locking a database concurrently.
2266 remote backend:
2268 * Improve the UnimplementedError message for a MatchSpy subclass which doesn't
2269   implement name() so it's clearer that it is this particular subclass which
2270   can't be used remotely, rather than all MatchSpy objects.
2272 build system:
2274 * The build system is now generated with automake 1.11.6 rather than 1.11.1,
2275   which fixes a security issue in "make distcheck" (not something users will
2276   usually run, but it seems worth addressing).
2278 * Use user-specified LIBS for configure tests, which is what you'd expect to
2279   happen, and provides a way for the user to tell configure where to find
2280   library functions which configure can't find for itself.
2282 * INCLUDES is now deprecated in automake, so use AM_CPPFLAGS instead.
2284 * Test coverage rules now assume lcov 1.10 which allows them to be simpler
2285   and not to require a patched version of lcov.
2287 documentation:
2289 * valueranges.html: Update documentation to reflect change in Xapian 1.1.2 -
2290   DateValueRangeProcessor and StringValueRangeProcessor now support a prefix or
2291   suffix.
2293 * Clarify that the "reverse" parameter of set_sort_by_relevance_then_value()
2294   and set_sort_by_relevance_then_key() only affects the ordering of the
2295   value/key part of the sort.
2297 * docs/quickstart.html: Fix seriously outdated statement that Xapian doesn't
2298   create the database directory - that changed in 0.7.2 (released 2003-07-11).
2300 * HACKING: Try to make it clearer we're looking for a dual-licence on submitted
2301   patches.
2303 tools:
2305 * xapian-replicate:
2307   + Add a --full-copy option to force a full copy to be sent.  (ticket#436)
2309   + Add --quiet option, and be a little more verbose by default.
2311   + Allow files > 32G to be be copied by replication.
2313   + Fix "if (fd > 0)" tests in some replication code to be "if (fd >= 0)".
2314     In practice this is unlikely to actually have caused problems since
2315     stdin is typically still open and using fd 0.
2317   + Simplify how we open the .DB file on the replication slave to just call
2318     open() once with O_CREAT, rather than once without, than stat() if that
2319     fails, and then again with O_CREAT|O_TRUNC if stat() doesn't show an
2320     ordinary file exists.
2322 examples:
2324 * quest:
2326   + New --flags command line option to allow setting arbitrary QueryParser
2327     flags.
2329   + Align option descriptions in --help output, and make the initial letter of
2330     such descriptions consistently lowercase.
2332 portability:
2334 * Fix testsuite harness to compile with GCC 4.7.
2336 * On platforms with the F_MAXFD fcntl but without closefrom(), we were failing
2337   to close the highest numbered open fd in our closefrom() replacement.
2339 * Our closefrom() replacement on Linux now works around valgrind not hiding
2340   some extra fds it has open, but then complaining if we try to close them.
2342 + Pass O_BINARY when opening replication related files in some cases where we
2343   weren't before, which will probably help solve ticket #472.
2345 * configure: socketpair() needs -lnetwork on Haiku.
2347 * Micro-optimisation in Unicode handling - GCC doesn't currently optimise the
2348   arithmetic shift right idiom we use, but it documents that signed right shift
2349   does sign extension so we now just use a right shift for GCC.
2351 debug code:
2353 * Preserve errno over debug logging calls, so they can safely be added to code
2354   which expects errno not to change.
2356 Xapian-core 1.2.12 (2012-06-27):
2358 build system:
2360 * 1.2.11 had its library version information incorrectly set.  This resulted in
2361   the shared library having an incorrect SONAME - e.g. on Linux,
2362   libxapian.so.21 instead of libxapian.so.22.  This release has been made to
2363   fix this problem.
2365 documentation:
2367 * AUTHORS: Add the GSoC students.
2369 Xapian-core 1.2.11 (2012-06-26):
2371 API:
2373 * Add new QueryParser::STEM_ALL_Z stemming strategy, which stems all terms and
2374   adds a Z prefix.  (Patch from Sehaj Singh Kalra, fixes ticket#562)
2376 * Add TermGenerator::set_stemming_strategy() method, with strategies which
2377   correspond to those of QueryParser.  Based on patch from Sehaj Singh Kalra,
2378   with some tweaks for adding term positions in more cases.  (Fixes ticket#563)
2380 * Correct "BM25Weight" to "TradWeight" in exception message from TradWeight.
2382 * We were failing to call init() for user-defined Weight objects providing the
2383   term-independent weight.  These now get called with init(0.0).
2385 * Xapian::Auto::open_stub() now throws a Xapian::DatabaseOpeningError exception
2386   if the stub file can't be opened.  Previously we failed to check for this
2387   condition, which resulted in us treating the file as empty.
2389 testsuite:
2391 * When the testsuite is using valgrind, we used to run remote servers under
2392   valgrind too (but with --tool=none) to get consistent behaviour as valgrind's
2393   emulation of x87 excess precision isn't exact.  Now we only do this if x87 FP
2394   instructions are actually in use (which means x86 architecture and configure
2395   run with --disable-sse).
2397 * Make sure XAPIAN_MAX_CHANGESETS gets unset after replication testcases which
2398   set it, so further testcases don't waste time generating changesets.
2400 * Improved test coverage (including more tests for closed databases -
2401   ticket#337).
2403 brass backend:
2405 * After closing the database, methods which try to use the termlist would throw
2406   FeatureUnavailableError with message "Database has no termlist", assuming
2407   that the termlist table not being open meant it wasn't present.  Fix to check
2408   if the postlist_table is open to determine which case we're in.
2410 chert backend:
2412 * After closing the database, methods which try to use the termlist would throw
2413   FeatureUnavailableError with message "Database has no termlist", assuming
2414   that the termlist table not being open meant it wasn't present.  Fix to check
2415   if the postlist_table is open to determine which case we're in.
2417 inmemory backend:
2419 * Check if the database is closed in metadata_keys_begin() for InMemory
2420   Databases.
2422 build system:
2424 * xapian-config: Don't interpret a missing .la file as meaning that we only
2425   have static libraries.
2427 documentation:
2429 * Fix API documentation for Query constructors - both XOR and ELITE_SET can
2430   take any number of subqueries, not only exactly two.
2432 * Backport missing API documentation comments for operator++ and operator*
2433   methods or PositionIterator, PostingIterator and TermGenerator.
2435 * docs/replication.rst: Update documentation - since 1.2.5, the value of
2436   XAPIAN_MAX_CHANGESETS determines how many changesets we keep.
2438 * docs/admin_notes.rst: Correction - we don't "create a lock file", we "lock a
2439   file".
2441 * Fix API documentation for TradWeight constructor - "k1" should be "k".
2443 portability:
2445 * configure: Overhaul handling of compilers which pretend to be GCC.  Clang
2446   is now detected, and we only pass it warning flags it actually understands.
2447   And we now check for symbol visibility support with Intel's compiler.
2449 * configure: Solaris automatically pulls in library dependencies, so set
2450   link_all_deplibs_CXX=no there.
2452 * configure: We now check -Bsymbolic-functions for all compilers.
2454 * configure: Enable -Wdouble-promotion for GCC >= 4.6.
2456 * Pass -ldl last when compiling zlib-vg.so, as that seems to be needed on
2457   Ubuntu 12.04.
2459 * Fix incorrect use of "delete" which should be "delete []".  This is
2460   undefined behaviour in C++, though the type is POD, so in practice this
2461   probably worked OK on many platforms.
2463 * In BM25Weight when k1 or b is zero (not the default), we used to multiply
2464   an uninitialised double by zero, which is undefined behaviour, but in
2465   practice will often give zero, leading to the desired results.
2467 * xapian.h: Add check for Qt headers being included before us and defining
2468   'slots' as a macro - if they are, give a clear error advising how to work
2469   around this (previously compilation would fail with a confusing error).
2471 Xapian-core 1.2.10 (2012-05-09):
2473 API:
2475 testsuite:
2477 * apitest: Extend tradweight1 to test that TradWeight(0) means that wdf and
2478   document length don't affect the weight of a term.
2480 * termgentest: Check that TermGenerator discards words > 64 bytes.
2482 matcher:
2484 * Don't count unweighted subqueries of MultiAndPostList in percentage
2485   calculations, as OP_FILTER maps to MultiAndPostList now.  (ticket#590)
2487 brass backend:
2489 * When compacting, if the output database is empty, don't write out a metainfo
2490   tag.  Take care not to divide by zero when computing the percentage size
2491   change for a table.
2493 chert backend:
2495 * When compacting, if the output database is empty, don't write out a metainfo
2496   tag.  Take care not to divide by zero when computing the percentage size
2497   change for a table.
2499 documentation:
2501 * API documentation:
2503  + Note version when Database::close() was added.
2505  + Fix switched lower and upper in API documentation for Weight methods
2506    get_doclength_lower_bound() and get_doclength_upper_bound().  Correct
2507    maximum to minimum in get_doclength_lower_bound() comment and note that this
2508    excludes zero length documents.  Fix "An lower" to "A lower".
2510 * docs/admin_notes.html: Mention that postlist and termlist tables also hold
2511   value info for chert.  Mention that xapian-chert-update was removed in 1.3.0.
2512   Mention that you need to use copydatabase from 1.2.x to convert flint to
2513   chert.
2515 * HACKING: Update section on patches to mention git (git diff and git
2516   format-patch), and using "-r" with normal diff, and also that ptardiff offers
2517   a nice way to diff against an unpacked tarball.
2519 debug code:
2521 * Fix use of AssertEq() on NULL, which doesn't compile, at least with recent
2522   GCC.
2524 Xapian-core 1.2.9 (2012-03-08):
2526 API:
2528 * QueryParser: Fix FLAG_AUTO_SYNONYMS not to enable auto multi-word synonyms
2529   too (but in a different way to trunk so as to not break the ABI).
2531 matcher:
2533 * Fix issue with running AND, OR and XOR queries against a database with no
2534   documents in it - this was leading to a divide by zero, which led to
2535   MSet::get_matches_estimated() reporting 2147483648 on i386.
2537 build system:
2539 * Remove configure's --with-stlport and --with-stlport-compiler options, as
2540   they don't allow you to actually specify what you need to (at least to use
2541   the Debian STLport package), and instead document what to pass to configure
2542   to enable building with STLport (though it seems to no longer be actively
2543   maintained, and the debug mode (which is probably the most interesting
2544   feature now) doesn't seem to work on Debian stable).
2546 documentation:
2548 * Document that OP_ELITE_SET with non-term subqueries might pick subqueries
2549   which don't match anything.  Closes ticket#49.
2551 * Document that you can define a static operator delete method in your subclass
2552   if deallocation needs to be handled specially.  (Closes ticket#554)
2554 * Assorted minor documentation improvements.
2556 portability:
2558 * Address new warnings from GCC 4.6.
2560 * Fix argument order when linking xapian-check to fix mingw build.
2561   (ticket#567)
2563 * Add some missing explicit header includes to fix build with STLport.
2565 Xapian-core 1.2.8 (2011-12-13):
2567 API:
2569 * Add support to TermGenerator and QueryParser for indexing and searching CJK
2570   text using n-grams.  Currently this is only enabled when the environmental
2571   variable XAPIAN_CJK_NGRAM is set to a non-empty value.
2573 documentation:
2575 * Add link from index page to apidoc.pdf.
2577 * quickstart.html: Correct link which was to quickstartsearch.cc.html but
2578   should be to quickstartindex.cc.html.
2580 * overview.html,quickstart.html: Fix several factual errors.
2582 * API documentation:
2584   + Improve documentation comments for several methods.
2586   + Add documentation for function parameters which didn't have it.
2588   + Remove bogus paragraph in WritableDatabase::replace_document()
2589     documentation comment which had been cut and pasted from delete_document()
2590     documentation comment.  (Fixes ticket#579)
2592   + Explicitly document which value slot numbers are valid.  (Fixes ticket#555)
2594   + Escape < and > in doxygen comments so "<foo>" doesn't get eaten by doxygen.
2596 portability:
2598 + Some fixes for warnings when cross-compiling to mingw.
2600 * tests/soaktest/soaktest.cc: With Sun's compiler, random() and srandom()
2601   aren't in <cstdlib> so we need to use <stdlib.h> instead.
2603 Xapian-core 1.2.7 (2011-08-10):
2605 API:
2607 * Document objects now track whether any document positions have been modified
2608   so that replacing a modified document can completely skip considering
2609   updating positions if none have changed.  Currently the flint, chert, and
2610   brass backends implement this optimisation.  A common case this speeds up is
2611   adding and/or removing boolean filter terms to/from existing documents - for
2612   example this gives an 18% speedup for adding tags in notmuch.
2614 testsuite:
2616 * Make sure that perftest isn't run with libeatmydata preloaded, as making
2617   fsync() a no-op makes performance tests rather bogus.
2619 remote backend:
2621 * Remove unnecessary call to reopen() in the remote servers in a case where
2622   either we had just called it or we are using a writable database and so
2623   reopen() doesn't do anything.
2625 build system:
2627 * configure: -Wshadow gives bogus warnings with 4.0 (at least on Mac OS X), so
2628   disable it for GCC < 4.1 (like the comments already said we did!)
2630 documentation:
2632 * Improve the documentation comment for Database::close().  (ticket#504)
2634 * Fix typo in documentation comment for Enquire constructor which reversed the
2635   intended sense (though the text was fairly obviously wrong before).
2637 * Improve documentation of QueryParser::add_boolean_prefix()'s exclusive
2638   parameter to talk about terms and prefixes rather than values and fields
2639   (which was confusing since "document value" has a particular meaning in
2640   Xapian).
2642 * docs/facets.html: Expand descriptions for indexing and finding facets.
2643   Fix errors in example code.
2645 * docs/index.html: Add links to Omega and bindings documentation.
2647 * docs/remote_protocol.html: Fixed typo which reversed the intended sense.
2649 * xapian-check --help: Document that checking a whole database performs
2650   additional cross-checks between the tables.
2652 * docs/admin_notes.html: Add note about xapian-chert-update.
2654 * docs/deprecation.html: Note here that WritableDatabase::flush() is
2655   deprecated in favour of WritableDatabase::commit().
2657 portability:
2659 * Fix -Wshadow warnings from GCC 4.6.
2661 * Fix warning from GCC 3.3.
2663 debug code:
2665 * Fix some problems with the templates used to implement output of parameters
2666   and return values in debug logging.
2668 Xapian-core 1.2.6 (2011-06-12):
2670 API:
2672 * QueryParser:
2674   + Add new set_max_wildcard_expansion() method to allow limiting the number of
2675     terms a wildcard can expand to.  (ticket#350)
2677   + If default_op is OP_NEAR or OP_PHRASE then disable stemming of the terms,
2678     since we don't index positional information for stemmed terms by default.
2680 * Spelling correction was failing to correctly handle words which had the same
2681   trigram in an even number of times.
2683 testsuite:
2685 * We now actually include the soaktest code in the release tarballs.
2687 matcher:
2689 * Eliminate some vector copies when handling phrase subqueries in the query
2690   optimiser.
2692 brass backend:
2694 * Kill the child process which holds the lock with SIGKILL as that can't be
2695   ignored, whereas SIGHUP can be in some cases.
2697 chert backend:
2699 * Kill the child process which holds the lock with SIGKILL as that can't be
2700   ignored, whereas SIGHUP can be in some cases.
2702 flint backend:
2704 * Kill the child process which holds the lock with SIGKILL as that can't be
2705   ignored, whereas SIGHUP can be in some cases.
2707 documentation:
2709 * The HTML documentation is now maintained in reStructured Text format.
2711 * docs/queryparser.html: Document the precedence order of operators.
2713 * docs/scalability.html: Bring up-to-date.
2715 * docs/overview.html: Document "remote" in stub databases.
2717 * docs/postingsource.html: Add PostingSource example.  (ticket#503)
2719 * include/xapian/database.h: Add @exception InvalidArgumentError for
2720   Database::get_document() (ticket#542).
2722 * Ship ChangeLog.0 in the tarball.
2724 * Assorted minor improvements.
2726 examples:
2728 * examples/delve: Report has_positions().
2730 * examples/simpleindex: Add short description to usage message.
2732 portability:
2734 * Fix to build for mingw.
2736 Xapian-core 1.2.5 (2011-04-04):
2738 API:
2740 * Enquire::get_eset() now accepts a min_wt argument to allow the minimum wanted
2741   weight to be specified.  Default is 0, which gives the previous behaviour.
2743 * QueryParser: Handle NEAR/<offset> and ADJ/<offset> where offset isn't an
2744   integer the same way at the end of the query as in the middle.
2746 * Replication:
2748   + Only keep $XAPIAN_MAX_CHANGESETS changeset files when generating a new one
2749     (previously this variable only controlled if we generated changesets or
2750     not).  Closes ticket#278.
2752   + $XAPIAN_MAX_CHANGESETS is reread each time, rather than only when the
2753     database is opened.
2755   + If you build Xapian with DANGEROUS mode enabled, changeset files now
2756     actually have the appropriate flag set (the reader will currently throw an
2757     exception, but that's better than quietly handling them incorrectly).
2759 testsuite:
2761 * Compaction tests which generate stub files now close them before performing
2762   the actual compaction, to avoid issues on Microsoft Windows (ticket#525).
2764 * Improve test coverage.
2766 matcher:
2768 * Fix memory leak if an exception is thrown during the match.
2770 brass backend:
2772 * Bumped format version number (we now store the oldest revision for which we
2773   might have a replication changeset).
2775 * Optimise not to read the bitmaps from the base files when opening a database
2776   for reading (cross-port of equivalent change to chert).
2778 * Optimise not to update doclength when it hasn't changed (cross-port of
2779   equivalent change to chert).
2781 * If we try to delete an old base file and it isn't there, just continue rather
2782   than throwing an exception.  We wanted to get rid of it anyway, and it may be
2783   NFS issues telling us the wrong thing.  In particular, DatabaseCorruptError
2784   was rather a pessimistic assessment.
2786 chert backend:
2788 * Optimise not to read the bitmaps from the base files when opening a database
2789   for reading.
2791 * Optimise not to update doclength when it hasn't changed.
2793 * xapian-chert-update: Fix to handle larger databases, and databases which
2794   have values set.
2796 * If we try to delete an old base file and it isn't there, just continue rather
2797   than throwing an exception.  We wanted to get rid of it anyway, and it may be
2798   NFS issues telling us the wrong thing.  In particular, DatabaseCorruptError
2799   was rather a pessimistic assessment.
2801 flint backend:
2803 * Optimise not to read the bitmaps from the base files when opening a database
2804   for reading (cross-port of equivalent change to chert).
2806 * Optimise not to update doclength when it hasn't changed (cross-port of
2807   equivalent change to chert).
2809 * If we try to delete an old base file and it isn't there, just continue rather
2810   than throwing an exception.  We wanted to get rid of it anyway, and it may be
2811   NFS issues telling us the wrong thing.  In particular, DatabaseCorruptError
2812   was rather a pessimistic assessment.
2814 remote backend:
2816 * xapian-tcpsrv: If we can't bind to the specified port because it is a
2817   privileged one, exit with code 77 (EX_NOPERM) to make it easier to
2818   automatically handle failure when starting the server from a script.
2820 build system:
2822 * Snapshots and releases are now bootstrapped with autoconf 2.68 and libtool
2823   2.4.
2825 * configure: -Wstrict-null-sentinel was added in GCC 4.0.1 and so doesn't work
2826   with GCC 4.0.0.  For simplicity, only enable it for GCC >= 4.1.
2828 documentation:
2830 * INSTALL: Note how to build for a non-default arch on a multi-arch platform.
2832 * include/xapian/enquire.h: Fix doxygen markup so alternative overloaded forms
2833   of Enquire::get_mset() appear in the API documentation.
2835 * collapsing.html: Add missing document (written some time ago, but never
2836   actually added to builds).
2838 * replication.html: Update documentation to make it clear that users shouldn't
2839   create the destination directory for replication themselves.
2841 * docs/intro_ir.html: Update link to a paper.  Update text about book "to be
2842   published in 2008".
2844 * docs/deprecation.html:
2846   + PostingSource now offers a replacement for Enquire::set_bias().
2848   + OmegaScript: $set{spelling,true} is now deprecated.
2850   + Add note about botched removal of Enquire.get_matching_terms from Python
2851     bindings (now fully removed).
2853   + Note removal of "if idx in mset" from Python bindings.
2855   + Deprecate MSet.items and ESet.items from Python bindings (ticket#531).
2857 * docs/admin_notes.html: Update for 1.2.5.
2859 * Updates to documentation of internals.
2861 tools:
2863 * xapian-replicate-server: Fix race condition between checking if a file
2864   exists and opening it to replicate it.
2866 * xapian-replicate: Complain unless host name and port number are specified -
2867   previously these defaulted to an empty string and 0, which resulted in
2868   potentially confusing error messages.
2870 * xapian-replicate: If --master isn't specified, default to DATABASE.
2872 examples:
2874 * quest: Report any spelling correction (requires the database contains
2875   spelling data of course).
2877 * copydatabase: Add --no-renumber option.
2879 portability:
2881 * api/compactor.cc: Add missing header <ctime> for time() (ticket#530).
2883 * api/compactor.cc: Use msvc_posix_rename() under __WIN32__ to atomically
2884   update stub file after compaction (ticket#525).
2886 * Fix uninitialised variable warnings with gcc -O3.
2888 * Eliminate std::string member of global static object used when compiled with
2889   --enable-log which was causes problems on Mac OS X.
2891 * Fix some issues highlighted by clang++ warnings.
2893 Xapian-core 1.2.4 (2010-12-19):
2895 API:
2897 * QueryParser:
2899   + Avoid a double free if Query construction throws an exception in a
2900     particular case.  Fixes ticket#515.
2902   + Allow phrase generators between a probabilistic prefix and the term itself
2903     (e.g. path:/usr/local).
2905   + The correct window size wasn't being set in some cases when default_op was
2906     set to OP_PHRASE.
2908 * Enquire::get_mset():
2910   + Avoid pointlessly trying to allocate lots of memory if the first document
2911     requested is larger than the size of the database.
2913   + An empty query now returns an MSet with firstitem set correctly -
2914     previously firstitem was always 0 in this case.
2916 * Document: Initialise docid to 0 when creating a document from
2917   scratch, as documented.
2919 * Compactor:
2921   + Move the database compaction and merging functionality into this new class,
2922     and make xapian-compact a simple wrapper around this class.  (ticket#175)
2924   + Inputs can now be stub database directories or files, in which case the
2925     databases in the stub are used as inputs.
2927   + Add support for compacting to a stub database, which can be one of the
2928     inputs (for atomic update).
2930   + If spellings and/or synonyms were only present in some source databases,
2931     they weren't copied to the output database, but now they are.
2933 testsuite:
2935 * Improve test coverage (particularly for Xapian::Utf8Iterator and
2936   Xapian::Stem).
2938 * Add zlib-vg.c to distribution tarballs.
2940 * tests/runtest: Add XAPIAN_TESTSUITE_LD_PRELOAD hook to allow libeatmydata to
2941   easily be used to speed up testsuite runs.
2943 matcher:
2945 * The matcher wasn't recalculating the max possible weight after a subquery of
2946   XOR reached its end.  This caused an assertion failure in debug builds, and
2947   is a missed optimisation opportunity.
2949 * Implement SelectPostList::check() so that check() on OP_NEAR and OP_PHRASE
2950   subqueries will just check a single document, not a potentially huge numbers
2951   of documents.
2953 * BM25Weight: Fix calculation order to avoid inconsistent weights due to
2954   rounding when certain non-default parameter combinations are used.
2956 * TradWeight: Fix calculation order to avoid inconsistent weights due to
2957   rounding with TradWeight(0).
2959 * Fix regression in speed of OP_OR queries in certain cases due to optimisation
2960   added in 1.0.21/1.2.1.
2962 * In the query optimiser, use value range bounds to detect value ranges which
2963   must be empty.
2965 remote backend:
2967 * Add support for iterating metadata keys with the remote backend.  This change
2968   necessitated an increase in the minor version of the remote protocol.  If you
2969   are upgrading a live system which uses the remote backend, upgrade the
2970   servers before the clients.
2972 build system:
2974 * xapian-config: Add --static option which makes other options report values
2975   for static linking.
2977 * xapian-config is now removed by "make distclean" not "make clean".
2979 * configure: FreeBSD and OpenBSD don't need explicit dependency libraries, so
2980   set link_all_deplibs_CXX=no there.
2982 * This release uses autoconf 2.67 rather than 2.65.
2984 documentation:
2986 * INSTALL: Raise recommended GCC version from 3.3 to 4.1, since that's the
2987   oldest we regularly test with.
2989 * replication.html: Update and improve in various ways.
2991 * Remove lingering "experimental" marker from PostingSource and
2992   ValueCountMatchSpy API documentation.
2994 * index.html: Add links to replication and facets documents, and fix typo in
2995   serialisation document link.
2997 * internals.html: Add link to replication protocol.
2999 * Change the categorisation document to talk about facets, since that's the
3000   terminology that seems to be most widely used these days, and
3001   "categorisation" can also mean automatically assigning categories to
3002   documents.  Also update to reflect the final API.
3004 * deprecation.html: Add guidelines for supporting other software.
3006 * Document cases where QueryParser's FLAG_WILDCARD and FLAG_PARTIAL aren't
3007   currently supported.
3009 * PLATFORMS: Move PLATFORMS information to the wiki and replace with a pointer.
3011 tools:
3013 * xapian-compact: Fix access to empty priority_queue while merging synonyms.
3014   This could have caused problems, though we've had no reports of any (the
3015   bug was found with _GLIBCXX_DEBUG).
3017 * xapian-compact: Add --quiet/-q option to suppress progress output.
3018   (ticket#437)
3020 * xapian-replicate: If a full copy was attempted, but was not put live, display
3021   an explanatory message (in verbose mode).
3023 examples:
3025 * examples/quest: Add command line options to allow prefixes to be specified
3026   for the QueryParser.
3028 * examples/delve: Add '-z' option to count zero-length documents.
3030 * examples/simplesearch: Fix cut-and-paste errors in usage message and
3031   --version output.
3033 portability:
3035 * configure: Add support for --enable-sse=sse and --enable-sse=sse2 to allow
3036   control of which SSE instructions to use.
3038 * configure: Enable use of SSE maths on x86 by default with Sun's compiler.
3040 * configure: Beef up the test for whether -lm is required and add a special
3041   case to force it to be for Sun's C++ compiler - there's some interaction with
3042   libtool and/or shared objects which means that the previous configure test
3043   didn't think -lm is needed here when it is.
3045 * Fix to build on OpenBSD 4.5 with GCC 3.3.5.
3047 * Need to avoid excess precision on m68k when targeting models 68010, 68020,
3048   68030 as well as 68000.
3050 * Fix compilation with Sun's C++ compiler.
3052 * Fix testsuite to build on Solaris < 10.
3054 Xapian-core 1.2.3 (2010-08-24):
3056 API:
3058 * Database::get_spelling_suggestion() will now suggest a correction even if the
3059   passed word is in the dictionary, provided the correction has at least the
3060   same frequency.  Partly addresses #225.
3062 * QueryParser:
3064   + Fix handling of groups of terms which are all stopwords - in situations
3065     where this causes a problem we now disable stopword checks for such groups.
3066     (ticket#245)
3068   + Fix to be smarter about handling a boolean filter term containing ".." in
3069     the presence of valuerangeprocessors.
3071 testsuite:
3073 * New "unittest" program for testing low level functions directly.  Currently
3074   this has tests for the internal resolve_relative_path() function.
3075   (ticket#243)
3077 remote backend:
3079 * Retry select() if it fails with EINTR while waiting for connect(), and
3080   discriminate cases with same failure message to aid debugging.
3082 documentation:
3084 * Fix documentation comment for Xapian::timeout type - it holds a time interval
3085   in milliseconds not microseconds (the API docs for the methods which use it
3086   explicitly correctly document that the timeouts are in milliseconds).
3088 * libuuid moved from e2fsprogs to util-linux-ng about a year ago, so update
3089   documentation, comments, and configure error messages to reflect this.
3091 portability:
3093 * configure: Don't pass -mtune=generic unless GCC >= 4.2 is in use
3094   (ticket#492).
3096 * Fix handling of some obscure cases of resolving relative paths on Microsoft
3097   Windows.  (ticket#243).
3099 * Optimise closing of all unwanted file descriptors after forking by using
3100   closefrom() if available, and otherwise providing our own implementation
3101   (optimised to some extent for many platforms).
3103 * Fix test harness to build under Microsoft Windows (ticket#495).
3105 packaging:
3107 * xapian-core.spec: Add xapian-metadata and cmake related files to RPM
3108   packaging.
3110 * xapian-core.spec: Update BuildRequires to specify libuuid-devel instead of
3111   e2fsprogs-devel.
3113 debug code:
3115 * Improve logging of function parameter placeholder strings.
3117 Xapian-core 1.2.2 (2010-06-27):
3119 brass backend:
3121 * Sync changes from each Btree table to disk right after syncing changes to
3122   its base file, which allows more time for the table changes to be written
3123   and may also be more efficient with some Linux kernel versions.
3125 chert backend:
3127 * Sync changes from each Btree table to disk right after syncing changes to
3128   its base file, which allows more time for the table changes to be written
3129   and may also be more efficient with some Linux kernel versions.
3131 tools:
3133 * xapian-check: Don't try to check document lengths are consistent between the
3134   postlist and termlist tables if it would use more than 1GB of memory, and
3135   handle std::bad_alloc or std::length_error when trying to allocate space
3136   for this.  This issue affected sup users, as sup allocates docids such that
3137   they are sparse and large docids can easily occur.
3139 examples:
3141 * delve: Show the database's UUID.
3143 portability:
3145 * Revert 1.2.1 change to visibility of Xapian::Weight's copy constructor as
3146   it making it private broke compilation with GCC 4.1 (which seems to be a
3147   bug in this compiler version).
3149 * tests/harness/testsuite.cc: Need <cstdio> for sprintf().  Fixes compilation
3150   error which was masked if valgrind was installed.  (ticket#489)
3152 packaging:
3154 * xapian-core.spec: Update for 1.2.x - add e2fsprogs-devel to BuildRequires and
3155   add new files to install.
3157 Xapian-core 1.2.1 (2010-06-22):
3159 This release includes all changes from 1.0.21 which are relevant.
3161 API:
3163 * QueryParser: Add support for open-ended ranges (ticket#480).
3165 * Add new optional parameter to QueryParser::add_boolean_prefix() to allow the
3166   user to indicate a prefix isn't "exclusive" and that multiple instances
3167   should be combined with OP_AND rather than OP_OR.  Fixes ticket#402.  This
3168   change should also improve efficiency as it avoids copying the lists of
3169   prefixes and compares them more efficiently.
3171 * You can now specify a custom stemming algorithm by subclassing
3172   Xapian::StemImplementation, mostly based on patch from Evgeny Sizikov in
3173   ticket#448.
3175 * Fix replication bug: when multiple commits were made to the master database
3176   while a client was performing a full copy, the client would only apply the
3177   first changeset and then try to make the database live, but fail due to
3178   trying to set the wrong revision number.
3180 * Replication no longer sleeps between applying changesets to an offline
3181   database.  It's only necessary to sleep for a live database (to allow readers
3182   to complete a search without getting DatabaseModifiedErrror.
3184 * xapian-replicate: Add new "-r" command line option to specify how long
3185   replication sleeps for between applying changesets to a live database.
3187 * If a Btree table doesn't exist when applying a replication changeset, create
3188   it.  This fixes replicating a revision where a lazy table is created.
3189   (ticket#468)
3191 testsuite:
3193 * zlib can produce "uninitialised" output from "initialised" input - the
3194   output does decode to the input, so this is presumably just some unused bits
3195   in the output, so we use an LD_PRELOAD hack to get valgrind to check the
3196   input is initialised and then tell it that the output is initialised.
3198 * Don't pass NULL to closedir(), which fixes test harness failures on platforms
3199   without /proc/self/fd.
3201 * Use safesyswait.h, fixing build failure on "make check" on FreeBSD.
3203 * Check is SA_SIGINFO is defined before using it as it isn't available
3204   everywhere.  Fixes testsuite build failure on GNU Hurd.
3206 * Add a "soaktest" testsuite, intended to contain long-running tests with
3207   random data.  Currently contains a single test which builds and runs random
3208   queries, checking that the results returned are consistent when asking for
3209   different result ranges.
3211 * Test UUID returned by Database::get_uuid() is 36 characters long.
3213 matcher:
3215 * Xapian no longer forces the wdf_max value to be at least one in
3216   BM25Weight::get_maxpart().  We used to do this so that a non-existent term in
3217   the query would cause it not to achieve 100%, but now we calculate
3218   percentages based on the number of matching subqueries, and it is more
3219   natural for a non-existent term to get zero weight (ditto for a term which
3220   always has wdf 0).
3222 * OP_VALUE_RANGE and OP_VALUE_GE now use value streams directly which is much
3223   more efficient for chert (the default backend in 2.2.x).  As an example, a
3224   range query testcase which previously took 29 seconds now takes 0.4 seconds
3225   (70 times faster).  (ticket#432)
3227 * The term statistics from multiple databases are now gathered in a simpler
3228   way which is a bit faster and uses less memory.
3230 build system:
3232 * Install headers under PREFIX/include not PREFIX/include/xapian.  If you used
3233   XO_LIB_XAPIAN or xapian-config in your build system, the headers would still
3234   have been found.
3236 * Releases and snapshots are now generated with libtool 2.2.10 instead of
3237   2.2.6.
3239 * Fix build failures with some combinations of backends disabled (partially
3240   addresses ticket#361 - some combinations still fail).
3242 * Add check to configure that GCC actually supports visibility for the platform
3243   being built for, which fixes compiler warnings with platforms which don't
3244   (such as Mac OS X and mingw).
3246 documentation:
3248 * Update documentation - replication and PostingSource aren't experimental in
3249   1.2.x.
3251 portability:
3253 * Make use of built-in UUID API on FreeBSD and NetBSD.  (ticket#470)
3255 * Fix mingw build.
3257 debug code:
3259 * Add new pretty printer for values reported by calls and returns in debug
3260   logging - in particular, strings are now reported with non-printable
3261   characters escaped.
3263 * Debug logging should have less runtime overhead when built in but not in use.
3265 * Drop support for --enable-log=profile - dedicated profiling tools are likely
3266   to return more useful results.
3268 Xapian-core 1.2.0 (2010-04-28):
3270 This release includes all changes from 1.0.20 which are relevant.
3272 testsuite:
3274 * Fix --abort-on-error to actually work.
3276 * Exit with status 1 not 0 if we caught an exception from the harness itself.
3278 Xapian-core 1.1.5 (2010-04-16):
3280 This release includes all changes from 1.0.19 which are relevant.
3282 API:
3284 * Database replication now handles an exception while applying a changeset
3285   better.
3287 * If environment variable XAPIAN_MAX_CHANGESETS is set on a replication client
3288   then any changesets read are saved so the replicated copy can itself be
3289   replicated.
3291 testsuite:
3293 * Use sigsetjmp() and siglongjmp() where available so that the set of blocked
3294   signals get restored and the test harness can catch a second incidence of a
3295   particular signal in a run.  Use sigaction() instead of signal() where
3296   available, which allows us to report the address associated with SIGSEGV,
3297   SIGFPE, SIGILL, and SIGBUS.
3299 * Add machinery to check for leaked file descriptors.  Currently this requires
3300   /proc/self/fd to work (which is present on Linux and some other platforms).
3301   Remove the crude ulimit in runtest which has caused problems on some Debian
3302   buildds.
3304 * The test harness now explicitly catches const char * exceptions and reports
3305   their contents.
3307 brass backend:
3309 * Ensure that the wdf upper bound is correctly updated when replacing
3310   documents.
3312 * xapian-compact: Now sets lastdocid correctly when using --no-renumber.
3314 chert backend:
3316 * Ensure that the wdf upper bound is correctly updated when replacing
3317   documents.
3319 * xapian-compact: Now sets lastdocid correctly when using --no-renumber.
3321 * xapian-check: Check that the initial doclen chunk exists.
3323 flint backend:
3325 * xapian-compact: Now sets lastdocid correctly when using --no-renumber.
3327 remote backend:
3329 * Add remote backend support for WritableDatabase::add_spelling() and
3330   WritableDatabase::remove_spelling().  This bumps the remote protocol to
3331   version 35.0 (so both client and servers will need updating).  Suggesting
3332   spelling corrections isn't yet supported.  (ticket#178)
3334 build system:
3336 * XO_LIB_XAPIAN: Give a more specific error message for the cases where
3337   XAPIAN_CONFIG isn't found, is a directory, or isn't executable.
3339 examples:
3341 * delve:
3343   + If any documents are specified with "-d<docid>", "-V<slot>" now only show
3344     values for those documents.
3346   + Remove undocumented -k option, which has been a compatibility alias for -V
3347     since 0.9.10.  Just use -V instead.
3349 * xapian-metadata: Add new example program which allows you to get and set
3350   individual user metadata entries.
3352 Xapian-core 1.1.4 (2010-02-15):
3354 This release includes all changes from 1.0.18 which are relevant.
3356 API:
3358 * Xapian::TermGenerator,Xapian::QueryParser,Xapian::Unicode::is_wordchar():
3359   Add ENCLOSING_MARK and COMBINING_SPACING_MARK categories to is_wordchar(),
3360   which is used by TermGenerator and QueryParser.  Also make TermGenerator and
3361   QueryParser ignore several zero-width space characters.  This is a better
3362   but less compatible version of a fix in 1.0.18.
3364 * Implement support for iterating valuestreams for multidatabases.
3366 * Xapian::Stem: Update the german and german2 stemming algorithms to the latest
3367   versions from Snowball.  These add an extra rule for the "-nisse" ending.
3369 * Xapian::ValueCountMatchSpy: Replace get_values() with values_begin() and
3370   values_end().
3372 * Xapian::MatchSpy: Provide an iterator for accessing the top values found
3373   instead of taking a vector by reference to return them in.
3375 * Xapian::NumericRanges: Remove experimental API we aren't happy with yet.
3377 * Xapian::DatabaseReplica, Xapian::DatabaseMaster: Remove experimental
3378   API we aren't happy with.  Replication is still supported via the
3379   command line programs.  (ticket#347)
3381 * Xapian::score_evenness(): Remove as it turns out not to be useful in practice.
3382   (ticket#435)
3384 * Xapian::ValueWeightPostingSource: A ValueWeightPostingSource with no entries
3385   would report -infinity as its upper bound, which could cause no results to be
3386   incorrectly returned for some queries involving such an object.
3388 * Xapian::WritableDatabase::close() fixed to commit() changes (unless a
3389   transaction is in progress).
3391 testsuite:
3393 * apitest: Improve test coverage in various places.
3395 matcher:
3397 * Uses of values during the match (sorting by value or Sorter, MatchSpy,
3398   MatchDecider, and collapsing) now use value stream iteration which is
3399   a lot more efficient for chert and brass (but may be slower for flint).
3401 brass backend:
3403 * New development backend.  Changes over chert:
3405   + Batched posting list changes during indexing use significantly less memory.
3407   + Instead of using complex code to iterate modified posting lists and
3408     documents length lists, brass can flush individual such lists to disk
3409     and then iterates them from there.
3411   + To iterate all terms, chert flushes all pending postlist changes.  In the
3412     case where a prefix is specified, brass only flushes postlist changes for
3413     terms starting with the specified prefix, and doesn't flush document length
3414     changes.
3416 chert backend:
3418 * Promote chert to being the stable backend.
3420 * Change the packing of integers and strings into sortable keys, which reduces
3421   database size by 2.5% in tests.  This means an incompatible change in the
3422   chert format.  You can use the new xapian-chert-update utility to update a
3423   chert database from the old format to the new format.  It works much like
3424   xapian-compact so should take a similar amount of time (and results in a
3425   compact database).
3427 * xapian-compact:
3429   + Prune unused docids off the end of each database when merging multiple
3430     databases with renumbering.
3432   + Extend --no-renumber to support merging databases, but only if they have
3433     disjoint ranges of used document ids.
3435   + Ensure that the resultant database has a fresh UUID (previously chert
3436     copied the UUID from the first input).
3438 * xapian-check:
3440   + Fix checking of the METAINFO key in chert.  For small databases, the
3441     statistics fit in few enough bytes that incorrect check appeared to
3442     succeed and no errors were reported, but for larger databases an
3443     error was incorrectly reported.
3445   + Rework the checking of postlist chunks to use a cleaner approach which
3446     should report errors better.
3448   + Use a type wider than 32 bits to keep count of items in a table.
3449     Previously xapian-check would report the number of entries modulo
3450     4294967296.
3452 * When iterating a value stream, skip_to() now only assigns the value to a
3453   std::string when it reaches its target.  This saves a lot of unnecessary
3454   string copying - in a real-world test it improved the time for 100 queries
3455   from 3.66s to 3.10s.
3457 * When skipping through a chunk of postings to find the one we want, don't
3458   bother to unpack the wdf values we're skipping over.  This should save a
3459   significant amount of time in certain cases where the profile data shows
3460   about a third of the time is spent in the function where this happens.
3462 * Report locking failure due to running out of file descriptors better.
3464 flint backend:
3466 * xapian-compact:
3468   + Prune unused docids off the end of each database when merging multiple
3469     databases with renumbering.
3471   + Ensure that the resultant database has a fresh UUID (previously flint
3472     didn't set a UUID so one would be generated on demand when next requested,
3473     but only if the database was writable).
3475 * Report locking failure due to running out of file descriptors better.
3477 remote backend:
3479 * Add support for WritableDatabase::set_metadata() and Database::get_metadata()
3480   to the remote backend (based largely on patch in #178).
3482 inmemory backend:
3484 * Read the document data and values lazily for the inmemory backend like we do
3485   for other backends.  They're much less costly to fetch than if a disk or
3486   network access is involved, but it avoids copying potentially large data
3487   which may not be needed.  Consistency here also makes things easier to
3488   understand for both users and developers.
3490 build system:
3492 * This release uses autoconf 2.65 rather than 2.64.
3494 documentation:
3496 * docs/replication.html: Add note about not using reopen() with databases being
3497   updated by the replication client.
3499 * docs/admin_notes.html: Update for chert and other recent changes.
3501 * Remove out-of-date reference in the API documentation comment to an
3502   add_slot() method.  This no longer exists - you need to use multiple
3503   ValueCountMatchSpy objects to monitor more than one slot.
3505 examples:
3507 * simpleexpand,simpleindex,simplesearch: Handle --help and --version.
3509 debug code:
3511 * The debug log now reports boolean values as "true" and "false" (instead of
3512   "1" and "0").
3514 Xapian-core 1.1.3 (2009-09-18):
3516 This release includes all changes from 1.0.15-1.0.17 which are relevant.
3518 API:
3520 * Update Unicode character database to Unicode 5.2.  (ticket#351)
3522 * Rename Xapian::Sorter to Xapian::KeyMaker, paving the way for using it to
3523   build collapse keys too.  Xapian::Sorter remains for compatibility (and is
3524   now a subclass of Xapian::KeyMaker) but is deprecated.
3526 * Resolve the inconsistency in MultiValueSorter::add()'s "forward" parameter
3527   versus the "reverse" parameters which the Enquire sorting functions now take
3528   by replacing the class with MultiKeyMaker with a renamed method add_value()
3529   with a "reverse" parameter.  MultiValueSorter remains with the old semantics
3530   for compatibility but is deprecated.  (ticket#359)
3532 * QueryParser: Don't apply spelling correction to wildcarded terms, or to terms
3533   at the end of the query which we expand under FLAG_PARTIAL.
3535 * Add new Error subclass SerialisationError which we throw for serialisation
3536   related errors (which previously mostly threw NetworkError.
3538 * Rename Xapian::SerialisationContext to Xapian::Registry.
3540 * Add DecreasingValueWeightPostingSource class, which reads weights from a
3541   value slot in which a significant range of the values are in decreasing
3542   order.  This functions similarly to ValueWeightPostingSource, but can be much
3543   more efficient.
3545 * Add new Xapian::MatchSpy class:
3547   + This replaces the use of Xapian::MatchDecider as a "matchspy", which is now
3548     deprecated.  The new class only inspects, and can't reject.  It can work
3549     with remote databases, with the results being serialised to return them
3550     across the link.
3552   + Add subclass ValueCountMatchSpy, which counts the occurrences of each value
3553     in a slot in the search results seen (useful for faceted or categorisation
3554     systems).  The results can be grouped into ranges using the NumericRange
3555     and NumericRanges classes, and the score_evenness() function.  This API is
3556     currently experimental.
3558 * Remove default implementation of Weight::clone() which returns NULL.  We
3559   always need clone() to be implemented because it's called for every term
3560   in the query, not just used for the remote backend.
3562 chert backend:
3564 * Rewrite the low level packing and unpacking functions more efficiently.  As
3565   well as being generally faster, the pack functions now take a reference to a
3566   string to append to, which avoids creating a lot of temporary string objects.
3567   Indexing HTML files with omindex is 5-10% faster.  Searching for "The" on
3568   gmane (which results in a lot of unpacking of postings and document lengths)
3569   is about 35% faster.  (ticket#326)
3571 * xapian-compact: Don't report an absent lazy input table as 0 size.
3573 * Fix ChertModifiedPostList to skip added-but-then-deleted-before-flush
3574   documents.  (ticket#392)
3576 * Fix WritableDatabase::get_doclength() to work properly after a call to commit
3577   for the chert backend (ticket#397).
3579 * Fix to work with the metainfo key stored in the latest format of chert
3580   databases.
3582 * Avoid doing pointless work by trying to delete non-existent lists of values
3583   when we're just adding documents.
3585 * Fix code to find the first docid in the next chunk (ticket#399).
3587 * Add support for chert databases without a termlist table (ticket#181).
3588   Currently the only way to create such a database is to create a chert
3589   database and do "rm termlist.*".
3591 flint backend:
3593 * xapian-compact: Don't report an absent lazy input table as 0 size.
3595 remote backend:
3597 * Remote protocol major version has changed to support serialising MatchSpy
3598   objects.
3600 * Fixed not to sometimes read off the end of the returned matches when
3601   searching multiple databases, some of which are remote, and when the primary
3602   ordering is by relevance.
3604 build system:
3606 * This release uses autoconf 2.64 rather than 2.63.  This means configure now
3607   makes use of shell functions, which makes it ~13% smaller, and should also
3608   make it execute faster.
3610 * configure: Send stderr output from ldconfig to config.log.
3612 * Add optional third parameter to XO_LIB_XAPIAN autoconf macro which specifies
3613   the basename for the "xapian-config" script (defaults to "xapian-config" to
3614   give the current behaviour).
3616 * This release uses doxygen 1.5.9 to generate the API documentation.
3618 documentation:
3620 * Minor improvements to the formatting of the collated API documentation.
3622 portability:
3624 * Fix code to compile with Sun's C++ compiler.
3626 * Fix our uuid_unparse_lower() replacement for older libuuid to actually
3627   compile (really fixes ticket#368).
3629 * Fix xapian-config to work with Solaris 10 /bin/sh.  (ticket#405)
3631 debug code:
3633 * Use C++ syntax for NULL with a type in log output.
3635 Xapian-core 1.1.2 (2009-07-23):
3637 This release includes all changes from 1.0.14 which are relevant.
3639 API:
3641 * Move support for a prefix/suffix from NumberValueRangeProcessor to
3642   StringValueRangeProcessor, and change NumberValueRangeProcessor and
3643   DateValueRangeProcessor to inherit from StringValueRangeProcessor so all
3644   three now support a prefix/suffix.  (ticket#220)
3646 * Query: Trim 4 bytes off the internals.  (ticket#280)
3648 * QueryParser: If default_op is OP_NEAR or OP_PHRASE then make the window size
3649   (9 + no_of_terms) to match the default for an explicit NEAR or PHRASE.
3650   (ticket#254)
3652 testsuite:
3654 * Sort out the clash between two different patches to fix leaking file
3655   descriptors when running tests with the remotetcp backend (broken by
3656   changes in 1.1.1).
3658 matcher:
3660 * If the highest weighted document doesn't match all the terms in the query,
3661   its percentage weight is now calculated by simply counting how many weighted
3662   leaf subqueries match it instead of scaling by the proportion of the weight
3663   which matches (which required accessing the termlist for that document).
3664   (ticket#363).
3666 * XOR with a SYNONYM subquery could previously achieve 100% - this has been
3667   fixed.
3669 flint backend:
3671 * Backport the lazy update changes from chert to flint:
3673   WritableDatabase::replace_document() now updates the database lazily in
3674   simple cases - for example, if you just change a document's values and
3675   replace it with the same docid, then the terms and document data aren't
3676   needlessly rewritten.  Caveats: currently we only check if you've looked at
3677   the values/terms/data, not if they've actually been modified, and only keep
3678   track of the last document read.
3680 build system:
3682 * Update to always use C++ forms for ISO C standard headers (ticket#330).
3684 * Fix several places where Xapian::doccount is used instead of
3685   Xapian::termcount, and similar issues.  It's still not possible to make
3686   these types different sizes, but we're now closer to this goal.
3687   (ticket#385).
3689 documentation:
3691 * Note that PostingSource and Weight objects returned by clone() and
3692   unserialise() methods will be deallocated with "delete".
3694 debug code:
3696 * Fix debug logging not to segfault on NULL Query::Internal pointers.
3698 Xapian-core 1.1.1 (2009-06-09):
3700 This release includes all changes from 1.0.13 which are relevant.
3702 API:
3704 * New Query::OP_SYNONYM operator, which matches the same documents as OP_OR,
3705   but attempts to weight as if the all the subqueries were a single term with
3706   their combined wdf, which should give better relevance weights.
3708 * QueryParser's synonym, wildcard, and partial query features now use
3709   the new OP_SYNONYM operator.
3711 * PostingSource: Add new set_maxweight() method to allow subclasses to tell
3712   the matcher that their maximum weight has decreased.  Make get_maxweight()
3713   a non-virtual method of the baseclass which returns the last set maxweight
3714   (which will require updates to most user subclasses. (ticket#340)
3716 * DatabaseReplica: Fix SEGV when calling get_description() on a default
3717   constructed DatabaseReplica.
3719 * Make Query::MatchAll and Query::MatchNothing const since they're immutable.
3720   All the public methods of Query are const, so this should be completely API
3721   compatible.
3723 * Methods returning an end iterator for a ValueIterator now actually return a
3724   proxy object which silently converts to ValueIterator if required.  This
3725   proxy object allows a comparison with an "_end()" method to be optimised
3726   better so that it just ends up comparing the internal member of the iterator
3727   class with NULL (previously a call to ValueIterator's destructor remained).
3728   This should be API compatible, but note that it is definitely now more
3729   efficient just to compare against the return value of the relevant _end()
3730   method than to store the end iterator explicitly.
3732 testsuite:
3734 * Testcase valuestats4 requires transactions, so indicate that and remove the
3735   explicit SKIP for inmemory.
3737 * Testcase changemaxweightsource1 uses ChangeMaxweightPostingSource, which
3738   doesn't work with multi or remote, so mark the test accordingly.
3740 * We've decided that "going back" with skip_to() or check() should have
3741   unspecified behaviour, so stop testing how this case behaves!
3743 matcher:
3745 * Subclass MultiPostList directly from PostList instead of from LeafPostList.
3746   This gets rid of two unused data members per MultiPostList in exchange for
3747   having to define 5 extra "never called" methods, but 4 of these just
3748   tailcall.
3750 * Store termfreqs and reltermfreqs for query terms in a single map rather than
3751   one map for each, which saves is more compact and likely to be faster.
3753 chert backend:
3755 * xapian-check: For chert, check value stats are the correct format and that
3756   the streamed values are consistent with their stats (ticket#277).
3758 * xapian-check: Chert doesn't store termlist entries for documents without
3759   terms, which resulted in us reporting an error when we found document ids in
3760   the doclength "postlist" which were greater than any with an entry in the
3761   termlist.  Instead compare these entries against db.get_last_docid() if we
3762   are checking a whole db and the db can be opened.  If not, suppress this
3763   check.
3765 remote backend:
3767 * When serialising stats, serialise the termfreq and reltermfreq together,
3768   rather than in separate lists.  This gives a smaller serialised form, and
3769   matches these both being stored in the same map now.  This is an incompatible
3770   remote protocol change, so bump the major version to 32.  (ticket#362)
3772 build system:
3774 * Some build failures with --disable-backend-XXX options have been fixed, but
3775   we haven't exhaustively tested all combinations.
3777 * Ship common/win32_uuid.cc and common/win32_uuid.h (ticket#367).
3779 documentation:
3781 * Update PostingSource documentation to describe how init() is called again if
3782   a PostingSource is reused.  Fixes #352.
3784 portability:
3786 * Fixed to build with GCC 4.4.
3788 * Drop support for GCC 2.95.3 and 3.0.x - we now require at least 3.1 as doing
3789   so eliminates some preprocessor conditionals which we aren't able to test
3790   regularly as we don't have easy access to such old GCC versions.  GCC 3.1 is
3791   nearly 7 years old now, and GCC3 didn't get widespread use until later
3792   versions anyway.  If you still need to use GCC < 3.1, Xapian 1.0.x should
3793   build with 2.95.3 or newer.
3795 * Older versions of libuuid don't have uuid_unparse_lower() so probe for it in
3796   configure, and if it isn't present provide an inline version in safeuuid.h
3797   (ticket#368).
3799 * Fixed to build with MSVC (ticket#379).
3801 * Add static_cast<char>() to str(bool) overload to suppress bogus MSVC warning
3802   (ticket#377).
3804 debug code:
3806 * common/debuglog.h: Add missing initialisation of uncaught_exception variable
3807   in a couple of places.
3809 Xapian-core 1.1.0 (2009-04-22):
3811 API:
3813 * All deprecated xapian-core features listed for removal in 1.1.0 have been
3814   removed.  See deprecation.html for details, and suggested updates.
3816 * The Unicode character categorisation functions have been updated from
3817   Unicode 5.0 to 5.1.
3819 * Add NON_SPACING_MARK to is_wordchar() for better tokenisation of languages
3820   which use such marks - for example, Arabic.  This is better than the stop-gap
3821   fix in 1.0 of treating NON_SPACING_MARK as a phrase-generator character
3822   when parsing queries, but it does mean that databases built from data
3823   containing such characters will need to be rebuilt.  (ticket#355)
3825 * The details of how to subclass Xapian::Weight to implement your own
3826   weighting scheme have changed incompatibly to allow user weighting schemes
3827   to have access to the same statistics as built-in schemes (ticket#213)
3828   If you have a existing subclass of Xapian::Weight you'll need to update it.
3830 * New Database methods get_doclength_upper_bound(), get_doclength_lower_bound()
3831   and get_wdf_upper_bound(), primarily intended for allowing weighting schemes
3832   to calculate tighter upper bounds on weights (which BM25Weight and TradWeight
3833   now do) which allows matcher weight-based optimisations to be more effective.
3834   Chert actually tracks doclength bounds and a global (rather than per term)
3835   upper bound on wdf; other backends return much less tight bounds, but these
3836   still lead to better upper bounds on weights.
3838 * Enquire::get_eset() now uses an unmodified of probabilistic formula, and
3839   doesn't return terms which would get a negative weight from it (since that
3840   means they are expected to be harmful not helpful).
3842 * Add Database::close() method, which will release system resources (in
3843   particular, close filehandles) held by a database.  This is particularly
3844   useful when wrapping the API for languages with garbage collection.
3846 * Change Database::positionlist_begin() not to throw exceptions if the term or
3847   document doesn't exist.
3849 * Xapian databases now have a UUID, readable with Database::get_uuid().
3851 * A new Database replication API has been added (currently experimental).
3853 * MSet::get_termfreq() will now fall back to looking up the term frequency in
3854   the database rather than raising an exception if a term wasn't present in
3855   the query.
3857 * Calling RSet:add_document() with argument 0 now throws InvalidArgumentError.
3859 * QueryParser sped up (new version of lemon); queryparsertest runs 2.2% faster.
3861 * Add ValueSetMatchDecider, which is a matchdecider which is intended to be
3862   passed a set of values to look for in documents, and selects documents based
3863   on the presence of those values.
3865 * Add new Xapian::PostingSource class to allow passing custom sources of
3866   postings and weights to the matcher.  Built-in PostingSource subclasses:
3867   FixedWeightPostingSource, ValueMapPostingSource, ValuePostingSource, and
3868   ValueWeightPostingSource.  (Currently experimental).
3870 * Database: Add get_value_freq(), get_value_lower_bound() and
3871   get_value_upper_bound() methods to get statistics about the values stored in
3872   a slot.  Add support for the value statistics methods to chert, inmemory,
3873   multi and remote databases.
3875 * Enquire::get_eset() now faster for large ESet size.
3877 * Xapian::Document objects now have a reduced memory footprint.
3879 * Enquire::set_collapse_key() now allows you to specify a maximum number of
3880   matches with each collapse key to keep (which defaults to 1, giving the
3881   previous behaviour).  Enquire can now report bounds and an estimate of what
3882   the total number of matches would have been if collapsing wasn't in use.
3884 * WritableDatabase::commit() is a new, preferred alias for
3885   WritableDatabase::flush().  (ticket#266)
3887 * Add methods for serialising documents and queries to strings, and
3888   unserialising back from strings.  (ticket#206)
3890 testsuite:
3892 * stemtest: No longer checks environment variables OM_STEMTEST_SKIP_RANDOM,
3893   OM_STEMTEST_LANGUAGES, and OM_STEMTEST_SEED.
3895 * perftest: New performance testsuite.  This is intended to contain intended to
3896   contain potentially time-consuming performance tests, which log output to
3897   an XML file for later analysis.  It's not run by "make check" - use "make
3898   check-perf" to run it.
3900 * apitest: Now runs tests over both flint and chert for multi, remotetcp, and
3901   remoteprog.
3903 * Wait for subprocesses to finish at end of tests with remotetcp backend, to
3904   avoid test failures when the same database is used for the next testcase.
3906 matcher:
3908 * Internally, pass around non-normalised document lengths as Xapian::termcount
3909   (unsigned integer) not Xapian::doclength (double).  This gives a 3% speedup
3910   for 10 term OR queries!
3912 chert backend:
3914 * New development backend.  Use Chert::open() to explicitly create a chert
3915   format database, or set XAPIAN_PREFER_CHERT=1 in the environment to
3916   prefer chert when creating a new database without an explicit type.
3918 * Quartz and Flint stored the document length alongside every posting list
3919   entry.  Chert instead stores a chunked list of all the document lengths
3920   which saves a lot of space, and is a big win for large queries or those
3921   which don't need the document lengths.  This structure is used to
3922   implement much faster iteration (six times faster in a test) over all
3923   document ids (which speeds up queries using unary NOT, e.g. `NOT apples'),
3924   and to test for the existence of documents (instead of checking the record
3925   table for an entry).
3927 * Document values are now stored in a chunked stream for each slot for
3928   efficient access to the same slot in lots of documents.  This makes
3929   operations like sort by value much more efficient.
3931 * WritableDatabase::replace_document() now updates the database lazily in
3932   simple cases - for example, if you just change a document's values and
3933   replace it with the same docid, then the terms and document data aren't
3934   needlessly rewritten.  Caveats: currently we only check if you've looked at
3935   the values/terms/data, not if they've actually been modified, and only keep
3936   track of the last document read.
3938 flint backend:
3940 * If we can't obtain a write lock while trying to create a new database
3941   we now report the lock failure with DatabaseLockError, not
3942   DatabaseOpeningError - it's more useful to know that the lock attempt failed
3943   in this situation.
3945 * Improve reporting of failures to obtain lock due to unexpected errors.
3947 * xapian-check: Don't stop checking a table after an error in certain cases -
3948   instead increment the error counter and try to continue checking from the
3949   next item.
3951 remote backend:
3953 * The remote database protocol major version has been increased, allowing
3954   a significant amount of compatibility code to be removed.  This change means
3955   that new clients won't work with old servers, and old clients won't work
3956   with new servers.  If upgrading a live system, you will need to take this
3957   into account.
3959 * The remote servers now always default to opening a Database and the client
3960   has to send a protocol message to explicitly request write access.  This
3961   allows a single server to support multiple readers and one writer
3962   simultaneously.  (ticket#145)
3964 * Database::get_document() no longer does an unnecessary copy of the document's
3965   values.
3967 * Change serialisation of queries to be more compact and easier to parse.
3969 stub databases:
3971 * Stub databases used to assume that any relative paths were relative to the
3972   current working directory.  They now assume that relative paths are
3973   relative to the directory holding the stub database file.
3975 * Stub database lines which begin with a '#' character are now ignored,
3976   allowing comments in stub database files.
3978 * New "stub directory" database type - this is a directory containing a stub
3979   database file named "XAPIANDB".
3981 * Don't just ignore lines with no spaces in a stub database file.
3983 * Bad lines in a stub file were being ignored after we'd seen a good entry.
3985 * Add new Auto::open_stub() overload which opens a stub database file
3986   containing a single entry as a WritableDatabase.
3988 * Add support for "inmemory" to stub database (which is useful now that stub
3989   databases can be opened for writing).
3991 * A stub database file is now allowed to contain no database entries, which
3992   results in an empty Database object (this avoids user code having to special
3993   case to handle "0 or more" databases).
3995 build system:
3997 * To allow installations of Xapian 1.0 and 1.1 to easily coexist, the library
3998   is now libxapian-1.1; xapian.m4 is now xapian-1.1.m4; headers are now
3999   installed in $prefix/include/xapian-1.1.  If you use XO_LIB_XAPIAN or
4000   xapian-config as we recommend, this should all be transparent.  Also
4001   programs and scripts have a default program suffix to -1.1 unless overridden
4002   using the --program-suffix argument to configure (if you really want no
4003   suffix, "./configure --program-suffix=" will achieve this).
4005 * On Linux and k*bsd-gnu, override libtool's link_all_deplibs_CXX to "no".
4007 * On Linux, override libtool's sys_lib_dlsearch_path_spec to a list generated
4008   in a more reliable way which includes all the default directories.
4010 * configure: --enable-debug and --enable-debug-verbose have been deprecated
4011   since 1.0.0, so remove specific errors pointing to the replacements.
4013 documentation:
4015 * Disable "JAVADOC_AUTOBRIEF" in doxygen configuration since we always try to
4016   write a brief description explicitly, and JAVADOC_AUTOBRIEF causes problems
4017   in some cases.
4019 * docs/deprecation.html: Describe what "experimental" features are, and why
4020   replication and posting sources are currently experimental.
4022 * docs/deprecation.html: Deprecate Stem_get_available_languages() from the
4023   python bindings.
4025 examples:
4027 * Use C++ forms of C headers in examples (ticket#330).
4029 packaging:
4031 * xapian-core.spec: We no longer need to run autoreconf to work around
4032   libtool's incomplete sys_lib_dlsearch_path_spec or to pick up distro-specific
4033   patches for link_all_deplibs.
4035 debug code:
4037 * Report get_description() rather than the pointer value for
4038   Xapian::Query::Internal* parameters to internal functions.
4040 * The debug logging framework has been overhauled.  See HACKING for details
4041   of how it now works.
4043 * Faster integer to string functions inside the library (this is a general
4044   improvement, but will particularly speed up debug logging as that converts a
4045   lot of integers to strings).
4047 Xapian-core 1.0.23 (2011-01-14):
4049 API:
4051 * QueryParser: Avoid a double free if Query construction throws an exception
4052   in a particular case.  Fixes ticket#515.
4054 * QueryParser: Handle NEAR/<offset> and ADJ/<offset> where offset isn't an
4055   integer the same way at the end of the query as in the middle.
4057 * Enquire::get_mset(): Avoid pointlessly trying to allocate lots of memory
4058   if the first document requested is larger than the size of the database.
4060 * Enquire::get_mset(): An empty query now returns an MSet with firstitem set
4061   correctly - previously firstitem was always 0 in this case.
4063 matcher:
4065 * The matcher wasn't recalculating the max possible weight after a subquery of
4066   XOR reached its end.  This caused an assertion failure in debug builds, and
4067   is a missed optimisation opportunity.
4069 tools:
4071 * xapian-compact: Fix access to empty priority_queue while merging synonyms.
4072   This could have caused problems, though we've had no reports of any (the
4073   bug was found with _GLIBCXX_DEBUG).
4075 Xapian-core 1.0.22 (2010-10-03):
4077 API:
4079 * Xapian::Document: Initialise docid to 0 when creating a document from
4080   scratch, as documented.
4082 * Xapian::QueryParser: Allow phrase generators between a probabilistic prefix
4083   and the term itself (e.g. path:/usr/local).
4085 matcher:
4087 * Back out the OP_OR efficiency improvement made in 1.0.21 since this change
4088   slows down some other common cases.  We'll address this fully in 1.2.4, but
4089   that fix is more invasive than we are comfortable with for 1.0.x at this
4090   point.
4092 build system:
4094 * xapian-config: Add --static option which makes other options report values
4095   for static linking.
4097 documentation:
4099 * deprecation.html: Add guidelines for supporting other software.
4101 * Document cases where QueryParser's FLAG_WILDCARD and FLAG_PARTIAL aren't
4102   currently supported.
4104 * Fix documentation for Xapian::timeout type - it holds a time interval in
4105   milliseconds not microseconds (the API docs for the methods which use it
4106   explicitly correctly document that the timeouts are in milliseconds).
4108 portability:
4110 * configure: Don't pass -mtune=generic unless GCC >= 4.2 is in use
4111   (ticket#492).
4113 * configure: Add support for --enable-sse=sse and --enable-sse=sse2 to allow
4114   control of which SSE instructions to use.
4116 * configure: Enable use of SSE maths on x86 by default with Sun's compiler.
4118 * configure: Beef up the test for whether -lm is required and add a special
4119   case to force it to be for Sun's C++ compiler - there's some interaction with
4120   libtool and/or shared objects which means that the previous configure test
4121   didn't think -lm is needed here when it is.
4123 * Fix test harness to build under Microsoft Windows (ticket#495).
4125 * Fix to build on OpenBSD 4.5 with GCC 3.3.5.
4127 * Need to avoid excess precision on m68k when targeting models 68010, 68020,
4128   68030 as well as 68000.
4130 packaging:
4132 * xapian-core.spec: Add cmake related files to RPM packaging.
4134 Xapian-core 1.0.21 (2010-06-18):
4136 API:
4138 * Xapian::Stem now recognises "nb" and "nn" as additional codes for the
4139   Norwegian stemmer.
4141 * Xapian::QueryParser now correctly parses a wildcarded term in between two
4142   other terms (ticket#484).
4144 testsuite:
4146 * Improve test coverage of OP_VALUE_RANGE and MSet::get_percent().
4148 matcher:
4150 * OP_OR could skip a matching document if it decayed to OP_AND or OP_AND_MAYBE
4151   during the match in some cases.  Fixes ticket#476.
4153 * OP_XOR with non-leaf subqueries could skip matching documents in some cases,
4154   and OP_XOR of three or more sub-queries could return incorrect weights.
4155   Fixes ticket#475.
4157 * OP_OR is now more efficient if a subquery is potentially expensive (e.g.
4158   ValueRangePostList, OP_NEAR, OP_PHRASE).  A 10-fold speed-up with
4159   ValueRangePostList has been observed.
4161 flint backend:
4163 * When iterating a table, if the table changes underneath we could end up
4164   returning the same entry twice.  (Debian#579951)
4166 * A cancelled transaction (or a failing operation implicitly cancelling
4167   pending changes) now marks the tables as unmodified, which fixes an exception
4168   trying to read block 0 if one of the tables is empty on disk.
4170 quartz backend:
4172 * When iterating a table, if the table changes underneath we could end up
4173   returning the same entry twice.  (Debian#579951)
4175 remote backend:
4177 * When daemonising, read the max fd to close with sysconf() instead of using
4178   a hardcoded value of 256, and work even if stdin and stdout have been closed.
4180 build system:
4182 * Install files to make Xapian easier to use with cmake.
4184 documentation:
4186 * Update the list of languages that the Xapian::Stem constructor recognises.
4188 * Assorted minor improvements to the collated API documentation.
4190 portability:
4192 * On x86 processors, Xapian now defaults to using SSE2 FP instructions.  This
4193   avoids issues with excess precision and it a bit faster too.  If you need
4194   to support processors without SSE2 (this means pre-Pentium4 for Intel) then
4195   configure with --disable-sse.  (ticket#387)
4197 * Fix warning when compiling for mingw with GCC 4.2.1.
4199 * Remove mutable from a couple of reference class members - mutable doesn't
4200   make sense for a reference and some compilers warn about it.
4202 Xapian-core 1.0.20 (2010-04-27):
4204 API:
4206 * MSet: Fix incorrect values reported by get_matches_estimated(),
4207   get_matches_lower_bound(), and get_matches_upper_bound() in certain cases
4208   when sorting and collapsing (ticket#464).
4210 documentation:
4212 * deprecation.html: Note how to disable deprecation warnings. (ticket#393)
4214 examples:
4216 * delve: Add -a option to list all terms in a database.
4218 * delve: -d and -V command line options now report out of range and invalid
4219   numbers.
4221 portability:
4223 * The getopt warning fix for Cygwin in 1.0.19 caused build failures on Mac OS X
4224   (and probably some other platforms with non-GNU getopt implementations), so
4225   replace with a fix which is only enabled for Cygwin. (ticket#469)
4227 Xapian-core 1.0.19 (2010-04-15):
4229 API:
4231 * QueryParser: Fix leak if Xapian::Database throws an exception during parsing
4232   (ticket#462).
4234 testsuite:
4236 * Explicitly flush after indexing for quartz and flint, so we see any
4237   exceptions from the flush (the implicit flush from the destructor swallows
4238   any exceptions).
4240 * apitest: Add databasemodified1 testcase to provide some test coverage for
4241   DatabaseModifiedError.
4243 flint backend:
4245 * When updating a document, rather than decoding the old positions, comparing
4246   with the new, and then encoding the new if different, we now just encode the
4247   new and then compare the encoded forms.  (ticket#428)
4249 * Avoid trying to delete the document positions when we know there aren't any.
4251 * Fix memory leak if Database::allterms_begin() throws an exception
4252   (ticket#462).
4254 * xapian-check: Report document id for document length mismatch.
4256 * Fix potential issues with iterators over a WritableDatabase which is modified
4257   during iteration.  No problems have actually been observed with flint, only
4258   in 1.1.4 with chert in cases which don't occur in flint, but it seems likely
4259   the issue can manifest for flint in other situations.  Fixes ticket#455.
4261 * Initialise zlib z_stream structure members zalloc, zfree, and opaque with
4262   Z_NULL rather than 0 cast to the appropriate type, as that's what the zlib
4263   documentation says to do.  Add missing initialisation of opaque for the
4264   inflate z_stream which the zlib docs say is needed (reading the zlib code,
4265   this isn't true for current versions, so this improves robustness rather
4266   than fixing an observable bug).
4268 * Don't memcpy() a block to itself - it's a waste of effort, and (probably)
4269   undefined behaviour (as a block overlaps itself).
4271 quartz backend:
4273 * Fix potential issues with iterators over a WritableDatabase which is modified
4274   during iteration.  No problems have actually been observed with quartz, only
4275   in 1.1.4 with chert in cases which don't occur in quartz, but it seems likely
4276   the issue can manifest for quartz in other situations.  Fixes ticket#455.
4278 * Don't memcpy() a block to itself - it's a waste of effort, and (probably)
4279   undefined behaviour (as a block overlaps itself).
4281 build system:
4283 * Force -fno-strict-aliasing for GCC 4.2 to avoid bad code being generated due
4284   to a bug in that compiler version.  Fixes ticket#449.  This issue hasn't been
4285   observed to affect Xapian 1.0.x, but it seems prudent to backport the fix.
4287 documentation:
4289 * INSTALL: Correct description of --enable-assertions.  It does NOT enable
4290   debugging symbols, and shouldn't control checks on bad data passed to API
4291   calls (if it does anywhere, that's a bug).  Note that Xapian will run more
4292   slowly with assertions on.
4294 * spelling.html:
4296   + Add section on indexing.
4298   + Add a note about removing automatically added spelling dictionary entries.
4300   + Move the "algorithm" section to the end, as it is really just background
4301     information for the curious.
4303 * include/xapian/queryparser.h: Document the possible exception messages from
4304   QueryParser::parse_query().
4306 * include/xapian/termgenerator.h: Note how TermGenerator handles stopwords.
4308 examples:
4310 * delve: Display the lastdocid value when displaying general database
4311   statistics.
4313 * simpleindex: Explicitly call flush() on the database, as that is good
4314   practice (since you see any exceptions).
4316 portability:
4318 * Fix compilation failure in testsuite on OpenBSD, introduced by new regression
4319   test in 1.0.18.  Fixes ticket#458.
4321 * Fix getopt-related warning on Cygwin.
4323 Xapian-core 1.0.18 (2009-02-14):
4325 API:
4327 * Document: Add new add_boolean_term() method, which is an alias for add_term()
4328   with wdfinc=0.
4330 * QueryParser:
4332   + Add support for quoting boolean terms so they can contain arbitrary
4333     characters (partly addresses ticket#128).
4335   + Add ENCLOSING_MARK and COMBINING_SPACING_MARK categories, plus several
4336     zero-width space characters, as phrase generators.  This mirrors a better
4337     fix in 1.1.4, but without losing compatibility with existing databases.
4339   + Fix handling of an explicit AND before a hated term (foo AND -bar).
4340     (ticket#447)
4342 * TermIterator: Only include trailing '+' or '#' on a term if it isn't followed
4343   by a word character (makes more sense and matches QueryParser's behaviour).
4344   (ticket#446)
4346 * Database: Fix many methods to behave better on a database with no
4347   subdatabases, such as is constructed by Database().  Fixes ticket#415.
4349 testsuite:
4351 * Add test coverage for xapian-compact, and improve coverage for
4352   WritableDatabase::replace_document().
4354 * apitest: Rename matchfunctor<n> to matchdecider<n> to match current
4355   terminology.
4357 flint backend:
4359 * When updating documents, don't update posting entries which haven't changed.
4360   Largely fixes ticket #250.
4362 * If the number of entries in the position table happened to be 4294967296 or
4363   an exact multiple, Xapian would ignore positional data for that table when
4364   running queries, and xapian-compact wouldn't copy its contents.
4366 * Iterating all the terms in the database with a prefix is now slightly more
4367   efficient.
4369 * Fix locking code to work if stdin and/or stdout have been closed.
4371 * If a document is replaced with itself unmodified, we no longer increase the
4372   automatic flush counter.
4374 * When iterating a posting list modified since the last flush(), the reported
4375   wdf is now correct (previously it was too high by its old value).
4377 * Replacing a document deleted since the last flush failed to update the
4378   collection frequency and wdf, and caused an assertion failure when assertions
4379   were enabled.
4381 * WritableDatabase::replace_document() didn't always remove old positional
4382   data (the only effect is that the position table was bloated by unwanted
4383   entries).
4385 * xapian-inspect:
4387   + New "until" command which shows entries until a specified key is reached.
4389   + New "open" command which allows easy switching between tables.
4391 * xapian-compact: Fix typos in --help output.
4393 quartz backend:
4395 * Replacing a document deleted since the last flush failed to update the
4396   collection frequency and wdf, and caused an assertion failure when assertions
4397   were enabled.
4399 * WritableDatabase::replace_document() didn't always remove old positional
4400   data (the only effect is that the position table was bloated by unwanted
4401   entries).
4403 remote backend:
4405 * Throw UnimplementedError if a MatchDecider is used with the remote backend.
4406   Previously Xapian returned incorrect results in this case.
4408 build system:
4410 * configure: With --enable-maintainer-mode, enable -Werror for GCC >= 4.1
4411   rather than >= 4.0 as Apple's GCC 4.0 gives bogus uninitialised variable
4412   warnings.
4414 documentation:
4416 * The API documentation now includes Xapian::Error and subclasses, and doesn't
4417   mention Xapian::Query::Internal.
4419 * Make clear in the Xapian::Document API documentation that this class is a
4420   lazy handle and discuss the issues this can cause.
4422 * INSTALL: Improve text about zlib dependency.
4424 * HACKING: Add details of our licensing policy for accepting patches.
4426 examples:
4428 * quest: If no database is specified, still parse the query and report
4429   Query::get_description() to provide an easy way to check how a query parses.
4431 portability:
4433 * Fix GCC 4.2 warning.
4435 xapian-core 1.0.17 (2009-11-18):
4437 API:
4439 * QueryParser:
4441   + Fix handling of a group of two or more terms which are all stopwords which
4442     notably caused issues when default_op was OP_AND, but could probably
4443     manifest in other cases too.  Fixes ticket#406.
4445   + Fix interaction of FLAG_PARTIAL and FLAG_SYNONYM.  (ticket#407)
4447 * Database: A database created via the default constructor no longer causes a
4448   segfault when the methods get_metadata() or metadata_keys_begin() are called.
4450 flint backend:
4452 * Don't try to close the fd one more than the maximum allowable when locking
4453   the database.  Harmless, except it causes a warning when running under
4454   valgrind.  (ticket#408)
4456 remote backend:
4458 * Xapian::Sorter isn't supported with the remote backend so throw
4459   UnimplementedError rather than giving incorrect results.  (ticket#384)
4461 * Fix potential reading off the end of the MSet which is returned internally
4462   by the remote server.
4464 documentation:
4466 * Various documentation comment improvements for the Database class.
4468 examples:
4470 * examples/quest.cc: Tighten up the type of the error we catch to detect an
4471   unknown stemming language.
4473 portability:
4475 * xapian-config: Need to quote ^ for Solaris /bin/sh.
4477 * configure: Actually use any flags we determine are needed to switch the
4478   compiler to proper ANSI C++ mode, when building xapian-core - this stopped
4479   working in 1.0.12, breaking support for HP's aCC, Compaq's cxx, Sun's CC, and
4480   SGI's CC.
4482 Xapian-core 1.0.16 (2009-09-10):
4484 flint backend:
4486 * Fix a typo which stopped this fix in 1.0.12 from working (ticket #398):
4488   If we fail to get the lock after we spawn the child lock process (the common
4489   case is because the database is already open for writing) then we now clean
4490   up the child process properly.
4492 documentation:
4494 * Improve API documentation of QueryParser::set_default_op() and
4495   QueryParser::get_default_op().
4497 portability:
4499 * Fix build failure on Mac OS X 10.6.
4501 Xapian-core 1.0.15 (2009-08-26):
4503 testsuite:
4505 * Fix the test harness not to report heaps of bogus errors when using valgrind
4506   3.5.0.
4508 flint backend:
4510 * Backport the lazy update changes from 1.1.2:
4512   WritableDatabase::replace_document() now updates the database lazily in
4513   simple cases - for example, if you just change a document's values and
4514   replace it with the same docid, then the terms and document data aren't
4515   needlessly rewritten.  Caveats: currently we only check if you've looked at
4516   the values/terms/data, not if they've actually been modified, and only keep
4517   track of the last document read.
4519 * Fix PostingIterator::skip_to() on an unflushed WritableDatabase to skip
4520   documents which were added and deleted since the last flush.  (ticket#392)
4522 documentation:
4524 * Overhaul the doxygen options we use and tweak various documentation comments
4525   to improve the generated API documentation.
4527 * Explicitly document that an empty prefix argument to
4528   QueryParser::add_prefix() means "no prefix".
4530 * Update the documentation comments for Enable::set_sort_by_value(),
4531   set_sort_by_value_then_relevance(), and set_sort_by_relevance_then_value() to
4532   mention sortable_serialise() as a good way to store numeric values for
4533   sorting.
4535 Xapian-core 1.0.14 (2009-07-21):
4537 API:
4539 * When using more than one ValueRangeProcessor, QueryParser didn't reset the
4540   begin and end strings to ignore any changes made by a ValueRangeProcessor
4541   which returned false, so further ValueRangeProcessors would see any changes
4542   it had made.  This is now fixed, and test coverage improved.
4544 testsuite:
4546 * The test harness code which launches xapian-tcpsrv child processes was
4547   failing to close a file descriptor for each one launched due to a bug in
4548   the code which is meant to track them.  This was causing apitest to fail
4549   on OpenBSD (ticket#382).  Also wait between testcases for any spawned
4550   xapian-tcpsrv processes to exit to avoid spurious failures when a database is
4551   reused by the next testcase.
4553 * tests/runtest.in: Use "ulimit -n" where available to limit the number of
4554   available file descriptors to 64 so we catch file descriptor leaks sooner.
4556 * When measuring CPU time used for scalability tests, we no longer try to
4557   include the CPU time used by child processes, as we can only get that for
4558   child processes which have exited and it's hard to ensure that they have
4559   with the current framework.  Although this means we only tests the
4560   client-side scaling for remote tests, the local backend tests cover most of
4561   the work done by the server part of the remote backend.
4563 * apitest: In testcase topercent2, don't expect max_attained or max_possible to
4564   be exact as rounding errors in different ways of calculating can cause small
4565   variations.  On trunk we already have similar code because the new weighting
4566   scheme stuff gives different bounds in the different cases.  This should fix
4567   testsuite failures seen on some of the Debian and Ubuntu buildds.
4569 * The test harness now always reports the full exception message (was
4570   conditional on --verbose), and output for different exception types and
4571   other causes of failure is now more consistent.
4573 * For scalability tests, the test harness now increases the number of
4574   repetitions until the first run takes more than 0.001 seconds, to avoid
4575   trying to base calculations on a length of time we probably can't reliably
4576   measure to start with.
4578 * Add test coverage for Stem::get_description() for each supported language.
4580 * queryparsertest: Reenable tests which require the inmemory backend to be
4581   enabled by fixing typo XAPIAN_HAS_BACKEND_INMEMORY ->
4582   XAPIAN_HAS_INMEMORY_BACKEND.
4584 flint backend:
4586 * Use F_FULLFSYNC where available (Mac OS X currently) to ensure that changes
4587   have been committed to disk.  (ticket#288)
4589 remote backend:
4591 * Fix handling of percentage weights in various cases when we're searching
4592   multiple remote databases or a mix of local and remote databases.
4594 build system:
4596 * configure: -Wshadow produces false positives with GCC 4.0, so only enable it
4597   for >= 4.1 since we enable -Werror for maintainer-mode builds for GCC >= 4.0.
4599 * configure: Check that we can find the valgrind/memcheck.h header as well as
4600   the valgrind binary.
4602 * Change how snowball generates the data used by its among operation - instead
4603   of using pointers to the strings in struct among, store an offset into a
4604   constant pool, as this reduces the number of relocations by about 2300, which
4605   should decrease the time taken by the dynamic linker when loading the
4606   library.  This also reduces the size of the shared library significantly
4607   (on x86-64 Linux, the stripped shared library is 4% smaller).
4609 Xapian-core 1.0.13 (2009-05-23):
4611 API:
4613 * Xapian::Document no longer ever stores empty values explicitly.  This
4614   wasn't intentional behaviour, and how this case was handled wasn't
4615   documented.  The amended behaviour is consistent with how user metadata
4616   is handled.  This change isn't observable using Document::get_value(),
4617   but can be noticed when iterating with Document::values_begin(), using
4618   Document::values_count(), or trying to delete the value with
4619   Document::remove_value().
4621 testsuite:
4623 * Fix testcase scaleweight4 not to fail on x86 when compiled with -O0.  The
4624   problem was in the testcase code, and was caused by excess precision in
4625   intermediate FP values.
4627 * Testcases which check that operations have the expected O(...) behaviour now
4628   check CPU time instead of wallclock time on most platforms, which should
4629   eliminate occasional failures due to load spikes from other processes.
4630   (ticket#308)
4632 * Fix test failures due to SKIP_TEST_FOR_BACKEND("inmemory") not skipping when
4633   it should due to comparing char * strings with == (on trunk the return value
4634   being tested is std::string rather than const char *).
4636 * Improve test coverage in several corner cases.
4638 * Fix testcase consistency2 to actually be run (fortunately it passes).
4640 * In the generated testcases, call get_description() on the default
4641   constructed object of each class to make sure that works (and doesn't try to
4642   dereference NULL, or fail some assertion, etc).  All currently checked
4643   classes are fine - this is to avoid future regressions or such problems with
4644   new classes.
4646 * In the test coverage build, use "--coverage" instead of "-fprofile-arcs
4647   -ftest-coverage".
4649 * The test harness now has the inmemory backend flagged as supporting
4650   user-specified metadata (apart from iteration over metadata keys).
4652 matcher:
4654 * If a query contains a MatchAll subquery, check for it before checking the
4655   other terms so that the loop which checks how many terms match can exit
4656   early if they all match.
4658 * When an OR or ANY_MAYBE decayed to an AND, we were carefully swapping the
4659   children for maximum efficiency, but the condition was reversed so we were
4660   in fact making things worse.  This was noticed because it was resulting in
4661   the same query running faster when more results were asked for!
4663 * Only build the termname to termfreq and weight map for the first subdatabase
4664   instead of rebuilding it for each one.  Also don't copy this map to return
4665   it.  This should speed up searches a little, especially those over multiple
4666   databases.
4668 * If a submatcher fails but ErrorHandler tells us to continue without it, we
4669   just use a NULL pointer to stand in rather than allocating a special dummy
4670   place-holder object.
4672 * Remove AndPostList, in favour of MultiAndPostList.  AndPostList was only used
4673   as a decay product (by AndMaybePostList and OrPostList), and doesn't appear
4674   to be any faster.  Removing it reduces CPU cache pressure, and is less code
4675   to maintain.
4677 * Call check() instead of skip_to() on the optional branch of AND_MAYBE.
4679 flint backend:
4681 * Fix a bug in TermIterator::skip_to() over metadata keys.
4683 remote backend:
4685 * Fix xapian-tcpsrv --interface option to work on MacOS X (ticket#373).
4687 * Fix typo which caused us to return the docid instead of the maximum weight
4688   a document from a remote match could return!  This could have led to wrong
4689   results when searching multiple databases with the remote backend, but
4690   probably usually didn't matter as with BM25 the weights are generally small
4691   (often all < 1) while docids are inevitably >= 1.
4693 inmemory backend:
4695 * The inmemory backend doesn't support iterating over metadata keys.  Trying
4696   to do so used to give an empty iteration, but has now been fixed to throw
4697   UnimplementedError (and this limitation has now been documented).
4699 build system:
4701 * Remove a lot of unused header inclusions and some unused code which should
4702   make the build faster and slightly smaller.
4704 * Fix to compile under --disable-backend-flint, --disable-backend-remote, and
4705   --disable-backend-inmemory.
4707 * Don't remove any built sources in "make clean" even under
4708   --make-maintainer-mode as that breaks switching a tree away from
4709   maintainer-mode with: make distclean;./configure
4711 * configure: Enable more GCC warnings - "-Woverloaded-virtual" for all
4712   versions, "-Wstrict-null-sentinel" for 4.0+, "-Wlogical-op
4713   -Wmissing-declarations" for 4.3+.  Notably "-Wmissing-declarations" caught
4714   that consistency2 wasn't being run.
4716 * Internally, fix the few places where we pass std::string by value to pass
4717   by const reference instead (except where we need a modifiable copy anyway) as
4718   benchmarking shows that const reference is slightly faster and generates
4719   less code with GCC's reference counted std::string implementation - with a
4720   non-reference counted implementation, const reference should be much faster.
4721   (ticket#140)
4723 documentation:
4725 * INSTALL: We no longer regularly test build with GCC 2.95.4 and we're raising
4726   the minimum GCC version required to 3.1 for Xapian 1.1.x.
4728 * Document what passing maxitems=0 to Enquire::get_mset() does.
4730 * docs/queryparser.html: Add examples of using a prefix on a phrase or
4731   subexpression.
4733 * Correct doxygen comments for user metadata functions:
4734   Database::get_metadata() can't throw UnimplementedError but
4735   WritableDatabase::set_metadata() can.
4737 * Document that Database::metadata_keys_begin() returns an end iterator if the
4738   backend doesn't support metadata.
4740 * HACKING: Update the list of Debian/Ubuntu packages needed for a development
4741   environment.
4743 debug code:
4745 * Fix build with --enable-debug.
4747 * Added some more assertions.
4749 Xapian-core 1.0.12 (2009-04-19):
4751 API:
4753 * WritableDatabase::remove_spelling() now works properly.
4755 * The QueryParser now treats NON_SPACING_MARK Unicode characters as phrase
4756   generators, which improves handling of Arabic.  This is a stop-gap solution
4757   for 1.0.x which will work with existing databases without requiring
4758   reindexing - in 1.1.0, NON_SPACING_MARK will be regarded as part of a word.
4759   (ticket#355)
4761 * Fix undefined behaviour in distribution of OP_NEAR and OP_PHRASE over a
4762   non-leaf subquery (indentified by valgrind on testcase nearsubqueries1).
4763   (ticket#349)
4765 * Enhance distribution of OP_NEAR/OP_PHRASE over non-leaf subqueries to work
4766   when there are multiple non-leaf subqueries (ticket#201).
4768 * Enquire::get_mset() no longer needlessly checks if the documents exist.
4770 * PostingIterator::get_description() output improved visually in some cases.
4772 testsuite:
4774 * Add make targets to assist generating a testsuite code coverage report with
4775   lcov.  See HACKING for details.
4777 * Improved test coverage in a number of places and removed some used code as
4778   shown by lcov's coverage report.
4780 flint backend:
4782 * xapian-compact:
4784   + Now handles databases which contains no documents but have user metadata
4785     (ticket#356).
4787   + Fix test for the total document length overflowing.
4789 * Release the database lock if the database is closed due to an unrecoverable
4790   error during modifications. (ticket#354)
4792 * If we fail to get the lock after we spawn the child lock process (the common
4793   case is because the database is already open for writing) then we now clean
4794   up the child process properly.
4796 build system:
4798 * Overriding CXXFLAGS at make-time (e.g. "make CXXFLAGS=-Os") no longer
4799   overrides any flags configure detected to be required to make the compiler
4800   accept ISO C++ (for GCC, no such flags are required, so this doesn't
4801   change anything).
4803 documentation:
4805 * Update documentation and code comments to reflect that 1.1 will be a
4806   development series, and 1.2 the next release series.
4808 * docs/admin_notes.html: Document the child process used for locking which
4809   exec-s "cat" (ticket #258).
4811 * include/xapian/unicode.h: Fix documentation comment typos.
4813 * include/xapian/matchspy.h: Removed currently unused header to stop doxygen
4814   from generating documentation for it.
4816 Xapian-core 1.0.11 (2009-03-15):
4818 API:
4820 * Enquire::get_mset():
4822   + Now throws UnimplementedError if there's a percentage cutoff and sorting is
4823     primarily by value - this has never been correctly supported and it's
4824     better to warn people than give incorrect results.
4826   + No longer needlessly copies the results internally.
4828   + When searching multiple databases, now recalculates the maximum attainable
4829     weight after each database which may allow it to terminate earlier.
4830     (ticket#336).
4832   + Fix inconsistent percentage scores when sorting primarily by value, except
4833     when a MatchDecider is also being used; document this remaining problem
4834     case.  (ticket#216)
4836 * Enquire::set_sort_by_value() (and similar methods): Rename the wrongly named
4837   "ascending" parameter to "reverse", and note that its value should always be
4838   explicitly given since defaulting to "reverse=true" is confusing and the
4839   default will be deprecated in 1.1.0.  (ticket#311)
4841 * Database::allterms_begin(): Fix memory leak when iterating all terms from
4842   more than one database.
4844 * Query::get_terms_begin(): Don't return "" from the TermIterator (happened
4845   when the query contained or was Query::MatchAll).
4847 * Add QueryParser::FLAG_DEFAULT to make it easier to add flags to those set by
4848   default.
4850 testsuite:
4852 * The testsuite now reports problems detected by valgrind with newer valgrind
4853   versions.  Drop support for running the testsuite under valgrind < 3.3.0
4854   (well over a year old) as this greatly simplifies the configure tests.
4856 * Fix usage message for options which take arguments in --help output from test
4857   programs - "-x=foo" doesn't work, the correct syntax is "-x foo".
4859 * If comparing MSet percentages fails, report the differing percentages if in
4860   verbose mode.
4862 * Add test that backends don't truncate total document length to 32 bits.
4864 * Disable lockfileumask1 (regression testcase added in 1.0.10) on Cygwin and on
4865   OS/2.
4867 flint backend:
4869 * The configure test for pread() and pwrite() got accidentally disabled in
4870   0.8.4 and we've always been using llseek() followed by read() or write()
4871   since then.  The configure test is now fixed, and gives a slight speedup
4872   (3% measured for searching).
4874 * The child process used to implement WritableDatabase locking now changes
4875   directory to / so that it doesn't block unmounting of any partitions and
4876   closes any open file descriptors which aren't relating to locking so that
4877   if those files are closed by our parent and deleted the disk space gets
4878   released right away.
4880 * We now reuse the same zlib zstream structures rather than using a fresh
4881   one for each operation.  This doesn't make a measurable difference in
4882   our own tests on Linux but reportedly is measurably faster on some
4883   systems.  (ticket #325)
4885 quartz backend:
4887 * The pread()/pwrite() fix also speeds up quartz.
4889 remote backend:
4891 * Avoid copying Query::Internal objects needlessly when unserialising Query
4892   objects.
4894 inmemory backend:
4896 * Store the (non-normalised) document lengths as Xapian::termcount (unsigned
4897   int) rather than Xapian::doclength (double) which saves 4 bytes per document.
4899 build system:
4901 * configure: The output of g++ --version changed format (again) with GCC 4.3
4902   which meant configure got "g++" for the version.  Instead use the (hopefully)
4903   more robust technique of using g++ -E to pull out __GNUC__ and
4904   __GNUC_MINOR__.
4906 documentation:
4908 * API documentation:
4910   + WritableDatabase::flush() can't throw DatabaseLockError.
4912   + WritableDatabase's constructor can throw at least DatabaseCorruptError or
4913     DatabaseLockError.
4915   + Document how to get all matches from Enquire::get_mset().
4917   + Other minor improvements.
4919 * docs/sorting.html: Clarify meaning.
4921 portability:
4923 * Fix "#line" directives in generated file queryparser/queryparser_internal.cc
4924   to give a relative path - previously they had a full path when generated by a
4925   VPATH build (as release tarballs are), and this confused GCC 2.95 and
4926   depcomp.
4928 * Fix for compiling with Sun's compiler (untested as we no longer have access
4929   to it).
4931 Xapian-core 1.0.10 (2008-12-23):
4933 API:
4935 * Composing an OP_NEAR query with two non-term subqueries now throws
4936   UnimplementedError instead of AssertionError (in a --enable-assertions build)
4937   or leading to unexpected results (otherwise).  This partly addresses bug#201.
4939 * Using a MultiValueSorter with no values set no longer causes a hang or
4940   segmentation fault (but it is still rather pointless!)
4942 matcher:
4944 * If we're using values for sorting and for another purpose, cache the
4945   Document::Internal object created to get the value for sorting, like we do
4946   between other uses.
4948 flint backend:
4950 * If the disk became full while flushing database changes to disk, the
4951   WritableDatabase object would throw a DatabaseError exception but be left in
4952   an inconsistent state such that further use could lead to the database on
4953   disk ending up in a "corrupt" state (theoretically fixable, but no tool
4954   to fix such a database exists).  Now we try to ensure that the object is
4955   left in a consistent state, but if doing so throws a further exception, we
4956   put the WritableDatabase object in a "closed" state such that further
4957   attempts to use it throw an exception.
4959 * Create the lockfile "flintlock" with permissions 0666 so that the umask is
4960   honoured just like we do for the other files (previously we used 0600).
4961   Previously it wasn't possible to lock a database for update if it was
4962   owned by another user, even if you otherwise had sufficient permissions via
4963   "group" or "other".
4965 * Fix garbled exception message when a base file can't be reread.
4967 quartz backend:
4969 * Fix garbled exception message when a base file can't be reread.
4971 remote backend:
4973 * xapian-tcpsrv and xapian-progsrv now accept -w as a short form of --writable,
4974   as was always intended.
4976 build system:
4978 * This release now uses newer versions of the autotools (autoconf 2.62 ->
4979   2.63; automake 1.10.1 -> 1.10.2).
4981 documentation:
4983 * INSTALL: Add new paragraphs about HP's aCC and IRIX (adapted from footnotes
4984   in PLATFORMS).
4986 * PLATFORMS: HP testdrive has been shut down, so all mark all those machines as
4987   "no longer available".  Update atreus' build report to 1.0.10.
4989 * docs/queryparser.html: Add link to valueranges.html.
4991 examples:
4993 * delve: Add missing "and" to --help output.  Report termfreq and collection
4994   freq for each term we're asked about.
4996 portability:
4998 * Fix to build with GCC 4.4 snapshot.
5000 Xapian-core 1.0.9 (2008-10-31):
5002 API:
5004 * Database::get_spelling_suggestion() is now faster (15% speed up for parsing
5005   queries with FLAG_SPELLING_CORRECTION set in a test on real world data).
5007 * Fix OP_ELITE_SET segmentation fault due to excess floating point precision
5008   on x86 Linux (and possibly other platforms).
5010 * Database::allterms_begin() over multiple databases now gives a TermIterator
5011   with operations O(log(n)) rather than potentially O(n) in the number of
5012   databases.
5014 * Add new Database methods metadata_keys_begin() and metadata_keys_end() to
5015   allow the complete list of metadata in a database to be retrieved (this
5016   API addition is needed so that copydatabase can copy database metadata).
5018 testsuite:
5020 * Remove the cached test databases before running the testsuite.
5022 * apitest: Fix cursordelbug1 to work on Microsoft Windows (bug#301).
5024 * apitest,queryparsertest: Skip tests which fail because the timer granularity
5025   is too coarse to measure how long the test took.  In practice, this is only
5026   an issue on Microsoft Windows (bug#300 and bug#308).
5028 matcher:
5030 * Adjust percent cutoff calculations in the matcher in a way which corresponds
5031   to the change to percentage calculations made in 1.0.7 to allow for excess
5032   precision.
5034 * Query::MatchAll no longer gives match results ranked by increasing document
5035   length.
5037 flint backend:
5039 * xapian-compact: Fix crash while compacting spelling table for a single
5040   database when built with MSVC, and probably other platforms, though Linux
5041   got lucky and happened to work (bug#305).
5043 build system:
5045 * configure: Disable -Wconversion for now - it's not useful for older GCC and
5046   is buggy in GCC 4.3.
5048 * configure: Set -Wstrict-overflow to 1 instead of 5, to avoid unreasonable
5049   warnings under GCC 4.3.
5051 documentation:
5053 * Minor improvements to API documentation, including documenting the
5054   XAPIAN_FLUSH_THRESHOLD environmental variable in WriteableDatabase::flush()
5055   (bug#306).
5057 * valueranges.html: Fix typos in example code, and drop superfluous empty
5058   destructor from ValueRangeProcessor subclass.
5060 * HACKING: Several improvements.
5062 examples:
5064 * copydatabase: Also copy user metadata.
5066 Xapian-core 1.0.8 (2008-09-04):
5068 API:
5070 * Fix output of RSet::get_description
5072 testsuite:
5074 * Report subtotals per backend, rather than per testgroup per backend to make
5075   the output easier to read.
5077 flint backend:
5079 * Fix WritableDatabase::add_document() and replace_document() not to be O(n*n)
5080   in the number of values in the new document.
5082 * Fix handling of a table created lazily after the database has had commits,
5083   and which is then cursored while still in sequential mode.
5085 * Fix failure to remove all the Btree entries in some cases when all the
5086   postings for a term are removed.  (bug#287)
5088 * xapian-inspect: Show the help message on start-up.  Correct the documented
5089   alias for next from ' ' to ''.  Avoid reading outside of input string when it
5090   is empty.  (bug#286)
5092 quartz backend:
5094 * Backport fix from flint for WritableDatabase::add_document() and
5095   replace_document() not to be O(n*n) in the number of values in the new
5096   document.
5098 build system:
5100 * configure: Report bug report URL in --help output.
5102 * xapian-config: Report bug report URL in --help output.
5104 * configure: Fix deprecation error for --enable-debug=full to say to instead
5105   use '--enable-assertions --enable-log' not '--enable-debug --enable-log'.
5107 documentation:
5109 * valueranges.html: Expand on some sections.
5111 examples:
5113 * quest: Fix to catch QueryParserError instead of const char * which
5114   QueryParser threw in Xapian < 1.0.0.
5116 * copydatabase: Use C++ forms of C headers.  Only treat '\' as a directory
5117   separator on platforms where it is.  Update counter every 13 counting up to
5118   the end so that the digits all "rotate" and the counter ends up on the exact
5119   total.
5121 portability:
5123 * Eliminate literal top-bit-set characters in testsuite source code.
5125 Xapian-core 1.0.7 (2008-07-15):
5127 API:
5129 * OP_VALUE_RANGE, OP_VALUE_GE, and OP_VALUE_LE:
5131   + If there were gaps in the document id numbering, these operators could
5132     return document ids which weren't present in the database.  This has been
5133     fixed.
5135   + These operators are now more efficient when there are a lot of "missing"
5136     document ids (bug#270).
5138   + Optimise Query(OP_VALUE_GE, <n>, "") to Query::MatchAll.
5140 * Xapian::QueryParser:
5142   + QueryParser now stops parsing immediately when it hits a syntax error.
5143     This doesn't change behaviour, but does mean failing to parse queries is
5144     now more efficient.
5146   + Cases of O(N*N) behaviour have been fixed.
5148 * Xapian::Stem now recognises "nl" as an alias for "dutch" (debian bug 484458).
5150 * Setting sort by value was being ignored by a Xapian::Enquire object which had
5151   previously had a Xapian::Sorter set (bug#256).
5153 testsuite:
5155 * Improved test coverage in a few places.
5157 matcher:
5159 * When using a MatchDecider, we weren't reducing matches_lower_bound unless
5160   all the potential results were retrieved, which led to the lower bound
5161   being too high in some such cases.
5163 * We now track how many documents were tested by a MatchDecider and how many
5164   of those it rejected, and set matches_estimated based on this rate.  Also,
5165   matches_upper_bound is reduced by the number of rejected documents.
5167 * Fixed matches_upper_bound in some cases when collapsing and using a
5168   MatchDecider.
5170 * Fixed matches_lower_bound when collapsing and using a percentage cutoff.
5172 * When using two or more of a MatchDecider, collapsing, or a percentage
5173   cutoff, we now only round the scaled estimate once, and we also round it to
5174   the nearest rather than always rounding down.  Hopefully this should
5175   improve the estimate a little in such cases.
5177 * Fix problem on x86 with the top match getting 99% rather than 100% (caused
5178   by excess precision in an intermediate value).
5180 flint backend:
5182 * If Database::reopen() is called and the database revision on disk hasn't
5183   changed, then do as little work as possible.  Even if it has changed, don't
5184   bother to recheck the version file (bug#261).
5186 * xapian-compact:
5188   + Fix check for user metadata key to not match other key types we may add in
5189     the future.  When compacting, we can't assume how we should handle them.
5191   + If the same user metadata key is present in more than one source database
5192     with different tag values, issue a warning and copy an arbitrary tag value.
5194   + Fix potential SEGV when compacting database(s) with user metadata but no
5195     postings.
5197   + In error message, refer to "iamflint" as the "version file", not the
5198     "meta file".
5200 * xapian-inspect:
5202   + Print top-bit-set characters as escaped hex forms as they often won't be
5203     valid UTF-8 sequences.
5205   + If we're passed a database directory rather than a single table, issue a
5206     special error message since this is an obvious mistake for users to make.
5208 * Fix cursor handling for a modified table which has previously only had
5209   sequential updates which usually manifested as zlib errors (bug#259).
5211 quartz backend:
5213 * Fix cursor handling for a modified table which has previously only had
5214   sequential updates which usually manifested as incorrect data being returned
5215   (bug#259).
5217 * Calling skip_to() as the first operation on an all-documents PostingIterator
5218   now works correctly.
5220 remote backend:
5222 * Improve performance of matches with multiple databases at least one of which
5223   is remote, and when the top hit is from a remote database (bug#279).
5225 * When remote protocol version doesn't match, the error message displayed
5226   now shows the minor version number supplied by the server correctly.
5228 * We now wait for the connection to close after sending MSG_SHUTDOWN for a
5229   WritableDatabase, which ensures that changes have been written to disk
5230   and the lock released before the WritableDatabase destructor returns
5231   (as is the case with a local database).
5233 * We no longer ever send MSG_SHUTDOWN for a read-only Database - just closing
5234   the connection is enough (and is protocol compatible).
5236 inmemory backend:
5238 * Fix bug which resulted in the values not being stored correctly when
5239   replacing an existing document, or if there are gaps in the document id
5240   numbering.
5242 build system:
5244 * This release now uses newer versions of the autotools (autoconf 2.61 ->
5245   2.62; automake 1.10 -> 1.10.1; libtool 1.5.24 -> 1.5.26).  The newer
5246   autoconf reportedly results in a faster configure script, and warns about
5247   use of unrecognised configure options.
5249 * Fix configure to recognise --enable-log=profile and fix build problems when
5250   this is enabled.
5252 * "make up" in the "tests" subdirectory now does "make" in the top-level.
5254 * Fix "make distcheck" by using dist-hook to install generated files from
5255   either srcdir or builddir, with the appropriate dependency to generate them
5256   automatically in maintainer mode builds.
5258 documentation:
5260 * intro_ir.html: Improve wording a bit.
5262 * The documentation now links to trac instead of bugzilla.  For links to the
5263   main website, we now prefer xapian.org to www.xapian.org.
5265 * Doxygen-generated API documentation:
5267   + Improved documentation in several places.
5269   + The helper macro XAPIAN_VISIBILITY_DEFAULT no longer appears in the output.
5271   + Header and directory relationship graphs are no longer generated as they
5272     aren't actually informative here.
5274 * HACKING: Numerous updates and improvements.
5276 examples:
5278 * quest: Output get_description() of the parsed query.
5280 portability:
5282 * Fix build with GCC 2.95.3.
5284 * Fix build with GCC 4.3.
5286 * Newer libtool features improved support for Mac OS X Leopard and added
5287   support for AIX 6.1.
5289 debug code:
5291 * Database::get_spelling_suggestion() now debug logs with category APICALL
5292   rather than SPELLING, for consistency with all other API methods.
5294 * Added APICALL logging to a few Database methods which didn't have it.
5296 * Remove debug log tracing from get_description() methods since logging for
5297   other methods calls get_description() methods on parameters, so logging these
5298   calls just makes for more confusing debug logs.  A get_description() method
5299   should have no side-effects so it's not very interesting even when explicitly
5300   called by the user.
5302 Xapian-core 1.0.6 (2008-03-17):
5304 API:
5306 * Add new query operators OP_VALUE_LE and OP_VALUE_GE which perform "single
5307   ended" range checks, and a corresponding new Query constructor.
5309 * Add Unicode::toupper() to complement Unicode::tolower().
5311 * Xapian::Stem has been further optimised - stemtest now runs ~2.5% faster.
5313 testsuite:
5315 * tests/runtest: Fixed to handle test programs with a ".exe" extension.
5317 * tests/queryparsertest: Add a couple more testcases which already work to
5318   improve test coverage.
5320 * tests/apitest: Add caseconvert1 testcase to test Unicode::tolower() and
5321   Unicode::toupper().
5323 flint backend:
5325 * xapian-check: Fix not to report an error for a database containing no
5326   postings but some user metadata.
5328 * Update the base files atomically to avoid problems with reading processes
5329   finding partially written ones.
5331 * Create lazy tables with the correct revision to avoid producing a database
5332   which we later report as "corrupt" (bug#232).
5334 * xapian-compact: Fix compaction for databases which contain user metadata
5335   keys.
5337 quartz backend:
5339 * Update the base files atomically to avoid problems with reading processes
5340   finding partially written ones.
5342 remote backend:
5344 * The addition of OP_VALUE_LE and OP_VALUE_GE required an update to the Query
5345   serialisation, which required a minor remote protocol version bump.
5347 * Fix to actually set the writing half as the connection as non-blocking when
5348   a timeout is specified.  This would have prevented timeouts from operating
5349   correctly in some situations.
5351 build system:
5353 * configure: GCC warning flag overhaul:  Stop passing "-Wno-multichar" since
5354   any multi-character character literal is bound to be a typo (I believe we
5355   were only passing it after misinterpreting its sense!)  Pass
5356   "-Wformat-security", and "-Wconversion" for all GCC versions.  Add
5357   "-Winit-self" and "-Wstrict-overflow=5" for GCC >= 4.2.  The latter might
5358   prove too aggressive, but seems reasonable so far.  Fix some minor niggles
5359   revealed by "-Wconversion" and "-Wstrict-overflow=5".
5361 * Add XAPIAN_NORETURN() annotations to functions and non-virtual methods which
5362   don't return.
5364 documentation:
5366 * docs/intro_ir.html: Briefly mention how pure boolean retrieval is supported.
5368 * docs/valueranges.html: Fix example of using multiple VRPs to come out as a
5369   "program listing".
5371 * include/xapian/queryparser.h: Fix incorrect example in doccomment.
5373 * docs/quickstart.html: Remove information covered by INSTALL since
5374   there's no good reason to repeat it and two copies just risks one
5375   getting out of date (as has happened here!)
5377 * docs/quickstart.html: Fix very out of date reference to MSet::items
5378   (bug#237).
5380 * PLATFORMS: Remove reports for 0.8.x as they're too old to be interesting.
5381   Separate out 0.9.x reports.  Add Solaris 9 and 10 success reports from James
5382   Aylett.  Update from Debian buildd logs.
5384 portability:
5386 * Now builds on OS/2, thanks to a patch by Yuri Dario.
5388 * Fix testsuite to build on mingw (broken by changes in 1.0.5).
5390 debug code:
5392 * Fix --enable-assertions build, broken by changes in 1.0.5.
5394 Xapian-core 1.0.5 (2007-12-21):
5396 API:
5398 * More sophisticated sorting of results is now possible by defining a
5399   functor subclassing Xapian::Sorter (bug#100).
5401 * Xapian::Enquire now provides a public copy constructor and assignment
5402   operator (bug#219).
5404 * Xapian::Document::values_begin() didn't ensure that values had been read
5405   when working on a Document read from a database.  However, values_end() did
5406   (and so did values_count()) so this wasn't generally a problem in practice.
5408 * Xapian::PostingIterator::skip_to() now works correctly when running over
5409   multiple databases.
5411 * Xapian::Database::postlist_begin() no longer adds a "MultiPostList" wrapper
5412   for the common case when there's only one subdatabase.
5414 * Xapian::TradWeight now avoids division by zero in the (rare) situation of the
5415   average document length being zero (which can only happen if all documents
5416   are empty or only have terms with wdf 0).
5418 * Calling Xapian::WritableDatabase methods when we don't have exactly one
5419   subdatabase now throws InvalidOperationError.
5421 testsuite:
5423 * apitest:
5425   + Testcases now describe the conditions they need to run, and are
5426     automatically collated by a Perl script.  This makes it significantly
5427     easier to add a new testcase.
5429   + The test harness's "BackendManager" has been overhauled to allow
5430     cleaner implementations of testcases which are currently hard to
5431     write cleanly, and to make it easier to add new backend settings.
5433   + Add a "multi" backend setting which runs suitable tests over two
5434     subdatabases combined.  There's a corresponding new make target
5435     "check-multi".
5437   + Add more feature tests of document values.
5439   + sortrel1 now runs for inmemory too.
5441   + Add simple feature test for TradWeight being used to run a query.
5443   + Fix spell3 to work on Microsoft Windows (bug#177).
5445   + API classes are now tested to check they have copy constructors and
5446     assignment operators, and also that most have a default constructor.
5448   + quartztest testcases adddoc2 and adddoc3 have been reworked as apitest
5449     testcases adddoc5 and adddoc6, which run for other backends.
5451   + stubdb1 now explicitly creates the database it needs - generally this
5452     bug didn't manifest because an earlier test has already created it.
5454 * queryparsertest: Add feature tests to check that ':' is being inserted
5455   between prefix and term when it should be.
5457 * Fix extracting of valgrind error messages in the test harness.
5459 * tests/valgrind.supp: Add more variants of the zlib suppressions.
5461 matcher:
5463 * Xapian::Enquire: When the "first" parameter to get_mset() is non-zero, avoid
5464   copying all the wanted items after performing the match.
5466 * Fix bug in handling a pure boolean match over more than one database under
5467   set_docid_order(ASCENDING) - we used to exit early which isn't correct.
5469 * When collapsing on a value, give a better lower bound on the number of
5470   matches by keeping track of the number of empty collapse values seen.
5472 * Xapian::BM25Weight: Fix bug when k2 is non-zero: a non-initialised value
5473   influenced the weight calculations.  By default k2 is zero, so this bug
5474   probably won't have affected most users.
5476 * The mechanism used to collate term statistics across multiple databases has
5477   been greatly simplified (bug#45).
5479 flint backend:
5481 * xapian-check:
5483   + Update to handle flint databases produced by Xapian 1.0.3 and later.
5485   + Fix not to go into an infinite loop if certain checks fail.
5487 quartz backend:
5489 * quartzcompact: Fix equality testing of C strings to use strcmp() rather than
5490   '=='!  In practice, using '==' often gives the desired effect due to pooling
5491   of constant strings, but this may have resulted in a bug on some platforms.
5493 remote backend:
5495 * If we're doing a match with only one database which is remote then just
5496   return the unserialised MSet from the remote match.  This requires an
5497   update to the MSet serialisation, which requires a minor remote protocol
5498   version bump.
5500 build system:
5502 * XO_LIB_XAPIAN now hooks LT_INIT as well as AC_PROG_LIBTOOL and
5503   AM_PROG_LIBTOOL.
5505 * Distribute preautoreconf, dir_contents, docs/dir_contents and
5506   tests/dir_contents.
5508 * Fix preautoreconf to correctly handle all the sources passed to doxygen to
5509   create the collated internal source documentation, and to work in a VPATH
5510   build.
5512 documentation:
5514 * sorting.html: New document on the topic of sorting match results.
5516 * HACKING,admin_notes.html,bm25.html,glossary.html,intro_ir.html,overview.html,
5517   quickstart.html,scalability.html,termgenerator,html,synonyms.html: Assorted
5518   minor improvements.
5520 * valueranges.html: State explicitly that Xapian::sortable_serialise() is used
5521   to encode values at index time, and give an example of how it is called.
5523 * API documentation:
5525  + Clarify get_wdf() versus get_termfreq().
5527  + We now use pngcrush to reduce the size of PNG files in the HTML version.
5529  + The HTML version no longer includes various intermediate files which doxygen
5530    generates.
5532  + Hide the v102 namespace from Doxygen as it isn't user visible.
5534  + Stop describing get_description() as an "Introspection method", as this
5535    doesn't help to explain what it does, and get_description() doesn't really
5536    fall under common formal definitions of "introspection".
5538 * index.html: Add a list of documents on particular topics and include links to
5539   previously unlinked-to documents.  Weed down the top navigation bar which had
5540   grown to unwieldy length.
5542 * PLATFORMS: Update for Debian buildds.
5544 * Improve documentation comment for Document::termlist_count().
5546 * admin_notes.html: Note that this document is up-to-date for 1.0.5.
5548 * INSTALL: zlib 1.2.0 apparently fixes a memory leak in deflateInit2(), which
5549   we use, so that's another reason to prefer 1.2.x.
5551 portability:
5553 * Add explicit includes of C headers needed to build with the latest snapshots
5554   of GCC 4.3.  Fix new warnings.
5556 * xapian-config: On platforms which we know don't need explicit dependencies,
5557   --ltlibs now gives the same output as --libs.
5559 * The minimum supported GCC version is now 2.95.3 (rather than 2.95) as 2.95.3
5560   added support for '#include <sstream>' which means we no longer need to
5561   maintain our own version.
5563 * Fix build with SGI's compiler on IRIX.
5565 * Fix or suppress some MSVC warnings.
5567 debug code:
5569 * Remove incorrect assertion in MultiAndPostList (bug#209).
5571 * Fix build when configured with "--enable-log --disable-assertions".
5573 Xapian-core 1.0.4 (2007-10-30):
5575 API:
5577 * Query:
5579   + Add OP_SCALE_WEIGHT operator (and a corresponding constructor which
5580     takes a single subquery and a parameter of type "double").  This
5581     multiplies the weights from the subquery by the parameter, allowing
5582     adjustment of the importance of parts of the query tree.
5584   + Deprecate the essentially useless constructor Query(Query::op, Query).
5586 * QueryParser:
5588   + A field prefix can now be set to expand to more than one term prefix.
5589     Similarly, multiple term prefixes can now be applied by default.  This is
5590     done by calling QueryParser::add_boolean_prefix() or
5591     QueryParser::add_prefix() more than once with the same field name but a
5592     different term prefix (previously subsequent calls with the same field name
5593     had no effect).
5595   + Trying to set the same field as probabilistic and boolean now throws
5596     InvalidOperationError.
5598   + Fix parsing of `term1 site:example.org term2', broken by changes in 1.0.2.
5600   + Drop special treatment for unmatched ')' at the start of the query, as it
5601     seems rather arbitrary and not particularly useful and was causing us to
5602     parse `(site:example.org) -term' incorrectly.
5604   + The QueryParser now generates pure boolean Query objects for strings such
5605     as `site:example.org' by applying OP_SCALE_WEIGHT with a factor of 0.0.
5607   + Fix handling of `"quoted phrase" +term' and `"quoted phrase" -term'.
5609   + Fix handling of `site:example.org -term'.
5611   + Fix problem with spelling correction of hyphenated terms (or other terms
5612     joined with phrase generators): the position of the start of the term
5613     wasn't being reset for the second term in the generated phrase, resulting
5614     in out of bounds errors when substituting the new value in the corrected
5615     query string.
5617   + The parser stack is now a std::vector<> rather than a fixed size, so it
5618     will typically use less memory, and can't hit the fixed limit.
5620   + Fix handling of STEM_ALL and update the documentation comment for
5621     QueryParser::set_stemming_strategy() to explain how it works clearly.
5623 * PostingIterator: positionlist_begin() and get_wdf() should now always
5624   throw InvalidOperationError where they aren't meaningful (before in some
5625   cases UnimplementedError was thrown).
5627 testsuite:
5629 * Add tests for new features.
5631 * Add another valgrind suppression for a slightly different error from zlib
5632   in Ubuntu gutsy.
5634 * Remove quartztest's test_postlist1 and test_postlist2, replacing the coverage
5635   lost by extending and adding tests which work with other backends as well.
5637 * If a test throws a subclass of std::exception, the test harness now
5638   reports the class name and the extra information returned by std::exception's
5639   what() method.
5641 matcher:
5643 * Several performance improvements have been made, mainly to the handling
5644   of OP_AND and related operations (OP_FILTER, OP_NEAR, and OP_PHRASE).
5645   In combination, these are likely to speed up searching significantly
5646   for most users - in tests on real world data we've seen savings of 15-55%
5647   in search times).  These improvements are:
5649   + OP_AND of 3 or more sub-queries is now processed more efficiently.
5651   + Sub-queries from adjacent OP_AND, OP_FILTER, OP_NEAR, and OP_PHRASE are now
5652     combined into a single multi-way OP_AND operation, and the filters which
5653     implement the near/phrase restrictions are hoisted above this so they need
5654     to check fewer documents (bug#23).
5656   + If an OP_OR or OP_AND_MAYBE decays to OP_AND, we now ensure that the less
5657     frequent sub-query is on the left, which OP_AND is optimised to expect.
5659 * When the Enquire::get_mset() parameter checkatleast is set, and we're sorting
5660   by relevance with forward ordering by docid, and the query is pure boolean,
5661   the matcher was deciding it was done before the checkatleast requirement was
5662   satisfied.  Then the adjustments made to the estimated and max statistics
5663   based on checkatleast meant the results claimed there were exactly msize
5664   results.  This bug has now been fixed.
5666 * Queries involving an OP_VALUE_RANGE filter now run around 3.5 times faster
5667   (bug#164).
5669 * The calculations behind MSet::get_matches_estimated() were always rounding
5670   down fractions, but now round to the nearest integer.  Due to cumulative
5671   rounding, this could mean that the estimate is now a few documents higher in
5672   some cases (and hopefully a better estimate).
5674 * Implement explicit swap() methods for internal classes MSetItem and ESetItem
5675   which should make the final sort of the MSet and ESet a little more
5676   efficient.
5678 flint backend:
5680 * Fixed a bug introduced in 1.0.3 - trying to open a flint database for reading
5681   no longer fails if it isn't writable.
5683 * We no longer use member function pointers in the Btree implementation which
5684   seems to speed up searching a little.
5686 remote backend:
5688 * The remote protocol minor version has been increased (to accommodate
5689   OP_SCALE_WEIGHT).  If you are upgrading a live system which uses the
5690   remote backend, upgrade the servers before the clients.
5692 build system:
5694 * Added macro machinery to allow branch prediction hints to be specified and
5695   used by compilers which support this (current GCC and Intel C++).
5697 * In a developer build, look for rst2html.py if rst2html isn't found as some
5698   Linux distros have it installed under with an extension.
5700 documentation:
5702 * In the API documentation, explicitly note that Database::get_metadata()
5703   returns an empty string when the backend doesn't support user-specified
5704   metadata, and that WritableDatabase::set_metadata() throws UnimplementedError
5705   in this case.  Also describe the current behaviour with multidatabases.
5707 * README: Remove the ancient history lesson - this material is better left to
5708   the history page on the website.
5710 * deprecation.html:
5712   + Deprecate the non-pythonic iterators in favour of the pythonic ones.
5714   + Move "Stem::stem_word(word)" in the bindings to the right section (it was
5715     done in 1.0.0, as already indicated).
5717   + Improve formatting.
5719 * When running rst2html, using "--verbose" was causing "info" messages to be
5720   included in the HTML output, so drop this option and really fix this issue
5721   (which was thought to have been fixed by changes in 1.0.3).
5723 * install.html: Reworked - this document now concentrates on giving
5724   a brief overview of building which should be suitable for most common cases,
5725   and defers to the INSTALL document in each tarball for more details.
5727 * PLATFORMS: Update from tinderbox and buildbot.
5729 * remote.html: xapian-tcpsrv has been able to handle concurrent read
5730   access since 0.3.1 (7 years ago) so update the very out-of-date information
5731   here.  Also, note that some newer features aren't supported by the remote
5732   backend yet.
5734 * HACKING: Note specifically that std::list::size() is O(n) for GCC.
5736 * intro_ir.html: Add link to the forthcoming book "Introduction to
5737   Information Retrieval", which can be read online.
5739 * scalability.html: Update size of gmane.
5741 * quartzdesign.html: Note that Quartz is now deprecated.
5743 debug code:
5745 * The debug assertion code has been rewritten from scratch to be cleaner and
5746   pull in fewer other headers.
5748 Xapian-core 1.0.3 (2007-09-28):
5750 API:
5752 * Add support for user specified metadata (bug#143).  Currently supported by
5753   the flint and inmemory backends.
5755 * Deprecate Enquire::register_match_decider() which has always been a no-op.
5757 * Improve the lower bound on the number of matching documents for an AND query
5758   - if the sum of the lower bounds for the two sides is greater than the
5759   number of documents in the database, then some of them must have both terms.
5761 * Spelling correction: Fix off-by-one error in loop bounds when initialising
5762   (bug#194).
5764 * If the check_at_least parameter to Enquire::get_mset() is used, but there
5765   aren't that many results, then MSet::get_matches_lower_bound() and
5766   MSet::get_matches_upper_bound() weren't always reported as equal - this
5767   bug is now fixed.
5769 * When sorting by value, and using the check_at_least parameter to
5770   Enquire::get_mset(), some potential matches weren't being counted.
5772 * Failing to create a flint or quartz database because we couldn't create the
5773   directory for it now throws DatabaseCreateError not DatabaseOpeningError.
5775 testsuite:
5777 * Fix display of valgrind output when a test fails because valgrind detected
5778   a problem.
5780 * Add another version of valgrind suppression for the zlib end condition check
5781   as this gives a different backtrace for zlib in Ubuntu gutsy.
5783 flint backend:
5785 * The Flint database format has been extended to support user metadata, and
5786   each termlist entry is now a byte shorter (before compression).  As a
5787   result, Xapian 1.0.2 and earlier won't be able to read Xapian 1.0.3
5788   databases.  However, Xapian 1.0.3 can read older databases.  If you open an
5789   older flint database for writing with Xapian 1.0.3, it will be upgraded
5790   such that it cannot then be read by Xapian 1.0.2 and earlier.
5792 * Zlib compression wasn't being used for the spelling or synonym tables (due
5793   to a typo - Z_DEFAULT_COMPRESSION where it should be Z_DEFAULT_STRATEGY).
5795 * xapian-check: Allow "db/record." and "db/record.DB" as arguments.
5797 * Fix "key too long" exception message by substituting FLINT_BTREE_MAX_KEY_LEN
5798   with its numeric value.
5800 * Assorted minor efficiency improvements.
5802 * If we reach the flush threshold during a transaction, we now write out the
5803   postlist changes, but don't actually commit them.
5805 * Check length of new terms is at most 245 bytes for flint in add_document()
5806   and replace_document() so that the API user gets an error there rather
5807   than when flush() is called (explicitly or implicitly).  Fixes bug#44.
5809 * Flint used to read the value of the environmental variable
5810   XAPIAN_FLUSH_THRESHOLD when the first WritableDatabase was opened and would
5811   then cache this value.  However the program using Xapian may have changed
5812   it, so we now reread it each time a WritableDatabase is opened.
5814 * Implement TermIterator::positionlist_count() for the flint backend.
5816 remote backend:
5818 * Fix the result of MSet::get_matches_lower_bound() when using the
5819   check_at_least parameter to get_mset().
5821 inmemory backend:
5823 * Implement TermIterator::positionlist_count() for the inmemory backend.
5825 build system:
5827 * xapian-config: We always need to include dependency_libs in the output of
5828   `xapian-config --libs` if shared libraries are disabled.
5830 * Distribution tarballs are now in the POSIX "ustar" format.  This supports
5831   pathnames longer than 99 characters (which we now have a few instances of
5832   in the doxygen generated documentation) and also results in a distribution
5833   tarball that is about half the size!  This format should be readable by any
5834   tar program in current use - if your tar program doesn't support it, we'd
5835   like to know (but note that the GNU tar tarball is smaller than the size
5836   reduction in the xapian-core tarball...)
5838 * configure no longer generates msvc/version.h - this is now entirely handled
5839   by the MSVC-specific makefiles.
5841 documentation:
5843 * Add a glossary.
5845 * docs/stemming.html: Reorder the initial paragraphs so we actually answer the
5846   question "What is a stemming algorithm?" up front.
5848 * When running rst2html, use "--exit-status=warning" rather than "--strict".
5849   The former actually gives a non-zero exit status for a warning or worse,
5850   while the former doesn't, but does include any "info" messages in the output
5851   HTML.
5853 * docs/deprecation.rst: Add "Database::positionlist_begin() throwing
5854   RangeError and DocNotFoundError".
5856 * valueranges.rst: Correct out-of-date reference to float_to_string.
5858 * HACKING: Document a few more "coding standards".
5860 * PLATFORMS: Updated.
5862 * docs/overview.html: Restore HTML header accidentally deleted in November
5863   2006.
5865 * Fix several typos.
5867 portability:
5869 * Add missing instances of "#include <string.h>" to fix compilation with recent
5870   GCC 4.3 snapshots.
5872 * Fix some warnings for various compilers and platforms.
5874 Xapian-core 1.0.2 (2007-07-05):
5876 API:
5878 * Xapian now offers spelling correction, based on a dynamically maintained
5879   list of spelling "target" words.  This is currently supported by the
5880   flint backend, and works when searching multiple databases.
5882 * Xapian now offers search-time synonym expansion, based on an externally
5883   provided synonym dictionary.  This is currently supported by the flint
5884   backend, and works when searching multiple databases.
5886 * TermGenerator: now offers support for generating spelling correction
5887   data.
5889 * QueryParser:
5891   + New flag FLAG_SPELLING_CORRECTION to enable spelling correction, and a new
5892     method, "get_corrected_query_string()" to get the spelling corrected
5893     query string.
5895   + New flags have been added to allow the new synonym expansion feature to be
5896     enabled and controlled.  Synonym expansion can either be automatic, or only
5897     for terms explicitly indicated in the query string by the new "~" operator.
5899   + The precedence of the boolean operators has been adjusted to match their
5900     usual precedence in mathematics and programming languages.  "NOT" now binds
5901     as tightly as "AND" (previously "AND NOT" would bind like "AND", but just
5902     "NOT" would bind like "OR"!)  Also "XOR" now binds more tightly than "OR",
5903     but less tightly than "AND" (previously it bound just like "OR").
5905   + '+' and '-' have been fixed to work on bracketed subexpressions as
5906     documented.
5908   + If the stemmer is "none", no longer put a Z prefix on terms; this now
5909     matches the output of TermGenerator.
5911 * Add new Xapian::sortable_serialise() and Xapian::sortable_unserialise()
5912   functions which serialise and unserialise numbers (currently only
5913   doubles) to a string representation which sorts in numeric order.  Small
5914   integers have a short representation.
5916 * NumberValueRangeProcessor has been changed to work usefully.  Previously
5917   the numbers had to be the same length; now numbers are serialised to
5918   strings such that a string sort on the string orders the numbers correctly.
5919   Negative and floating point numbers are also supported now.  The old
5920   NumberValueRangeProcessor is still present in the library to preserve
5921   ABI compatibility, but code linking against 1.0.2 or later will pick
5922   up the new implementation, which really lives in a sub-namespace.
5924 * Documents now have a get_docid() method, to get the document ID from the
5925   database they came from.
5927 * Add support for a new type of match decider, called a "matchspy".  Unlike
5928   the old deciders, this will reliably be tested on every candidate
5929   document, so can be used to tally statistics on them.
5931 * Fixed a segfault when getting a description for a MatchNothing query
5932   joined with AND_NOT (bug #176).
5934 * Header files have been tidied up to remove some unnecessary includes.
5935   Applications using "#include <xapian.h>" will not be affected.  We don't
5936   intend to support direct inclusion of individual header files from the xapian
5937   directory, but if you do that, you may have to update you code.
5939 testsuite:
5941 * Feature tests added for all new features.
5943 * Improved test coverage in queryparsertest.  Some tests in queryparsertest
5944   now use flint databases, so the test now ensures that the .flint
5945   subdirectory exists.
5947 * The test harness no longer creates <dbdir>/log for flint (flint doesn't
5948   create a log like quartz does).
5950 * apitest: "-bremote" must now be "-bremoteprog" (to better match
5951   "-bremotetcp"); "-bvoid" must now be "-bnone" (to better describe not
5952   using a database backend).
5954 * To complement "make check-flint", "make check-quartz", and "make
5955   check-remote", you can now run tests for the remotetcp backend with
5956   "make check-remotetcp", for the remoteprog backend with "make
5957   check-remoteprog", for the inmemory backend with "make check-inmemory", and
5958   tests not requiring a backend with "make check-none".
5960 * Several extra tests of the check_at_least parameter supplied to
5961   get_mset() were added.
5963 * Fix memory leak and fd leak in remotetcp handling, so apitest now passes
5964   under valgrind.
5966 * quartztest: no longer test QuartzPostList::get_collection_freq(), which
5967   has been removed.
5969 * Add regression test emptyquery2 for bug #176.
5971 * Add regression test matchall1 for bug with MatchAll queries.
5973 * Enhanced test coverage of match functor, to check that it returns all
5974   matching documents.
5976 matcher:
5978 * Fix bug when check_at_least was supplied - the matches after the
5979   requested MSet size were being returned to the user.  The parameter is
5980   also now handled in a more efficient way - no extra memory is required
5981   (previously, extra memory proportional to the value of check_at_least was
5982   required).
5984 * Fix bug which used incorrect statistics, and caused assertion failures,
5985   when performing a search using a MatchAll query.
5987 * Optimisation for single term queries: we don't need to look at the top
5988   document's termlist to determine that it matches all the query terms.
5990 flint backend:
5992 * The value and position tables are now only created if there is anything to
5993   add to them.  So if you never use document values, there's no value.DB,
5994   value.baseA, or value.baseB.  This means the table doesn't need to be opened
5995   for searching (saving a file handle and a number of syscalls) and when
5996   flushing changes, we don't need to update baseA/baseB just to keep the
5997   revisions in step.  The flint database version has been increased, but the
5998   new code will happily open and read/update flint databases from Xapian 1.0.0
5999   and 1.0.1.  Xapian 1.0.2 flint databases can't be read by Xapian 1.0.1 or
6000   earlier though.
6002 * Two new optional tables are now supported: "spelling", which is used to
6003   store information for spelling correction, and "synonym", which is used
6004   to store synonym information.
6006 * xapian-compact: Now compacts and merges spelling and synonym tables.
6007   Also has a new option "--no-renumber" to preserve document ids from
6008   source databases.
6010 * xapian-check: Now checks the spelling and synonym tables (only the Btree
6011   structure is currently checked, not the information inside).
6013 * Database::term_exists(), Database::get_termfreq(), and
6014   Database::get_collection_freq() are now slightly more efficient for flint
6015   databases.
6017 * New utility 'xapian-inspect' which allowing interactive inspection of key/tag
6018   pairs in a flint Btree.  Useful for development and debugging, and an
6019   approximate equivalent to quartzdump.
6021 * WritableDatabase::delete_document() no longer cancels pending changes if the
6022   document doesn't exist.
6024 * Fix handling of exceptions during commit - previously, this could result
6025   in tables getting out-of-sync, perhaps even resulting in a corrupt database.
6027 * Optimise iteration of all documents in the case where all the document
6028   IDs up to lastdocid are used; in this case, we no longer need to access disk
6029   to get the document IDs.
6031 quartz backend:
6033 * WritableDatabase::delete_document() no longer cancels pending changes if the
6034   document doesn't exist.
6036 * We no longer create a postlist just to find the termfreq or collection
6037   frequency.
6039 remote backend:
6041 * Calling WritableDatabase::delete_document() on a non-existent document now
6042   correctly propagates DocNotFoundError.
6044 * The minor remote protocol version has increased (to fix the previous issue).
6045   You should be able to cleanly upgrade a live system by upgrading servers
6046   first and then clients.
6048 * progclient: Reopen stderr on the child process to /dev/null rather than
6049   closing it.  This fixes apitest with the remoteprog backend to pass when run
6050   under valgrind (it failed in this case in 1.0.0 and 1.0.1).  It probably
6051   has no effect otherwise.
6053 * check_at_least is now passed to the remote server to reduce the work
6054   needed to produce the match, and the serialised size of the returned MSet.
6056 inmemory backend:
6058 * Bug fix: using replace_document() to add a document with a specific
6059   document id above the highest currently used would create empty documents
6060   for all document ids in between.
6062 build system:
6064 * Work around an apparent bug in automake which causes the entries in .libs
6065   subdirectories generated for targets of bin_PROGRAMS not to be removed on
6066   make clean.  This was causing make distcheck to fail.
6068 * Snapshots and releases are now bootstrapped with automake 1.10, and
6069   libtool 1.5.24.
6071 * HTML documentation generated from RST files is now installed.
6073 documentation:
6075 * The API documentation is now generated with Doxygen 1.5.2, which fixes the
6076   missing docs for Xapian::Query.
6078 * Ship and install internals.html.
6080 * Generating the doxygen-collated documentation of the library internals (with
6081   "make doxygen_source_docs") now only tries to generate an HTML version.  The
6082   PDF version kept exceeding TeX limits, and HTML is a more useful format for
6083   this anyway.
6085 * API docs for Xapian::QueryParser now make it clear that the default value for
6086   the stemming strategy is STEM_NONE.
6088 * API docs now describe the NumberValueRangeProcessor more clearly.
6090 * Several typo fixes and assorted wording improvements.
6092 * queryparser.html: Mention "AND NOT" as an alternative way to write "NOT",
6093   and document synonym expansion.
6095 * admin_notes.html: Updated for changes in this release, and corrected a
6096   few minor errors.
6098 * spelling.rst: New file, documenting the spelling correction feature.
6100 * synonyms.rst: New file, documenting the synonyms expansion feature.
6102 * valueranges.rst: The NumberValueRangeProcessor is now documented.
6104 * HACKING: Mention new libtool, and more details about preferring
6105   pre-increment.  Also add a note about 2 space indentation of protection
6106   level declarations in classes.
6108 * INSTALL: note that zlib must be installed before you can build.
6110 examples:
6112 * copydatabase: Now copies synonym and spelling data.  Also, fix a cosmetic
6113   bug with progress output when a specified database directory has a trailing
6114   slash.
6116 portability:
6118 * Fix to build on with OpenBSD's zlib (xapian-core 1.0.0 and 1.0.1 didn't).
6120 * Fixed to build with older zlib such as zlib 1.1.5 which Solaris apparently
6121   uses (xapian-core 1.0.0 and 1.0.1 didn't).  However, we recommend using zlib
6122   1.2.x as decompressing is apparently about 20% faster.
6124 * msvc/version.h.in: Generated version.h for MSVC build no longer has the
6125   remote backend marked as disabled.
6127 * Fix warnings from Intel's C++ compiler.
6129 * Fixes for compilation with gcc-2.95 and GCC 4.3 snapshots.
6131 packaging:
6133 * RPMs:
6135   + Rename xapian.spec to xapian-core.spec to match tarball name.
6137   + Append the user name to BuildRoot.
6139 debug code:
6141 * Better debug logging from the queryparser internals.
6143 Xapian-core 1.0.1 (2007-06-11):
6145 API:
6147 * Xapian::Error:
6149   + Make Error::error_string member std::string rather than char * to avoid
6150     problems with double free() with copied Error objects.  Unfortunately
6151     this mean an incompatible ABI change which we had hoped to avoid until
6152     1.1.0, but in this case there didn't seem to be a sane way to fix the
6153     problem without an ABI change.
6155   + Error::get_description() now converts my_errno to error_string if it hasn't
6156     been already rather than not including any error description in this case.
6158   + Add new method "get_description()" to get a string describing the error
6159     object.  This is used in various examples and scripts, improving their
6160     error reporting.
6162 * Xapian::Database: Add new form of allterms_begin() and allterms_end()
6163   which allow iterating of all terms with a particular prefix.  This
6164   is easier to use than checking the end condition yourself, and is
6165   more efficiently implemented for the remote backend (fixes bug#153).
6167 * Xapian::Enquire: Passing an uninitialised Database object to Enquire will
6168   now cause InvalidArgumentError to be thrown, rather than causing a segfault
6169   when you call Enquire::get_mset().  If you really want an empty database,
6170   you can use Xapian::InMemory::open() to create one.
6172 * Xapian::QueryParser: Multiple boolean prefixed terms with the same term
6173   prefix are now combined with OR before such groups are combined with AND
6174   (bug#157).  Multiple value ranges on the same value are handled similarly.
6176 * Xapian::Query OP_VALUE_RANGE: Avoid calling db->get_lastdocid() repeatedly
6177   as we know the answer won't change - this reduces the run time of a
6178   particular test case by 25%.
6180 testsuite:
6182 * Add test for serialisation of error strings.
6184 * Improved output in various situations:
6186   + Quote strings in TEST_STRINGS_EQUAL().
6188   + queryparsertest: Use TEST_STRINGS_EQUAL when comparing query descriptions
6189     against their expected output, since this makes it much easier to see the
6190     differences.
6192   + Report whole message for exceptions, rather than a truncated version, in
6193     verbose mode.
6195   + Make use of Xapian::Error::get_description(), giving better error
6196     reports.
6198 * queryparsertest: New test of custom ValueRangeProcessor subclass
6199   (qp_value_customrange1).
6201 * apitest: flintdatabaseformaterror1 and flintdatabaseformaterror2 now use a
6202   genuine Xapian 0.9.9 flint database for their tests, and more cases are
6203   tested.  The two tests have also been split into 3 now.
6205 * Fix test harness not to invoke undefined behaviour in cases where a paragraph
6206   of test data contains two or fewer characters.
6208 * Implement a better fix for the MSVC ifstream issue which was fixed in 1.0.0.
6209   This fixes an unintentional side-effect of the previous fix which meant that
6210   apitest's consistency1 wasn't working as intended (it now has a regression
6211   test to make sure it is testing what we intend).
6213 flint backend:
6215 * xapian-compact: Don't uncompress and recompress tags when compacting a
6216   database.  This speeds up xapian-compact rather a lot (by more than 50% in a
6217   quick test).
6219 * If the docid counter wraps, Flint now throws DatabaseError (fixes bug#152).
6221 * Remove the special case error message for pre-0.6 databases since they'll
6222   be quartz format (the check is only in flint because this code was taken from
6223   quartz).
6225 quartz backend:
6227 * If the docid counter wraps, Quartz now throws DatabaseError (fixes bug#152).
6229 remote backend:
6231 * The remote protocol now has a minor version number.  If the major
6232   version number is the same, a client can work with any server with
6233   the same or higher minor version number, which makes upgrading live
6234   systems easier for most remote protocol changes - just upgrade the servers
6235   first.
6237 * When a read-only remote database is closed, the client no longer sends a
6238   (totally bogus) MSG_FLUSH to the server, and the reply is also eliminated.
6239   This reduces the time taken to close a remote database a little (fixes
6240   bug#149).
6242 inmemory backend:
6244 * skip_to() on an allterms TermIterator from an InMemory Database can no longer
6245   move backwards.
6247 * An allterms TermIterator now initialises lazily, which can save some work if
6248   the first operation is a skip_to() (as it often will be).
6250 build system:
6252 * Fix VPATH compilation in maintainer mode with gcc-2.95.
6254 * Fix multiple target rule for generating the queryparser source files in
6255   parallel builds.
6257 * Distribute missing stub Makefiles for "bin", "examples", and
6258   "include/xapian".
6260 documentation:
6262 * Document the design flaw with NumberValueRangeProcessor and why it shouldn't
6263   be used.
6265 * ValueRangeProcessor and subclasses now have API documentation and an overview
6266   document.
6268 * Expand documentation of value range Query constructor.
6270 * Improved API documentation for the TermGenerator class.
6272 * docs/deprecation.rst:
6274   + Fix copy and paste error - set_sort_forward() should be changed to
6275     set_docid_order().
6277   + Improve entry for QueryParserError.
6279 * PLATFORMS: Updated from tinderbox.
6281 examples:
6283 * copydatabase: Rewritten to use the ability to iterate over all the documents
6284   in a database.  Should be much more efficient for databases with sparsely
6285   distributed document IDs.
6287 * simpleindex: Rewritten to use the TermGenerator class, which eliminates a
6288   lot of non-Xapian related code and is more typical of what a user is likely
6289   to want to do.
6291 * simplesearch,simpleexpand: Rewritten to use the QueryParser class, which
6292   is more typical of what a user is likely to want to do.
6294 portability:
6296 * xapian-config: Add special case check for host_os matching linux* or
6297   k*bsd-gnu since vanilla libtool doesn't correctly probe link_all_deplibs=no
6298   for them.
6300 packaging:
6302 * RPMs: Add "# norootforbuild" comment which SuSE's build scripts look for.
6303   Rename "Source0:" to "Source:" as there's only one tarball now.  Add gcc-c++
6304   and zlib-devel to "Build-Requires:".
6306 * The required automake version has been lowered to 1.8.3, so RPMs can now be
6307   built on RHEL 4 and SLES 9.
6309 Xapian-core 1.0.0 (2007-05-17):
6311 API:
6313 * Xapian::Database:
6315   + The Database(const std::string &) constructor has been marked as "explicit".
6316     Hopefully this won't affect real code, but it's possible.  Instead of
6317     passing a std::string where a Xapian::Database is expected, you'll now
6318     have to explicitly write `Xapian::Database(path)' instead of `path'.
6320   + Fixed problem when calling skip_to() on an allterms iterator over multiple
6321     databases which could cause a debug assertion in debug builds, and possible
6322     misbehaviour in normal builds.
6324 * Xapian::Error:
6326   + The constructors of Error subclasses which take a `const std::string &'
6327     parameter are now explicit.  This is very unlikely to affect any real code
6328     but if it does, just write `Xapian::Error(msg)' instead of `msg'.
6330   + Xapian::Error::get_type() now returns const char* rather than std::string.
6331     Generally existing code will just work (only one change was required in
6332     Xapian itself) - the simplest change is to write `std::string(e.get_type())'
6333     instead of `e.get_type()'.
6335   + Previously, the errno value was lost when an error was propagated from
6336     a remote server to the client, because errno values aren't portable
6337     between platforms.  To fix this, Error::get_errno() is now deprecated and
6338     you should use Error::get_error_string() instead, which returns a string
6339     expanded from the errno value (or other system error code).
6341 * Xapian::QueryParser:
6343   + Now assumes input text is encoded as UTF-8.
6345   + We've made several changes to term generation strategy.  Most notably:
6346     Unicode support has been added; '_' now counts as a word character; numbers
6347     and version numbers are now parsed as a single term; single apostrophes are
6348     now included in a term; we now store unstemmed forms of all terms; and we
6349     no longer try to "normalise" accents.
6351   + parse_query() now throws the new Xapian::Error subclass QueryParserError
6352     instead of throwing const char * (bug#101).
6354   + Pure NOT queries are now supported (for example, `NOT apples' will match
6355     all documents not indexed by the stemmed form of `apples').  You need
6356     to enable this feature by passing QueryParser::FLAG_PURE_NOT in flags
6357     to QueryParser::parse_query().
6359   + We now clear the stoplist when we parse a new query.
6361   + Queries such as `+foo* bar', where no terms in the database match the
6362     wildcard `foo*', now match no documents, even if `bar' exists.  Handling
6363     of `-foo*' has also been fixed.
6365   + Now supports wildcarding the last term of a query to provide better support
6366     for incremental searching.  Enabled by QueryParser::FLAG_PARTIAL.
6368   + The default prefix can now be specified to parse_query() to allow parsing
6369     of text entry boxes for particular fields.
6371   + QueryParser::set_stemming_options() has been deprecated since 0.9.0 and
6372     has now been removed.
6374 * Xapian::Stem:
6376   + Now assumes input text is encoded as UTF-8.
6378   + We've updated to the latest version of the Snowball stemmers.  This means
6379     that a small number of words produce different (and generally better)
6380     stems and that some new stemmers are supported: german2 (like german but
6381     normalises umlauts), hungarian, kraaij_pohlmann (a different Dutch
6382     stemmer), romanian, and turkish.
6384 * Xapian::TermGenerator:
6386   + New class which generates terms from a piece of text.
6388 * Xapian::Enquire:
6390   + The Enquire(const Database &) constructor has been marked as "explicit".
6391     This probably won't affect real code - certainly no Xapian API methods
6392     or functions take an Enquire object as a parameter - but calls to user
6393     methods or functions taking an Enquire object could be affected.  In
6394     such cases, you'll now have to explicitly write `Xapian::Enquire(db)'
6395     instead of `db'.
6397   + Enquire::get_eset() now produces better results when used with multiple
6398     databases - without USE_EXACT_TERMFREQ they should be much more similar to
6399     results from an equivalent single database; with USE_EXACT_TERMFREQ they
6400     should be identical.
6402   + Track the minimum weight required to be considered for the MSet separately
6403     from the minimum item which could be considered.  Trying to combine the two
6404     caused several subtle bugs (bug#86).
6406   + Enquire::get_query() is now `const'.  Should have no effect on user code.
6408   + Enquire::get_mset() now handles the common case of an "exact" phrase search
6409     (where the window size is equal to the number of terms) specially.
6411   + Enquire::include_query_terms and Enquire::use_exact_termfreq are now
6412     deprecated in favour of capitalised versions Enquire::INCLUDE_QUERY_TERMS
6413     and Enquire::USE_EXACT_TERMFREQ (for consistency with our other manifest
6414     constants, and general C/C++ conventions).
6416 * Xapian::RSet:
6418   + RSet::contains(MSetIterator) is now `const'.  Should have no effect on user
6419     code.
6421 * Xapian::SimpleStopper::add() now takes `const std::string &' not `const
6422   std::string'.  Should have no effect on user code.
6424 * Xapian::Query:
6426   + We now only perform internal validation on a Query object when it's either
6427     constructed or changed, to avoid O(n^2) behaviour in some cases.
6429   + Xapian::Query::MatchAll (an alias for Query("")) matches all terms in the
6430     document (useful for "pure NOT" queries) and Xapian::Query:MatchNothing
6431     is now a more memorable alias for Query().
6433 * Instead of explicitly checking that a term exists before opening its
6434   postlist, we now do both in one operation, which is more efficient.
6436 * MatchDecider::operator() now returns `bool' not `int'.
6438 * ExpandDecider::operator() now returns `bool' not `int'.
6440 * Xapian::TermIterator::get_termfreq() now throws InvalidOperationError
6441   if called on a TermIterator from a freshly created Document (since
6442   there's no meaningful term frequency as there's no Database for
6443   context).
6445 * <xapian/output.h> is no longer available as an externally visible header.
6446   It's not been included by <xapian.h> since 0.7.0.  Instead of using
6447   `cout << obj;' use `cout << obj.get_description();'.
6449 * New constant Xapian::BAD_VALUENO which is -1 cast to Xapian::valueno.
6451 * New Xapian::ValueRangeProcessor hierarchy: DateValueRangeProcessor,
6452   NumberValueRangeProcessor, and StringValueRangeProcessor.  In
6453   conjunction with the new QueryParser::add_valuerangeprocessor()
6454   method and the new Query::OP_VALUE_RANGE op these allow you to
6455   implement ranges in the query parser, such as `$50..100',
6456   `10..20kg', `01/02/2007..03/04/2007'.
6458 testsuite:
6460 * Many new and improved testcases in various areas.
6462 * If a test throws an unknown exception, say so in the test failure message.
6463   If it throws std::string, report the first 40 characters (or first line if
6464   less than 40 characters) of the string even in non-verbose mode.
6466 * Use of valgrind improved:
6468   + The test harness now only hooks into valgrind if environment variable
6469     XAPIAN_TESTSUITE_VALGRIND is set, which makes it easy to run test programs
6470     under valgrind in the normal way.  The runtest script sets this
6471     automatically.
6473   + runtest now passes "--leak-resolution=high" to valgrind to prevent
6474     unrelated leak reports related to STL classes from being combined.
6476   + configure tests for valgrind improved and streamlined.
6478   + New runsrv script to run xapian-tcpsrv and xapian-progsrv.  We need to
6479     run these under valgrind to avoid issues with excess numerical precision
6480     in valgrind's FP handling, but we can use "--tool=none" which is a lot
6481     faster than running them under valgrind's default memcheck tool.
6483 * The test harness now starts xapian-tcpsrv in a more reliable way - it will
6484   try sequentially higher port numbers, rather than failing because a
6485   xapian-tcpsrv (or something else) is already using the default port.
6486   It also no longer leaks file descriptors (which was causing later tests
6487   to fail on some platforms), and if xapian-tcpsrv fails to start, the error
6488   message is now reported.
6490 * remotetest has been removed and its testcases have either been added to
6491   apitest or just removed if redundant with tests already in apitest.
6493 * termgentest is a new test program which tests the Xapian::TermGenerator
6494   class.
6496 * TEST_EQUAL_DOUBLE() now uses a slightly less stringent threshold -
6497   DBL_EPSILON is too strict for calculations which include multiple
6498   steps.  Also, we now use it instead of doubles_are_equal_enough() and
6499   weights_are_equal_enough() which try to perform the same job.
6501 * New macro TEST_STRINGS_EQUAL() which displays the strings on separate lines
6502   so the differences can be clearly seen.
6504 * Test programs are now linked with '-no-install' which means that libtool
6505   doesn't need to generate shell script wrappers for them on most platforms.
6507 * runtest: Now turns on MALLOC_CHECK_ and MALLOC_PERTURB_ for glibc if
6508   valgrind isn't being used.
6510 * Better support for Microsoft Windows:
6512   + test_emptyterm2 no longer tries to delete a database from disk while a
6513     WritableDatabase object still exists for it, since this isn't supported
6514     under Microsoft Windows.
6516   + Fallback handling when srcdir isn't specified how takes into account .exe
6517     extensions and different path separators.
6519 flint backend:
6521 * Flint is now the default backend.
6523 * xapian-check: New program which performs consistency checks on a flint
6524   database or table.
6526 * xapian-compact: Now prunes unused docids off the start of each source
6527   database's range of docids.
6529 * Positional information is now encoded using a highly optimised fls()
6530   implementation, which is much faster than the FP code 0.9.x used.
6531   Unfortunately the old encoding could occasionally add extra bits
6532   on some architectures, which was harmless except the databases
6533   wouldn't be portable.  Because of this, the flint format has had to
6534   be changed incompatibly.
6536 * The lock file is now called "flintlock" rather than "flicklock" (which
6537   was a typo!)
6539 * Flint now releases its lock correctly if there's an error in
6540   WritableDatabase's constructor.  Previously the lock would remain until
6541   the process exited.
6543 * Flint now throws new Xapian::Error subclass DatabaseVersionError instead of
6544   DatabaseOpeningError when it fails to open a database because it has an
6545   unsupported version.  DatabaseVersionError is a subclass of
6546   DatabaseOpeningError so existing code should continue to work, but it's
6547   now much easier to determine if the problem is that a database needs
6548   rebuilding.
6550 * If you try to open a flint database with an older or newer version than
6551   flint understands, the exception message now gives the version understood,
6552   rather than "I only understand FLINT_VERSION" (literally).
6554 * If we fail to obtain the lock, report why in the exception message.
6556 * Flint now compresses tags in the record and termlist tables using zlib.
6558 * More robust code to handle the flint locking child process, in case of
6559   unexpected errors.
6561 * If a document was replaced more than once between flushes, the document
6562   length wouldn't be updated after the first change.
6564 quartz backend:
6566 * Quartz is still supported, but use in new projects is deprecated (use Flint
6567   instead).  Quartz will be removed eventually.
6569 * quartzcheck: Test if this is a quartz database by looking at "meta" not
6570   "record_DB".  If "record_DB" is >= 2GB and we don't have a LFS aware stat
6571   function then stat can fail even though the file is there.  Also open the
6572   database explicitly as a Quartz database for extra robustness.
6574 * If a document was replaced more than once between flushes, the document
6575   length wouldn't be updated after the first change.
6577 remote backend:
6579 * The remote backend is now supported under Microsoft Windows.
6581 * Open a fresh copy of the database(s) on each connection to a xapian-tcpsrv
6582   rather than relying on being able to share a database across fork() or
6583   between threads (which we don't promise will work).
6585 * xapian-tcpsrv: New "--interface" option allows the hostname or address of the
6586   interface to listen on to be specified (the default is the previous behaviour
6587   of listening on all interfaces).
6589 * If name lookup fails, report the h_errno code from gethostbyname() rather
6590   than whatever value errno happens to currently have!
6592 * Fix bugs in query unserialisation.
6594 * The remote backend now supports all operations (get_lastdocid(), and
6595   postlist_begin() have now been implemented).
6597 * Currently a read-only server can be opened as a WritableDatabase (which is
6598   a minor bug we plan to fix).  In this case, operations which write will fail
6599   and the exception is now InvalidOperationError not NetworkError.
6601 * If a remote server catches NetworkTimeoutError then it will now only
6602   propagate it if we can send it right away (since the connection is
6603   probably unhappy).  After that (and for any other NetworkError) we now
6604   just rethrow it locally to close the connection and let it be logged if
6605   required.
6607 * The timeout parameter to RemoteDatabase wasn't being used, instead the
6608   client would wait indefinitely for the server to respond.
6610 * A timeout of zero to the remote backend now means "never timeout".  This
6611   is now the default idle timeout for WritableDatabase (the connection
6612   timeout default is now 10 seconds, rather than defaulting to the idle
6613   timeout).
6615 * Fix handling of the document length in remote termlists.
6617 * The remote backend now checks when decoding serialised string that the
6618   length isn't more than the amount of data available (bug#117).
6620 * The remote backend now handles the unique term variants of delete_document
6621   and replace_document on the server side.
6623 * The RSet serialisation now encodes deltas between docids (rather than the
6624   docids themselves) which greatly reduces the size of the encoding of a
6625   sparse RSet for a large database.
6627 * We now encode deltas between term positions when sending data after calling
6628   positionlist_begin() on a remote database.
6630 * When using a MatchDecider with remote database(s), don't rerun the
6631   MatchDecider on documents which a remote server has already checked.
6633 * Apply the "decreasing weights with remote database" optimisation which we use
6634   in the sort_by_relevance case in the sort_by_relevance_then_value case too.
6636 * We now throw NetworkError rather than InternalError for invalid data received
6637   over the remote protocol.
6639 * We now close stderr of the spawned backend program when using the "prog" form
6640   of the remote backend.  Previously stderr output would go to the client
6641   application's stderr.
6643 muscat36 backend:
6645 * Support for the old Muscat 3.6 backends has been completely removed.  It's
6646   still possible to convert Muscat 3.6 databases to Xapian databases by
6647   building 0.9.10 and using copydatabase to create a quartz database, which can
6648   then be read by 1.0.0 (and converted to a flint database using copydatabase
6649   again).
6651 build system:
6653 * We've added GCC visibility annotations to the library, which when using GCC
6654   version 4.0 or later reduce the size and load time of the library and
6655   increase the runtime speed a little.  Under x86_64, the stripped library is
6656   6.4% smaller (1.5% smaller with debug information).
6658 * configure: If using GCC, use -Bsymbolic-functions if it is supported
6659   (it requires a very recent version of ld currently).  This option reduces the
6660   size and load time of the shared library by resolving references within the
6661   library when it's created.
6663 * We automatically define _FORTIFY_SOURCE in config.h if GCC is in use
6664   and it's not already set (you can override this as documented in INSTALL).
6665   This adds some checking (mostly at compile time) that important return
6666   values aren't ignored and that array bounds aren't exceeded.
6668 * `./configure --enable-quiet' already allows you to specify at configure time
6669   to pass `--quiet' to libtool.  Now you can override this at make-time by
6670   using `make QUIET=' (to turn off `--quiet') or `make QUIET=y' (to turn on
6671   `--quiet').
6673 * In non-maintainer mode, we don't need the tools required to rebuild some of
6674   the documentation, so speed up configure by not even probing for them in
6675   this common case.
6677 * The makefiles now use non-recursive make in all directories except "docs" and
6678   "tests".  For users, this means that the build is faster and requires less
6679   disk space (bug#97).
6681 * configure: Add proper detection for SGI's C++ (check stderr output of
6682   "CC -v") and automatically pass -ptused in CXXFLAGS for xapian-core and any
6683   applications using xapian-config --cxxflags since it seems to be required to
6684   avoid template linking errors.
6686 * XO_LIB_XAPIAN now checks for the case where XAPIAN_CONFIG wasn't specified
6687   and xapian-config wasn't found, but the library appears to be installed -
6688   this almost certainly means that the user has installed xapian-core from
6689   a package, but hasn't installed the -dev or -devel package, so include
6690   that advice in the error message.
6692 * `./configure --with-stlport-compiler' now requires a compiler name as an
6693   argument.
6695 * configure: Disable probes for f77, gcj, and rc completely by preventing
6696   the probe code from even appearing in configure - this reduces the size of
6697   configure by 209KB (~25%) and should speed it up significantly.
6699 * configure: Suppress more unhelpful warnings and "remarks" for HP's aCC, and
6700   turn on "+wlint", which seems useful.
6702 * A number of cases of unnecessary header inclusions have been addressed,
6703   which should speed up compilation (fewer headers to parse when compiling
6704   many source files).  This also reduces dependencies within the source code,
6705   and thus the number of files which need to be rebuilt when a header is
6706   changed.
6708 * configure: Cache the results of some of our custom tests.
6710 documentation:
6712 * The documentation has all been updated for changes in Xapian 1.0.0.
6714 * Many of the documentation comments in the API headers (which are collated
6715   using doxygen to generated the API reference) have been improved, and some
6716   missing ones added.  Also, internal classes, members, and methods are now all
6717   marked as such so that none should appear in the generated documentation.  In
6718   particular, the class inheritance graphs should be a lot clearer.  A few other
6719   problems have also been addressed.
6721 * docs/internals.html: New separate index page for the "internal"
6722   documentation.
6724 * docs/deprecated.html: New document describing deprecation policy.  This
6725   includes lists of features which have been removed, or which are deprecated
6726   and scheduled for removal, along with suggested replacements.
6728 * docs/admin_notes.html: New document introducing Xapian for sysadmins.
6730 * docs/termgenerator.html: New document describing the new term generation
6731   strategy implemented by the Term::Generator class.
6733 * docs/bm25.html,docs/intro_ir.html: These have been overhauled to make them
6734   fit better with the rest of the documentation, and with Xapian itself.
6736 * docs/overview.html: Fixed links to error classes in generated API
6737   documentation.
6739 * HACKING,INSTALL: Many updates and improvements.
6741 * xapian-config: Improve --version output so that help2man produces a better
6742   man page.
6744 * PLATFORMS: Remove reports for 0.7.* and demote reports for 0.8.* to "older
6745   reports" status.  All SF compilefarm machines are now "no longer available",
6746   so update the symbols and key to reflect this.  Update with recent success
6747   reports from the tinderbox and other sources.
6749 * AUTHORS: Thanks several bug reporters I missed before, as well as recent
6750   contributors.
6752 * docs/code_structure.html now looks nicer and includes links to
6753   svn.xapian.org.
6755 * docs/remote_protocol.html: Fixed several typos and other errors, and document
6756   all the new messages.
6758 * We no longer include docs/apidoc/latex/* in the xapian-core tarballs since
6759   it's just useless bloat.
6761 examples:
6763 * delve:
6765   + Report the exception error string if open a database fails.
6767   + Rename "-k" to "-V" since "keys" were renamed to "values" long ago.  Keep
6768     "-k" as an alias for now, but don't advertise it.  Add handling so "-V3"
6769     shows value #3 for every document in the database.
6771   + No longer stems terms by default.  Add "-s/--stemmer" option to allow a
6772     stemmer to be specified.
6774 * quest: Add "--stemmer" option to allow stemming language to be set, or
6775   stemming to be disabled.
6777 portability:
6779 * Fix compilation with GCC 4.3 snapshot.
6781 * Always use pid_t not int for holding a process id, and use AC_TYPE_PID_T to
6782   `#define pid_t int' if <sys/types.h> doesn't provide pid_t.
6784 * Pass the 4th parameter of setsockopt() as char* which works whether the
6785   function actually takes char* or void* (since C++ allows implicit conversion
6786   from char* to void*).
6788 * Most warnings in the MSVC build have been fixed.
6790 * Refactored most portability workarounds into safeXXXX.h headers.
6792 * Building for mingw in a cygwin environment should work better now.
6794 packaging:
6796 * RPM spec file:
6798   + Updated for the changes in this release.
6800   + ChangeLog.examples is now packaged.
6802 debug code:
6804 * Rename --enable-debug* configure options - conflating the options to "turn on
6805   assertions" and "turn on logging" is confusing. `--enable-debug[=partial]'
6806   becomes `--enable-assertions'; `--enable-debug-verbose' becomes
6807   `--enable-log' and `--enable-debug=full' becomes `--enable-assertions
6808   --enable-log'.  For now the old options give an error telling you the new
6809   equivalent.
6811 * Debug logging from expand is now all of type EXPAND (some was of types
6812   MATCHER and WTCALC before).
6814 * Hook the debug tracing in the lemon generated parser into Xapian's debug
6815   logging framework.
6817 * New assertion types: AssertEqParanoid() and AssertNeParanoid().
6819 * Retry write() if it fails when writing a debug log entry to ensure to avoid
6820   the risk of a partial write.
6822 Xapian-core 0.9.10 (2007-03-04):
6824 API:
6826 * Fix WritableDatabase::replace_document() not to lose positional information
6827   for a document if it is replaced with itself with unmodified postings.
6829 * QueryParser: Add entries to the "unstem" map for prefixed boolean filters
6830   (e.g. type:html).
6832 * Fix inconsistent ordering of documents between pages with
6833   Enquire::set_sort_by_value_then_relevance (fixes bug#110).
6835 testsuite:
6837 * Workaround apparent bug in MSVC's ifstream class.
6839 flint and quartz backends:
6841 * Fix possible double-free after a transaction fails.
6843 * Fix code for recovering from failing to open a table for reading
6844   mid-modification.  If modifications are so frequent that opening for reading
6845   fails 100 times in a row, throw DatabaseModifiedError not
6846   DatabaseOpeningError.
6848 * Don't call std::string::append(ptr, 0) when ptr may be uninitialised
6849   or NULL (rather suspect, and reported to cause SEGV-like behaviour with
6850   MSVC).
6852 * Ensure both_bases is set to false if we don't have both bases when
6853   opening a table using an existing object.
6855 * Use MS Windows API calls to delete files and open files we might want to
6856   delete while they are still open (i.e. the flint and quartz btree base
6857   files).  This fixes a problem when a writer can't discard an old revision at
6858   the exact moment a reader is opening it (bug #108).
6860 remote backend:
6862 * Fix WritableDatabase::has_positions() to refetch the cached value if it
6863   might be out of date.
6865 * Fix incorrect serialisation of a query with non-default termpositions.
6867 inmemory backend:
6869 * If replace_document is used to set the docid of a newly added document which
6870   has previously existed, ensure we mark that document as valid.
6872 documentation:
6874 * Assorted improvements to API documentation.
6876 * docs/Makefile.am: The larger pool_size we set in 0.9.9 for building
6877   sourcedoc.pdf was a bit marginal, so increase it further.
6879 * docs/stemming.html,docs/install.html: Correct 2 references to "CVS" to say
6880   "SVN" instead.
6882 * HACKING: Update the release checklist.
6884 portability:
6886 * Fix flint and quartz to allow 2GB+ B-tree tables when compiling with MSVC.
6888 packaging:
6890 * RPMs: Remove "." from end of "Summary:".  Package the new man page for
6891   xapian-progsrv.
6893 Xapian-core 0.9.9 (2006-11-09):
6895 testsuite:
6897 * Use popen() to run xapian-tcpsrv and wait for "Listening..." before returning
6898   rather than just sleeping for 1 second and hoping that's enough.
6900 * If we can't start xapian-tcpsrv because the port is in use, try higher
6901   numbered ports.
6903 remote backend:
6905 * xapian-tcpsrv: If the port requested is in use, exit with code 69
6906   (EX_UNAVAILABLE) which is useful if you're trying to automate launching of
6907   xapian-tcpsrv instances.
6909 * xapian-tcpsrv: Output "Listening..." once the socket is open and read for
6910   connections (this allows the testsuite to wait until xapian-tcpsrv is ready
6911   before connecting to it).
6913 * xapian-progsrv: Now supports --help, --version, and has a man page.  Fixes
6914   Bug #98.
6916 * Turn on TCP_NODELAY for the TCP variant of the remote backend which
6917   dramatically improves the latency of operations on the database.
6919 build system:
6921 * internaltest: Disable serialiselength1 and serialisedoc1 when the remote
6922   backend is disabled to fix build error in this case.
6924 * Move libbtreecheck.la from testsuite/ to backends/quartz/.
6926 * Move the testsuite harness from testsuite/ to tests/harness/.
6928 documentation:
6930 * Ship our custom INSTALL file rather than the generic one from autoconf which
6931   we've accidentally been shipping instead since 0.9.5.
6933 * docs/Makefile.am: Building sourcedoc.pdf needs a larger pool_size now we're
6934   using pdflatex.
6936 * HACKING: Update debian packaging checklist.
6938 * PLATFORMS: Updated with results from tinderbox.
6940 portability:
6942 * Create "safefcntl.h" as a replacement for <fcntl.h> instead of using
6943   "utils.h" for this purpose, since "utils.h" pulls in many other things we
6944   often don't need.
6946 packaging:
6948 * RPMs: Prevent binaries getting an rpath for /usr/lib64 on FC6.
6950 Xapian-core 0.9.8 (2006-11-02):
6952 API:
6954 * QueryParser: Don't require a prefixed boolean term to start with an
6955   alphanumeric - allow the same set of characters as we do for the second
6956   and subsequent characters.
6958 flint backend:
6960 * Only force a flush on WritableDatabase::allterms_begin() if there are
6961   actually pending changes.
6963 quartz backend:
6965 * Only force a flush on WritableDatabase::allterms_begin() if there are
6966   actually pending changes.
6968 * quartzcheck: Avoid dying because of an unhandled exception if the Btree
6969   checking code finds an error in the low-level Btree structure.  Add a
6970   catch for any other unknown exceptions.
6972 build system:
6974 * When building with GCC, turn on warning flag -Wshadow even when not in
6975   maintainer mode (provided it is supported by the GCC version being used).
6977 * testsuite/backendmanager.cc: Fix compilation when valgrind is detected by
6978   configure.
6980 * If generating apidoc.pdf fails, display the logfile pdflatex generates since
6981   that is likely to show what failed.
6983 documentation:
6985 * Produce a PDF for apidoc rather than PostScript, since the PDF is smaller,
6986   plus at least as easy to print and easier to view for most users.  Use
6987   pdflatex to generate the PDF directly rather than going via a DVI file which
6988   apparently produces a better result and also avoids problems on some Linux
6989   distros where latex is a symlink to pdfelatex (bug#81, bug#95).
6991 * HACKING: Mention automake 1.10 is out but we've not tested it yet.
6993 * HACKING: Add entries to release checklist: make sure new API methods
6994   are wrapped by the bindings, and that bug submitters are thanked.
6996 * HACKING: Note that on Debian, tetex-extra is needed for
6997   fancyhdr.sty.
6999 * HACKING: Note that dch can be used to update debian/changelog.
7001 * docs/code_structure.html: Document backends/remote.
7003 * PLATFORMS: Update from tinderbox.
7005 portability:
7007 * configure: When checking if we need -lm, don't use a constant argument to
7008   log() as the compiler might simply evaluate the whole expression at compile
7009   time.
7011 * configure: Redhat's GCC 2.96 doesn't support -Wundef even though real GCC
7012   version before and after it do!
7014 * configure: Avoid use of double quotes in double-quoted backticks since
7015   it causes problems on some platforms.
7017 * backends/flint/flint_io.cc: Fix compilation on windows (needs to
7018   #include "safewindows.h" to get definition of SSIZE_T).
7020 * Fix our implementation of om_ostringstream to compile so that the build
7021   works once more on older compilers without <sstream> (regression probably
7022   introduced in 0.9.7).
7024 packaging:
7026 * xapian.spec: Package xapian-progsrv.
7028 Xapian-core 0.9.7 (2006-10-10):
7030 API:
7032 * QueryParser:
7034   + Allow a distance to be optionally specified for NEAR - e.g.
7035     "cats NEAR/3 dogs" (bug#92).
7037   + Implement "ADJ" operator - like "NEAR" except the terms must
7038     appear in matching documents in the same order as in the query.
7040   + Fix bug in how we handle prefixed quoted phrases and prefixed brackets.
7042   + Fix parsing of loved and hated prefixed phrases and bracketted expressions.
7044   + Fix handling of stopwords in boolean expressions.
7046   + Don't ignore a stopword if it's the only query term.
7048 * Document::add_value() failed to replace an existing value with the same
7049   number, contrary to what the documentation says (bug #82).
7051 * Enquire::set_sort_by_value(): Don't fetch the document data when fetching
7052   the value to sort on.  Simple benchmarking showed this to speed up sort by
7053   value by a factor of between 3 and 9!
7055 * Implement transactions for flint and quartz.  Also supported are "unflushed"
7056   transactions, which provided an efficient way to atomically group a number
7057   of database modifications.
7059 * The Xapian::Error and Xapian::ErrorHandler classes have been reimplemented.
7060   The new versions have better, clearer documentation comments and are cleaner
7061   internally.
7063 * Change how doubles are serialised by TradWeight, BM25Weight, and in the
7064   remote backend protocol.  The new encoding allows us to transfer any double
7065   value which can be represented by both machines precisely and compactly.
7067 testsuite:
7069 * Add targets "check-flint", "check-quartz", and "check-remote" in tests and at
7070   the top level which run the subset of tests which test the respective backend.
7072 * apitest: Run tests on flint if flint is enabled, rather than if quartz is
7073   enabled!
7075 * apitest: Speed up deldoc4 when run in verbose mode - some stringstream
7076   implementations are very inefficient when the string grows long.
7078 * Turn on GLIBCXX_FORCE_NEW when running tests under valgrind to stop the GNU
7079   C++ STL from using a pooling allocator.  This helps make velgrind's leak
7080   tracking more reliable.
7082 * Probe for required valgrind logging options at configure time rather than
7083   when running the test program.  This saves about 2 seconds per test program
7084   invocation.
7086 * Fix testsuite harness to show valgrind output when a test fails (when running
7087   under valgrind in verbose mode).  This had stopped working, probably due to
7088   changes in valgrind 3.
7090 * internaltest: Check that the destructor on a temporary object gets called
7091   at the correct time (Sun C++ deliberately gets this wrong by default, and it
7092   would be good to catch any other compilers which do the same).
7094 * apitest: When running tests on the remote backend and running under valgrind,
7095   run xapian-tcpsrv and xapian-progsrv under valgrind too to avoid issues
7096   with the precision of doubles (bug#94).
7098 flint backend:
7100 * Retry on EINTR from fcntl or waitpid when creating or releasing the flint
7101   lock file.
7103 * xapian-compact: Add --blocksize option to allow the blocksize to be set
7104   (default is 8K as before.)
7106 * WritableDatabase::replace_document(did, doc) was double-incrementing the
7107   "changes" counter when document did didn't exist so it would flush twice
7108   as often - fixed.
7110 * WritableDatabase::postlist_begin(): Remove forced flush when iterating the
7111   posting list of a term which has modified postings pending.
7113 quartz backend:
7115 * quartzcompact: Add --blocksize option to allow the blocksize to be set
7116   (default is 8K as before.)
7118 * WritableDatabase::replace_document(did, doc) was double-incrementing the
7119   "changes" counter when document did didn't exist so it would flush twice
7120   as often - fixed.
7122 remote backend:
7124 * Most of the remote backend has been rewritten.  It now supports most
7125   operations which a local database does (including writing!), the protocol
7126   used is more compact, and a number of layers of classes have been eliminated
7127   and the sequences of method calls simplified, so the code should be easier to
7128   understand and maintain despite doing more.  A number of bugs have been fixed
7129   in the process.
7131 * xapian-tcpsrv: Report errno if we catch a Xapian::Error which has it set.
7133 * xapian-tcpsrv: Fix memory leak in query unserialisation.
7135 build system:
7137 * Now using autoconf 2.60 for snapshots and releases.  Also now using a
7138   libtool patch which improves support for Sun C++'s -library=stlport4 option.
7140 * configure: Fix generation of version.h to work with Solaris sed.
7142 * automake adds suitable rules for rebuilding doxygen_api_conf and
7143   doxygen_source_conf, so remove our less accurate versions.  Also fix
7144   dependencies for regenerating the doxygen documentation, and make the
7145   documentation build work with parallel make.
7147 * Make use of the dist_ prefix to avoid having to list files in EXTRA_DIST as
7148   well as in *_DATA and man_MANS.
7150 * Removed a few unused #include-s.
7152 * include/xapian/error.h: Add hook to allow SWIG bindings to be built using
7153   GCC's visibility support.
7155 * configure: Turn on automake's -Wportability to help ensure our Makefile.am's
7156   are written in a portable way.
7158 * configure: Disable probing and short-cut tests for a FORTRAN compiler.  We
7159   don't use one, but current libtool versions always check for it regardless.
7161 * xapian-config: Prune -L/usr/lib from output of `xapian-config --libs'.
7163 documentation:
7165 * docs/scalability.html: quartzcompact and xapian-compact now allow you to set
7166   the blocksize, so there's no need to use copydatabase if you want to migrate
7167   a database to a larger blocksize.  Mention gmane.  Other minor tweaks.
7169 * Eliminate "XAPIAN_DEPRECATED" from generated documentation.
7171 * PLATFORMS: Added success report for Nexenta (alpha 5), MSVC, and sparc linux.
7172   Updated other results from tinderbox.
7174 * Add links to the wiki from README and the documentation index.
7176 * docs/overview.html: Add discussion of uses of terms vs values.
7178 * docs/overview.html: Rewrite the section on Xapian::Document to remove some
7179   very out-of-date information and make it clearer.
7181 * include/xapian/database.h: Note that automatically allocated document IDs
7182   don't reuse IDs from deleted documents.
7184 * include/xapian/enquire.h: Note that "set_sort_by_relevance" is the default
7185   setting.
7187 * docs/queryparser.html,include/xapian/queryparser.h: Add note that
7188   FLAG_WILDCARD requires you to call set_database.
7190 * HACKING: Add some advice regarding debugging using -D_GLIBCXX_DEBUG,
7191   valgrind, and gdb.
7193 * HACKING: Give URL to Alexandre Duret-Lutz's autotools tutorial, which is much
7194   more up-to-date than the "goat book".
7196 * HACKING: Update and expand the information about the debian packaging.
7198 * Add missing dir_contents files.
7200 portability:
7202 * xapian/version.h: Add a check that _GLIBCXX_DEBUG is set compatibly if we're
7203   compiling with GNU C++ 3.4 or newer.
7205 * Add configure check to see if "-lm" is needed to get maths functions since
7206   newer versions of Sun's C++ compiler seem to require this.
7208 * Automatically put Sun's C++ compiler into "ANSI C++ compliant library" mode
7209   (using -library=stlport4).  This allows us to remove most of the special
7210   case bits of code we've accumulated for just this compiler, which improves
7211   maintainability.
7213 * Sun's C++ compiler implements non-standards-conforming lifetimes for
7214   temporary objects by default.  This means database locks don't get released
7215   when they should, so we now always pass "-features=tmplife" for Sun C++
7216   which selects the behaviour specified by the C++ standard.
7218 Xapian-core 0.9.6 (2006-05-15):
7220 API:
7222 * Rename Xapian::xapian_version_string() and companions to
7223   Xapian::version_string(), etc.  Keep the old functions as aliases which are
7224   marked as deprecated.
7226 * QueryParser: Add rules to handle a boolean filter with a "+" in front (such
7227   as +site:xapian.org).
7229 testsuite:
7231 * queryparsertest: Add another prefix testcase to improve coverage.
7233 build system:
7235 * configure: Simpler check for VALGRIND being set to empty value.
7237 * include/Makefile.am: Add xapian/version.h.timestamp as a dependency on
7238   all-local so that xapian/version.h actually gets regenerated when required.
7240 * Eliminate XAPIAN_BUILD_BACKEND_* from config.h and just use
7241   XAPIAN_HAS_*_BACKEND from xapian/version.h instead.
7243 documentation:
7245 * remote_protocol.html: Document keep-alive messages.
7247 * xapian/enquire.h: Remove bogus documentation for a parameter which doesn't
7248   exist.
7250 * PLATFORMS: Added a summary.  Updated and pruned old entries for which we
7251   have a newer close match.
7253 * HACKING: Expand on details of what's required when changing Xapian (discuss
7254   documentation requirements, and more on why feature tests are vital).
7256 * HACKING: Update section on building debian packages.
7258 portability:
7260 * The tarball is generated with a patched version of libtool 1.5.22 which
7261   fixes libtool bugs on HP-UX and some BSD platforms.
7263 * configure: Fix problems with test for snprintf which affected cygwin, and
7264   possibly some other platforms.
7266 * configure: Tweak version.h generation to cope with CXXCPP putting carriage
7267   returns into its output as can happen on cygwin.
7269 * Fix renaming of "iamflint.tmp" for MS Windows where you can't rename an open
7270   file.
7272 * Fixed MSVC7 warnings.
7274 * Added workaround for newlib header bug.
7276 Xapian-core 0.9.5 (2006-04-08):
7278 API:
7280 * QueryParser:
7282   + Fix FLAG_BOOLEAN_ANY_CASE to really allow any case combination - previously
7283     it only allowed all uppercase or all lowercase.
7285   + Fix QueryParser's handling of terms with trailing "#", "+", or "-" when
7286     set_database has been called and the term doesn't exist in the database
7287     with the suffix.
7289 * Add mechanism to allow xapian-bindings to override deprecation warnings so
7290   we can continue to wrap deprecated methods without lots of warnings.
7292 * Move Enquire::get_matching_terms_end() and Document::termlist_end() inline in
7293   header.
7295 * Database::termlist_begin(): Eliminate the MultiTermList wrapper in the common
7296   case where we're only dealing with a single database.
7298 * Fix TermIterator::positionlist_begin() to work on TermIterator from
7299   Database::termlist_begin().  Make TermList::positionlist_begin() pure
7300   virtual and put dummy implementations in BranchTermList and other
7301   subclasses which can't (or don't) implement it.  This makes it hard to
7302   accidentally fail to implement it in a backend's TermList subclass.
7304 * TermIterator::positionlist_begin() with the remote backend now throws
7305   UnimplementedError instead of InvalidOperationError.
7307 * Implement Enquire::set_sort_by_relevance_then_value().
7309 testsuite:
7311 * Added missing feature test for QueryParser::FLAG_BOOLEAN_ANY_CASE.
7313 * remotetest: Check mset size in tcpmatch1.
7315 flint backend:
7317 * xapian-compact: Fixed segfault from passing an unknown option (e.g.
7318   "xapian-compact --foo").
7320 quartz backend:
7322 * quartzdump,quartzcompact: Fixed segfault from passing an unknown option
7323   (e.g.  "quartzdump --foo").
7325 remote backend:
7327 * xapian-tcpsrv: Don't perform a name lookup on the IP address which an
7328   incoming connection is from as that could easily slow down the search
7329   response - instead just print the IP address itself if output is verbose.
7331 * xapian-tcpsrv: Allow up to 5 connections in the listen queue instead of just
7332   one.
7334 build system:
7336 * Removed unused code from the matcher and the remote, quartz, and flint
7337   backends.
7339 documentation:
7341 * All installed binaries now support --help and --version and have a man page
7342   (which is generated using help2man).
7344 * docs/overview.html: Bring up to date.
7346 * docs/remote_protocol.html: Document messages for requesting and sending a
7347   termlist and a document.
7349 * PLATFORMS, AUTHORS: Updated.
7351 * INSTALL: Improve wording.
7353 * HACKING: Note that we now use a lightly patched version of libtool 1.5.22.
7355 * HACKING: aclocal is part of automake, not autoconf.
7357 portability:
7359 * Added some tweaks to help support compilation with MSVC.
7361 packaging:
7363 * RPMs: package the new man pages.
7365 debug code:
7367 * Add missing spaces in some debug output.
7369 Xapian-core 0.9.4 (2006-02-21):
7371 API:
7373 * Flag deprecated methods such that the compiler gives a warning, for compilers
7374   which support such a feature (most notably GCC >= 3.1).
7376 * Correct typo in name of definition of function xapian_revision().
7378 testsuite:
7380 * Updated uses of deprecated methods in the testsuite.
7382 build system:
7384 * xapian-config: Set exec_prefix and prefix at top of script so that
7385   xapian-config works after xapian-core is installed.
7387 documentation:
7389 * Add documentation comment for Enquire::set_sort_by_value_then_relevance().
7391 * README: Add pointer to HACKING.  Change "CVS access" to "SVN access".
7393 * PLATFORMS: Updated from tinderbox.
7395 * COPYING: Update second occurrence of old FSF address.
7397 Xapian-core 0.9.3 (2006-02-16):
7399 API:
7401 * Added 4 functions to report version information for the library version being
7402   used (which may not be the same as that compiled against if shared libraries
7403   are in use):  xapian_version_string(), xapian_major_version(),
7404   xapian_minor_version(), xapian_revision().
7406 * Xapian::QueryParser:
7408   + Fix handling of "+" terms in a query when the default query operator is
7409     AND.  Added regression test for this.
7411   + Added "AND NOT" as a synonym for "NOT".  Added feature tests for this.
7413 * Fix prototype for ESet::operator[] to take parameter of type termcount
7414   instead of doccount (doccount and termcount are both typedefs to the same
7415   type so this really just makes the prototype more consistent).
7417 * Xapian::Stem: Check for malloc and calloc failing to allocate memory and
7418   throw an exception.  Richard has fixed this upstream in snowball, so this is
7419   a temporary fix until we import a new version of snowball.
7421 * Xapian::Database: Trying to open a database for reading which doesn't exist
7422   now fails with DatabaseOpeningError instead of FeatureUnavailableError.
7423   Added regression test for this.
7425 * Add Stopper::get_description() and SimpleStopper::get_description().
7427 testsuite:
7429 * Fixed testsuite harness to work with valgrind on 64 bit platforms.
7431 * Merged the "running tests" section of docs/tests.html into the similar
7432   section in HACKING, and make docs/tests.html refer the reader to HACKING for
7433   more information.
7435 * Tidied and enhanced environmental variables which the test suite harness
7436   recongnises:
7438   + OM_TEST_BACKEND: Removed support since the "-b" switch to apitest allows
7439     you control which backend is used, making OM_TEST_BACKEND pretty much
7440     redundant.
7442   + XAPIAN_SIG_DFL: Renamed to XAPIAN_TESTSUITE_SIG_DFL.
7444   + XAPIAN_TESTSUITE_OUTPUT: New environmental variable to control use of
7445     ANSI colour escape sequences in test output (set to "plain" to disable
7446     them, unset, empty, or "auto" to check if stdout is a tty, or anything
7447     else to force colour).
7449 flint backend:
7451 * xapian-compact: Added "--multipass" option to merge postlists in pairs or
7452   triples until all are merged.  Generally this is faster than an N-way merge,
7453   but it does require more disk space for temporary files so it's not the
7454   default.
7456 quartz backend:
7458 * quartzcheck: If the database is too broken to open, emit a warning message
7459   and bump the error count.
7461 build system:
7463 * Now generate snapshots and releases with automake 1.9.6 (was 1.9.5) and
7464   libtool 1.5.22 (was 1.5.18).
7466 * configure: If not cross-compiling, try to actually run a test program built
7467   with the C++ compiler, not just link one.
7469 * configure: Fix to actually skip the check for valgrind if VALGRIND is set to
7470   an empty value.
7472 * configure: Add sanity check for MS Windows that "find" is Unix-like find, not
7473   MSDOS-like.
7475 * Fix conditional compilation of flint backend - it was being disabled when
7476   quartz was, not when flint was supposed to be.
7478 documentation:
7480 * INSTALL,README: Updated.
7482 * Give pointer to replacements for the deprecated Enquire sorting methods
7483   in the doxygen collated documentation.
7485 * PLATFORMS: Added success reports for ppc64 linux and Fedora Core 4.  Updated
7486   from the tinderbox.
7488 * HACKING: Note platforms valgrind now has solid support for; Improve
7489   phrasing in a few places.
7491 * Upgrade to using doxygen 1.4.6 for generating API documentation.
7493 * Change title of the "full source" documentation to "Internal Source
7494   Documentation" rather than "Full source documentation" to make it
7495   clearer it's only useful if you want to modify Xapian itself.
7497 * Fix documentation comments for the values of QueryParser::feature_flag so
7498   doxygen actually pulls out the documentation for them.  Add documentation for
7499   the parameters of QueryParser::parse_query().
7501 * queryparser.html: Document wildcards.
7503 portability:
7505 * Fix compilation with GCC 4.0.1 and later (need to forward declare class
7506   InMemoryDatabase) (bug #69).
7508 * Fix compilation under cygwin (broken in 0.9.2).
7510 * Don't pass NULL for the second parameter of execl() - the Linux man page
7511   says execl takes "one or more pointers to null-terminated strings".  Also
7512   cast the NULL to (void*) to avoid "missing sentinel" warning from GCC4.
7514 * Use snprintf instead of sprintf where available (we were attempting to
7515   do this in some places before, but the configure test was broken so
7516   sprintf was always being used).
7518 * Enable more warnings under aCC and fix minor issues highlighted.  Suppress
7519   "Entire translation unit was empty" warning which isn't useful to us.
7521 * Write top-bit set characters in the source using \xXX notation to avoid
7522   warnings from Intel's C++ compiler.
7524 * configure: TYPE_SOCKLEN_T fails hard, so only run it if we've successfully
7525   run other socket tests.
7527 * queryparser/accentnormalisingitor.h: #include <limits.h> for CHAR_BIT.
7529 * bin/xapian-compact.cc: Fix printf type mismatch on 64 bit platforms.
7531 * Replace pair<bool, string> with a simple class BoolAndString - the pair
7532   results in a 4328 byte symbol on HP-UX which gets truncated (to 4000 bytes).
7533   Most likely this is harmless, but it causes a warning.
7535 * configure: Disable flint backend by default if building for djgpp or msdos.
7537 * xapian-config: Previously when linking without libtool we've always thrown
7538   in dependency_libs, even though only some platforms need it (because it's
7539   generally pretty harmless).  However some Linux distros have an unhelpful
7540   policy of not packaging .la files, so libxapian.la isn't available to
7541   extract dependency_libs from.  Linux is a platform which doesn't require
7542   dependency_libs to be explicitly linked, so extend xapian-config to not
7543   pull in dependency_libs if libtool's link_all_deplibs_CXX=no.
7545 * xapian-config: If the current platform needs dependency_libs and
7546   libxapian.la's dependency_libs contains another .la file, transform it into a
7547   pair of -L and -l options, and recursively expand its dependency_libs (if
7548   any).
7550 * Don't pass functions with C++ linkage to places wanting pointers to functions
7551   with C linkage.  So far this has worked for us, but it causes warnings with
7552   some compilers, and may not be portable.
7554 * Compaq C++ 7.1 doesn't suffer from the problem which previously prevented
7555   it from building Xapian.  This release includes workarounds for some
7556   oddities with errno.h support in this compiler, but currently the build
7557   fails when trying to link a binary with the library.
7559 packaging:
7561 * RPM: Invoke %setup correctly in xapian.spec.
7563 debug code:
7565 * Add missing '#include <iostream>' when TIMING_PATCH is defined.
7567 Xapian-core 0.9.2 (2005-07-15):
7569 API:
7571 * QueryParser:
7573   + Added optional "flags" argument to parse_query method.
7575   + Add flag FLAG_BOOLEAN_ANY_CASE which tells the QueryParser that boolean
7576     operators such as "AND", "OR", and "NEAR" should be recognised even if
7577     they aren't fully capitalised (so "and", "And", "aNd", etc will work too).
7579   + Add flag FLAG_WILDCARD which tells the QueryParser to allow right
7580     truncation e.g. "xap*".
7582   + Fixed to handle "-site:microsoft.com" where site is a boolean prefix.
7583     Added testcases for this.
7585 testsuite:
7587 * The test harness was incorrectly creating a quartz database when a flint one
7588   was requested, which meant tests weren't being run against flint and so it
7589   had bugs rendering it pretty much unusable.
7591 * Added regression test longpositionlist1 (to check encoding/decoding a long
7592   position list, which flint had problems with).
7594 flint backend:
7596 * Bumped format version number.
7598 * Added new "xapian-compact" program which can compact and merge flint
7599   databases in a similar way to how quartzcompact does for quartz databases.
7601 * Fixed to auto-detect database type when opening an existing Flint database
7602   as a WritableDatabase.
7604 * The code to encode the position list size, first entry, and last entry
7605   didn't match the code to decode them!  Reworked both to match, using a
7606   slightly more compact encoding.
7608 * We were failing to append "DB" to the path when opening a table for reading.
7610 * Rewrite of FlintAllTermsList with several fewer member variables.  The
7611   rewrite fixes a bug too - the old version wasn't ignoring the metainfo
7612   entry which is now in the postlist table.
7614 * It seems we need to explicitly kill the child process used for locking.
7615   Otherwise when we have two databases locked just closing the connection
7616   doesn't cause the child to die.  I don't understand why it's needed, but this
7617   fix is at least clean.
7619 quartz backend:
7621 * quartzcompact: Fix mis-repacking of keys in positionlist table when merging
7622   several databases.
7624 * Disable assertion in allterms iteration which is incorrect in a corner case.
7625   This is only a problem if a termname contains zero bytes and you're using a
7626   debug build.  Add regression test test_specialterms2.
7628 remote backend:
7630 * Implement sorting on a value with the remote backend.
7632 build system:
7634 * Pass automake options to AM_INIT_AUTOMAKE rather than specifying them in
7635   Makefile.am.  This way, the version requirements for autoconf and automake
7636   are stated close together.
7638 * configure: -Wshadow causes false positives with GCC 3.0.4, so only enable it
7639   for 3.1 and up.
7641 * configure: Eliminate use of "ln -s" when generating include/xapian/version.h
7642   since it seems to cause problems on Solaris in some setups and isn't really
7643   necessary.
7645 * Add dependency mechanism so version.h gets regenerated when the template is
7646   changed.
7648 * configure: Check for spaces in build directory, source directory, or install
7649   prefix and die with a helpful message.
7651 * Add dependency to generate queryparser_token.h.
7653 * Eliminated TOP_SRCDIR and TOP_BUILDDIR - it's better to just use top_srcdir
7654   and top_builddir directly.
7656 * configure: Generate the list of source files to feed to doxygen by inspecting
7657   all the Makefile.am files prior to running autoreconf rather than by using
7658   "find" when the user runs ./configure.  This speeds up configure, avoids
7659   generating docs for random .cc and .h files which aren't part of xapian-core,
7660   and avoids problems with picking up FIND.EXE on MS Windows.
7662 documentation:
7664 * Expanded explanation of the "descending docid with boolean weighting" trick
7665   for fast date ordered searching in Enquire::set_docid_order() API docs.
7667 * docs/intro_ir.html: Citeseer has moved, so update link.
7669 * testsuite/testsuite.cc: Update URL for valgrind FAQ in comment.
7671 * COPYING: Update FSF address.
7673 * HACKING: Minor updates to release checklist.
7675 portability:
7677 * Assorted tweaks towards allowing compilation with MSVC.
7679 packaging:
7681 * xapian.spec.in: Package xapian-compact.
7683 Xapian-core 0.9.1 (2005-06-06):
7685 API:
7687 * Fix SEGV on get_terms_begin() on an empty Query object.  This was causing
7688   a SEGV in Omega with an empty query.
7690 * Put Query::get_terms_end() inline in header.
7692 flint backend:
7694 * Added the new "flint" backend, which starts out as a copy of the quartz
7695   backend plus some modifications and replacements.  When creating a database
7696   without a specified backend, quartz is still used unless the environmental
7697   variable XAPIAN_PREFER_FLINT is set to a non-empty value.
7699 * apitest now runs tests on flint as well as the other backends.
7701 * Removed undocumented (and hence the little used) quartz "log" feature.
7703 * Implement new fork+fcntl+exec based locking (for Unix) and CreateFile based
7704   locking (for Windows - currently untested).
7706 * Move the special key/tag pair holding the total document length and doc id
7707   high water mark from the record table to the postlist table.  This means that
7708   when appending documents, the insertion point will now always be at the end
7709   of the record table which is more efficient.  We need to jump around the
7710   postlist table to merge postings in anyway.
7712 * Changed metafile magic to be different from quartz, and make the metafile
7713   version a datestamp which we'll change each time the format changes.
7715 * Check the return value of close() when writing the metafile.
7717 * Flint position list table now stores entries using interpolative coding
7718   (which is significantly more compact).
7720 quartz backend:
7722 * quartzcheck: Fixed corner case where you couldn't check a single Btree table
7723   which was just the DB and baseA/baseB files in a directory (Xapian doesn't
7724   produce anything like this, but btreetest does while unit testing the
7725   Btree code).
7727 build system:
7729 * Releases are now created using libtool 1.5.18 and automake 1.9.5.
7731 * configure: Pass more -W flags to g++ (including -Wundef which caught the
7732   getopt problem fixed in this release).  Fixed new GCC warnings from these new
7733   flags.
7735 * Fixed a lingering DOXYGEN_HAVE_DOT reference.
7737 * Fixed accidentally pruned #define which meant that getopt code was being
7738   included even on systems which use glibc (on such systems, we should use
7739   the glibc copy of the code instead).
7741 * queryparser/queryparser.lemony: Add missing '#include <config.h>'.
7743 documentation:
7745 * Added missing documentation comments for a QueryParser methods added in
7746   0.9.0.
7748 * docs/quartzdesign.html: Removed warning that quartz is still in development.
7750 * PLATFORMS: Updated from tinderbox.
7752 * configure: Describe CC_FOR_BUILD in configure --help output.
7754 * HACKING: Updated release instructions to refer to SVN, and note that release
7755   tarballs are now built specially rather than being copies of snapshots.
7756   Update information about the SVN tag name to use for debian files.
7758 * HACKING: Add "email Fabrice" to the release checklist so that RPM
7759   spec files don't lag behind.
7761 * Fixed a few spelling mistakes.
7763 packaging:
7765 * xapian.spec: Remove bogus %setup line left over from when we packaged
7766   xapian-core and xapian-examples together from separate tarballs.
7768 debug code:
7770 * api/omqueryinternal.cc: Fixed compilation with --enable-debug.
7772 * common/omdebug.h: Replace C style cast with static_cast<> which reveals that
7773   we were discarding const (harmlessly though).
7775 Xapian-core 0.9.0 (2005-05-13):
7777 API:
7779 * Query objects really need to be immutable after construction (otherwise we
7780   need a copy-on-write mechanism).  To achieve this the following API changes
7781   were required:
7783   + Remove Query::set_length() in favour of an optional length
7784     parameter to Enquire::set_query().
7786   + Eliminated Query::set_elite_set_size() in favour of optional parameter
7787     to constructor.
7789   + Eliminated Query::set_window() in favour of an optional parameter to the
7790     constructor.
7792 * Removed OP_WEIGHT_CUTOFF, since it doesn't actually seem to add useful
7793   functionality over using Enquire::set_cutoff().
7795 * MSet::max_size() (which only exists so that MSet is an STL container) now
7796   returns MSet::size() and is inlined from the header.
7798 * Added ESet::max_size() (for STL compatibility).
7800 * Fixed Xapian::RSet to have the same "it's a handle" copy semantics as most of
7801   the other classes.
7803 * Rewritten QueryParser class:
7805   + Uses Lemon instead of Bison to generate the parser, which enables us to
7806     stop using static data, so this class is at last reentrant.
7808   + QueryParser now uses a PIMPL style with reference counted internals like
7809     most of the other Xapian classes.
7811   + Direct access to member variables has gone, which unfortunately forces an
7812     API change (but this fixes bug #39).  Instead of accessing
7813     QueryParser::termlist member variable, iterate over terms using
7814     Query::get_terms_begin() and get_terms_end() on the returned Query object.
7815     Direct access to stoplist is replaced by QueryParser::get_stoplist_begin()
7816     and get_stoplist_end(); and to unstem by get_unstem_begin() and
7817     get_unstem_end().
7819   + The rewrite parses many real world examples better than the old version.
7821   + Now allow searches for C#, etc.  If a database has been set, for this and +
7822     and - suffixes, check if the term actually exists, and if not, ignore the
7823     suffix if the unsuffixed term exists.
7825   + Added QueryParser::get_description() method (not very descriptive yet!)
7827   + Added backward compatibility wrapper for old version of
7828     QueryParser::set_stemming_options().
7830   + xapian.h now automatically includes xapian/queryparser.h.  Directly
7831     including xapian/queryparser.h will continue to work for now, but is
7832     deprecated.
7834   + QueryParser::parse_query() was failing to clear termlist and unstem
7835     - the rewrite fixes this.
7837   + New QueryParser parses "term prefix:(term2 term3)" correctly.
7839 * Added Xapian::SimpleStopper which just stops terms specified by a pair of
7840   iterators.  This should be sufficient for the majority of uses.
7842 * Tidied up the Enquire sorting API and added ability to reverse sort on a
7843   value.  Removed sort_bands support.
7845 * Enquire::get_description() improved.
7847 * Methods which return an end iterator where the internals are just NULL are
7848   now inline in the header for efficiency.  Should we ever need to change an
7849   implementation, we can easily move methods back into the library and bump the
7850   library version suitably.
7852 * Added Stem::operator() as preferred alternative to Stem::stem_word().
7854 * Simplified Stem internal design by restructuring to eliminate a few internal
7855   methods.
7857 * BM25Weight: Avoid fetching document length if we're simply going to multiply
7858   it by zero!
7860 testsuite:
7862 * Fixed TEST_EQUAL_DOUBLE to use DBL_EPSILON correctly.
7864 * Rewrite of index_utils test harness code, removing unused and unusual
7865   features.  Data files for tests are now easier to write.  These changes
7866   also fix the bug that ^x didn't actually decode hex values correctly.
7868 * tests/testdata/etext.txt: Stripped carriage returns.
7870 * apitest: Extended stemlang1 to check that trying to create
7871   a stemmer for a non-existent language throws InvalidArgumentError.
7873 * queryparsertest:
7875   + Moved into tests/ subdirectory.
7877   + Reworked to use the standard testsuite harness.
7879   + Added tests for new features in the rewritten QueryParser.
7881 quartz backend:
7883 * quartzcheck: Now checks the structure of all the tables, not
7884   just the postlist table, and cross-checks doclen values between
7885   termlist and postlist tables.  Recognises "--help" option.  Should
7886   now continue after an error (typically it would crash before), and
7887   counts the number of errors found.  Now exits with non-zero status
7888   if any errors were found.  More readable output.
7890 * quartzcompact: Extended to allow merging several quartz
7891   databases to produce a single compact quartz database.  This
7892   allows for faster building - simple index in chunks, then merge
7893   the chunks.
7895 * quartzcompact: Made full compaction a tiny bit more compact.
7897 * quartzcompact: Added "fuller compaction" mode, which ignores the usual "at
7898   least 4 items per block" rule.  This achieves slightly tighter compaction,
7899   though it's probably not advisable to use this option if you plan to update
7900   the compacted database.
7902 * Improved compaction by a few % in non-full case.  Tighter bound on amount of
7903   memory to reserve to read the tag into.
7905 * Fix skip_to on an allterms TermIterator to set the current term when the
7906   skip_to-ed term is in the database.  Add regression test for this
7907   (allterms5).
7909 * Values are stored in sorted order so we can stop unpacking the list once we
7910   get to one after the one we're looking for (in the case where the one we're
7911   looking for doesn't exist).
7913 build system:
7915 * configure: Check that the C++ compiler can actually link a program.
7916   AC_LANG_CXX doesn't, and if it can't find a C++ compiler it'll just return
7917   "g++" which just leads to a later configure test failing in a confusing way.
7919 * configure: corrected configure output of "none known for yes" or "none known
7920   for no" to "none known for g++-3.2" or similar.
7922 * include/xapian/version.h: Define XAPIAN_HAS_xxx_BACKEND for each backend
7923   which is enabled.  The bindings need this, and user code might find it useful
7924   too.
7926 * include/xapian/database.h: Don't declare the backend factory functions if the
7927   corresponding backend has been disabled.  This means that trying to use a
7928   disabled backend will be caught at compile time rather than link time.
7930 * configure: Enhanced valgrind test to (a) see if --tool=memcheck
7931   is needed and (b) see if valgrind actually works (we don't want to
7932   try to use an x86 valgrind on an x86_64 box).
7934 * configure: Suppress 2 Intel C++ warnings which we can't easily code around,
7935   and enable -Werror automatically with --enable-maintainer-mode.
7937 * Clearer make rules for building Postscript doxygen docs.
7939 * Removed some no longer used code.
7941 * Moved a number of method definitions out of headers because they are virtual,
7942   or too large to be sensible candidates for inlining.
7944 * Eliminated the extra library for the queryparser - it's tiny compared to the
7945   main library and having it around just complicates things.
7947 * configure: We no longer need Bison, but we do need CC_FOR_BUILD to compile
7948   Lemon with.
7950 * Snapshot generator now appends _svn6789 or similar to the version string.
7951   Adjusted configure and XO_LIB_XAPIAN macro to take this into account.
7953 * configure: If any tools needed for documentation are missing
7954   and we're in maintainer mode, die with a suitable error in
7955   configure rather than with strange errors when building the
7956   documentation.
7958 * docs/Makefile.am: Explicitly set the pool_size for latex, because we
7959   now seem to overflow the default setting on some systems.
7961 * docs/Makefile.am: Use $(MAKE) instead of make.
7963 documentation:
7965 * Numerous improvements to documentation comments.  Added documentation
7966   comments for QueryParser class.
7968 * HACKING: Added better description of how reference-counted API
7969   classes are structured.
7971 * HACKING: Note that '#include <limits>' isn't supported by GCC 2.95,
7972   and other assorted minor tweaks.
7974 * HACKING: Note how to disable use of VALGRIND on the make check
7975   command line, or when using runtest directly.
7977 * Updated all documentation mentions of CVS to talk about Subversion
7978   instead.
7980 * PLATFORMS: Updated from tinderbox and other sources.
7982 * PLATFORMS: Added minimal testcase which fails to compile with
7983   Compaq's C++ compiler (cxx).
7985 * INSTALL,README: Updated.
7987 * docs/queryparser.html: Note that + and - work on phrases and
7988   bracketed expressions.
7990 * docs/intro_ir.html: Corrected two errors.
7992 * docs/stemming.html: Stemming appears to be applicable to Japanese
7993   so don't say it isn't!
7995 examples:
7997 * Moved xapian-examples module to examples subdirectory of xapian-core.
7999 * quest: Added stopword handling.
8001 portability:
8003 * configure: autoconf identifies Intel's C++ compiler as GCC, so probe for
8004   which we actually have.
8006 * Xapian will now compile cleanly with Intel C++ 8.1 on ia64 Linux and
8007   on x86 Linux.
8009 * backends/quartz/btree.cc: Fixed GCC compilation warning.
8011 * tests/api_db.cc: Fixed warning from Sun's C++ compiler.
8013 * configure: Automatically enable ANSI C++ mode for SGI's compiler
8014   with '-LANG:std'; check that any automatically determined flags
8015   for ANSI C++ mode actually allow us to compile a trivial program
8016   - if they don't it probably means the compiler isn't the one we
8017   were expecting, but one installed with the same name, so we now
8018   drop the flags in this case.
8020 * The compile on IRIX with SGI compiler is now warning free, apart from two
8021   "unused variable" warnings in Snowball generated code.
8023 * On WIN32, don't define NOMINMAX if it is already defined.
8025 packaging:
8027 * xapian.spec: Don't say "%makeinstall" in a comment since rpm
8028   tries to expand it and explodes.
8030 * xapian.spec: '/usr/share' -> '%{_datadir}'.
8032 * xapian.spec: Put the .so in the -devel package (it's only useful
8033   for linking to - the .so.* files are all that's needed at runtime).
8035 debug code:
8037 * net/socketserver.cc: Fixed typo in debug code.
8039 Xapian-core 0.8.5 (2004-12-23):
8041 quartz backend:
8043 * quartzcompact: When full_compaction is enabled, don't fill the last few bytes
8044   of a block if that would mean we needed an extra item and the overhead for
8045   that item would use up more of the next block than we save.  This reduces the
8046   table size after full compaction by up to 0.2% in my tests!
8048 * quartzcompact: Tables sizes will always be a whole number of Kbytes, since
8049   the blocksize is, so report the size in K.  Also report the change in size as
8050   well as the before and after sizes.
8052 * quartzcompact: Added missing '#include <config.h>' so that largefile support
8053   is enabled when we call stat() and we report compression statistics for
8054   tables > 2G.
8056 * quartzcompact: Added --no-full / -n option to disable full compaction.  This
8057   may be useful if you want to update the database after compacting it (need to
8058   test to see if this option is actually useful).
8060 * Renamed Btree::compress() to Btree::compact() for consistency with
8061   "full_compaction" and "quartzcompact".  Also, "compress" is confusing since
8062   we use that term in the zlib patch.
8064 build system:
8066 * xapian-config: Fixed --libs output to not include libxapian.la.
8068 * Added missing '#include <config.h>' to various .cc files (the omissions were
8069   probably harmless, but config.h should be included as the first thing any
8070   source file does).
8072 documentation:
8074 * Minor updates.
8076 packaging:
8078 * RPM spec file: %makeinstall puts the wrong paths in the .la files so use
8079   "make DESTDIR=... install" instead.
8081 debug code:
8083 * Fixed to build with AssertParanoid enabled.
8085 Xapian-core 0.8.4 (2004-12-08):
8087 API:
8089 * Added constructors to Database and WritableDatabase which fulfil the role
8090   that the Auto::open() factory functions currently do.  Auto::open() is
8091   now deprecated.
8093 * Removed the ability to write a Xapian object to an ostream directly, as
8094   it's little used and potentially dangerous ('cout << mset[i];' will
8095   compile, but you almost certainly meant 'cout << *mset[i];').  You can
8096   get the old effect by writing 'cout << obj->get_description();' instead
8097   of 'cout << obj;'.  Note that including xapian.h no longer pulls in
8098   fstream, which code may have been implicitly relying on - if this is
8099   a problem add '#include <fstream>' after '#include <xapian.h>'.
8101 * QueryParser: Be smarter about when to add a ':' when adding a term prefix.
8103 * BoolWeight::unserialise() now returns BoolWeight*, and similarly for
8104   TradWeight and BM25Weight.  BoolWeight::clone() now returns BoolWeight *.
8106 * If a database contains no positional information, change NEAR and PHRASE
8107   queries into AND queries (as otherwise they'd return no matches at all)
8108   (bug #56).  Added feature test phraseorneartoand1.
8110 * Renamed BM25 parameters to match standard naming in papers and elsewhere
8111   (A->k3, B->k1, C->k2, D->b), eliminated the extra factor of 2 which our C
8112   had, and reordered the parameters to k1, k2, k3.  This is an incompatible API
8113   change for BM25Weight(), so if you are using custom parameters for BM25
8114   you'll need to update your code.
8116 * During query expansion, if we estimate the term frequency, ensure it has a
8117   sane value (>= r and <= N - R + r) rather than bodging around the problem
8118   later on.
8120 * TradWeight, BM25Weight: termfreq is always exact for matching (we only
8121   approximate it for query expansion) so replace code to work around bad
8122   approximations with Assert() to make sure this never happens.
8124 testsuite:
8126 * runtest: Enhanced to allow it to run test programs under valgrind and other
8127   tools (gdb was already supported).
8129 * runtest: now works with valgrind 2.1.2 and later (valgrind's --logfile-fd
8130   option was renamed to --log-fd).
8132 * runtest: Allow VALGRIND environmental variable to override the value we got
8133   from configure.
8135 * Added a dependency so "make check" regenerates runtest if necessary.
8137 * The test programs now point the user to the runtest script if srcdir can't
8138   be guessed.  And they no longer look for the test program in the tests
8139   subdirectory of the current directory.
8141 * btreetest: Fixed memory leaks in test_cursor1 (the testcase itself was
8142   causing the leak, not the library).
8144 * apitest: Fixed mset_range_is_same() and mset_range_is_same_weights() helper
8145   functions which were only comparing the first item in the range.  Thankfully
8146   the tests still all pass so this wasn't hiding any bugs.
8148 * apitest: A modified version of changequery1 fails - the bug is obscure and
8149   subtle, and the fix is tricky so set the modified test to SKIP for now.
8151 * apitest: Added test_weight1 which tests the built-in Xapian::Weight
8152   subclasses and test_userweight1 which tests user defined weighting schemes
8153   (bug#8).
8155 * quartztest: Test with DB_CREATE_OR_OPEN in writelock1.
8157 quartz backend:
8159 * An interrupted update could cause any further updates to fail with "New
8160   revision too low" because the new revision was being calculated incorrectly -
8161   fixed (bug#55).
8163 * Fixed Bcursor::del() which didn't always leave the cursor on the next item
8164   like it should.  This may have been causing problems when trying to remove
8165   the last references to a particular term.
8167 * Fixed ultra-obscure bug in the code which finds a key suitable to
8168   discriminating between two blocks in a B-tree branch (discovered by reading
8169   the code).  Comparing the keys didn't consider the length of the second, so
8170   it is possible the code would miscompare.  But in reality this is extremely
8171   unlikely to happen, and even then would probably just mean that the
8172   discriminating key wouldn't be as short as it could be (wasting a few bytes
8173   but otherwise harmless).
8175 * If we're removing a posting list entirely, often there will only be one
8176   chunk, so avoid creating a Bcursor in this case.
8178 * Simplified Btree::compare_keys() by removing the last case which was dead
8179   code as it was covered by an earlier case.
8181 * Check that any user specified block size is a power of 2.  If the block
8182   size passed is invalid, use the default of 8192 rather than throwing an
8183   exception.
8185 * Started to refactor the Btree manager by introducing Item and Key classes
8186   which take care of handling the on-disk format, and eliminated duplicated
8187   tag reading code in Btree and Bcursor.  These changes will pave the way for
8188   improvements to the on disk format.
8190 * Applied the Quartz "DANGEROUS" patch, but disabled for now.  This way it
8191   won't keep being broken by changes to the code.
8193 * quartzcompact: Added --help and --version; Check that the source path and
8194   desitination path aren't the same; Report each table name when we start
8195   compacting it, and some simple stats on the compaction achieved when we
8196   finish.
8198 muscat36 backend:
8200 * Removed a default parameter value from one variant of
8201   Xapian::Muscat36::open_db() so that there's only one candidate for
8202   open_db(string).
8204 build system:
8206 * xapian-config: If flags are needed to select ANSI mode with the current
8207   compiler, then make xapian-config --cxxflags include them so that Xapian
8208   users don't have to jump through the same hoops we do.
8210 * xapian-config: Added --swigflags option for use with SWIG.
8212 * XO_LIB_XAPIAN now passes ac_top_srcdir to xapian-config which uses it
8213   (if provided) to say "configure.ac" or "configure.in" rather than
8214   "configure.in (or configure.ac)" in the "Add AC_PROG_LIBTOOL"
8215   error message.
8217 * Cleaned up the build system in a few places.
8219 * Removed a few totally unneeded header includes.
8221 * Moved a number of functions and methods out of headers because they're not
8222   good inlining candidates (too big or virtual methods).
8224 * Changed C style casts to C++ style.  The syntax is ugly, but they do make the
8225   intent clearer which is a good thing.  Note this as a coding style guideline
8226   in HACKING.
8228 * configure.ac: Automatically add -Werror to CFLAGS and CXXFLAGS if
8229   maintainer mode is enabled and we're using GCC3 or newer.  Don't do
8230   this for older GCCs as GCC 2.95 issues spurious warnings.
8232 * Reworked how include/xapian/version.h is generated so that it works
8233   better with compilers other than GCC, and with HP-UX sed.
8235 * XAPIAN_VERSION is now a string (e.g. "0.8.4").
8237 * Added new #define XAPIAN_REVISION (which is 4 for version 0.8.4).
8239 documentation:
8241 * docs/bm25.html,docs/intro_ir.html: Reworked to talk about Xapian
8242   rather than Muscat.  Also improved the appearance of the formulae.
8244 * HACKING: Valgrind now supports x86 FreeBSD and PowerPC Linux.
8246 * Documented parameters of Enquire::register_match_decider().
8248 * We now use doxygen 1.3.8 to build documentation for snapshots and releases.
8250 * PLATFORMS: Updated from the tinderbox (which now runs builds on machines
8251   available in HP's testdrive scheme) and other assorted reports.
8253 * PLATFORMS: Removed reports from versions prior to 0.7.0.  So much
8254   has changed that these are of little value.
8256 * docs/scalability.html: Added note warning about benchmarking from cold.
8258 * Assorted other minor documentation improvements.
8260 portability:
8262 * configure.ac: Improved snprintf configure test to actually
8263   check that it works (older implementations may have different
8264   semantics for the return value, and at least one ignores the length
8265   restriction entirely!)
8267 * Reworked the GNU getopt source we use so that the header is clean and
8268   suitable for use from a reasonably ISO-conforming C++ compiler instead of
8269   being full of cruft for working around quirky C compilers which C++ compilers
8270   tend to stumble over.
8272 * Use SOCKLEN_T for the type we need to pass to various socket calls, since
8273   HPUX defines socklen_t yet wants int in those calls.  Reworked the
8274   TYPE_SOCKLEN_T test we use.
8276 * On Windows, we want winsock2.h instead of sys/socket.h.  Mingw doesn't seem
8277   to even have the latter, so I think previously we've been compiling by
8278   picking one up from somewhere random!
8280 * Change the small number of C sources we have to be C++ so we can compile
8281   everything with the C++ compiler.  This way we don't need to worry about
8282   configure choosing a mismatching pair of compilers, or about whether
8283   configure tests with the C compiler don't apply to the C++ compiler, or vice
8284   versa.
8286 * Compiles and passes testsuite with HP's aCC (we have to compile in
8287   ANSI mode, so we automatically add -AA to CXXFLAGS).
8289 * If the link test detects pread and pwrite are present, get configure to try
8290   out prototypes for pread and pwrite.  This is much cleaner than trying to
8291   find the right combination of preprocessor defines to get each platform's
8292   system headers to provide prototypes.
8294 * configure: Disable probing for pread/pwrite on HP-UX as they're present but
8295   don't work when LFS (Large File Support) is enabled, and we definitely want
8296   LFS.
8298 * Fixed some warnings from Sun's C++ compiler.
8300 * Provide our own C_isalpha(), etc replacements for isalpha(), etc
8301   which always work in the C locale and avoid signed char problems.
8303 * For mingw/cygwin, pass -no-undefined when linking libxapianqueryparser.la
8304   so libtool builds a shared library.  Also pass the magic linker flag
8305   -Wl,--enable-runtime-pseudo-reloc if configure has determined it is needed.
8307 * For cygwin, use the underlying MoveFile API call for locking, as link()
8308   doesn't work on FAT partitions.  And don't rely on HAVE_LINK to control
8309   whether we use link() otherwise - if the configure test somehow misfires, a
8310   compilation error is better than using rename() on Unix as that would cause a
8311   second writer to smash the lock of the first.
8313 * Closer to building with Compaq C++ - add "-std strict_ansi" to CXXFLAGS, and
8314   tweaked the code in several places.  It currently dies trying to compile
8315   the PIMPL smart pointer template code which looks hard to fix.
8317 debug code:
8319 * HACKING: Document that %% in XAPIAN_DEBUG_LOG is substituted with
8320   the process-id, and that setting XAPIAN_DEBUG_FLAGS to -1 enables
8321   all debug messages.
8323 * Removed compatibility code for checking environment variables OM_DEBUG_FILE
8324   and OM_DEBUG_TYPES.
8326 Xapian-core 0.8.3 (2004-09-20):
8328 API:
8330 * Fixed bug which caused a segmentation fault or odd "Document not found"
8331   exceptions when new check_at_least parameter to Enquire::get_mset() was used
8332   and there weren't many matches (regression test checkatleast1).
8334 remote backend:
8336 * Renamed omtcpsrv to xapian-tcpsrv and omprogsrv to xapian-progsrv.
8338 packaging:
8340 * RPM packaging now has a separate package for the runtime libraries to
8341   allow 32 and 64 bit versions to be installed concurrently.
8343 * RPM for xapian-core now includes binaries from xapian-examples.
8345 debug code:
8347 * Fixed to compile with debug tracing enabled.
8349 Xapian-core 0.8.2 (2004-09-13):
8351 API:
8353 * Removed the compatibility layer which allowed programs written against the
8354   pre-0.7.0 API to be compiled.
8356 * Added new ESet methods swap(), back() and operator[].
8358 * Xapian::WritableDatabase::replace_document can now be used
8359   to add a document with a specific docid (to allow keeping docids
8360   in sync with numeric UIDs from another system).
8362 * Added Xapian::WritableDatabase::replace_document and
8363   delete_document variants which take a unique id term name rather
8364   than a document id.
8366 * Enquire::get_mset(): If a matchdecider is specified and no matches
8367   are requested, the lower bound on the number of matches must be 0
8368   (since the matchdecider could reject all the matches).
8370 * Renamed Query::is_empty() to Query::empty() for consistency.  Keep
8371   Query::is_empty() for now as a deprecated alias.
8373 * Enquire::set_sorting() now takes an optional third parameter which allows
8374   you to specify a sort by value, then relevance, then docid instead of
8375   by value then docid.
8377 * Enquire::get_mset() now takes an optional "check_at_least" parameter
8378   which allows Omega's MIN_HITS functionality to be implemented in the matcher
8379   (where it can be done a bit more efficiently).
8381 testsuite:
8383 * Reworked quartztest's positionlist1 into a generic api test as apitest's
8384   poslist3.
8386 * apitest: Reenabled allterms2, but with the iterator copying parts removed -
8387   TermIterator is an input_iterator so that part was invalid.
8389 * Overhauled btreetest and quartztest - tests at the Btree level are now all
8390   in btreetest.  Those at the QuartzDatabase level are in quartztest.
8392 * Split api_db.cc into 3 files as it has grown rather large.
8394 * tests/runtest: Added support for easily running gdb on a test program,
8395   automatically sorting out srcdir and libtool.
8397 quartz backend:
8399 * Refactored the quartz backend code to reduce the number of layered classes
8400   and eliminate unnecessary buffering, reducing memory usage so that more
8401   posting list changes can be batched together (see next change) and database
8402   building can be done several times faster.
8404 * Added tunable flush threshold - set XAPIAN_FLUSH_THRESHOLD=50000 to flush
8405   every 50000 documents.  The default is now every 10000 documents (was
8406   every 1000 documents previously).  The optimum value will most likely
8407   depend on your data and hardware.
8409 * WritableDatabase::get_document() no longer forces pending changes to be
8410   flushed.  The document will read things lazily from the database, and that
8411   reading may trigger a forced flush).
8413 * WritableDatabase::get_avlength() no longer forces pending changes to be
8414   flushed.  This means you can now search a modified WritableDatabase without
8415   causing a flush unless the search includes a term whose postlist has pending
8416   modifications.
8418 * Reduced quartz postlist chunk threshold from "2048 or a few bytes more" to
8419   "2000 or a few bytes more" so that full size chunks won't get split by the
8420   Btree.
8422 * Improved the "Db block overwritten" message.  The DatabaseCorruptError
8423   version now suggests multiple writers may be the cause, while the
8424   DatabaseModifiedError version uses less alarming wording and says to call
8425   Database::reopen().
8427 * QuartzWritableDatabase now stores the total document length and the last
8428   docid itself rather than tallying added and removed document length and
8429   writing the last docid back every time a document is added.  This gives
8430   cleaner code and a small performance win.
8432 * Make the first key null for blocks more than 1 away from the leaves.
8433   It saves disk space for a tiny CPU and RAM cost so is bound to be
8434   a win overall.
8436 * matcher/localmatch.cc: Fixed problems handling termweights in queries with
8437   the same term repeated (bug #37) and added regression test (qterminfo2).
8439 * Sped up iteration over all the terms in a database (QuartzCursor now only
8440   reads the tag from the Btree if asked to).
8442 * Cancelling an operation is now implemented more efficiently.
8444 inmemory backend:
8446 * Fixed bugs with deleting a document while a PostingIterator over it is
8447   active.
8449 muscat36 backend:
8451 * Fixed to compile now that internal_end_session() has gone (broken in 0.8.1).
8453 build system:
8455 * Fixed to compile when configured with --disable-inmemory (bug #33).
8457 * XO_LIB_XAPIAN now AC_SUBSTs XAPIAN_VERSION so your application's build
8458   system can easily check for a particular version of Xapian.
8460 * When compiling with GCC, we check that the compiler used to compile the
8461   library and the compiler used to compile the application have compatible
8462   C++ ABI versions.  Unfortunately GCC 3.1 incorrectly reports the same
8463   ABI version as GCC 3.0, so we now special case that test.
8465 * Bumped the versions of the autotools we require for bootstrapping, and
8466   updated the documentation of these in the HACKING document.
8468 * Quote macro names to fix warnings from newer aclocal.
8470 documentation:
8472 * Improved API documentation for Xapian::WritableDatabase::replace_document and
8473   delete_document.
8475 * Added documentation comments for MSet methods size(), empty(), swap(),
8476   begin(), end(), back().
8478 * Removed bogus documentation comments saying that some Enquire methods can
8479   throw DatabaseOpeningError.
8481 * Updated quartz design docs to reflect recent changes.  Also pulled
8482   out the Btree and Bcursor API docs and slotted them in as doxygen
8483   documentation comments - this way they're much more likely to
8484   be kept up-to-date.
8486 * Corrected multiple occurrences of "an Xapian::XXX" to "a Xapian::XXX"
8487   (presumably these all resulted from replacing "Om" with "Xapian::").
8489 * Various minor updates and improvements.
8491 portability:
8493 * Reworked how we cope with fcntl.h #define-ing open on Solaris.  This change
8494   finally allows Sun's C++ compiler to produce a working Xapian build on
8495   sparc Solaris!
8497 * configure.ac: Don't define DATADIR - we no longer use it and clashes
8498   with more recent mingw headers.
8500 * matcher/andpostlist.cc: Initialise lmax and rmax to 0.  This cures
8501   the SIGFPE on apitest's qterminfo2 on alpha linux.
8503 Xapian-core 0.8.1 (2004-06-30):
8505 API:
8507 * New method Xapian::Database::get_lastdocid which returns the highest used
8508   document id for a database (useful for re-synchronizing an indexer which
8509   was interrupted).  Implemented for quartz and inmemory.
8511 * Xapian::MSet::get_matches_*() methods now take collapsing into account, and
8512   the documentation has been clarified to state explicitly that collapsing and
8513   cutoffs are taken into account (bug#31).
8515 * Xapian::MSet: Need to adjust index by firstitem when indexing into items
8516   (bug#28).
8518 * MSetIterator and ESetIterator are now bidirectional iterators (rather than
8519   just input iterators)
8521 * Fixed post-increment forms of PostingIterator, TermIterator,
8522   PositionIterator, and ValueIterator so that *i++ works (as it must for them
8523   to be true input iterators).
8525 * Xapian::QueryParser: If we fail to parse a query, try stripping out
8526   non-alphanumerics (except '.') and reparsing.
8528 * Fixed memory leaked upon Xapian::QueryParser destruction.
8530 * Removed several unused Xapian::Error subclasses (these were used by the
8531   indexer framework which we decided was a failed experiment).
8533 testsuite:
8535 * queryparsertest: Pruned near-duplicate queryparsertest testcases.
8537 * queryparsertest: Added test case for `term NOT "a phrase'.
8539 * remotetest: Use 127.0.0.1 instead of localhost so that tcpmatch1 doesn't fail
8540   just because the network setup is broken.
8542 * apitest: Make emptyquery1 check that Query("") causes an InvalidArgumentError
8543   exception.
8545 quartz backend:
8547 * Fixed bug which meant we sometimes failed to remove a posting when deleting
8548   or replacing a document.
8550 * Fixed PostlistChunkReader to take a copy of the postlist data being read to
8551   avoid problems with reading data from a string that's been deleted.
8553 * Fixed bug in postlist merging which could occasionally extend a postlist
8554   chunk to overlap the docid range of the next chunk.
8556 * Eliminated the split cursor in each Btree object - we only actually need a
8557   single block buffer to handle splitting blocks.  This reduces the memory
8558   overhead of each Bcursor (and hence each QuartzPostList).
8560 * Changed 2 calls to abort() to throw Xapian::DatabaseCorruptError instead,
8562 * If Btree is writable, throw DatabaseCorruptError if we detect overwritten.
8564 * Check the return value of fdatasync()/fsync()/_commit() and raise an error.
8565   If they fail, we really want to know as it could cause data corruption.
8567 * Assorted clean ups, improved comments, debug tracing, assertions.
8569 * When merging in postlist changes, removed an unneeded call to
8570   QuartzBufferedTable::get_or_make_tag() in a case when we're using a cursor
8571   which has already fetched the tag.
8573 * Added SON_OF_QUARTZ define to disable incompatible changes to database
8574   formats by default, and use it to control the docid encoding for keys such
8575   that we're always inserting at the end of the table when added new documents.
8577 * Reopening the readonly version of a writable Btree is now more efficient
8578   (we used to close and reopen all the files and destroy and recreate a lot
8579   of objects and buffers).
8581 * Share file descriptors between the read and write Btree objects so that a
8582   quartz WritableDatabase now uses 5 fds rather than 10.
8584 * Added configure test for glibc, because otherwise we need to include a header
8585   before we can check for glibc in order to define something we should be
8586   defining before we include any headers!  Defining _XOPEN_SOURCE on OpenBSD
8587   seems to do the opposite to Linux and *disable* pread and pwrite!
8589 backends:
8591 * Stripped out the session machinery - all that is actually required is to
8592   ensure that any unflushed changes are flushed when the destructor runs.
8594 * A few other backend interface cleanups.
8596 build system:
8598 * Unified the shlib version numbers (the small benefit of tracking them
8599   individually makes it hard to justify the extra work required, and having one
8600   version simplifies debian packaging too).
8602 * configure.in: Fix typo (STLPORT_CXXLAGS -> STLPORT_CXXFLAGS)
8604 * Removed trivial m4/Makefile.am and autoconf/Makefile.am and do the work
8605   from the top level Makefile.am instead.  It's easier to see the structure
8606   this way, and it also removes a couple of recursive make invocations which
8607   will speed up builds a little.
8609 documentation:
8611 * HACKING: Added a list of subtasks when doing a release.
8612   Currently it's always me that does this, but it may not always be
8613   and anyhow it'll help me to have a list to run through.
8615 * include/xapian/database.h: Remove references to sessions in doxygen
8616   comments.
8618 * docs/quickstart.html: Corrected lingering reference to "om.h" and
8619   note that we need <iostream>.
8621 * docs/quickstartindex.cc.html,docs/quickstartexpand.cc.html,
8622   docs/quickstartsearch.cc.html: Add <iostream>.
8624 * PLATFORMS,AUTHORS: Updated.
8626 * docs/quartzdesign.html: Corrected various pieces of out of date
8627   information, and improved wording in a couple of places.
8629 * docs/scalability.html: Removed the reference to the Quartz update bottleneck
8630   "currently being addressed for Xapian 0.8" as it's now been addressed!  Also
8631   reworded to remove use of first person (it was originally a message sent to
8632   the mailing list).
8634 Xapian-core 0.8.0 (2004-04-19):
8636 * Omega, xapian-examples and xapian-bindings now have their own NEWS files.
8638 API:
8640 * Throw an exception when an empty query is used to build in the binary
8641   operator Query constructor (previously this caused a segfault.  Added
8642   regression test.
8644 * Made the TradWeight constructor explicit.  This is technically an API change
8645   as before you could pass a double where a Xapian::Weight was required - now
8646   you must pass Xapian::TradWeight(2.0) instead of 2.0.  That seems desirable,
8647   and it's unlikely any existing code will be affected.
8649 * Added "explicit" qualifier to constructors for internal use which take a
8650   single parameter.
8652 * Renamed Xapian::Document::add_term_nopos to Xapian::Document::add_term
8653   (with forwarding wrapper method for compatibility with existing code).
8655 * The reference counting mechanism used by most API classes now handles
8656   creating a new object slightly more efficiently.
8658 * Xapian::QueryParser: Don't use a raw term for a term which starts with a
8659   digit.
8661 testsuite:
8663 * apitest, quartztest: Added a couple of tests, and commented out some test
8664   lines which fail in debug builds.
8666 * quartztest: cause a test to fail if there's still a directory after a call
8667   to rmdir(), or if there isn't a directory after calling mkdir().
8669 * apitest: Check returned docids are the expected values in a couple more
8670   cases.  Improved wording of a comment.
8672 quartz backend:
8674 * We now merge a batch of changes into a posting list in a single pass which
8675   relieves an update bottleneck in previous versions.
8677 * When storing the termlist, pack the wdf into the same byte as the reuse
8678   length when possible - doing so typically makes the termlist 14% smaller!
8679   This change is backward compatible (0.7 database will work with 0.8, but
8680   databases built or updated with 0.8 won't work with 0.7).
8682 * quartzcheck: Check the structure within the postlist Btree as well as
8683   the Btree structures themselves.
8685 * Reduced code duplication in the btree manager and btreechecking code.
8687 * quartzdump: Backslash escape space and backslash in output rather than hex
8688   encoding them; renamed start-term and end-term to start-key and end-key;
8689   removed rather pointless "Calling next" message; if there's an error, write
8690   it to stderr not stdout, and exit with return code 1.
8692 * Corrected a number of comments in the source.
8694 * Removed several needless inclusions of quartz_table_entries.h.
8696 * Removed OLD_TERMLIST_FORMAT code - it has been disabled for since 0.6.0.
8698 * Removed all the quartz lexicon code and docs.  It's been disabled for ages,
8699   and we've not missed it.
8701 build system:
8703 * XO_LIB_XAPIAN autoconf macro can now be called without arguments in the
8704   common case where you want the test to fail if Xapian isn't found.
8706 * Fixed the configure test for valgrind - it wasn't working correctly when
8707   valgrind was installed but was too a version to support VALGRIND_COUNT_ERRORS
8708   and VALGRIND_COUNT_LEAKS.
8710 * GCC 2.95 supported -Wno-long-long and is our minimum recommended version, so
8711   unconditionally use -Wno-long-long with GCC, and don't test for it on other
8712   compilers (the old test incorrectly decided to use it with SGI's compiler
8713   resulting in a warning for every file compiled).
8715 documentation:
8717 * Updated the quickstart tutorial and removed the warning that "this
8718   document isn't up to date".
8720 * docs/intro_ir.html: Added a link to "Information Retrieval" by Keith van
8721   Rijsbergen which can be downloaded from his website!
8723 * docs/quartzdesign.html: Some minor improvements.
8725 * docs/matcherdesign.html: Merged in more details from a message sent to the
8726   mailing list.
8728 * docs/queryparser.html: Grammar fixes.
8730 * Doxygen wasn't picking up the documentation for PostingIterator and
8731   PositionListIterator - fixed.  Added doxygen comments for Xapian::Stopper
8732   and Xapian::QueryParser.
8734 * PLATFORMS: Updated with many results from tinderbox and from users.
8736 * AUTHORS: Updated the list of contributors.
8738 * HACKING: XAPIAN_DEBUG_TYPES should be XAPIAN_DEBUG_FLAGS.
8740 * HACKING: Updated to mention that building from CVS requires
8741   `./configure --enable-maintainer-mode' (or use bootstrap).
8743 * HACKING: Added notes about using "using", and pointers to a couple of useful
8744   C++ web resources.
8746 portability:
8748 * Solaris: Code tweaks for compiling with Sun's C++ compiler.
8750 * IRIX: Code tweaks for compiling with SGI's C++ compiler.
8752 * NetBSD mkdir() doesn't cope with a trailing / on the path - fixed our code to
8753   cope with this.
8755 * mingw/cygwin: Only use O_SYNC (on the debug log) if the headers define it.
8757 * backends/quartz/quartz_table_manager.cc: Fix for building on mingw.
8759 * mingw: Added configure test for link() to avoid infinite loop in our C++
8760   wrapper for link.
8762 * mingw and cygwin both need -Wl,--enable-runtime-pseudo-reloc passing when
8763   linking.  Arrange for xapian-config to include this, and check that the ld
8764   installed is a new enough version (or at least that it was at configure
8765   time).  Also pass to programs linked as part of the xapian-core build.
8767 * cygwin: Close a QuartzDatabase or QuartzWritableDatabase before trying to
8768   overwrite it - cygwin doesn't allow use to delete open/locked files...
8770 * backends/quartz/quartz_termlist.cc: Use Xapian::doccount instead of
8771   unsigned int in set_entries().
8773 * Database::Internal::Internal::keep_alive() should be
8774   Database::Internal::keep_alive().
8776 * Make Xapian::Weight::Weight() protected rather than private as we want to be
8777   able to call it from derived classes (GCC 3.4 flags this, other compilers
8778   seem to miss it).
8780 debug code:
8782 * Open debug log with flag O_WRONLY so that we can actually write to it!
8784 * backends/quartz/quartz_values.cc: Fixed problem with dereferencing
8785   a pointer to the end of a string in debug output.
8787 Xapian 0.7.5 (2003-11-26):
8789 API:
8791 * Xapian::QueryParser now supports prefixes on phrases and expressions (e.g.
8792   author:(twain OR poe) subject:"space flight").
8794 * Added missing default constructors for TermIterator, PostingIterator, and
8795   PositionIterator classes.
8797 * Fixed PositionIterator assignment operator.
8799 testsuite:
8801 * queryparsertest: Added testcase for new phrase and expression prefix support.
8803 * apitest: Added regression tests for API fixes.
8805 backends:
8807 * quartzcompact: Fix the name that the meta file gets copied to (was
8808   /path/to/dbdirmeta rather than /path/to/dbdir/meta).
8810 build system:
8812 * Changed to using AM_MAINTAINER_MODE.  If you're doing development work on
8813   Xapian itself, you should configure with "--enable-maintainer-mode" and
8814   ideally use GNU make.
8816 * Fixed configure test for fdatasync to work (I suspect a change in a recent
8817   autoconf broke it as it relied on autoconf internal naming).
8819 * Fully updated to reflect move of libbtreecheck.la from backends/quartz
8820   to testsuite.  btreetest and quartzcheck should build correctly now.
8822 documentation:
8824 * Added first cut of documentation for Xapian::QueryParser query syntax.
8826 * Fixed incorrectly formatted doxygen documentation comments which resulted in
8827   some missing text in the collated API and internal classes documentation.
8829 * Documented --enable-maintainer-mode and problems with BSD make in HACKING.
8831 * Fixed typo in docs/scalability.html.
8833 * PLATFORMS: Updated from the tinderbox.
8835 omega:
8837 * omega: Parsing of the probabilistic query is now delayed until we need some
8838   information from it.  This means that we can now use options set by the
8839   omegascript template to control the behaviour of the query parser.
8840   $set{stemmer,...} now controls the stemming language (e.g. $set{stemmer,fr})
8841   and $setmap{prefix,...} now sets the QueryParser prefix map (e.g.
8842   $setmap{prefix,subject,XT,abstract,XA}).
8844 * omega: Fixed $setmap not to add bogus entries.
8846 * docs/omegascript.txt: Expanded documentation of $set and $setmap to list
8847   values which Omega itself makes use of.
8849 * omega: Cleaned up the start up code quite a bit.
8851 * omega: Removed the unfinished code for caching omegascript command
8852   expansions.  Added code to cache $dbsize.  The only other value correctly
8853   marked for caching is already being cached!
8855 Xapian 0.7.4 (2003-10-02):
8857 API:
8859 * Fixed small memory leak if Xapian::Enquire::set_query() is called more than
8860   once.
8862 * Xapian::ESet now has reference counted internals (library interface version
8863   bumped because of this).
8865 * Removed unused OmDocumentTerm::termfreq member variable.
8867 * OmDocumentTerm ctor now takes wdf, and replaced set_wdf() with inc_wdf() and
8868   dec_wdf().
8870 * Removed unused open_document() method from SubMatch and derived classes.
8872 * Calls made by the matcher to Document::Internal::open_document() now use the
8873   lazy flag provided for precisely this purpose, but apparently never used -
8874   this should give quite a speed boost to any matcher options which use values
8875   (e.g. sort, collapse).
8877 testsuite:
8879 * Finished off support for running tests under valgrind to check for memory
8880   leaks and access to uninitialised variables.
8882 * apitest: Sped up deldoc4.
8884 * btreetest: Removed superfluous `/'s from constructed paths.
8886 * quartztest: adddoc2 now checks that there weren't any extra values created.
8888 backends:
8890 * quartz: don't start the document's TermIterator from scratch on every
8891   iteration in replace_document().  Should be a small performance win.
8893 * quartz: Pass 0 for the lexicon/postlist table when creating a termlist just
8894   to find the doc length.
8896 * quartz: quartz_table_entries.cc: Removed rather unnecessary use of
8897   const_cast.
8899 * quartz: quartz_table.cc: Removed unused variable.
8901 * quartz: Improved encapsulation of class Btree.
8903 build system:
8905 * libbtreecheck.la now has an explicit dependency on libxapian.la.
8907 * We now set the dependencies for libxapian correctly so that linking
8908   applications will pull in other required libraries.
8910 * matcher/Makefile.am: Ship networkmatch.cc even if "make dist" is run from a
8911   tree with the remote backend disabled.
8913 * configure.in: Sorted out tests for gethostbyname and gethostbyaddr using
8914   standard autoconf macros.
8916 * configure.in: If fork is found, but socketpair isn't, automatically disable
8917   the remote backend rather than configure dying with an error.
8919 * autoconf/: Removed various unused autoconf macros.
8921 portability:
8923 * xapian-config.in: Link with libxapianqueryparser before libxapian, since
8924   that's the dependency order.
8926 * Removed or replaced uses of <iostream> and <iosfwd> in the library sources
8927   - we don't need or want the library to pull in cin and friends.
8929 * extra/queryparser.yy: Fixed to build with Sun's C++ compiler.
8931 * Make the dummy source file C++ rather than C so that automake tells libtool
8932   that this is a C++ library - vital for correct linking on some platforms.
8934 * Makefile.am: Pass -no-undefined to libtool so that we can build build a DLL
8935   on MS Windows.
8937 * configure.in: Fixed check for socketpair - we were automatically disabling
8938   the remote backend on platforms where socketpair is in libsocket
8939   (such as Solaris).
8941 * Use O_BINARY for binary I/O if it exists.
8943 * common/utils.h: mkdir() only takes one argument on mingw.
8945 * common/utils.h,testsuite/backendmanager.cc: Touch file using open() rather
8946   than system().
8948 * common/utils.cc: Fixed to compile if snprintf isn't available.
8950 documentation:
8952 * docs/scalability.html: Fixed slip (32GB should be 32TB);  Added note about
8953   Linux 2.4 and ext2 filesize limits.
8955 * PLATFORMS: Updated.
8957 * NEWS: Fixed a few typos.
8959 bindings:
8961 * xapian.i: using namespace std in SWIG parsed segment to sort out typemaps.
8963 packaging:
8965 * Updated RPM packaging.
8967 omega:
8969 * omega: $topdoc now ensures the match has been run; $date no longer ensures
8970   the match has been run.
8972 * omega: Fixed to build with Sun's C++ compiler.
8974 Xapian 0.7.3 (2003-08-08):
8976 API:
8978 * MSetIterator: Fixed MSetIterator::get_document() to work when get_mset() was
8979   called with first != 0 (regression test msetiterator3).
8981 testsuite:
8983 * internaltest: Changed test exception1 to actually test something (hopefully
8984   what was originally intended!)
8986 * Added long option support to the testsuite programs (and quartzdump).
8988 * Testsuite now builds on platforms for which we use our own stringstream
8989   implementation.
8991 * Only use \r in test output if the output is a tty.
8993 * Increased default timeout used by tests running on the remote backend from 10
8994   seconds to 5 minutes to avoid tests failing just because the machine running
8995   them is slow and/or busy.
8997 * Fixed check for broken exception handling - we were getting "Xapian::"
8998   prefixed to one version and not on the other.
9000 * tests/runtest: Set srcdir if it isn't already to make it easy to manually run
9001   test programs from a VPATH build.
9003 * apitest: Check termfreq in allterms4.
9005 backends:
9007 * quartz: Fixed allterms TermIterator to not give duplicate terms when a
9008   posting list is chunked; added regression test (allterms4).
9010 * quartz: Check for EINTR when reading or writing blocks and retry the
9011   operation.  This should mean quartz won't fail falsely if a signal is
9012   received (e.g. if alarm() is used).
9014 build system:
9016 * Renamed libomqueryparser to libxapianqueryparser - for backward compatibility
9017   we still provide a library with the old name for now.
9019 * xapian.m4: Added XO_LIB_XAPIAN to replace OM_PATH_XAPIAN.  XO_LIB_XAPIAN will
9020   automagically enable use of "xapian-config --ltlibs" if A[CM]_PROG_LIBTOOL is
9021   used in configure.in.
9023 * xapian-config: Now supports linking with libtool - using libtool means that
9024   the run-time library path is set and that you can now link with an
9025   uninstalled libxapian.  Also xapian-config will now work once xapian-core's
9026   configure has been run, rather than only after "make all".
9028 * xapian-config: Now automatically tries to link libxapianqueryparser too.
9030 * bootstrap: Removed bootstrap scripts in favour of top-level bootstrap which
9031   creates a top-level configure you can optionally use to configure all checked
9032   out Xapian modules with one command, and which creates a top level Makefile
9033   to build all checked out Xapian modules with one command.
9035 * Added versioning information to libxapian and libxapianqueryparser.
9037 * xapian-example/omega: Use libtool and XO_LIB_XAPIAN so we can link with an
9038   uninstalled Xapian, and so the run time load path gets built into the
9039   binaries (no need to set LD_LIBRARY_PATH just because you install Xapian with
9040   a non-standard prefix).
9042 * configure: Stop the API documentation from being regenerated when
9043   include/xapian/version.h changes (since it's generated by configure).
9045 * Fixed "make dist" in VPATH builds.
9047 portability:
9049 * common/getopt.h: #include <stdlib.h>, <stdio.h>, and <unistd.h> before
9050   defining getopt as a macro - this avoids problems with clobbering prototypes
9051   of getopt() in system headers.
9053 * bin/quartzcompact.cc: Need stdio.h for rename().
9055 * languages/Makefile.am: Fixed compilation for compilers other than GCC.
9057 * Moved rset serialisation into a method of RSet::Internal, so
9058   omrset_to_string() is now just glue code.  This eliminates the need for it to
9059   be a friend of RSet::Internal which Sun's C++ compiler didn't seem to be able
9060   to cope with.
9062 documentation:
9064 * Fix incorrect documentation comment for Enquire::set_set_forward().  (Looked
9065   like a cut&paste error)
9067 * COPYING: Updated FSF address, and reinstated missing section: "How to Apply
9068   These Terms to Your New Programs"
9070 * PLATFORMS: Updated some linux results: RH7.3 on x86, and Debian on alpha and
9071   arm; Updated FreeBSD success report; Updated with results from the tinderbox.
9073 * docs/mkdoc.pl: Don't choke on a comment at the end of the DIST_SUBDIRS line
9074   in a Makefile.am.
9076 * HACKING: Improved note about why libtool 1.5 is needed.
9078 * HACKING: Added note about additional tools needed for building a
9079   distribution.
9081 bindings:
9083 * Fixed VPATH builds.
9085 * python: Fixed to link with libomqueryparser.
9087 * guile,tcl8: Updated typemaps to SWIG 1.3 style.
9089 omega:
9091 * omindex.cc: Added missing `#include <errno.h>'.
9093 * omindex/scriptindex: Fixed signed character issue in accent normalisation.
9095 * omindex: fixed memory and file descriptor leak on indexing a zero-sized file.
9097 * omindex: Fixed sense of test for unreadable files.
9099 * omindex: Improved log messages to distinguish re-indexed/added.
9101 * omindex,omega,scriptindex: Fixed to compile with mingw.
9103 * omindex: Fixed to compile with GNU getopt so we can build on non-glibc
9104   platforms.
9106 examples:
9108 * msearch: Quick fix to get mingw building going.
9110 * getopt: Copied over our fixes for better C++ compatibility.
9112 * simplesearch: Stem search terms.
9114 * simpleindex: Fixed not to run words together between lines.
9116 * simpleindex: Create database if it doesn't exist.
9118 Xapian 0.7.2 (2003-07-11):
9120 testsuite:
9122 * Fixed NULL pointer dereference when a test threw an unexpected exception.
9124 backends:
9126 * Quartz: When asked to create a quartz database, try to create the directory
9127   if it doesn't already exist.  Then we don't have to do it in every single
9128   Xapian program which wants to create a database...
9130 portability:
9132 * common/getopt.h: Fixed to work better with C++ compilers on non-glibc
9133   platforms.
9135 * common/utils.h: missing #include <ctype.h>
9137 * Quartz: Defined _XOPEN_SOURCE=500 for GLIBC so we get pread() and pwrite().
9139 * common/utils.h: Improved mingw implementation of rmdir().
9141 documentation:
9143 * PLATFORMS: Added MacOS X 10.2 success report.
9145 * Improvements to doxygen-generated documentation.
9147 bindings:
9149 * Moved to separate xapian-bindings module.
9151 * Added configure check for SWIG version (require at least 1.3.14).
9153 * bindings/swig/xapian.i: Fixed over-enthusiastic automatic conversion of
9154   termname to std::string.
9156 * PHP4 bindings much closer to working once again; updated guile and tcl8
9157   somewhat.
9159 omega:
9161 * omega: If the same database is listed more than once, only search the first
9162   occurrence.
9164 * omega: use snprintf to help guard against buffer overflows.
9166 Xapian 0.7.1 (2003-07-08):
9168 testsuite:
9170 * Fixed testsuite programs to not try to use "rm -rf" under mingw.
9172 backends:
9174 * Quartz: Use pread() and pwrite() on platforms which support them.  Doing so
9175   avoids one syscall per block read/write.
9177 * Quartz block count is now unsigned, which should nearly double the size of
9178   database for a given block size.  Not tested this yet.
9180 omega:
9182 * omindex: Fixed compilation problem in 0.7.0.
9184 documentation:
9186 * Added new document discussing scalability issues.
9188 * PLATFORMS: Updated.
9190 Xapian 0.7.0 (2003-07-03):
9192 API:
9194 * Moved everything into a Xapian namespace, which the main header now being
9195   xapian.h (rather than om/om.h).
9197 * Three classes have been renamed for better naming consistency:
9198   OmOpeningError is now Xapian::DatabaseOpeningError, OmPostListIterator is
9199   now Xapian::PostingIterator, and OmPositionListIterator is now
9200   Xapian::PositionIterator.
9202 * xapian.h includes <iosfwd> rather than <iostream> - if you were relying on
9203   the implicit inclusion, you'll need to add an explicit "#include <iostream>".
9205 * Replaced om_termname with explicit use of std::string - om_termname was just
9206   a typedef for std::string and the typedef doesn't really buy us anything.
9208 * Older code can be compiled by continuing to use om/om.h which uses #define
9209   and other tricks to map the old names onto the new ones.
9211 * Define XAPIAN_VERSION (e.g. 0.7.0), XAPIAN_MAJOR_VERSION (e.g. 0), and
9212   XAPIAN_MINOR_VERSION (e.g. 7).
9214 * Updated omega and xapian-examples to use Xapian namespace.
9216 queryparser:
9218 * Xapian::QueryParser: Accent normalisation added; Improved error reporting;
9219   Fixed to handle the most common examples found in the wild which used to give
9220   "parse error".
9222 bindings:
9224 * Python bindings brought up to date - use ./configure --enable-bindings to
9225   build them.  Requires Python >= 2.0 - may require Python >= 2.1.
9227 * Enabled optional building of bindings as part of normal build process.  Old
9228   Perl and Java bindings dropped; for Perl, use Search::Xapian from CPAN; Java
9229   JNI bindings will be replaced with a SWIG-based implmentation.
9231 internal implementation changes:
9233 * Removed one wrapper layer from the internal implementation of most API
9234   classes.
9236 * Xapian::Stem now uses reference counted internals.
9238 * Internally a lot of cases of unnecessary header inclusion have been removed
9239   or replaced with forward declarations of classes.  This should speed up
9240   compilation and recompilation of the Xapian library.
9242 * Suppress warnings in Snowball generated C code.
9244 * Reworked query serialisation in the remote backend so that the code is now
9245   all in one place.  The serialisation is now rather more compact and no longer
9246   relies on flex for parsing.
9248 testsuite:
9250 * Moved all the core library tests to tests subdirectory.
9252 * apitest now allows backend to be specified with "-b" rather than having to
9253   mess with environmental variables.
9255 * Testsuite programs can now hook into valgrind for leak checking, undefined
9256   variable checking, etc.
9258 backends:
9260 * Fixed parsing of port number in remote stub databases.
9262 * Quartz: Improved error message when asked to open a pre-0.6 Quartz database.
9264 * Quartz backend: Workaround for shared_level problem turns out to
9265   be arguably the better approach, so made it permanent and tidied up
9266   code.
9268 build system:
9270 * Build system fixed to never leave partial files in place of the expected
9271   output if a build is interrupted.
9273 * quartzcheck, quartzdump, and quartzcompact are now built by "make" rather
9274   than only by "make check".
9276 * xapian-config: Removed --prefix and --exec-prefix - you can't reliably
9277   install Xapian with a different prefix to the one it was configured with,
9278   yet these options give the impression you can.
9280 miscellaneous:
9282 * Fixed sending debug output to a file with XAPIAN_DEBUG_LOG with a value which
9283   didn't contain "%%" (%% expands to the current PID).
9285 * Fixed Xapian::MSetIterator::get_collapse_count() to work as intended.
9287 omega:
9289 * omindex,scriptindex: Normalise accents in probabilistic terms.
9291 * omindex: Read output from pstotext and pdftotext via pipes rather
9292   than temporary files to side-step the whole problem of secure temporary file
9293   creation; Use pdfinfo to get the title and keywords from when indexing a PDF;
9294   Safe filename escaping tweaked to not escape common safe punctuation.
9296 * omindex: Implement an upper limit on the length of URL terms - this is a
9297   slightly conservative 240 characters.  If the URL term would be longer than
9298   this, its last few bytes are replaced by a hash of the tail of the URL.  This
9299   means that (apart from hopefully very rare collisions) urlterms should still
9300   be unique ids for documents.  This is forward and backward compatible for
9301   URLs less than 240 characters.
9303 * omindex: Clean up processing of HTML documents:
9304   - Ignore the contents of <script> and <style> tags in HTML.
9305   - Strip initial whitespace in each tag in an HTML document.
9306   - Try not to split words in half when truncating title and summary.
9308 * query.cc: Set STEM_LANGUAGE near the start of the file so it's easy
9309   for users to change until we get better configurability.
9311 * omega: Replaced half-hearted logging support with flexible OmegaScript-based
9312   approach with new $log command.  Also added $now to allow the current
9313   date/time to be logged.
9315 * templates/xml: added collapse info to xml template.
9317 documentation:
9319 * Assorted minor documentation improvements.
9321 * PLATFORMS: Updated.
9323 rpms:
9325 * Improved RPM packaging of xapian-core and omega.
9327 Xapian 0.6.5 (2003-04-10):
9329 * OmEnquire: optimised the handling when sort_bands == 1 and fixed incorrect
9330   results in this and some other sorting cases; added some sorting testcases.
9332 * OmMSetIterator: added get_collapse_count() which returns a lower bound on
9333   the number of items which were removed by collapsing onto the current item.
9335 * OmStem: added default OmStem constructor and "none" language.  Both of these
9336   give a stemmer object which leaves terms unchanged which should allow for
9337   simpler logic in programs using Xapian.  The default constructor also removes
9338   the need to mess with pointers in some cases.
9340 * Automatically disable the remote backend if we don't have fork() since the
9341   remote backend requires it in several places.
9343 * Fixed to build with debug enabled.
9345 * testsuite: fixed to still build when some backends are disabled.
9347 * extra/parsequerytest.cc: Fixed to build with GCC 2.95.
9349 * Testsuite: Added regression test for Quartz bug which caused problems with
9350   long terms on machines with signed chars.
9352 * testsuite/index_utils.cc: Handling of ^x was just downright wrong due to a
9353   typo.
9355 * Improved portability: Fix for 64 bit machines.  Fixed btreetest to build with
9356   older compilers lacking <sstream>.  Xapian is now much closer to building
9357   with Sun's CFront-based Sun Pro C++ compiler, and with a Linux to mingw
9358   cross-compiler.
9360 * PLATFORMS: Updated with the results of many test builds.
9362 * Improved RPM packaging of xapian-core and omega.
9364 * Documentation: Use http://www.doxygen.org/ as URL for doxygen; Fixed bad link
9365   to our own website in overview.html; code_structure.html now only includes
9366   directories in the build system.
9368 * HACKING: updated.
9370 * Removed bugs/todo.xml, TODO, TODO.release, docs/todo.html, and
9371   docs/todo-release.html from the distribution.  Bugs and todo items will be
9372   tracked in Bugzilla instead.
9374 * Install docs in /usr/share/doc/xapian-core instead of /usr/share/xapian-core.
9376 * omega: If xP and P are both empty, there may be a boolean query, so don't
9377   force first page of hits.
9379 * omega: Fixed off-by-one error in rounding down topdoc - it was possible to
9380   get to an empty page of hits if there were exactly a multiple of HITSPERPAGE
9381   matches and the matcher over-estimated the number of matches and Omega
9382   displayed page links.
9384 * omega: Fixed handling of multiple DB parameters to be as documented.
9386 * omega: Added $collapsed to report get_collapse_count() for the current hit.
9388 * omega: Added $transform{} which does regexp manipulation (currently disabled
9389   until configure tests for regexp library are added)
9391 * omega: Added $uniq{} to eliminate duplicates from a sorted list.
9393 * omega: Don't force page 1 for a query with repeated terms!
9395 * omega: removed duplicates from terms listed in term frequencies.
9397 * omega: Added cgi parameter COLLAPSE to collapse on key values
9399 * omega: Added $value{key[,docid]} support to omegascript
9401 * omega: Renamed DATE1, DATE2, and DAYSMINUS to the more meaningful START, END,
9402   and SPAN (NB SPAN is days before END, or after START, or before today -
9403   whereas SPAN was before *DATE1* or before today).  The old parameters names
9404   are supported (with the original semantics) for now.
9406 * omega: Actually install documentation!
9408 * templates/query: propagate B boolean filters
9410 * templates/godmode: removed link to EuroFerret image
9412 * templates/godmode: added value dumping, for values from 0-255
9414 * omindex: Report correct version number (was hard-wired to 1.0!)
9416 * scriptindex: Allow '_' in fieldnames.  Diagnose bad characters in fieldnames
9417   better.
9419 * dbi2omega: Added DBUSER and DBPASSWD environmental variable support so that
9420   password protected DBs can easily be used
9422 * scriptindex.cc: added missing "#include <stdio.h>" which caused builds
9423   to fail for some platforms.
9425 Xapian 0.6.4 (2002-12-24):
9427 * Quartz backend: Fixed double setting of position list when updating a
9428   document with term position information (overall result was correct, just
9429   inefficient); when deleting a position_list, don't check if it's empty,
9430   just ask the layer below to delete it and let it handle the case when
9431   there's nothing to delete; Fixed unpacking of termlist on platforms where
9432   char is signed.
9434 * OmQueryParser: Added support for searching probabilistic fields (using
9435   <field>:<term>); the unstem multimap now includes "." on the end of a
9436   term if it was there in the query.
9438 * Don't include "om.h" as a dependency for the api docs since it's generated
9439   a configure time and the dependency was forcing users to regenerate the
9440   documentation, which requires doxygen to be installed.
9442 * Bindings: Python bindings updated to work with the updated API (still
9443   disabled by default).
9445 * Muscat 3.6 backend: Fixed to build with the new database factory functions;
9446   fixed compilation warnings; Muscat 3.6 DA and DB databases don't support
9447   positional information.  Instead of throwing an exception when we try to
9448   access it, return an empty position list (like a quartz database with no
9449   position information would).  This allows copydatabase to be used to convert
9450   a Muscat 3.6 database to a quartz one.
9452 * Documentation: quartzdesign and todo list updated.
9454 * quartzcheck: default mode changed to "v" rather than "+", since "+" is too
9455   verbose for a btree of any size; if you pass a quartz database directory,
9456   quartzcheck will now check all the tables which make up a quartz database.
9458 * quartzcompact: new tool which makes a copy of a quartz database with full
9459   compaction turned on - this results in a smaller database which is faster
9460   to search.  The next update will result in a lot of block splitting though
9461   (since all blocks are as full as possible).
9463 * omega: Added $unstem to map a stemmed term to the form(s) used in the query;
9464   $queryterms now only includes the first occurrence of each stemmed form;
9465   $prettyterm makes use of the unstem map; prefer MINHITS to MIN_HITS and
9466   RAWSEARCH to RAW_SEARCH since none of the other CGI parameter names have
9467   _ separating words (continue to support old names for now); fixed default
9468   template to not generate topterms twice, and fixed topterms to not stick
9469   outside the green box; corrected omegascript docs - it's $setrelevant
9470   not $set_relevant.
9472 * scriptindex: index=nopos with new indexnopos action; index and indexnopos now
9473   take an optional prefix argument; index=nopos is handled specially for
9474   backwards compatibility; added new data action to generate terms for date
9475   range searching.
9477 Xapian 0.6.3 (2002-12-14):
9479 * Updated PLATFORMS and todo list.  Noted in HACKING that Bison 1.50 seems to
9480   work with Xapian.
9482 * OmQueryParser now creates an "unstem" multimap to allow probabilistic
9483   query terms to be converted back to the form the user originally typed.
9485 * Updated documentation for remote protocol description and the quickstart
9486   tutorial which were both very out of date.
9488 * No longer use OmSettings to pass matcher parameters.  This completes the
9489   removal of OmSettings.
9491 * Added workaround for problem with cursors sharing levels in the btree.
9492   This should fix sporadic problems with large databases (small databases
9493   have fewer btree levels so aren't affected).
9495 * Stub databases now work again, though with a different format.  The new
9496   format allows multiple databases to be specified in the stub file.
9498 * OmEnquire::get_eset() now takes a flags argument of bit constants |-ed
9499   together instead of 2 bools.
9501 * Applied Martin Porter's better fix for the btree sequential addition bug
9502   which Richard fixed a few months ago.  Richard's fix resulted in a correct
9503   btree, but didn't always utilise space as efficiently as possible.
9505 * Fixed the remote backend to handle weighting schemes after the OmSettings
9506   changes.  You can now even implement your own weighting scheme and use it
9507   with the remote backend provided you register it with SocketServer at
9508   runtime (this feature has been on the todo list for ages).
9510 Xapian 0.6.2 (2002-12-07):
9512 * Set env var XAPIAN_SIG_DFL to stop the testsuite installing its
9513   signal handler (may be useful with some debugging tools).
9515 * backends/quartz/btree.cc: max_item_size wasn't being set due to
9516   some over-zealous code pruning.  It was defaulting to 0, and
9517   was causing the code to write off the end of allocated memory
9518   blocks.
9520 * matcher/localmatch.cc: fixed handling of wtscheme() - we were
9521   trying to use it for the extra weights, and then double
9522   deleting it!
9524 * common/omdebug.cc,common/omdebug.h: Fixed permissions on newly
9525   created log file (was getting 000!); Simplified class internals;
9526   Renamed env vars: OM_DEBUG_FILE is now XAPIAN_DEBUG_LOG,
9527   OM_DEBUG_TYPES is now XAPIAN_DEBUG_FLAGS (old versions still work
9528   for now).
9530 * testsuite/testsuite.cc: Fixed so running "gdb .libs/apitest"
9531   finds srcdir (for an in-tree build at least).
9533 * Fixed to compile with --enable-debug=full.
9535 * docs/remote.html: Updated from OmSettings to factory functions.
9537 * PLATFORMS: ixion is actually Linux 2.2.
9539 * OmWritableDatabase now has a default constructor.
9541 * Weighting scheme now specified by passing OmWeight object to OmEnquire.
9542   This also allows user weighting schemes (just subclass OmWeight and
9543   pass in an instance of this new class).  [This doesn't currently work
9544   with the remote backend.]
9546 * No longer use OmSettings to specify parameters for constructing databases.
9547   Instead there's a factory function for each database type - temporary naming
9548   scheme is OmXxx__open(), mostly because it's easy to grep for later.
9549   Instead of create and overwrite flags, we pass in a value - a new possible
9550   opening mode is "create or open".  [At present stub databases and the
9551   machinery in InMemory to allow the multierrhandler1 test aren't working.
9552   Everything else should be.]
9554 * OmEnquire::get_eset() takes parameters instead of an OmSettings object.
9556 * Fixed reversed sense of use_query_terms (and fixed reversed sense test in
9557   apitest which meant this wasn't spotted).
9559 * Documentation: Link to annotated class lists in doxygen generated
9560   documentation instead of the rather empty index pages; added doxygen
9561   markup so that apidoc now documents header files; updated todo list.
9563 * Documentation: intro doc thing was very out of date in places - fixed.
9565 * Omega: index .php files as HTML, with the PHP code stripped out; omindex
9566   return non-zero return code if an unexpected exception is caught; fixed
9567   HTML parser to not read one character past the end of the document in
9568   some cases; updated in line with OmSettings related changes to the API;
9569   Fixed $dbname to return "default" for the default database instead of "";
9570   templates/query: Removed now unused xDEFAULTOP hidden field, and superfluous
9571   "}"; dbi2omega now more efficient and can be restricted to listed fields.
9573 Xapian 0.6.1 (2002-11-28):
9575 * Fixed to compile with GCC 3.0.
9577 * PLATFORMS: Updated.
9579 Xapian 0.6.0 (2002-11-27):
9581 * Quartz database backend: lexicon disabled (./configure CXXFLAGS=-DUSE_LEXICON
9582   to reenable it), and encoding schemes simplified and made more compact;
9583   extended and added test cases; minimum block size is now 2048 bytes (as
9584   documented before, but now we actually enforce this); btree checking code
9585   split off and only linked in when required; tidied up btreetest's output.
9587 * Replaced our stemmers with those from Snowball.  These give better results,
9588   and are actively maintained by Martin Porter (who wrote the original Xapian
9589   stemmers too).  It also means that Xapian now has stemmers for Finnish,
9590   and Russian, and an implementation of Lovins' English stemmer.
9592 * Assorted improvements to the documentation, especially the documentation
9593   of the internals of the Quartz backend.
9595 * Removed the three uses of RTTI (typeid() and dynamic_cast<>) - one was
9596   totally superfluous, and the other two easily avoided.
9598 * Omega and simpleindex example: limit probabilistic term length to 64
9599   characters to stop the index filling up with junk terms which nobody will
9600   ever search for.
9602 * Omega: Added dbi2omega perl script to dump any database which perl DBI can
9603   access into the dump format expected by scriptindex.
9605 Xapian 0.5.5 (2002-12-04):
9607 * Fixed compilation with --enable-debug.
9609 * Minor documentation updates.
9611 * Omega: Fixed paging on default database; removed xDEFAULTOP from the query
9612   template as it's no longer used; removed bogus unmatched '}' from query
9613   template; added dbi2omega perl script to dump any database which perl DBI
9614   can access into the dump format expected by scriptindex; limit length of
9615   probabilistic terms generated to 64 characters.
9617 Xapian 0.5.4 (2002-10-16):
9619 * Fixed a compilation error with "make check" when using GCC 3.2.
9621 * PLATFORMS: checked 0.5.3 works on OpenBSD and Solaris 7.
9623 Xapian 0.5.3 (2002-10-12):
9625 Notable changes: Improvements to the test suite, and internal code cleanups:
9627 * Internal code cleanups on Quartz Btree implementation.
9629 * Minor documentation updates (TODO and PLATFORMS updated; Martin Porter's
9630   stemming paper removed - see the Snowball site for background stemmer
9631   info).
9633 * Implemented QuartzAllTermsList::get_approx_size().
9635 * Removed a couple of occurrences of "using std::XXX;" from externally
9636   visible headers.
9638 * With GCC, add warning flags "-Wall -W" rather than "-Wall -Wunused" (-Wall
9639   implies -Wunused anyway).  Fixed all the warnings this throws up, except in
9640   languages/ (that code is to be replaced with Snowball soon).
9642 * Test suite: Disable colour test output if stdout isn't a terminal and
9643   reworked check for broken exception handling as the previous  version never
9644   seemed to fire.  Other assorted minor improvements.
9646 * include/om/om.h is now removed on "make distclean" rather than "make clean".
9648 Xapian 0.5.2 (2002-10-06):
9650 Further improvements to documentation and portability:
9652 * docs/: converted all text docs to HTML (except omsettings which will
9653   has odd markup (LaTeX?) and will probably soon be obsolete anyway).
9655 * remote backend: Fixed handling of timeouts which are now in the past - fixes
9656   test failures with redhat/x86.
9658 * quartz backend: now works on 64 bit platforms.
9660 * test suite: try to spot mishandled exceptions and stop them causing bogus
9661   OMEXCEPT failures.
9663 Xapian 0.5.1 (2002-10-02):
9665 This release fixes features improved documentation and some build system
9666 portability fixes.
9668 * PLATFORMS: updated with more test results.
9670 * docs/: tidied up layout of HTML documentation; converted the notes about
9671   BM25 into HTML; updated stemmer docs to reflect intention to use Snowball
9672   instead; included HTML versions of quickstart*.cc.
9674 * automake 1.6.3 and autoconf 2.54 are now required for those working
9675   from CVS to fix a problem with the generated Makefiles and Solaris
9676   make.
9678 * net/Makefile.am: Fixed building of readquery.cc from readquery.ll.
9680 * buildall script is now deprecated - use the new streamlined bootstrap script
9681   in preference.
9683 Xapian 0.5.0 (2002-09-20):
9685 The last release of the software that is now known as Xapian was OmSee 0.4.1 on
9686 November 24th 2000, not far from 2 years ago.
9688 There's been a significant amount of development in this time, so we've
9689 summarised the most notable changes and improvements:
9691   * The project is now called "Xapian". We've renamed the modules in the light
9692     of this change:
9694       + "om" is now "xapian-core"
9695       + "om-examples" is now "xapian-examples", and now contains small,
9696         instructive examples which demonstrate how to use Xapian to implement
9697         particularly features.
9698       + Added "xapian-applications" which contains larger sample applications
9700   * Much improved build system - should now build "out of the box" on many Unix
9701     platforms. Can now VPATH build with vendor tools on most platforms. Builds
9702     as cleanly as we can achieve with GCC 2.95.* (some bogus warnings due to
9703     compiler bugs). Should build without warnings on GCC 3.0, 3.1, and 3.2.
9705   * If using GCC, om/om.h now contains a check that the compiler used to build
9706     Xapian and the compiler used to build the application have compatible C++
9707     ABIs. So you get a clear error message early from the first attempt to
9708     compile a file rather than a confusing error from the linker near the end
9709     of the build.
9711   * RPM packages are now available. We intend to prepare Debian packages in the
9712     near future too.
9714   * xapian-config no longer support "--uninst". It's hard to make this work
9715     reliably and portably, and the effort is better expended elsewhere.
9716     Configure with a prefix and install to a temporary directory instead.
9718   * Xapian can now work with files > 2Gb on OSes which support them.
9720   * Restructured and reworked documentation.
9722   * Removed thread locks. We intend to be "thread-friendly" so different
9723     threads can access different objects without problems. In the rare event
9724     that you want to concurrently call methods on the same object from
9725     different threads you need to create a mutex and lock it. Thus the thread
9726     lock overhead is only incurred when it's necessary.
9728   * Indexgraph removed from core library. It will reappear as an add-on library
9729     at some point.
9731   * Omega's query parser has now been reworked as a separate library.
9733   * Terminology change - "keys" are now known as "values" to avoid confusion,
9734     since they're not like keys in a relational database. The exception is when
9735     a value is used as a key in some operation, e.g. "match_collapse_key".
9737   * Database backends:
9739       + Auto backend: can now be used to create a new database.
9740       + Auto backend: added support for "stub" databases - a text file
9741         specifying the settings for the database to be opened (particularly
9742         useful for allowing easy access to specific remote databases).
9743       + Quartz backend: many fixes and improvements, and the code has been
9744         cleaned up a lot. Implemented deleting of items from postlists.
9745       + Remote backend: implemented term_exists() and get_termfreq();
9746       + Multi-backend: the document length is now fetched from the sub-postlist
9747         rather than the database, which provides a huge speed-up in some cases.
9748       + Sleepycat backend: this experimental backend has been removed.
9749       + Muscat 3.6 backends: now disabled by default.
9751   * Tests:
9753       + Test cases added for most bug fixes and new features.
9754       + stemtest: rewritten in C++ rather than part C++, part perl. Now 15%
9755         faster.
9756       + includetest: removed - it's no longer useful now the code has matured.
9757       + Removed problematic leak checking from testsuite. We plan to use
9758         valgrind instead soon.
9760   * Matcher:
9762       + Fixed several matcher bugs which could cause incorrect results in some
9763         situations.
9764       + Fix bug in expander due to nth_element being called on the wrong
9765         element.
9766       + Added sorting within relevance bands to the matcher.
9767       + Matcher now calculates percentages differently, such that 100%
9768         relevance is actually achievable.
9769       + Matcher now uses a min-heap rather than nth-element to maintain the
9770         proto-mset. This is cleaner and more efficient.
9771       + New operator OP_ELITE_SET replaces match_max_or_terms option.
9772       + Implemented multiple XOR queries.
9773       + Add a new query operator, OP_WEIGHT_CUTOFF, which returns only those
9774         documents from a query which have a weight greater than a specified
9775         cutoff value.
9776       + Removed OmBatchEnquire from system: it may return at a later date, but
9777         for now it is simply out of date and a maintenance liability, and
9778         gives no significant advantage.
9779       + Added experimental match bias functors.
9781   * The API has been cleaned up in various places:
9783       + OmDocumentContents and OmIndexDoc merged to become OmDocument
9784       + OmQuery interface cleaned up
9785       + OmData and OmKey removed - methods which used them now just pass a
9786         string instead
9787       + OmESetItem replaced by OmESetIterator; OmMSetItem by OmMSetIterator;
9788         om_termname_list by OmTermIterator
9789       + OmDocumentTerm and OmDocumentParams removed
9790       + OmMSet::mbound replaced by OmMSet::matches_
9791         {lower_bound,estimated,upper_bound}, giving more information
9792       + Xapian iterators now have default constructors
9793       + Most API classes now have reference counted internals, so assignment
9794         and copying are cheap
9795       + OmStem now has copy constructor and assignment operator
9796       + and more...