Fix t/symboltest.t
[xapian] / xapian-core / NEWS
1 Xapian-core 1.2.21 (2015-05-20):
2
3 API:
4
5 * QueryParser: Extend the set of characters allowed in the start of a range to
6   be anything except for '(' and characters <= ' '.  This better matches what's
7   accepted for a range end (anything except for ')' and characters <= ' ').
8   Reported by Jani Nikula.
9
10 matcher:
11
12 * Reimplement OP_PHRASE for non-exact phrases.  The previous implementation was
13   buggy, giving both false positives and false negatives in rare cases when
14   three or more terms were involved.  Fixes #653, reported by Jean-Francois
15   Dockes.
16
17 * Reimplement OP_NEAR - the new implementation consistently requires the terms
18   to occur at different positions, and fixes some previously missed matches.
19
20 * Fix a reversed check for picking the shorter position list for an exact
21   phrase of two terms.  The difference this makes isn't dramatic, but can be
22   measured (at least with cachegrind).  Thanks to kbwt for spotting this.
23
24 * When matching an exact phrase, if a term doesn't occur where we want, use
25   its actual position to advance the anchor term, rather than just checking
26   the next position of the anchor term.
27
28 brass backend:
29
30 * Fix cursor versioning to consider cancel() and reopen() as events where
31   the cursor version may need incrementing, and flag the current cursor version
32   as used when a cursor is rebuilt.  Fixes #675, reported by Germán M. Bravo.
33
34 * Avoid using file descriptions < 3 for writable database tables, as it risks
35   corruption if some code in the same process tries to write to stdout or
36   stderr without realising it is closed.  (Partly addresses #651)
37
38 chert backend:
39
40 * Fix cursor versioning to consider cancel() and reopen() as events where
41   the cursor version may need incrementing, and flag the current cursor version
42   as used when a cursor is rebuilt.  Fixes #675, reported by Germán M. Bravo.
43
44 * Avoid using file descriptions < 3 for writable database tables, as it risks
45   corruption if some code in the same process tries to write to stdout or
46   stderr without realising it is closed.  (Partly addresses #651)
47
48 flint backend:
49
50 * Fix cursor versioning to consider cancel() and reopen() as events where
51   the cursor version may need incrementing, and flag the current cursor version
52   as used when a cursor is rebuilt.  Fixes #675, reported by Germán M. Bravo.
53
54 remote backend:
55
56 * Fix sort by value when multiple databases are in use and one or more are
57   remote.  This change necessitated a minor version bump in the remote
58   protocol.  Fixes #674, reported by Dylan Griffith.  If you are upgrading a
59   live system which uses the remote backend, upgrade the servers before the
60   clients.
61
62 build system:
63
64 * The compiler ABI check in the public API headers now issues a warning
65   (instead of an error) for an ABI mismatch for ABI versions 2 and later
66   (which means GCC >= 3.4).  The changes in these ABI versions are bug fixes
67   for corner cases, so there's a good chance of things working - e.g. building
68   xapian-bindings with GCC 5.1 (which defaults to ABI version 8) against
69   xapian-core built with GCC 4.9 (which defaults to ABI version 2) seems to
70   work OK.  A warning is still useful as a clue to what is going on if linking
71   fails due to a missing symbol.
72
73 * xapian-config,xapian-core.pc: When compiling with xlC on AIX, the reported
74   --cxxflags/--cflags now include -D_LARGE_FILES=1 as this is defined for the
75   library, and defining it changes the ABI of std::string with this compiler,
76   so it must also be defined when building code using the Xapian API.
77
78 * xapian-core.pc: Include --enable-runtime-pseudo-reloc in --libs output for
79   mingw and cygwin, like xapian-config does.
80
81 * xapian-core.pc: Fix include directory reported by `pkg-config --cflags`.
82   This bug was harmless if xapian-core was installed to a directory which was
83   on the default header search path (such as /usr/include).
84
85 * xapian-config: Fix typo so cached result of test in is_uninstalled() is
86   actually used on subsequent calls.  Fixes #676, reported (with patch) by Ryan
87   Schmidt.
88
89 * configure: Changes in 1.2.19 broke the custom macro we use to probe for
90   supported compiler flags such that the flags never got used.  This release
91   fixes this problem.
92
93 * configure: Set default value for AUTOM4TE before AC_OUTPUT so the default
94   will actually get used.  Only relevant when building in maintainer mode
95   (e.g. from git).
96
97 * soaktest: Link with libtool's '-no-install' or '-no-fast-install', like we
98   already do for other test programs, which means that libtool doesn't need to
99   generate shell script wrappers for them on most platforms.
100
101 documentation:
102
103 * API documentation: Minor wording tweaks and formatting improvements.
104
105 * docs/deprecation.rst: Add deprecation of omindex --preserve-nonduplicates
106   which happened in 1.2.4.
107
108 * HACKING: Update URL.
109
110 * HACKING: libtool 2.4.6 is now used for bootstrapping snapshots and releases.
111
112 tools:
113
114 * xapian-compact: Make sure we open all the tables of input databases at the
115   same revision.  (Fixes #649)
116
117 * xapian-metadata: Add 'list' subcommand to list all the metadata keys.
118
119 * xapian-replicate: Fix connection timeout to be 10 seconds rather than 10000
120   seconds (the incorrect timeout has been the case since 1.2.3).
121
122 * xapian-replicate: Set SO_KEEPALIVE for xapian-replicate's connection to the
123   master, and add command line option to allow setting socket-level timeouts
124   (SO_RCVTIMEO and SO_SNDTIMEO) on platforms that support them.  Fixes #546,
125   reported by nkvoll.
126
127 * xapian-replicate-server: Avoid potentially reading uninitialised data if a
128   changeset file is truncated.
129
130 portability:
131
132 * Add spaces between literal strings and macros which expand to literal strings
133   for C++11 compatibility.
134
135 * ValueCountMatchSpy::top_values_begin(): Fix the comparison function not to
136   return true for two equal elements, which manifests as incorrect sorting in
137   some cases when using clang's libc++ (which recent OS X versions do).
138
139 * apitest: The adddoc5 testcase fails under clang due to an exception handling
140   bug, so just #ifdef out the problematic part of the testcase when building
141   with clang for now.
142
143 * Fix clang warnings on OS X.  Reported by Germán M. Bravo.
144
145 * Fix examples to build with IBM's xlC compiler on AIX - they were failing due
146   to _LARGE_FILES being defined for the library build but not for the examples,
147   and defining this changes the ABI of std::string with this compiler.
148
149 * configure: Improve the probe for whether the test harness can use RTTI to
150   work for IBM's xlC compiler (which defaults to not generating RTTI).
151
152 * Fix to build with Sun's C++ compiler.
153
154 * Use F_DUPFD where available to dup to a file descriptor which is >= 2, rather
155   than calling dup() until we get one.
156
157 * When unserialising a double, avoid reading one byte past the end of the
158   serialised value.  In practice this was harmless on most platforms, as
159   dbl_max_mantissa is 255 for IEEE-754 format doubles, and at least GCC's
160   std::string keeps the buffer nul-terminated.  Reported by Germán M. Bravo in
161   github PR#67.
162
163 * When unserialising a double, add missing cast to unsigned char when we check
164   if the value will fit in the double type.  On machines with IEEE-754 doubles
165   (which is most current platforms) this happened to work OK before.  It would
166   also have been fine on machines where char is unsigned by default.
167
168 * Fix incorrect use of "delete" which should be "delete []".  This is
169   undefined behaviour in C++, though the type is POD, so in practice this
170   probably worked OK on many platforms.
171
172 debug code:
173
174 * Fix some overly strict assertions in flint, which caused apitest's
175   cursordelbug1 to fail with assertions on.
176
177 Xapian-core 1.2.20 (2015-03-04):
178
179 chert backend:
180
181 * After splitting a block, we always insert the new block in the parent right
182   after the block it was split from - there's no need to binary chop.
183
184 build system:
185
186 * Generate and install a file for pkg-config.  (Fixes#540)
187
188 * configure: Update link to cygwin FAQ in error message.
189
190 documentation:
191
192 * include/xapian/weight.h: Document the enum stat_flags values.
193
194 * docs/postingsource.rst: Use a modern class in postingsource example.  (Noted
195   by James Aylett)
196
197 * docs/deprecation.rst,docs/replication.rst: Fix typos.
198
199 * Update doxygen configuration files to avoid warnings about obsolete tags from
200   newer doxygen versions.
201
202 * HACKING: Update details of building Xapian packages.
203
204 tools:
205
206 * xapian-check: For chert and brass, cross-check the position and postlist
207   tables to detect positional data for non-existent documents.
208
209 portability:
210
211 * When locking a database for writing, use F_OFD_SETLK where available, which
212   avoids having to fork() a child process to hold the lock.  This currently
213   requires Linux kernel >= 3.15, but it has been submitted to POSIX so
214   hopefully will be widely supported eventually.  Thanks to Austin Clements for
215   pointing out this now exists.
216
217 * Fix detection of fdatasync(), which appears to have been broken practically
218   forever - this means we've probably been using fsync() instead, which
219   probably isn't a big additional overhead.  Thanks to Vlad Shablinsky for
220   helping with Mac OS X portability of this fix.
221
222 * configure: Define MINGW_HAS_SECURE_API under mingw to get _putenv_s()
223   declared in stdlib.h.
224
225 * Use POSIX O_NONBLOCK in preference to O_NDELAY - the semantics of the latter
226   differ between BSD and System V.
227
228 * According to POSIX, strerror() may not be thread safe, so use alternative
229   thread-safe ways to translate errno values where possible.
230
231 * On Microsoft Windows, avoid defining EADDRINUSE, etc if they're already
232   defined, and use WSAE* constants un-negated - they start from a high value
233   so won't collide with E* constants.
234
235 debug code:
236
237 * Add more assertions to the chert backend code.
238
239 Xapian-core 1.2.19 (2014-10-21):
240
241 API:
242
243 * Xapian::BM25Weight:
244
245   + Improve BM25 upper bound in the case when our wdf upper bound > our
246     document length lower bound.  Thanks to Craig Macdonald for pointing out
247     this trick.
248
249   + Pre-multiply termweight by (param_k1 + 1) rather than doing it for
250     every weighted term in every document considered.
251
252 testsuite:
253
254 * Don't report apparent leaks of fds opened on /dev/urandom - at least on
255   Linux, something in the C library seems to lazily open it, and the report of
256   a possible leak followed by assurance that it's OK really is just noise we
257   can do without.
258
259 matcher:
260
261 * Fix false matches reported for non-exact phrases in some cases.  Fixes the
262   reduced testcase in #657, reported by Jean-Francois Dockes.
263
264 brass backend:
265
266 * Only full sync after writing the final base file (only affects Max OS X).
267
268 chert backend:
269
270 * Only full sync after writing the final base file (only affects Max OS X).
271
272 flint backend:
273
274 * Only full sync after writing the final base file (only affects Max OS X).
275
276 build system:
277
278 * For Sun's C++ compiler, pass -library=Crun separately since libtool looks for
279   " -library=stlport4 " (with the spaces).  (fixes#650)
280
281 * Remove .replicatmp (created by the test suite) upon "make clean".
282
283 documentation:
284
285 * include/xapian/compactor.h: Fix formatting of doxygen comment.
286
287 * HACKING: freecode no longer accepts updates, so drop that item from the
288   release checklist.
289
290 * docs/overview.rst: Add missing database path to example of using
291   xapian-progsrv in a stub database file.
292
293 portability:
294
295 * Suppress unused typedef warnings from debugging logging macros, which occur
296   in functions which always exit via throwing an exception when compiling with
297   recent versions of GCC or clang.
298
299 * Fix debug logging code to compile with clang.  (fixes #657, reported by
300   Germán M. Bravo)
301
302 debug code:
303
304 * Add missing RETURN() markup for debug logging in a few places, highlighted by
305   warnings from recent GCC.
306
307 * Fix incorrect return types in debug logging annotations so that code compiles
308   when configured with --enable-log.
309
310 Xapian-core 1.2.18 (2014-06-22):
311
312 API:
313
314 * Document: Fix get_docid() to return the docid for the sub-database (as it
315   is explicitly documented to) for Document objects passed to functors like
316   KeyMaker during the match.  (fixes#636, reported by Jeff Rand).
317
318 * Document: Don't store the termname in OmDocumentTerm - we were only using it
319   in get_description() output and an exception message.  Speeds up indexing
320   etext.txt using simpleindex by 0.4%, and should reduce memory usage a bit
321   too.  (Change inspired by comments from Vishesh Handa on xapian-devel).
322
323 * Database: Iterating the values in a particular slot is now a bit more
324   efficient for inmemory and remote backends (but still slow compared to
325   flint, chert and brass).
326
327 testsuite:
328
329 * apitest: Expand crashrecovery1 to check that the expected base files exist
330   and ones which shouldn't exist don't.
331
332 * queryparsertest: Fix testcase for empty wildcard followed by negation to
333   enable FLAG_LOVEHATE so the negation is actually parsed.  Fortunately the
334   fixed testcase passes.
335
336 matcher:
337
338 * OP_SYNONYM: avoid fetching the doclength if the weighting scheme doesn't
339   need it and the calculated wdf for the synonym is <= doclength_lower_bound
340   for the current subdatabase.  (fixes #360)
341
342 build system:
343
344 * Releases are now bootstrapped with libtool 2.4.2 instead of 2.4, and with
345   config.guess and config.sub updated to the latest versions.
346
347 documentation:
348
349 * Add an example of initializing SimpleStopper using a file listing stopwords.
350   (Patch from Assem Chelli)
351
352 * Improve the descriptions of the stem_strategy values in the API docs.
353   (Reported by "oilap" on #xapian)
354
355 * docs/sorting.rst: Fix incorrect parameter types in Xapian::Weight
356   subclass example.
357
358 * docs/glossary.rst: Add definition of "collection frequency".
359
360 * HACKING:
361
362   + makeindex is now in Debian package texlive-binaries.
363
364   + Replace a link to the outdated autotools "goat book" with a link to the
365     "Portable Shell" chapter of the autoconf manual.
366
367 * include/xapian/base.h: Remove very out of date comments talking about atomic
368   assignment and locking - since 0.5.0 we've adopted a "user locks" policy.
369   (Reported by Jean-Francois Dockes)
370
371 examples:
372
373 * delve:
374
375   + Add -A <prefix> option to list all terms with a particular prefix.
376
377   + Send errors to stderr not stdout.
378
379   + If -v is specified more than once, show even more info in some cases.
380     (NEWS file claimed this was backported in 1.2.15, but it actually wasn't).
381
382 * quest:
383
384   + Add --default-op option.
385
386   + Add --weight option to allow the weighting scheme to be specified.
387
388 portability:
389
390 * Explicitly '#include <algorithm>' for std::max(), fixing build with VS2013.
391   (Fixes#641, reported by "boomboo").
392
393 * Fix testcase blocksize1 not to try to delete an open database, which isn't
394   possible under Windows.  (Fixes #643, reported by Chris Olds)
395
396 * docs/quickstart.rst: Split --cxxflags and --libs for portability (noted by
397   "Hurricane Tong" on xapian-devel).
398
399 * Fix warnings with clang 5.0.
400
401 debug code:
402
403 * Add assertions that weighting scheme upper bounds aren't exceeded.
404
405 Xapian-core 1.2.17 (2014-01-29):
406
407 API:
408
409 * Enquire::set_sort_by_relevance_then_value() and
410   Enquire::set_sort_by_relevance_then_key(): Fix sense of reverse parameter.
411   Reported by "boomboo" on IRC.
412
413 * BM25Weight: Fix case where (k1 == 0 || b == 0) but k2 != 0.  Reported by
414   "boomboo" on IRC.
415
416 * Unicode::tolower(): Fix to give correct results for U+01C5, U+01C8, U+01CB,
417   and U+01F2 (previously these were left unchanged).
418
419 testsuite:
420
421 * Automatically probe for and hook in eatmydata to the testsuite using the
422   wrapper script it now includes.
423
424 * Fix apitest to build when brass, chert or flint are disabled.
425
426 brass backend:
427
428 * Fix handling of invalid block sizes passed to Xapian::Brass::open() - the
429   size gets fixed as documented, but the uncorrected size was passed to the
430   base file (and abort() was called if 0 was passed).
431
432 * Validate "dir_end" when reading a block.  (fixes #592)
433
434 chert backend:
435
436 * Fix handling of invalid block sizes passed to Xapian::Chert::open() - the
437   size gets fixed as documented, but the uncorrected size was passed to the
438   base file (and abort() was called if 0 was passed).
439
440 * Validate "dir_end" when reading a block.  (fixes #592)
441
442 flint backend:
443
444 * Fix handling of invalid block sizes passed to Xapian::Flint::open() - the
445   size gets fixed as documented, but the uncorrected size was passed to the
446   base file (and abort() was called if 0 was passed).
447
448 * Validate "dir_end" when reading a block.  (fixes #592)
449
450 build system:
451
452 * configure: Improve reporting of GCC version.
453
454 * Use -no-fast-install on platforms where -no-install causes libtool to emit a
455   warning.
456
457 * docs/Makefile.am: Fix handling of MAINTAINER_NO_DOCS.
458
459 * Include UnicodeData.txt and the script to generate the unicode tables from
460   it.
461
462 documentation:
463
464 * postingsource.rst: Clarify a couple of points (reported by "vHanda" on IRC).
465
466 portability:
467
468 * Protect the ValueIterator::check() method against Mac OS X SDK headers
469   which define a check() macro.
470
471 * Fix warning from xlC compiler.
472
473 * Avoid use of grep -e in configure, as /usr/bin/grep on Solaris doesn't
474   support -e.
475
476 * Fix check for flags which might be needed for ANSI mode for compilers called
477   'cxx'.
478
479 * configure: Improve handling of Sun's C++ compiler - trick libtool into not
480   adding -library=Cstd, and prefer -library=stdcxx4 if supported.  Explicitly
481   add -library=Crun which seems to be required, even though the documentation
482   suggests otherwise.
483
484 Xapian-core 1.2.16 (2013-12-04):
485
486 API:
487
488 * PositionIterator,PostingIterator,TermIterator,ValueIterator: Don't segfault
489   if skip_to() or check() is called on an iterator which is already at_end().
490   Reported by David Bremner.
491
492 * ValueCountMatchSpy: get_description() on a default-constructed
493   ValueCountMatchSpy object no longer fails when xapian-core is built with
494   --enable-log.
495
496 * ValueCountMatchSpy: get_total() on a default-constructed ValueCountMatchSpy
497   object now returns 0 rather than segfaulting.
498
499 testsuite:
500
501 * If -v/--verbose is specified more than once to a test program, show the
502   diagnostic output for passing tests as well as failing/skipped ones.
503
504 * queryparsertest: Change qp_scale1 to time 5 repetitions of the large query to
505   help average out variations.
506
507 * queryparsertest: Add test coverage for explicit synonym of a term with a
508   prefix (e.g. ~foo:search).
509
510 * apitest: Remove code from registry* testcases which tries to test the
511   consequences of throwing an exception from a destructor - it's complex to
512   ensure we don't leak memory while doing this (it seems GCC doesn't release
513   the object in this case, but clang does), and it's generally frowned upon,
514   plus C++11 makes destructors noexcept by default.
515
516 * Fix "make check" to actually removed cached databases first, as is
517   intended.
518
519 brass backend:
520
521 * When moving a cursor on a read-only table, check if the block we want is in
522   the internal cursor.  We already do this for a writable table, as it is
523   necessary for correctness, but it's a cheap check and may avoid asking the
524   OS for a block we actually already have.
525
526 * Correctly report the database as closed rather than 'Bad file descriptor'
527   in certain cases.
528
529 * Reuse a cursor for reading values from valuestreams rather than creating
530   a new one each time.  This can dramatically reduce the number of blocks
531   redundantly reread when sorting by value.  The rereads will generally get
532   served from VM cache, but there's still an overhead to that.
533
534 chert backend:
535
536 * When moving a cursor on a read-only table, check if the block we want is in
537   the internal cursor.  We already do this for a writable table, as it is
538   necessary for correctness, but it's a cheap check and may avoid asking the
539   OS for a block we actually already have.
540
541 * Correctly report the database as closed rather than 'Bad file descriptor'
542   in certain cases.
543
544 * Reuse a cursor for reading values from valuestreams rather than creating
545   a new one each time.  This can dramatically reduce the number of blocks
546   redundantly reread when sorting by value.  The rereads will generally get
547   served from VM cache, but there's still an overhead to that.
548
549 flint backend:
550
551 * When moving a cursor on a read-only table, check if the block we want is in
552   the internal cursor.  We already do this for a writable table, as it is
553   necessary for correctness, but it's a cheap check and may avoid asking the
554   OS for a block we actually already have.
555
556 * Correctly report the database as closed rather than 'Bad file descriptor'
557   in certain cases.
558
559 build system:
560
561 * Compress source tarballs with xz instead of gzip.
562
563 * Split XAPIAN_LIBS out of XAPIAN_LDFLAGS so that -l flags for libraries
564   configure detects are needed appear after -L flags specified by the user
565   that may be needed to find such libraries.  (fixes#626)
566
567 * XO_LIB_XAPIAN now handles the user specifying a relative path in
568   XAPIAN_CONFIG, e.g.: "./configure XAPIAN_CONFIG=../xapian-core/xapian-config"
569
570 * Adjust XO_LIB_XAPIAN to strip _gitNNN suffix from snapshot versions.
571
572 * configure: Handle git snapshot naming when calculating REVISION.
573
574 * configure: Enable -fshow-column for GCC - things like vim's quickfix mode
575   will then jump to the appropriate column for a compiler error or warning, not
576   just the appropriate line.
577
578 * configure: Report GCC version in configure output.
579
580 documentation:
581
582 * The API documentation shipped with the release is now generated with
583   doxygen 1.8.5 instead of 1.5.9, which is most evident in the different
584   HTML styling newer doxygen uses.
585
586 * Document how Utf8Iterator handles invalid UTF-8 in API documentation.
587
588 * Improve how descriptions of deprecated features appear in the API
589   documentation.
590
591 * docs/remote_protocol.rst: Correct error in documentation of REPLY_DOCDATA
592   message.
593
594 * docs/overview.rst: Correct documentation for how to specify "prog" remote
595   databases in stub files.
596
597 * Direct users to git in preference to SVN - we'll be switching entirely in
598   the near future.
599
600 tools:
601
602 * xapian-chert-update: Fix -b to work rather than always segfaulting (reported
603   in http://bugs.debian.org/716484).
604
605 * xapian-chert-update: The documented alias --blocksize for -b has never
606   actually been supported, so just drop mentions of it from --help and the man
607   page.
608
609 * xapian-check:
610
611   + Fix chert database check that first docid in each doclength chunk is more
612     than the last docid in the previous chunk - previously this didn't actually
613     work.
614
615   + Fix database check not to falsely report "position table: Junk after
616     position data" whenever there are 7 unused bits (7 is OK, *more* than 7
617     isn't).
618
619   + Fix to report block numbers correctly for links within the B-tree.
620
621   + If the METAINFO key is missing, only report it once per table.
622
623   + Fix database consistency checking to always open all the tables at the same
624     revision - not doing this could lead to false errors being reported after a
625     commit interrupted by the process being killed or the machine crashing.
626     Reported by Joey Hess in http://bugs.debian.org/724610
627
628 examples:
629
630 * quest: Add --check-at-least option.
631
632 portability:
633
634 * configure: clang doesn't support -Wstrict-null-sentinel or -Wlogical-op, so
635   don't pass it these options.
636
637 * Fix build errors and warnings with mingw.
638
639 * Suppress "unused local typedef" warnings from GCC 4.8.
640
641 * If the compiler supports C++11, use static_assert to implement
642   CompileTimeAssert.
643
644 * tests/zlib-vg.c: Fix two warnings when compiled with clang.
645
646 * Fix failure when built with -D_GLIBCXX_DEBUG - we were modifying the top()
647   element of a heap before calling pop(), such that the heap comparison
648   operation (which is called when -D_GLIBCXX_DEBUG is on to verify the heap is
649   valid) would read off the end of the data.  In a normal build, this issue
650   would likely never manifest.
651
652 * configure: When generating ABI compatibility checks in xapian/version.h, pass
653   $CXXFLAGS and $CPPFLAGS to $CXXCPP as they could contain options which affect
654   the ABI (such as -fabi-version for GCC).  (Fixes #622)
655
656 * Microsoft GUIDs in binary form have reversed byte order in the first three
657   components compared to standard UUIDs, so the same database would report a
658   different UUID on Windows to on other platforms.  We now swap the bytes to
659   match the standard order.  With this fix, the UUIDs of existing databases
660   will appear to change on Windows (except in rare "palindronic" cases).
661
662 * Fix a couple of issues to get Xapian to build and work on AIX.
663
664 * common/safeuuid.h: Remove bogus take-address-of from uuid handling code for
665   NetBSD and OpenBSD.
666
667 * Under cygwin, use cygwin_conv_path() if using a new enough cygwin version,
668   rather than the now deprecated cygwin_conv_to_win32_path().  Reported by
669   "Haroogan" on the xapian-devel mailing list.
670
671 * common/safeuuid.h: Add missing '#include <cstdlib>' and qualify free with std.
672
673 * Fix 'unused label' warning when chert backend is disabled.
674
675 * xapian.h: Add check for Wt headers being included before us and defining
676   'slots' as a macro - if they are, give a clear error advising how to work
677   around this (previously compilation would fail with a confusing error).
678
679 debug code:
680
681 * Fix assertion failure for when an OrPostList decays to an AndPostList - the
682   ordering of the subqueries by estimated termfreq may not be the same as it
683   was when the OrPostList was constructed, as the subqueries may themselves
684   have decayed.  Reported by Michel Pelletier.
685
686 * Fix -Wcast-qual warning from GCC 4.7 when configured with --enable-log.
687
688 Xapian-core 1.2.15 (2013-04-16):
689
690 API:
691
692 * QueryParser/TermGenerator: Don't include CJK codepoints which are
693   punctuation in N-grams.
694
695 * TermGenerator: Fix bug where we failed to generate the first bigram
696   from the second sequence of N-grammable CJK characters in a piece of text.
697
698 brass backend:
699
700 * Call fdatasync()/fsync() when creating the "iambrass" file.
701
702 chert backend:
703
704 * Call fdatasync()/fsync() when creating the "iamchert" file.
705
706 flint backend:
707
708 * Call fdatasync()/fsync() when creating the "iamflint" file.
709
710 build system:
711
712 * XO_LIB_XAPIAN now handles the user specifying XAPIAN_CONFIG without a path,
713   for example: ./configure XAPIAN_CONFIG=xapian-config-1.3
714
715 tools:
716
717 * delve: If -v is specified more than once, show even more info in some cases.
718
719 portability:
720
721 * Fix warning due to needlessly casting away const-ness in debug logging.
722
723 * Fix pointer truncation bug in lemon parser generator, which probably affects
724   regenerating the query parser on WIN64.
725
726 debug code:
727
728 * Fix to build when configured with --enable-log.
729
730 Xapian-core 1.2.14 (2013-03-14):
731
732 API:
733
734 * MSet::get_document(): Don't cache retrieved Document objects unless they
735   were requested with fetch().  This avoids using a lot of memory when many
736   MSet entries are retrieved.  (Fixes #604)
737
738 testsuite:
739
740 * apitest: Improved test coverage.
741
742 matcher:
743
744 * Check if a candidate document has at least the minimum weight needed
745   before checking positional information, which speeds up slow phrase
746   searches (partly addresses #394).
747
748 brass backend:
749
750 * Fix multipass compaction not to damage document values, and to merge the
751   database stats correctly.  (fixes #615)
752
753 chert backend:
754
755 * Fix multipass compaction not to damage document values, and to merge the
756   database stats correctly.  (fixes #615)
757
758 flint backend:
759
760 * Fix multipass compaction bug.  (fixes #615)
761
762 tools:
763
764 * xapian-replicate:
765
766   + Fix handling of delays between replication events - the subtraction of the
767     target time and the current time was reversed, so we wouldn't sleep when
768     before the deadline, but would sleep after it for the amount we'd missed it
769     by.
770
771   + On Microsoft Windows, we no longer sleep for more than 43 years if the
772     target time for a replication event had already passed.  (Fixes #472)
773
774 portability:
775
776 * matcher/queryoptimiser.cc: Need <functional> for mem_fun().
777
778 * tests/harness/testsuite.cc: Don't provide explicit template types to
779   make_pair - it isn't useful, and breaks with C++11.  Fixes build error with
780   MSVC2012.
781
782 * examples/quest.cc: Fix to build with Sun Studio 12 compiler.  (ticket#611)
783
784 Xapian-core 1.2.13 (2013-01-09):
785
786 API:
787
788 * TermGenerator: Add new method TermGenerator::set_max_word_length() to allow
789   this limit to be adjusted by the user.
790
791 * QueryParser: Implicitly close any unclosed brackets at the end of the query
792   string.  Patch from Sehaj Singh Kalra.
793
794 * DateValueRangeProcessor: Add extra constructor overloaded form so that in
795   DateValueRangeProcessor(1, "date:"), the const char * gets interpreted as
796   std::string rather than bool.
797
798 testsuite:
799
800 * apitest: Assorted test coverage improvements.
801
802 * When reporting valgrind errors, skip any warnings before the error in the
803   valgrind log.
804
805 matcher:
806
807 * Improved fix for #590 - count all matching LeafPostList objects with a Weight
808   object rather than trying to prune at the MultiAndPostList level based on
809   max_wt (if wdf is always zero for a term, BM25 gives max_wt of 0, which lead
810   to us never counting that subquery.
811
812 * Fix calculation of 0.0/0.0 in some cases.  This then got used as a minimum
813   weight, but it seems this gives -nan (at least on x86-64 Linux) so it may
814   have been harmless in practice.
815
816 * We no longer use the highest weighted MSet entry to calculate percentages, so
817   remove code which finds it.
818
819 brass backend:
820
821 * Close excess file handles before we get the fcntl lock, which avoids the
822   lock being released again if one is open on the lock file.  Notably this
823   avoids a situation where multiple threads in the same process could succeed
824   in locking a database concurrently.
825
826 chert backend:
827
828 * Close excess file handles before we get the fcntl lock, which avoids the
829   lock being released again if one is open on the lock file.  Notably this
830   avoids a situation where multiple threads in the same process could succeed
831   in locking a database concurrently.
832
833 flint backend:
834
835 * Close excess file handles before we get the fcntl lock, which avoids the
836   lock being released again if one is open on the lock file.  Notably this
837   avoids a situation where multiple threads in the same process could succeed
838   in locking a database concurrently.
839
840 remote backend:
841
842 * Improve the UnimplementedError message for a MatchSpy subclass which doesn't
843   implement name() so it's clearer that it is this particular subclass which
844   can't be used remotely, rather than all MatchSpy objects.
845
846 build system:
847
848 * The build system is now generated with automake 1.11.6 rather than 1.11.1,
849   which fixes a security issue in "make distcheck" (not something users will
850   usually run, but it seems worth addressing).
851
852 * Use user-specified LIBS for configure tests, which is what you'd expect to
853   happen, and provides a way for the user to tell configure where to find
854   library functions which configure can't find for itself.
855
856 * INCLUDES is now deprecated in automake, so use AM_CPPFLAGS instead.
857
858 * Test coverage rules now assume lcov 1.10 which allows them to be simpler
859   and not to require a patched version of lcov.
860
861 documentation:
862
863 * valueranges.html: Update documentation to reflect change in Xapian 1.1.2 -
864   DateValueRangeProcessor and StringValueRangeProcessor now support a prefix or
865   suffix.
866
867 * Clarify that the "reverse" parameter of set_sort_by_relevance_then_value()
868   and set_sort_by_relevance_then_key() only affects the ordering of the
869   value/key part of the sort.
870
871 * docs/quickstart.html: Fix seriously outdated statement that Xapian doesn't
872   create the database directory - that changed in 0.7.2 (released 2003-07-11).
873
874 * HACKING: Try to make it clearer we're looking for a dual-licence on submitted
875   patches.
876
877 tools:
878
879 * xapian-replicate:
880
881   + Add a --full-copy option to force a full copy to be sent.  (ticket#436)
882
883   + Add --quiet option, and be a little more verbose by default.
884
885   + Allow files > 32G to be be copied by replication.
886
887   + Fix "if (fd > 0)" tests in some replication code to be "if (fd >= 0)".
888     In practice this is unlikely to actually have caused problems since
889     stdin is typically still open and using fd 0.
890
891   + Simplify how we open the .DB file on the replication slave to just call
892     open() once with O_CREAT, rather than once without, than stat() if that
893     fails, and then again with O_CREAT|O_TRUNC if stat() doesn't show an
894     ordinary file exists.
895
896 examples:
897
898 * quest:
899
900   + New --flags command line option to allow setting arbitrary QueryParser
901     flags.
902
903   + Align option descriptions in --help output, and make the initial letter of
904     such descriptions consistently lowercase.
905
906 portability:
907
908 * Fix testsuite harness to compile with GCC 4.7.
909
910 * On platforms with the F_MAXFD fcntl but without closefrom(), we were failing
911   to close the highest numbered open fd in our closefrom() replacement.
912
913 * Our closefrom() replacement on Linux now works around valgrind not hiding
914   some extra fds it has open, but then complaining if we try to close them.
915
916 + Pass O_BINARY when opening replication related files in some cases where we
917   weren't before, which will probably help solve ticket #472.
918
919 * configure: socketpair() needs -lnetwork on Haiku.
920
921 * Micro-optimisation in Unicode handling - GCC doesn't currently optimise the
922   arithmetic shift right idiom we use, but it documents that signed right shift
923   does sign extension so we now just use a right shift for GCC.
924
925 debug code:
926
927 * Preserve errno over debug logging calls, so they can safely be added to code
928   which expects errno not to change.
929
930 Xapian-core 1.2.12 (2012-06-27):
931
932 build system:
933
934 * 1.2.11 had its library version information incorrectly set.  This resulted in
935   the shared library having an incorrect SONAME - e.g. on Linux,
936   libxapian.so.21 instead of libxapian.so.22.  This release has been made to
937   fix this problem.
938
939 documentation:
940
941 * AUTHORS: Add the GSoC students.
942
943 Xapian-core 1.2.11 (2012-06-26):
944
945 API:
946
947 * Add new QueryParser::STEM_ALL_Z stemming strategy, which stems all terms and
948   adds a Z prefix.  (Patch from Sehaj Singh Kalra, fixes ticket#562)
949
950 * Add TermGenerator::set_stemming_strategy() method, with strategies which
951   correspond to those of QueryParser.  Based on patch from Sehaj Singh Kalra,
952   with some tweaks for adding term positions in more cases.  (Fixes ticket#563)
953
954 * Correct "BM25Weight" to "TradWeight" in exception message from TradWeight.
955
956 * We were failing to call init() for user-defined Weight objects providing the
957   term-independent weight.  These now get called with init(0.0).
958
959 * Xapian::Auto::open_stub() now throws a Xapian::DatabaseOpeningError exception
960   if the stub file can't be opened.  Previously we failed to check for this
961   condition, which resulted in us treating the file as empty.
962
963 testsuite:
964
965 * When the testsuite is using valgrind, we used to run remote servers under
966   valgrind too (but with --tool=none) to get consistent behaviour as valgrind's
967   emulation of x87 excess precision isn't exact.  Now we only do this if x87 FP
968   instructions are actually in use (which means x86 architecture and configure
969   run with --disable-sse).
970
971 * Make sure XAPIAN_MAX_CHANGESETS gets unset after replication testcases which
972   set it, so further testcases don't waste time generating changesets.
973
974 * Improved test coverage (including more tests for closed databases -
975   ticket#337).
976
977 brass backend:
978
979 * After closing the database, methods which try to use the termlist would throw
980   FeatureUnavailableError with message "Database has no termlist", assuming
981   that the termlist table not being open meant it wasn't present.  Fix to check
982   if the postlist_table is open to determine which case we're in.
983
984 chert backend:
985
986 * After closing the database, methods which try to use the termlist would throw
987   FeatureUnavailableError with message "Database has no termlist", assuming
988   that the termlist table not being open meant it wasn't present.  Fix to check
989   if the postlist_table is open to determine which case we're in.
990
991 inmemory backend:
992
993 * Check if the database is closed in metadata_keys_begin() for InMemory
994   Databases.
995
996 build system:
997
998 * xapian-config: Don't interpret a missing .la file as meaning that we only
999   have static libraries.
1000
1001 documentation:
1002
1003 * Fix API documentation for Query constructors - both XOR and ELITE_SET can
1004   take any number of subqueries, not only exactly two.
1005
1006 * Backport missing API documentation comments for operator++ and operator*
1007   methods or PositionIterator, PostingIterator and TermGenerator.
1008
1009 * docs/replication.rst: Update documentation - since 1.2.5, the value of
1010   XAPIAN_MAX_CHANGESETS determines how many changesets we keep.
1011
1012 * docs/admin_notes.rst: Correction - we don't "create a lock file", we "lock a
1013   file".
1014
1015 * Fix API documentation for TradWeight constructor - "k1" should be "k".
1016
1017 portability:
1018
1019 * configure: Overhaul handling of compilers which pretend to be GCC.  Clang
1020   is now detected, and we only pass it warning flags it actually understands.
1021   And we now check for symbol visibility support with Intel's compiler.
1022
1023 * configure: Solaris automatically pulls in library dependencies, so set
1024   link_all_deplibs_CXX=no there.
1025
1026 * configure: We now check -Bsymbolic-functions for all compilers.
1027
1028 * configure: Enable -Wdouble-promotion for GCC >= 4.6.
1029
1030 * Pass -ldl last when compiling zlib-vg.so, as that seems to be needed on
1031   Ubuntu 12.04.
1032
1033 * Fix incorrect use of "delete" which should be "delete []".  This is
1034   undefined behaviour in C++, though the type is POD, so in practice this
1035   probably worked OK on many platforms.
1036
1037 * In BM25Weight when k1 or b is zero (not the default), we used to multiply
1038   an uninitialised double by zero, which is undefined behaviour, but in
1039   practice will often give zero, leading to the desired results.
1040
1041 * xapian.h: Add check for Qt headers being included before us and defining
1042   'slots' as a macro - if they are, give a clear error advising how to work
1043   around this (previously compilation would fail with a confusing error).
1044
1045 Xapian-core 1.2.10 (2012-05-09):
1046
1047 API:
1048
1049 testsuite:
1050
1051 * apitest: Extend tradweight1 to test that TradWeight(0) means that wdf and
1052   document length don't affect the weight of a term.
1053
1054 * termgentest: Check that TermGenerator discards words > 64 bytes.
1055
1056 matcher:
1057
1058 * Don't count unweighted subqueries of MultiAndPostList in percentage
1059   calculations, as OP_FILTER maps to MultiAndPostList now.  (ticket#590)
1060
1061 brass backend:
1062
1063 * When compacting, if the output database is empty, don't write out a metainfo
1064   tag.  Take care not to divide by zero when computing the percentage size
1065   change for a table.
1066
1067 chert backend:
1068
1069 * When compacting, if the output database is empty, don't write out a metainfo
1070   tag.  Take care not to divide by zero when computing the percentage size
1071   change for a table.
1072
1073 documentation:
1074
1075 * API documentation:
1076
1077  + Note version when Database::close() was added.
1078
1079  + Fix switched lower and upper in API documentation for Weight methods
1080    get_doclength_lower_bound() and get_doclength_upper_bound().  Correct
1081    maximum to minimum in get_doclength_lower_bound() comment and note that this
1082    excludes zero length documents.  Fix "An lower" to "A lower".
1083
1084 * docs/admin_notes.html: Mention that postlist and termlist tables also hold
1085   value info for chert.  Mention that xapian-chert-update was removed in 1.3.0.
1086   Mention that you need to use copydatabase from 1.2.x to convert flint to
1087   chert.
1088
1089 * HACKING: Update section on patches to mention git (git diff and git
1090   format-patch), and using "-r" with normal diff, and also that ptardiff offers
1091   a nice way to diff against an unpacked tarball.
1092
1093 debug code:
1094
1095 * Fix use of AssertEq() on NULL, which doesn't compile, at least with recent
1096   GCC.
1097
1098 Xapian-core 1.2.9 (2012-03-08):
1099
1100 API:
1101
1102 * QueryParser: Fix FLAG_AUTO_SYNONYMS not to enable auto multi-word synonyms
1103   too (but in a different way to trunk so as to not break the ABI).
1104
1105 matcher:
1106
1107 * Fix issue with running AND, OR and XOR queries against a database with no
1108   documents in it - this was leading to a divide by zero, which led to
1109   MSet::get_matches_estimated() reporting 2147483648 on i386.
1110
1111 build system:
1112
1113 * Remove configure's --with-stlport and --with-stlport-compiler options, as
1114   they don't allow you to actually specify what you need to (at least to use
1115   the Debian STLport package), and instead document what to pass to configure
1116   to enable building with STLport (though it seems to no longer be actively
1117   maintained, and the debug mode (which is probably the most interesting
1118   feature now) doesn't seem to work on Debian stable).
1119
1120 documentation:
1121
1122 * Document that OP_ELITE_SET with non-term subqueries might pick subqueries
1123   which don't match anything.  Closes ticket#49.
1124
1125 * Document that you can define a static operator delete method in your subclass
1126   if deallocation needs to be handled specially.  (Closes ticket#554)
1127
1128 * Assorted minor documentation improvements.
1129
1130 portability:
1131
1132 * Address new warnings from GCC 4.6.
1133
1134 * Fix argument order when linking xapian-check to fix mingw build.
1135   (ticket#567)
1136
1137 * Add some missing explicit header includes to fix build with STLport.
1138
1139 Xapian-core 1.2.8 (2011-12-13):
1140
1141 API:
1142
1143 * Add support to TermGenerator and QueryParser for indexing and searching CJK
1144   text using n-grams.  Currently this is only enabled when the environmental
1145   variable XAPIAN_CJK_NGRAM is set to a non-empty value.
1146
1147 documentation:
1148
1149 * Add link from index page to apidoc.pdf.
1150
1151 * quickstart.html: Correct link which was to quickstartsearch.cc.html but
1152   should be to quickstartindex.cc.html.
1153
1154 * overview.html,quickstart.html: Fix several factual errors.
1155
1156 * API documentation:
1157
1158   + Improve documentation comments for several methods.
1159
1160   + Add documentation for function parameters which didn't have it.
1161
1162   + Remove bogus paragraph in WritableDatabase::replace_document()
1163     documentation comment which had been cut and pasted from delete_document()
1164     documentation comment.  (Fixes ticket#579)
1165
1166   + Explicitly document which value slot numbers are valid.  (Fixes ticket#555)
1167
1168   + Escape < and > in doxygen comments so "<foo>" doesn't get eaten by doxygen.
1169
1170 portability:
1171
1172 + Some fixes for warnings when cross-compiling to mingw.
1173
1174 * tests/soaktest/soaktest.cc: With Sun's compiler, random() and srandom()
1175   aren't in <cstdlib> so we need to use <stdlib.h> instead.
1176
1177 Xapian-core 1.2.7 (2011-08-10):
1178
1179 API:
1180
1181 * Document objects now track whether any document positions have been modified
1182   so that replacing a modified document can completely skip considering
1183   updating positions if none have changed.  Currently the flint, chert, and
1184   brass backends implement this optimisation.  A common case this speeds up is
1185   adding and/or removing boolean filter terms to/from existing documents - for
1186   example this gives an 18% speedup for adding tags in notmuch.
1187
1188 testsuite:
1189
1190 * Make sure that perftest isn't run with libeatmydata preloaded, as making
1191   fsync() a no-op makes performance tests rather bogus.
1192
1193 remote backend:
1194
1195 * Remove unnecessary call to reopen() in the remote servers in a case where
1196   either we had just called it or we are using a writable database and so
1197   reopen() doesn't do anything.
1198
1199 build system:
1200
1201 * configure: -Wshadow gives bogus warnings with 4.0 (at least on Mac OS X), so
1202   disable it for GCC < 4.1 (like the comments already said we did!)
1203
1204 documentation:
1205
1206 * Improve the documentation comment for Database::close().  (ticket#504)
1207
1208 * Fix typo in documentation comment for Enquire constructor which reversed the
1209   intended sense (though the text was fairly obviously wrong before).
1210
1211 * Improve documentation of QueryParser::add_boolean_prefix()'s exclusive
1212   parameter to talk about terms and prefixes rather than values and fields
1213   (which was confusing since "document value" has a particular meaning in
1214   Xapian).
1215
1216 * docs/facets.html: Expand descriptions for indexing and finding facets.
1217   Fix errors in example code.
1218
1219 * docs/index.html: Add links to Omega and bindings documentation.
1220
1221 * docs/remote_protocol.html: Fixed typo which reversed the intended sense.
1222
1223 * xapian-check --help: Document that checking a whole database performs
1224   additional cross-checks between the tables.
1225
1226 * docs/admin_notes.html: Add note about xapian-chert-update.
1227
1228 * docs/deprecation.html: Note here that WritableDatabase::flush() is
1229   deprecated in favour of WritableDatabase::commit().
1230
1231 portability:
1232
1233 * Fix -Wshadow warnings from GCC 4.6.
1234
1235 * Fix warning from GCC 3.3.
1236
1237 debug code:
1238
1239 * Fix some problems with the templates used to implement output of parameters
1240   and return values in debug logging.
1241
1242 Xapian-core 1.2.6 (2011-06-12):
1243
1244 API:
1245
1246 * QueryParser:
1247
1248   + Add new set_max_wildcard_expansion() method to allow limiting the number of
1249     terms a wildcard can expand to.  (ticket#350)
1250
1251   + If default_op is OP_NEAR or OP_PHRASE then disable stemming of the terms,
1252     since we don't index positional information for stemmed terms by default.
1253
1254 * Spelling correction was failing to correctly handle words which had the same
1255   trigram in an even number of times.
1256
1257 testsuite:
1258
1259 * We now actually include the soaktest code in the release tarballs.
1260
1261 matcher:
1262
1263 * Eliminate some vector copies when handling phrase subqueries in the query
1264   optimiser.
1265
1266 brass backend:
1267
1268 * Kill the child process which holds the lock with SIGKILL as that can't be
1269   ignored, whereas SIGHUP can be in some cases.
1270
1271 chert backend:
1272
1273 * Kill the child process which holds the lock with SIGKILL as that can't be
1274   ignored, whereas SIGHUP can be in some cases.
1275
1276 flint backend:
1277
1278 * Kill the child process which holds the lock with SIGKILL as that can't be
1279   ignored, whereas SIGHUP can be in some cases.
1280
1281 documentation:
1282
1283 * The HTML documentation is now maintained in reStructured Text format.
1284
1285 * docs/queryparser.html: Document the precedence order of operators.
1286
1287 * docs/scalability.html: Bring up-to-date.
1288
1289 * docs/overview.html: Document "remote" in stub databases.
1290
1291 * docs/postingsource.html: Add PostingSource example.  (ticket#503)
1292
1293 * include/xapian/database.h: Add @exception InvalidArgumentError for
1294   Database::get_document() (ticket#542).
1295
1296 * Ship ChangeLog.0 in the tarball.
1297
1298 * Assorted minor improvements.
1299
1300 examples:
1301
1302 * examples/delve: Report has_positions().
1303
1304 * examples/simpleindex: Add short description to usage message.
1305
1306 portability:
1307
1308 * Fix to build for mingw.
1309
1310 Xapian-core 1.2.5 (2011-04-04):
1311
1312 API:
1313
1314 * Enquire::get_eset() now accepts a min_wt argument to allow the minimum wanted
1315   weight to be specified.  Default is 0, which gives the previous behaviour.
1316
1317 * QueryParser: Handle NEAR/<offset> and ADJ/<offset> where offset isn't an
1318   integer the same way at the end of the query as in the middle.
1319
1320 * Replication:
1321
1322   + Only keep $XAPIAN_MAX_CHANGESETS changeset files when generating a new one
1323     (previously this variable only controlled if we generated changesets or
1324     not).  Closes ticket#278.
1325
1326   + $XAPIAN_MAX_CHANGESETS is reread each time, rather than only when the
1327     database is opened.
1328
1329   + If you build Xapian with DANGEROUS mode enabled, changeset files now
1330     actually have the appropriate flag set (the reader will currently throw an
1331     exception, but that's better than quietly handling them incorrectly).
1332
1333 testsuite:
1334
1335 * Compaction tests which generate stub files now close them before performing
1336   the actual compaction, to avoid issues on Microsoft Windows (ticket#525).
1337
1338 * Improve test coverage.
1339
1340 matcher:
1341
1342 * Fix memory leak if an exception is thrown during the match.
1343
1344 brass backend:
1345
1346 * Bumped format version number (we now store the oldest revision for which we
1347   might have a replication changeset).
1348
1349 * Optimise not to read the bitmaps from the base files when opening a database
1350   for reading (cross-port of equivalent change to chert).
1351
1352 * Optimise not to update doclength when it hasn't changed (cross-port of
1353   equivalent change to chert).
1354
1355 * If we try to delete an old base file and it isn't there, just continue rather
1356   than throwing an exception.  We wanted to get rid of it anyway, and it may be
1357   NFS issues telling us the wrong thing.  In particular, DatabaseCorruptError
1358   was rather a pessimistic assessment.
1359
1360 chert backend:
1361
1362 * Optimise not to read the bitmaps from the base files when opening a database
1363   for reading.
1364
1365 * Optimise not to update doclength when it hasn't changed.
1366
1367 * xapian-chert-update: Fix to handle larger databases, and databases which
1368   have values set.
1369
1370 * If we try to delete an old base file and it isn't there, just continue rather
1371   than throwing an exception.  We wanted to get rid of it anyway, and it may be
1372   NFS issues telling us the wrong thing.  In particular, DatabaseCorruptError
1373   was rather a pessimistic assessment.
1374
1375 flint backend:
1376
1377 * Optimise not to read the bitmaps from the base files when opening a database
1378   for reading (cross-port of equivalent change to chert).
1379
1380 * Optimise not to update doclength when it hasn't changed (cross-port of
1381   equivalent change to chert).
1382
1383 * If we try to delete an old base file and it isn't there, just continue rather
1384   than throwing an exception.  We wanted to get rid of it anyway, and it may be
1385   NFS issues telling us the wrong thing.  In particular, DatabaseCorruptError
1386   was rather a pessimistic assessment.
1387
1388 remote backend:
1389
1390 * xapian-tcpsrv: If we can't bind to the specified port because it is a
1391   privileged one, exit with code 77 (EX_NOPERM) to make it easier to
1392   automatically handle failure when starting the server from a script.
1393
1394 build system:
1395
1396 * Snapshots and releases are now bootstrapped with autoconf 2.68 and libtool
1397   2.4.
1398
1399 * configure: -Wstrict-null-sentinel was added in GCC 4.0.1 and so doesn't work
1400   with GCC 4.0.0.  For simplicity, only enable it for GCC >= 4.1.
1401
1402 documentation:
1403
1404 * INSTALL: Note how to build for a non-default arch on a multi-arch platform.
1405
1406 * include/xapian/enquire.h: Fix doxygen markup so alternative overloaded forms
1407   of Enquire::get_mset() appear in the API documentation.
1408
1409 * collapsing.html: Add missing document (written some time ago, but never
1410   actually added to builds).
1411
1412 * replication.html: Update documentation to make it clear that users shouldn't
1413   create the destination directory for replication themselves.
1414
1415 * docs/intro_ir.html: Update link to a paper.  Update text about book "to be
1416   published in 2008".
1417
1418 * docs/deprecation.html:
1419
1420   + PostingSource now offers a replacement for Enquire::set_bias().
1421
1422   + OmegaScript: $set{spelling,true} is now deprecated.
1423
1424   + Add note about botched removal of Enquire.get_matching_terms from Python
1425     bindings (now fully removed).
1426
1427   + Note removal of "if idx in mset" from Python bindings.
1428
1429   + Deprecate MSet.items and ESet.items from Python bindings (ticket#531).
1430
1431 * docs/admin_notes.html: Update for 1.2.5.
1432
1433 * Updates to documentation of internals.
1434
1435 tools:
1436
1437 * xapian-replicate-server: Fix race condition between checking if a file
1438   exists and opening it to replicate it.
1439
1440 * xapian-replicate: Complain unless host name and port number are specified -
1441   previously these defaulted to an empty string and 0, which resulted in
1442   potentially confusing error messages.
1443
1444 * xapian-replicate: If --master isn't specified, default to DATABASE.
1445
1446 examples:
1447
1448 * quest: Report any spelling correction (requires the database contains
1449   spelling data of course).
1450
1451 * copydatabase: Add --no-renumber option.
1452
1453 portability:
1454
1455 * api/compactor.cc: Add missing header <ctime> for time() (ticket#530).
1456
1457 * api/compactor.cc: Use msvc_posix_rename() under __WIN32__ to atomically
1458   update stub file after compaction (ticket#525).
1459
1460 * Fix uninitialised variable warnings with gcc -O3.
1461
1462 * Eliminate std::string member of global static object used when compiled with
1463   --enable-log which was causes problems on Mac OS X.
1464
1465 * Fix some issues highlighted by clang++ warnings.
1466
1467 Xapian-core 1.2.4 (2010-12-19):
1468
1469 API:
1470
1471 * QueryParser:
1472
1473   + Avoid a double free if Query construction throws an exception in a
1474     particular case.  Fixes ticket#515.
1475
1476   + Allow phrase generators between a probabilistic prefix and the term itself
1477     (e.g. path:/usr/local).
1478
1479   + The correct window size wasn't being set in some cases when default_op was
1480     set to OP_PHRASE.
1481
1482 * Enquire::get_mset():
1483
1484   + Avoid pointlessly trying to allocate lots of memory if the first document
1485     requested is larger than the size of the database.
1486
1487   + An empty query now returns an MSet with firstitem set correctly -
1488     previously firstitem was always 0 in this case.
1489
1490 * Document: Initialise docid to 0 when creating a document from
1491   scratch, as documented.
1492
1493 * Compactor:
1494
1495   + Move the database compaction and merging functionality into this new class,
1496     and make xapian-compact a simple wrapper around this class.  (ticket#175)
1497
1498   + Inputs can now be stub database directories or files, in which case the
1499     databases in the stub are used as inputs.
1500
1501   + Add support for compacting to a stub database, which can be one of the
1502     inputs (for atomic update).
1503
1504   + If spellings and/or synonyms were only present in some source databases,
1505     they weren't copied to the output database, but now they are.
1506
1507 testsuite:
1508
1509 * Improve test coverage (particularly for Xapian::Utf8Iterator and
1510   Xapian::Stem).
1511
1512 * Add zlib-vg.c to distribution tarballs.
1513
1514 * tests/runtest: Add XAPIAN_TESTSUITE_LD_PRELOAD hook to allow libeatmydata to
1515   easily be used to speed up testsuite runs.
1516
1517 matcher:
1518
1519 * The matcher wasn't recalculating the max possible weight after a subquery of
1520   XOR reached its end.  This caused an assertion failure in debug builds, and
1521   is a missed optimisation opportunity.
1522
1523 * Implement SelectPostList::check() so that check() on OP_NEAR and OP_PHRASE
1524   subqueries will just check a single document, not a potentially huge numbers
1525   of documents.
1526
1527 * BM25Weight: Fix calculation order to avoid inconsistent weights due to
1528   rounding when certain non-default parameter combinations are used.
1529
1530 * TradWeight: Fix calculation order to avoid inconsistent weights due to
1531   rounding with TradWeight(0).
1532
1533 * Fix regression in speed of OP_OR queries in certain cases due to optimisation
1534   added in 1.0.21/1.2.1.
1535
1536 * In the query optimiser, use value range bounds to detect value ranges which
1537   must be empty.
1538
1539 remote backend:
1540
1541 * Add support for iterating metadata keys with the remote backend.  This change
1542   necessitated an increase in the minor version of the remote protocol.  If you
1543   are upgrading a live system which uses the remote backend, upgrade the
1544   servers before the clients.
1545
1546 build system:
1547
1548 * xapian-config: Add --static option which makes other options report values
1549   for static linking.
1550
1551 * xapian-config is now removed by "make distclean" not "make clean".
1552
1553 * configure: FreeBSD and OpenBSD don't need explicit dependency libraries, so
1554   set link_all_deplibs_CXX=no there.
1555
1556 * This release uses autoconf 2.67 rather than 2.65.
1557
1558 documentation:
1559
1560 * INSTALL: Raise recommended GCC version from 3.3 to 4.1, since that's the
1561   oldest we regularly test with.
1562
1563 * replication.html: Update and improve in various ways.
1564
1565 * Remove lingering "experimental" marker from PostingSource and
1566   ValueCountMatchSpy API documentation.
1567
1568 * index.html: Add links to replication and facets documents, and fix typo in
1569   serialisation document link.
1570
1571 * internals.html: Add link to replication protocol.
1572
1573 * Change the categorisation document to talk about facets, since that's the
1574   terminology that seems to be most widely used these days, and
1575   "categorisation" can also mean automatically assigning categories to
1576   documents.  Also update to reflect the final API.
1577
1578 * deprecation.html: Add guidelines for supporting other software.
1579
1580 * Document cases where QueryParser's FLAG_WILDCARD and FLAG_PARTIAL aren't
1581   currently supported.
1582
1583 * PLATFORMS: Move PLATFORMS information to the wiki and replace with a pointer.
1584
1585 tools:
1586
1587 * xapian-compact: Fix access to empty priority_queue while merging synonyms.
1588   This could have caused problems, though we've had no reports of any (the
1589   bug was found with _GLIBCXX_DEBUG).
1590
1591 * xapian-compact: Add --quiet/-q option to suppress progress output.
1592   (ticket#437)
1593
1594 * xapian-replicate: If a full copy was attempted, but was not put live, display
1595   an explanatory message (in verbose mode).
1596
1597 examples:
1598
1599 * examples/quest: Add command line options to allow prefixes to be specified
1600   for the QueryParser.
1601
1602 * examples/delve: Add '-z' option to count zero-length documents.
1603
1604 * examples/simplesearch: Fix cut-and-paste errors in usage message and
1605   --version output.
1606
1607 portability:
1608
1609 * configure: Add support for --enable-sse=sse and --enable-sse=sse2 to allow
1610   control of which SSE instructions to use.
1611
1612 * configure: Enable use of SSE maths on x86 by default with Sun's compiler.
1613
1614 * configure: Beef up the test for whether -lm is required and add a special
1615   case to force it to be for Sun's C++ compiler - there's some interaction with
1616   libtool and/or shared objects which means that the previous configure test
1617   didn't think -lm is needed here when it is.
1618
1619 * Fix to build on OpenBSD 4.5 with GCC 3.3.5.
1620
1621 * Need to avoid excess precision on m68k when targeting models 68010, 68020,
1622   68030 as well as 68000.
1623
1624 * Fix compilation with Sun's C++ compiler.
1625
1626 * Fix testsuite to build on Solaris < 10.
1627
1628 Xapian-core 1.2.3 (2010-08-24):
1629
1630 API:
1631
1632 * Database::get_spelling_suggestion() will now suggest a correction even if the
1633   passed word is in the dictionary, provided the correction has at least the
1634   same frequency.  Partly addresses #225.
1635
1636 * QueryParser:
1637
1638   + Fix handling of groups of terms which are all stopwords - in situations
1639     where this causes a problem we now disable stopword checks for such groups.
1640     (ticket#245)
1641
1642   + Fix to be smarter about handling a boolean filter term containing ".." in
1643     the presence of valuerangeprocessors.
1644
1645 testsuite:
1646
1647 * New "unittest" program for testing low level functions directly.  Currently
1648   this has tests for the internal resolve_relative_path() function.
1649   (ticket#243)
1650
1651 remote backend:
1652
1653 * Retry select() if it fails with EINTR while waiting for connect(), and
1654   discriminate cases with same failure message to aid debugging.
1655
1656 documentation:
1657
1658 * Fix documentation comment for Xapian::timeout type - it holds a time interval
1659   in milliseconds not microseconds (the API docs for the methods which use it
1660   explicitly correctly document that the timeouts are in milliseconds).
1661
1662 * libuuid moved from e2fsprogs to util-linux-ng about a year ago, so update
1663   documentation, comments, and configure error messages to reflect this.
1664
1665 portability:
1666
1667 * configure: Don't pass -mtune=generic unless GCC >= 4.2 is in use
1668   (ticket#492).
1669
1670 * Fix handling of some obscure cases of resolving relative paths on Microsoft
1671   Windows.  (ticket#243).
1672
1673 * Optimise closing of all unwanted file descriptors after forking by using
1674   closefrom() if available, and otherwise providing our own implementation
1675   (optimised to some extent for many platforms).
1676
1677 * Fix test harness to build under Microsoft Windows (ticket#495).
1678
1679 packaging:
1680
1681 * xapian-core.spec: Add xapian-metadata and cmake related files to RPM
1682   packaging.
1683
1684 * xapian-core.spec: Update BuildRequires to specify libuuid-devel instead of
1685   e2fsprogs-devel.
1686
1687 debug code:
1688
1689 * Improve logging of function parameter placeholder strings.
1690
1691 Xapian-core 1.2.2 (2010-06-27):
1692
1693 brass backend:
1694
1695 * Sync changes from each Btree table to disk right after syncing changes to
1696   its base file, which allows more time for the table changes to be written
1697   and may also be more efficient with some Linux kernel versions.
1698
1699 chert backend:
1700
1701 * Sync changes from each Btree table to disk right after syncing changes to
1702   its base file, which allows more time for the table changes to be written
1703   and may also be more efficient with some Linux kernel versions.
1704
1705 tools:
1706
1707 * xapian-check: Don't try to check document lengths are consistent between the
1708   postlist and termlist tables if it would use more than 1GB of memory, and
1709   handle std::bad_alloc or std::length_error when trying to allocate space
1710   for this.  This issue affected sup users, as sup allocates docids such that
1711   they are sparse and large docids can easily occur.
1712
1713 examples:
1714
1715 * delve: Show the database's UUID.
1716
1717 portability:
1718
1719 * Revert 1.2.1 change to visibility of Xapian::Weight's copy constructor as
1720   it making it private broke compilation with GCC 4.1 (which seems to be a
1721   bug in this compiler version).
1722
1723 * tests/harness/testsuite.cc: Need <cstdio> for sprintf().  Fixes compilation
1724   error which was masked if valgrind was installed.  (ticket#489)
1725
1726 packaging:
1727
1728 * xapian-core.spec: Update for 1.2.x - add e2fsprogs-devel to BuildRequires and
1729   add new files to install.
1730
1731 Xapian-core 1.2.1 (2010-06-22):
1732
1733 This release includes all changes from 1.0.21 which are relevant.
1734
1735 API:
1736
1737 * QueryParser: Add support for open-ended ranges (ticket#480).
1738
1739 * Add new optional parameter to QueryParser::add_boolean_prefix() to allow the
1740   user to indicate a prefix isn't "exclusive" and that multiple instances
1741   should be combined with OP_AND rather than OP_OR.  Fixes ticket#402.  This
1742   change should also improve efficiency as it avoids copying the lists of
1743   prefixes and compares them more efficiently.
1744
1745 * You can now specify a custom stemming algorithm by subclassing
1746   Xapian::StemImplementation, mostly based on patch from Evgeny Sizikov in
1747   ticket#448.
1748
1749 * Fix replication bug: when multiple commits were made to the master database
1750   while a client was performing a full copy, the client would only apply the
1751   first changeset and then try to make the database live, but fail due to
1752   trying to set the wrong revision number.
1753
1754 * Replication no longer sleeps between applying changesets to an offline
1755   database.  It's only necessary to sleep for a live database (to allow readers
1756   to complete a search without getting DatabaseModifiedErrror.
1757
1758 * xapian-replicate: Add new "-r" command line option to specify how long
1759   replication sleeps for between applying changesets to a live database.
1760
1761 * If a Btree table doesn't exist when applying a replication changeset, create
1762   it.  This fixes replicating a revision where a lazy table is created.
1763   (ticket#468)
1764
1765 testsuite:
1766
1767 * zlib can produce "uninitialised" output from "initialised" input - the
1768   output does decode to the input, so this is presumably just some unused bits
1769   in the output, so we use an LD_PRELOAD hack to get valgrind to check the
1770   input is initialised and then tell it that the output is initialised.
1771
1772 * Don't pass NULL to closedir(), which fixes test harness failures on platforms
1773   without /proc/self/fd.
1774
1775 * Use safesyswait.h, fixing build failure on "make check" on FreeBSD.
1776
1777 * Check is SA_SIGINFO is defined before using it as it isn't available
1778   everywhere.  Fixes testsuite build failure on GNU Hurd.
1779
1780 * Add a "soaktest" testsuite, intended to contain long-running tests with
1781   random data.  Currently contains a single test which builds and runs random
1782   queries, checking that the results returned are consistent when asking for
1783   different result ranges.
1784
1785 * Test UUID returned by Database::get_uuid() is 36 characters long.
1786
1787 matcher:
1788
1789 * Xapian no longer forces the wdf_max value to be at least one in
1790   BM25Weight::get_maxpart().  We used to do this so that a non-existent term in
1791   the query would cause it not to achieve 100%, but now we calculate
1792   percentages based on the number of matching subqueries, and it is more
1793   natural for a non-existent term to get zero weight (ditto for a term which
1794   always has wdf 0).
1795
1796 * OP_VALUE_RANGE and OP_VALUE_GE now use value streams directly which is much
1797   more efficient for chert (the default backend in 2.2.x).  As an example, a
1798   range query testcase which previously took 29 seconds now takes 0.4 seconds
1799   (70 times faster).  (ticket#432)
1800
1801 * The term statistics from multiple databases are now gathered in a simpler
1802   way which is a bit faster and uses less memory.
1803
1804 build system:
1805
1806 * Install headers under PREFIX/include not PREFIX/include/xapian.  If you used
1807   XO_LIB_XAPIAN or xapian-config in your build system, the headers would still
1808   have been found.
1809
1810 * Releases and snapshots are now generated with libtool 2.2.10 instead of
1811   2.2.6.
1812
1813 * Fix build failures with some combinations of backends disabled (partially
1814   addresses ticket#361 - some combinations still fail).
1815
1816 * Add check to configure that GCC actually supports visibility for the platform
1817   being built for, which fixes compiler warnings with platforms which don't
1818   (such as Mac OS X and mingw).
1819
1820 documentation:
1821
1822 * Update documentation - replication and PostingSource aren't experimental in
1823   1.2.x.
1824
1825 portability:
1826
1827 * Make use of built-in UUID API on FreeBSD and NetBSD.  (ticket#470)
1828
1829 * Fix mingw build.
1830
1831 debug code:
1832
1833 * Add new pretty printer for values reported by calls and returns in debug
1834   logging - in particular, strings are now reported with non-printable
1835   characters escaped.
1836
1837 * Debug logging should have less runtime overhead when built in but not in use.
1838
1839 * Drop support for --enable-log=profile - dedicated profiling tools are likely
1840   to return more useful results.
1841
1842 Xapian-core 1.2.0 (2010-04-28):
1843
1844 This release includes all changes from 1.0.20 which are relevant.
1845
1846 testsuite:
1847
1848 * Fix --abort-on-error to actually work.
1849
1850 * Exit with status 1 not 0 if we caught an exception from the harness itself.
1851
1852 Xapian-core 1.1.5 (2010-04-16):
1853
1854 This release includes all changes from 1.0.19 which are relevant.
1855
1856 API:
1857
1858 * Database replication now handles an exception while applying a changeset
1859   better.
1860
1861 * If environment variable XAPIAN_MAX_CHANGESETS is set on a replication client
1862   then any changesets read are saved so the replicated copy can itself be
1863   replicated.
1864
1865 testsuite:
1866
1867 * Use sigsetjmp() and siglongjmp() where available so that the set of blocked
1868   signals get restored and the test harness can catch a second incidence of a
1869   particular signal in a run.  Use sigaction() instead of signal() where
1870   available, which allows us to report the address associated with SIGSEGV,
1871   SIGFPE, SIGILL, and SIGBUS.
1872
1873 * Add machinery to check for leaked file descriptors.  Currently this requires
1874   /proc/self/fd to work (which is present on Linux and some other platforms).
1875   Remove the crude ulimit in runtest which has caused problems on some Debian
1876   buildds.
1877
1878 * The test harness now explicitly catches const char * exceptions and reports
1879   their contents.
1880
1881 brass backend:
1882
1883 * Ensure that the wdf upper bound is correctly updated when replacing
1884   documents.
1885
1886 * xapian-compact: Now sets lastdocid correctly when using --no-renumber.
1887
1888 chert backend:
1889
1890 * Ensure that the wdf upper bound is correctly updated when replacing
1891   documents.
1892
1893 * xapian-compact: Now sets lastdocid correctly when using --no-renumber.
1894
1895 * xapian-check: Check that the initial doclen chunk exists.
1896
1897 flint backend:
1898
1899 * xapian-compact: Now sets lastdocid correctly when using --no-renumber.
1900
1901 remote backend:
1902
1903 * Add remote backend support for WritableDatabase::add_spelling() and
1904   WritableDatabase::remove_spelling().  This bumps the remote protocol to
1905   version 35.0 (so both client and servers will need updating).  Suggesting
1906   spelling corrections isn't yet supported.  (ticket#178)
1907
1908 build system:
1909
1910 * XO_LIB_XAPIAN: Give a more specific error message for the cases where
1911   XAPIAN_CONFIG isn't found, is a directory, or isn't executable.
1912
1913 examples:
1914
1915 * delve:
1916
1917   + If any documents are specified with "-d<docid>", "-V<slot>" now only show
1918     values for those documents.
1919
1920   + Remove undocumented -k option, which has been a compatibility alias for -V
1921     since 0.9.10.  Just use -V instead.
1922
1923 * xapian-metadata: Add new example program which allows you to get and set
1924   individual user metadata entries.
1925
1926 Xapian-core 1.1.4 (2010-02-15):
1927
1928 This release includes all changes from 1.0.18 which are relevant.
1929
1930 API:
1931
1932 * Xapian::TermGenerator,Xapian::QueryParser,Xapian::Unicode::is_wordchar():
1933   Add ENCLOSING_MARK and COMBINING_SPACING_MARK categories to is_wordchar(),
1934   which is used by TermGenerator and QueryParser.  Also make TermGenerator and
1935   QueryParser ignore several zero-width space characters.  This is a better
1936   but less compatible version of a fix in 1.0.18.
1937
1938 * Implement support for iterating valuestreams for multidatabases.
1939
1940 * Xapian::Stem: Update the german and german2 stemming algorithms to the latest
1941   versions from Snowball.  These add an extra rule for the "-nisse" ending.
1942
1943 * Xapian::ValueCountMatchSpy: Replace get_values() with values_begin() and
1944   values_end().
1945
1946 * Xapian::MatchSpy: Provide an iterator for accessing the top values found
1947   instead of taking a vector by reference to return them in.
1948
1949 * Xapian::NumericRanges: Remove experimental API we aren't happy with yet.
1950
1951 * Xapian::DatabaseReplica, Xapian::DatabaseMaster: Remove experimental
1952   API we aren't happy with.  Replication is still supported via the
1953   command line programs.  (ticket#347)
1954
1955 * Xapian::score_evenness(): Remove as it turns out not to be useful in practice.
1956   (ticket#435)
1957
1958 * Xapian::ValueWeightPostingSource: A ValueWeightPostingSource with no entries
1959   would report -infinity as its upper bound, which could cause no results to be
1960   incorrectly returned for some queries involving such an object.
1961
1962 * Xapian::WritableDatabase::close() fixed to commit() changes (unless a
1963   transaction is in progress).
1964
1965 testsuite:
1966
1967 * apitest: Improve test coverage in various places.
1968
1969 matcher:
1970
1971 * Uses of values during the match (sorting by value or Sorter, MatchSpy,
1972   MatchDecider, and collapsing) now use value stream iteration which is
1973   a lot more efficient for chert and brass (but may be slower for flint).
1974
1975 brass backend:
1976
1977 * New development backend.  Changes over chert:
1978
1979   + Batched posting list changes during indexing use significantly less memory.
1980
1981   + Instead of using complex code to iterate modified posting lists and
1982     documents length lists, brass can flush individual such lists to disk
1983     and then iterates them from there.
1984
1985   + To iterate all terms, chert flushes all pending postlist changes.  In the
1986     case where a prefix is specified, brass only flushes postlist changes for
1987     terms starting with the specified prefix, and doesn't flush document length
1988     changes.
1989
1990 chert backend:
1991
1992 * Promote chert to being the stable backend.
1993
1994 * Change the packing of integers and strings into sortable keys, which reduces
1995   database size by 2.5% in tests.  This means an incompatible change in the
1996   chert format.  You can use the new xapian-chert-update utility to update a
1997   chert database from the old format to the new format.  It works much like
1998   xapian-compact so should take a similar amount of time (and results in a
1999   compact database).
2000
2001 * xapian-compact:
2002
2003   + Prune unused docids off the end of each database when merging multiple
2004     databases with renumbering.
2005
2006   + Extend --no-renumber to support merging databases, but only if they have
2007     disjoint ranges of used document ids.
2008
2009   + Ensure that the resultant database has a fresh UUID (previously chert
2010     copied the UUID from the first input).
2011
2012 * xapian-check:
2013
2014   + Fix checking of the METAINFO key in chert.  For small databases, the
2015     statistics fit in few enough bytes that incorrect check appeared to
2016     succeed and no errors were reported, but for larger databases an
2017     error was incorrectly reported.
2018
2019   + Rework the checking of postlist chunks to use a cleaner approach which
2020     should report errors better.
2021
2022   + Use a type wider than 32 bits to keep count of items in a table.
2023     Previously xapian-check would report the number of entries modulo
2024     4294967296.
2025
2026 * When iterating a value stream, skip_to() now only assigns the value to a
2027   std::string when it reaches its target.  This saves a lot of unnecessary
2028   string copying - in a real-world test it improved the time for 100 queries
2029   from 3.66s to 3.10s.
2030
2031 * When skipping through a chunk of postings to find the one we want, don't
2032   bother to unpack the wdf values we're skipping over.  This should save a
2033   significant amount of time in certain cases where the profile data shows
2034   about a third of the time is spent in the function where this happens.
2035
2036 * Report locking failure due to running out of file descriptors better.
2037
2038 flint backend:
2039
2040 * xapian-compact:
2041
2042   + Prune unused docids off the end of each database when merging multiple
2043     databases with renumbering.
2044
2045   + Ensure that the resultant database has a fresh UUID (previously flint
2046     didn't set a UUID so one would be generated on demand when next requested,
2047     but only if the database was writable).
2048
2049 * Report locking failure due to running out of file descriptors better.
2050
2051 remote backend:
2052
2053 * Add support for WritableDatabase::set_metadata() and Database::get_metadata()
2054   to the remote backend (based largely on patch in #178).
2055
2056 inmemory backend:
2057
2058 * Read the document data and values lazily for the inmemory backend like we do
2059   for other backends.  They're much less costly to fetch than if a disk or
2060   network access is involved, but it avoids copying potentially large data
2061   which may not be needed.  Consistency here also makes things easier to
2062   understand for both users and developers.
2063
2064 build system:
2065
2066 * This release uses autoconf 2.65 rather than 2.64.
2067
2068 documentation:
2069
2070 * docs/replication.html: Add note about not using reopen() with databases being
2071   updated by the replication client.
2072
2073 * docs/admin_notes.html: Update for chert and other recent changes.
2074
2075 * Remove out-of-date reference in the API documentation comment to an
2076   add_slot() method.  This no longer exists - you need to use multiple
2077   ValueCountMatchSpy objects to monitor more than one slot.
2078
2079 examples:
2080
2081 * simpleexpand,simpleindex,simplesearch: Handle --help and --version.
2082
2083 debug code:
2084
2085 * The debug log now reports boolean values as "true" and "false" (instead of
2086   "1" and "0").
2087
2088 Xapian-core 1.1.3 (2009-09-18):
2089
2090 This release includes all changes from 1.0.15-1.0.17 which are relevant.
2091
2092 API:
2093
2094 * Update Unicode character database to Unicode 5.2.  (ticket#351)
2095
2096 * Rename Xapian::Sorter to Xapian::KeyMaker, paving the way for using it to
2097   build collapse keys too.  Xapian::Sorter remains for compatibility (and is
2098   now a subclass of Xapian::KeyMaker) but is deprecated.
2099
2100 * Resolve the inconsistency in MultiValueSorter::add()'s "forward" parameter
2101   versus the "reverse" parameters which the Enquire sorting functions now take
2102   by replacing the class with MultiKeyMaker with a renamed method add_value()
2103   with a "reverse" parameter.  MultiValueSorter remains with the old semantics
2104   for compatibility but is deprecated.  (ticket#359)
2105
2106 * QueryParser: Don't apply spelling correction to wildcarded terms, or to terms
2107   at the end of the query which we expand under FLAG_PARTIAL.
2108
2109 * Add new Error subclass SerialisationError which we throw for serialisation
2110   related errors (which previously mostly threw NetworkError.
2111
2112 * Rename Xapian::SerialisationContext to Xapian::Registry.
2113
2114 * Add DecreasingValueWeightPostingSource class, which reads weights from a
2115   value slot in which a significant range of the values are in decreasing
2116   order.  This functions similarly to ValueWeightPostingSource, but can be much
2117   more efficient.
2118
2119 * Add new Xapian::MatchSpy class:
2120
2121   + This replaces the use of Xapian::MatchDecider as a "matchspy", which is now
2122     deprecated.  The new class only inspects, and can't reject.  It can work
2123     with remote databases, with the results being serialised to return them
2124     across the link.
2125
2126   + Add subclass ValueCountMatchSpy, which counts the occurrences of each value
2127     in a slot in the search results seen (useful for faceted or categorisation
2128     systems).  The results can be grouped into ranges using the NumericRange
2129     and NumericRanges classes, and the score_evenness() function.  This API is
2130     currently experimental.
2131
2132 * Remove default implementation of Weight::clone() which returns NULL.  We
2133   always need clone() to be implemented because it's called for every term
2134   in the query, not just used for the remote backend.
2135
2136 chert backend:
2137
2138 * Rewrite the low level packing and unpacking functions more efficiently.  As
2139   well as being generally faster, the pack functions now take a reference to a
2140   string to append to, which avoids creating a lot of temporary string objects.
2141   Indexing HTML files with omindex is 5-10% faster.  Searching for "The" on
2142   gmane (which results in a lot of unpacking of postings and document lengths)
2143   is about 35% faster.  (ticket#326)
2144
2145 * xapian-compact: Don't report an absent lazy input table as 0 size.
2146
2147 * Fix ChertModifiedPostList to skip added-but-then-deleted-before-flush
2148   documents.  (ticket#392)
2149
2150 * Fix WritableDatabase::get_doclength() to work properly after a call to commit
2151   for the chert backend (ticket#397).
2152
2153 * Fix to work with the metainfo key stored in the latest format of chert
2154   databases.
2155
2156 * Avoid doing pointless work by trying to delete non-existent lists of values
2157   when we're just adding documents.
2158
2159 * Fix code to find the first docid in the next chunk (ticket#399).
2160
2161 * Add support for chert databases without a termlist table (ticket#181).
2162   Currently the only way to create such a database is to create a chert
2163   database and do "rm termlist.*".
2164
2165 flint backend:
2166
2167 * xapian-compact: Don't report an absent lazy input table as 0 size.
2168
2169 remote backend:
2170
2171 * Remote protocol major version has changed to support serialising MatchSpy
2172   objects.
2173
2174 * Fixed not to sometimes read off the end of the returned matches when
2175   searching multiple databases, some of which are remote, and when the primary
2176   ordering is by relevance.
2177
2178 build system:
2179
2180 * This release uses autoconf 2.64 rather than 2.63.  This means configure now
2181   makes use of shell functions, which makes it ~13% smaller, and should also
2182   make it execute faster.
2183
2184 * configure: Send stderr output from ldconfig to config.log.
2185
2186 * Add optional third parameter to XO_LIB_XAPIAN autoconf macro which specifies
2187   the basename for the "xapian-config" script (defaults to "xapian-config" to
2188   give the current behaviour).
2189
2190 * This release uses doxygen 1.5.9 to generate the API documentation.
2191
2192 documentation:
2193
2194 * Minor improvements to the formatting of the collated API documentation.
2195
2196 portability:
2197
2198 * Fix code to compile with Sun's C++ compiler.
2199
2200 * Fix our uuid_unparse_lower() replacement for older libuuid to actually
2201   compile (really fixes ticket#368).
2202
2203 * Fix xapian-config to work with Solaris 10 /bin/sh.  (ticket#405)
2204
2205 debug code:
2206
2207 * Use C++ syntax for NULL with a type in log output.
2208
2209 Xapian-core 1.1.2 (2009-07-23):
2210
2211 This release includes all changes from 1.0.14 which are relevant.
2212
2213 API:
2214
2215 * Move support for a prefix/suffix from NumberValueRangeProcessor to
2216   StringValueRangeProcessor, and change NumberValueRangeProcessor and
2217   DateValueRangeProcessor to inherit from StringValueRangeProcessor so all
2218   three now support a prefix/suffix.  (ticket#220)
2219
2220 * Query: Trim 4 bytes off the internals.  (ticket#280)
2221
2222 * QueryParser: If default_op is OP_NEAR or OP_PHRASE then make the window size
2223   (9 + no_of_terms) to match the default for an explicit NEAR or PHRASE.
2224   (ticket#254)
2225
2226 testsuite:
2227
2228 * Sort out the clash between two different patches to fix leaking file
2229   descriptors when running tests with the remotetcp backend (broken by
2230   changes in 1.1.1).
2231
2232 matcher:
2233
2234 * If the highest weighted document doesn't match all the terms in the query,
2235   its percentage weight is now calculated by simply counting how many weighted
2236   leaf subqueries match it instead of scaling by the proportion of the weight
2237   which matches (which required accessing the termlist for that document).
2238   (ticket#363).
2239
2240 * XOR with a SYNONYM subquery could previously achieve 100% - this has been
2241   fixed.
2242
2243 flint backend:
2244
2245 * Backport the lazy update changes from chert to flint:
2246
2247   WritableDatabase::replace_document() now updates the database lazily in
2248   simple cases - for example, if you just change a document's values and
2249   replace it with the same docid, then the terms and document data aren't
2250   needlessly rewritten.  Caveats: currently we only check if you've looked at
2251   the values/terms/data, not if they've actually been modified, and only keep
2252   track of the last document read.
2253
2254 build system:
2255
2256 * Update to always use C++ forms for ISO C standard headers (ticket#330).
2257
2258 * Fix several places where Xapian::doccount is used instead of
2259   Xapian::termcount, and similar issues.  It's still not possible to make
2260   these types different sizes, but we're now closer to this goal.
2261   (ticket#385).
2262
2263 documentation:
2264
2265 * Note that PostingSource and Weight objects returned by clone() and
2266   unserialise() methods will be deallocated with "delete".
2267
2268 debug code:
2269
2270 * Fix debug logging not to segfault on NULL Query::Internal pointers.
2271
2272 Xapian-core 1.1.1 (2009-06-09):
2273
2274 This release includes all changes from 1.0.13 which are relevant.
2275
2276 API:
2277
2278 * New Query::OP_SYNONYM operator, which matches the same documents as OP_OR,
2279   but attempts to weight as if the all the subqueries were a single term with
2280   their combined wdf, which should give better relevance weights.
2281
2282 * QueryParser's synonym, wildcard, and partial query features now use
2283   the new OP_SYNONYM operator.
2284
2285 * PostingSource: Add new set_maxweight() method to allow subclasses to tell
2286   the matcher that their maximum weight has decreased.  Make get_maxweight()
2287   a non-virtual method of the baseclass which returns the last set maxweight
2288   (which will require updates to most user subclasses. (ticket#340)
2289
2290 * DatabaseReplica: Fix SEGV when calling get_description() on a default
2291   constructed DatabaseReplica.
2292
2293 * Make Query::MatchAll and Query::MatchNothing const since they're immutable.
2294   All the public methods of Query are const, so this should be completely API
2295   compatible.
2296
2297 * Methods returning an end iterator for a ValueIterator now actually return a
2298   proxy object which silently converts to ValueIterator if required.  This
2299   proxy object allows a comparison with an "_end()" method to be optimised
2300   better so that it just ends up comparing the internal member of the iterator
2301   class with NULL (previously a call to ValueIterator's destructor remained).
2302   This should be API compatible, but note that it is definitely now more
2303   efficient just to compare against the return value of the relevant _end()
2304   method than to store the end iterator explicitly.
2305
2306 testsuite:
2307
2308 * Testcase valuestats4 requires transactions, so indicate that and remove the
2309   explicit SKIP for inmemory.
2310
2311 * Testcase changemaxweightsource1 uses ChangeMaxweightPostingSource, which
2312   doesn't work with multi or remote, so mark the test accordingly.
2313
2314 * We've decided that "going back" with skip_to() or check() should have
2315   unspecified behaviour, so stop testing how this case behaves!
2316
2317 matcher:
2318
2319 * Subclass MultiPostList directly from PostList instead of from LeafPostList.
2320   This gets rid of two unused data members per MultiPostList in exchange for
2321   having to define 5 extra "never called" methods, but 4 of these just
2322   tailcall.
2323
2324 * Store termfreqs and reltermfreqs for query terms in a single map rather than
2325   one map for each, which saves is more compact and likely to be faster.
2326
2327 chert backend:
2328
2329 * xapian-check: For chert, check value stats are the correct format and that
2330   the streamed values are consistent with their stats (ticket#277).
2331
2332 * xapian-check: Chert doesn't store termlist entries for documents without
2333   terms, which resulted in us reporting an error when we found document ids in
2334   the doclength "postlist" which were greater than any with an entry in the
2335   termlist.  Instead compare these entries against db.get_last_docid() if we
2336   are checking a whole db and the db can be opened.  If not, suppress this
2337   check.
2338
2339 remote backend:
2340
2341 * When serialising stats, serialise the termfreq and reltermfreq together,
2342   rather than in separate lists.  This gives a smaller serialised form, and
2343   matches these both being stored in the same map now.  This is an incompatible
2344   remote protocol change, so bump the major version to 32.  (ticket#362)
2345
2346 build system:
2347
2348 * Some build failures with --disable-backend-XXX options have been fixed, but
2349   we haven't exhaustively tested all combinations.
2350
2351 * Ship common/win32_uuid.cc and common/win32_uuid.h (ticket#367).
2352
2353 documentation:
2354
2355 * Update PostingSource documentation to describe how init() is called again if
2356   a PostingSource is reused.  Fixes #352.
2357
2358 portability:
2359
2360 * Fixed to build with GCC 4.4.
2361
2362 * Drop support for GCC 2.95.3 and 3.0.x - we now require at least 3.1 as doing
2363   so eliminates some preprocessor conditionals which we aren't able to test
2364   regularly as we don't have easy access to such old GCC versions.  GCC 3.1 is
2365   nearly 7 years old now, and GCC3 didn't get widespread use until later
2366   versions anyway.  If you still need to use GCC < 3.1, Xapian 1.0.x should
2367   build with 2.95.3 or newer.
2368
2369 * Older versions of libuuid don't have uuid_unparse_lower() so probe for it in
2370   configure, and if it isn't present provide an inline version in safeuuid.h
2371   (ticket#368).
2372
2373 * Fixed to build with MSVC (ticket#379).
2374
2375 * Add static_cast<char>() to str(bool) overload to suppress bogus MSVC warning
2376   (ticket#377).
2377
2378 debug code:
2379
2380 * common/debuglog.h: Add missing initialisation of uncaught_exception variable
2381   in a couple of places.
2382
2383 Xapian-core 1.1.0 (2009-04-22):
2384
2385 API:
2386
2387 * All deprecated xapian-core features listed for removal in 1.1.0 have been
2388   removed.  See deprecation.html for details, and suggested updates.
2389
2390 * The Unicode character categorisation functions have been updated from
2391   Unicode 5.0 to 5.1.
2392
2393 * Add NON_SPACING_MARK to is_wordchar() for better tokenisation of languages
2394   which use such marks - for example, Arabic.  This is better than the stop-gap
2395   fix in 1.0 of treating NON_SPACING_MARK as a phrase-generator character
2396   when parsing queries, but it does mean that databases built from data
2397   containing such characters will need to be rebuilt.  (ticket#355)
2398
2399 * The details of how to subclass Xapian::Weight to implement your own
2400   weighting scheme have changed incompatibly to allow user weighting schemes
2401   to have access to the same statistics as built-in schemes (ticket#213)
2402   If you have a existing subclass of Xapian::Weight you'll need to update it.
2403
2404 * New Database methods get_doclength_upper_bound(), get_doclength_lower_bound()
2405   and get_wdf_upper_bound(), primarily intended for allowing weighting schemes
2406   to calculate tighter upper bounds on weights (which BM25Weight and TradWeight
2407   now do) which allows matcher weight-based optimisations to be more effective.
2408   Chert actually tracks doclength bounds and a global (rather than per term)
2409   upper bound on wdf; other backends return much less tight bounds, but these
2410   still lead to better upper bounds on weights.
2411
2412 * Enquire::get_eset() now uses an unmodified of probabilistic formula, and
2413   doesn't return terms which would get a negative weight from it (since that
2414   means they are expected to be harmful not helpful).
2415
2416 * Add Database::close() method, which will release system resources (in
2417   particular, close filehandles) held by a database.  This is particularly
2418   useful when wrapping the API for languages with garbage collection.
2419
2420 * Change Database::positionlist_begin() not to throw exceptions if the term or
2421   document doesn't exist.
2422
2423 * Xapian databases now have a UUID, readable with Database::get_uuid().
2424
2425 * A new Database replication API has been added (currently experimental).
2426
2427 * MSet::get_termfreq() will now fall back to looking up the term frequency in
2428   the database rather than raising an exception if a term wasn't present in
2429   the query.
2430
2431 * Calling RSet:add_document() with argument 0 now throws InvalidArgumentError.
2432
2433 * QueryParser sped up (new version of lemon); queryparsertest runs 2.2% faster.
2434
2435 * Add ValueSetMatchDecider, which is a matchdecider which is intended to be
2436   passed a set of values to look for in documents, and selects documents based
2437   on the presence of those values.
2438
2439 * Add new Xapian::PostingSource class to allow passing custom sources of
2440   postings and weights to the matcher.  Built-in PostingSource subclasses:
2441   FixedWeightPostingSource, ValueMapPostingSource, ValuePostingSource, and
2442   ValueWeightPostingSource.  (Currently experimental).
2443
2444 * Database: Add get_value_freq(), get_value_lower_bound() and
2445   get_value_upper_bound() methods to get statistics about the values stored in
2446   a slot.  Add support for the value statistics methods to chert, inmemory,
2447   multi and remote databases.
2448
2449 * Enquire::get_eset() now faster for large ESet size.
2450
2451 * Xapian::Document objects now have a reduced memory footprint.
2452
2453 * Enquire::set_collapse_key() now allows you to specify a maximum number of
2454   matches with each collapse key to keep (which defaults to 1, giving the
2455   previous behaviour).  Enquire can now report bounds and an estimate of what
2456   the total number of matches would have been if collapsing wasn't in use.
2457
2458 * WritableDatabase::commit() is a new, preferred alias for
2459   WritableDatabase::flush().  (ticket#266)
2460
2461 * Add methods for serialising documents and queries to strings, and
2462   unserialising back from strings.  (ticket#206)
2463
2464 testsuite:
2465
2466 * stemtest: No longer checks environment variables OM_STEMTEST_SKIP_RANDOM,
2467   OM_STEMTEST_LANGUAGES, and OM_STEMTEST_SEED.
2468
2469 * perftest: New performance testsuite.  This is intended to contain intended to
2470   contain potentially time-consuming performance tests, which log output to
2471   an XML file for later analysis.  It's not run by "make check" - use "make
2472   check-perf" to run it.
2473
2474 * apitest: Now runs tests over both flint and chert for multi, remotetcp, and
2475   remoteprog.
2476
2477 * Wait for subprocesses to finish at end of tests with remotetcp backend, to
2478   avoid test failures when the same database is used for the next testcase.
2479
2480 matcher:
2481
2482 * Internally, pass around non-normalised document lengths as Xapian::termcount
2483   (unsigned integer) not Xapian::doclength (double).  This gives a 3% speedup
2484   for 10 term OR queries!
2485
2486 chert backend:
2487
2488 * New development backend.  Use Chert::open() to explicitly create a chert
2489   format database, or set XAPIAN_PREFER_CHERT=1 in the environment to
2490   prefer chert when creating a new database without an explicit type.
2491
2492 * Quartz and Flint stored the document length alongside every posting list
2493   entry.  Chert instead stores a chunked list of all the document lengths
2494   which saves a lot of space, and is a big win for large queries or those
2495   which don't need the document lengths.  This structure is used to
2496   implement much faster iteration (six times faster in a test) over all
2497   document ids (which speeds up queries using unary NOT, e.g. `NOT apples'),
2498   and to test for the existence of documents (instead of checking the record
2499   table for an entry).
2500
2501 * Document values are now stored in a chunked stream for each slot for
2502   efficient access to the same slot in lots of documents.  This makes
2503   operations like sort by value much more efficient.
2504
2505 * WritableDatabase::replace_document() now updates the database lazily in
2506   simple cases - for example, if you just change a document's values and
2507   replace it with the same docid, then the terms and document data aren't
2508   needlessly rewritten.  Caveats: currently we only check if you've looked at
2509   the values/terms/data, not if they've actually been modified, and only keep
2510   track of the last document read.
2511
2512 flint backend:
2513
2514 * If we can't obtain a write lock while trying to create a new database
2515   we now report the lock failure with DatabaseLockError, not
2516   DatabaseOpeningError - it's more useful to know that the lock attempt failed
2517   in this situation.
2518
2519 * Improve reporting of failures to obtain lock due to unexpected errors.
2520
2521 * xapian-check: Don't stop checking a table after an error in certain cases -
2522   instead increment the error counter and try to continue checking from the
2523   next item.
2524
2525 remote backend:
2526
2527 * The remote database protocol major version has been increased, allowing
2528   a significant amount of compatibility code to be removed.  This change means
2529   that new clients won't work with old servers, and old clients won't work
2530   with new servers.  If upgrading a live system, you will need to take this
2531   into account.
2532
2533 * The remote servers now always default to opening a Database and the client
2534   has to send a protocol message to explicitly request write access.  This
2535   allows a single server to support multiple readers and one writer
2536   simultaneously.  (ticket#145)
2537
2538 * Database::get_document() no longer does an unnecessary copy of the document's
2539   values.
2540
2541 * Change serialisation of queries to be more compact and easier to parse.
2542
2543 stub databases:
2544
2545 * Stub databases used to assume that any relative paths were relative to the
2546   current working directory.  They now assume that relative paths are
2547   relative to the directory holding the stub database file.
2548
2549 * Stub database lines which begin with a '#' character are now ignored,
2550   allowing comments in stub database files.
2551
2552 * New "stub directory" database type - this is a directory containing a stub
2553   database file named "XAPIANDB".
2554
2555 * Don't just ignore lines with no spaces in a stub database file.
2556
2557 * Bad lines in a stub file were being ignored after we'd seen a good entry.
2558
2559 * Add new Auto::open_stub() overload which opens a stub database file
2560   containing a single entry as a WritableDatabase.
2561
2562 * Add support for "inmemory" to stub database (which is useful now that stub
2563   databases can be opened for writing).
2564
2565 * A stub database file is now allowed to contain no database entries, which
2566   results in an empty Database object (this avoids user code having to special
2567   case to handle "0 or more" databases).
2568
2569 build system:
2570
2571 * To allow installations of Xapian 1.0 and 1.1 to easily coexist, the library
2572   is now libxapian-1.1; xapian.m4 is now xapian-1.1.m4; headers are now
2573   installed in $prefix/include/xapian-1.1.  If you use XO_LIB_XAPIAN or
2574   xapian-config as we recommend, this should all be transparent.  Also
2575   programs and scripts have a default program suffix to -1.1 unless overridden
2576   using the --program-suffix argument to configure (if you really want no
2577   suffix, "./configure --program-suffix=" will achieve this).
2578
2579 * On Linux and k*bsd-gnu, override libtool's link_all_deplibs_CXX to "no".
2580
2581 * On Linux, override libtool's sys_lib_dlsearch_path_spec to a list generated
2582   in a more reliable way which includes all the default directories.
2583
2584 * configure: --enable-debug and --enable-debug-verbose have been deprecated
2585   since 1.0.0, so remove specific errors pointing to the replacements.
2586
2587 documentation:
2588
2589 * Disable "JAVADOC_AUTOBRIEF" in doxygen configuration since we always try to
2590   write a brief description explicitly, and JAVADOC_AUTOBRIEF causes problems
2591   in some cases.
2592
2593 * docs/deprecation.html: Describe what "experimental" features are, and why
2594   replication and posting sources are currently experimental.
2595
2596 * docs/deprecation.html: Deprecate Stem_get_available_languages() from the
2597   python bindings.
2598
2599 examples:
2600
2601 * Use C++ forms of C headers in examples (ticket#330).
2602
2603 packaging:
2604
2605 * xapian-core.spec: We no longer need to run autoreconf to work around
2606   libtool's incomplete sys_lib_dlsearch_path_spec or to pick up distro-specific
2607   patches for link_all_deplibs.
2608
2609 debug code:
2610
2611 * Report get_description() rather than the pointer value for
2612   Xapian::Query::Internal* parameters to internal functions.
2613
2614 * The debug logging framework has been overhauled.  See HACKING for details
2615   of how it now works.
2616
2617 * Faster integer to string functions inside the library (this is a general
2618   improvement, but will particularly speed up debug logging as that converts a
2619   lot of integers to strings).
2620
2621 Xapian-core 1.0.23 (2011-01-14):
2622
2623 API:
2624
2625 * QueryParser: Avoid a double free if Query construction throws an exception
2626   in a particular case.  Fixes ticket#515.
2627
2628 * QueryParser: Handle NEAR/<offset> and ADJ/<offset> where offset isn't an
2629   integer the same way at the end of the query as in the middle.
2630
2631 * Enquire::get_mset(): Avoid pointlessly trying to allocate lots of memory
2632   if the first document requested is larger than the size of the database.
2633
2634 * Enquire::get_mset(): An empty query now returns an MSet with firstitem set
2635   correctly - previously firstitem was always 0 in this case.
2636
2637 matcher:
2638
2639 * The matcher wasn't recalculating the max possible weight after a subquery of
2640   XOR reached its end.  This caused an assertion failure in debug builds, and
2641   is a missed optimisation opportunity.
2642
2643 tools:
2644
2645 * xapian-compact: Fix access to empty priority_queue while merging synonyms.
2646   This could have caused problems, though we've had no reports of any (the
2647   bug was found with _GLIBCXX_DEBUG).
2648
2649 Xapian-core 1.0.22 (2010-10-03):
2650
2651 API:
2652
2653 * Xapian::Document: Initialise docid to 0 when creating a document from
2654   scratch, as documented.
2655
2656 * Xapian::QueryParser: Allow phrase generators between a probabilistic prefix
2657   and the term itself (e.g. path:/usr/local).
2658
2659 matcher:
2660
2661 * Back out the OP_OR efficiency improvement made in 1.0.21 since this change
2662   slows down some other common cases.  We'll address this fully in 1.2.4, but
2663   that fix is more invasive than we are comfortable with for 1.0.x at this
2664   point.
2665
2666 build system:
2667
2668 * xapian-config: Add --static option which makes other options report values
2669   for static linking.
2670
2671 documentation:
2672
2673 * deprecation.html: Add guidelines for supporting other software.
2674
2675 * Document cases where QueryParser's FLAG_WILDCARD and FLAG_PARTIAL aren't
2676   currently supported.
2677
2678 * Fix documentation for Xapian::timeout type - it holds a time interval in
2679   milliseconds not microseconds (the API docs for the methods which use it
2680   explicitly correctly document that the timeouts are in milliseconds).
2681
2682 portability:
2683
2684 * configure: Don't pass -mtune=generic unless GCC >= 4.2 is in use
2685   (ticket#492).
2686
2687 * configure: Add support for --enable-sse=sse and --enable-sse=sse2 to allow
2688   control of which SSE instructions to use.
2689
2690 * configure: Enable use of SSE maths on x86 by default with Sun's compiler.
2691
2692 * configure: Beef up the test for whether -lm is required and add a special
2693   case to force it to be for Sun's C++ compiler - there's some interaction with
2694   libtool and/or shared objects which means that the previous configure test
2695   didn't think -lm is needed here when it is.
2696
2697 * Fix test harness to build under Microsoft Windows (ticket#495).
2698
2699 * Fix to build on OpenBSD 4.5 with GCC 3.3.5.
2700
2701 * Need to avoid excess precision on m68k when targeting models 68010, 68020,
2702   68030 as well as 68000.
2703
2704 packaging:
2705
2706 * xapian-core.spec: Add cmake related files to RPM packaging.
2707
2708 Xapian-core 1.0.21 (2010-06-18):
2709
2710 API:
2711
2712 * Xapian::Stem now recognises "nb" and "nn" as additional codes for the
2713   Norwegian stemmer.
2714
2715 * Xapian::QueryParser now correctly parses a wildcarded term in between two
2716   other terms (ticket#484).
2717
2718 testsuite:
2719
2720 * Improve test coverage of OP_VALUE_RANGE and MSet::get_percent().
2721
2722 matcher:
2723
2724 * OP_OR could skip a matching document if it decayed to OP_AND or OP_AND_MAYBE
2725   during the match in some cases.  Fixes ticket#476.
2726
2727 * OP_XOR with non-leaf subqueries could skip matching documents in some cases,
2728   and OP_XOR of three or more sub-queries could return incorrect weights.
2729   Fixes ticket#475.
2730
2731 * OP_OR is now more efficient if a subquery is potentially expensive (e.g.
2732   ValueRangePostList, OP_NEAR, OP_PHRASE).  A 10-fold speed-up with
2733   ValueRangePostList has been observed.
2734
2735 flint backend:
2736
2737 * When iterating a table, if the table changes underneath we could end up
2738   returning the same entry twice.  (Debian#579951)
2739
2740 * A cancelled transaction (or a failing operation implicitly cancelling
2741   pending changes) now marks the tables as unmodified, which fixes an exception
2742   trying to read block 0 if one of the tables is empty on disk.
2743
2744 quartz backend:
2745
2746 * When iterating a table, if the table changes underneath we could end up
2747   returning the same entry twice.  (Debian#579951)
2748
2749 remote backend:
2750
2751 * When daemonising, read the max fd to close with sysconf() instead of using
2752   a hardcoded value of 256, and work even if stdin and stdout have been closed.
2753
2754 build system:
2755
2756 * Install files to make Xapian easier to use with cmake.
2757
2758 documentation:
2759
2760 * Update the list of languages that the Xapian::Stem constructor recognises.
2761
2762 * Assorted minor improvements to the collated API documentation.
2763
2764 portability:
2765
2766 * On x86 processors, Xapian now defaults to using SSE2 FP instructions.  This
2767   avoids issues with excess precision and it a bit faster too.  If you need
2768   to support processors without SSE2 (this means pre-Pentium4 for Intel) then
2769   configure with --disable-sse.  (ticket#387)
2770
2771 * Fix warning when compiling for mingw with GCC 4.2.1.
2772
2773 * Remove mutable from a couple of reference class members - mutable doesn't
2774   make sense for a reference and some compilers warn about it.
2775
2776 Xapian-core 1.0.20 (2010-04-27):
2777
2778 API:
2779
2780 * MSet: Fix incorrect values reported by get_matches_estimated(),
2781   get_matches_lower_bound(), and get_matches_upper_bound() in certain cases
2782   when sorting and collapsing (ticket#464).
2783
2784 documentation:
2785
2786 * deprecation.html: Note how to disable deprecation warnings. (ticket#393)
2787
2788 examples:
2789
2790 * delve: Add -a option to list all terms in a database.
2791
2792 * delve: -d and -V command line options now report out of range and invalid
2793   numbers.
2794
2795 portability:
2796
2797 * The getopt warning fix for Cygwin in 1.0.19 caused build failures on Mac OS X
2798   (and probably some other platforms with non-GNU getopt implementations), so
2799   replace with a fix which is only enabled for Cygwin. (ticket#469)
2800
2801 Xapian-core 1.0.19 (2010-04-15):
2802
2803 API:
2804
2805 * QueryParser: Fix leak if Xapian::Database throws an exception during parsing
2806   (ticket#462).
2807
2808 testsuite:
2809
2810 * Explicitly flush after indexing for quartz and flint, so we see any
2811   exceptions from the flush (the implicit flush from the destructor swallows
2812   any exceptions).
2813
2814 * apitest: Add databasemodified1 testcase to provide some test coverage for
2815   DatabaseModifiedError.
2816
2817 flint backend:
2818
2819 * When updating a document, rather than decoding the old positions, comparing
2820   with the new, and then encoding the new if different, we now just encode the
2821   new and then compare the encoded forms.  (ticket#428)
2822
2823 * Avoid trying to delete the document positions when we know there aren't any.
2824
2825 * Fix memory leak if Database::allterms_begin() throws an exception
2826   (ticket#462).
2827
2828 * xapian-check: Report document id for document length mismatch.
2829
2830 * Fix potential issues with iterators over a WritableDatabase which is modified
2831   during iteration.  No problems have actually been observed with flint, only
2832   in 1.1.4 with chert in cases which don't occur in flint, but it seems likely
2833   the issue can manifest for flint in other situations.  Fixes ticket#455.
2834
2835 * Initialise zlib z_stream structure members zalloc, zfree, and opaque with
2836   Z_NULL rather than 0 cast to the appropriate type, as that's what the zlib
2837   documentation says to do.  Add missing initialisation of opaque for the
2838   inflate z_stream which the zlib docs say is needed (reading the zlib code,
2839   this isn't true for current versions, so this improves robustness rather
2840   than fixing an observable bug).
2841
2842 * Don't memcpy() a block to itself - it's a waste of effort, and (probably)
2843   undefined behaviour (as a block overlaps itself).
2844
2845 quartz backend:
2846
2847 * Fix potential issues with iterators over a WritableDatabase which is modified
2848   during iteration.  No problems have actually been observed with quartz, only
2849   in 1.1.4 with chert in cases which don't occur in quartz, but it seems likely
2850   the issue can manifest for quartz in other situations.  Fixes ticket#455.
2851
2852 * Don't memcpy() a block to itself - it's a waste of effort, and (probably)
2853   undefined behaviour (as a block overlaps itself).
2854
2855 build system:
2856
2857 * Force -fno-strict-aliasing for GCC 4.2 to avoid bad code being generated due
2858   to a bug in that compiler version.  Fixes ticket#449.  This issue hasn't been
2859   observed to affect Xapian 1.0.x, but it seems prudent to backport the fix.
2860
2861 documentation:
2862
2863 * INSTALL: Correct description of --enable-assertions.  It does NOT enable
2864   debugging symbols, and shouldn't control checks on bad data passed to API
2865   calls (if it does anywhere, that's a bug).  Note that Xapian will run more
2866   slowly with assertions on.
2867
2868 * spelling.html:
2869
2870   + Add section on indexing.
2871
2872   + Add a note about removing automatically added spelling dictionary entries.
2873
2874   + Move the "algorithm" section to the end, as it is really just background
2875     information for the curious.
2876
2877 * include/xapian/queryparser.h: Document the possible exception messages from
2878   QueryParser::parse_query().
2879
2880 * include/xapian/termgenerator.h: Note how TermGenerator handles stopwords.
2881
2882 examples:
2883
2884 * delve: Display the lastdocid value when displaying general database
2885   statistics.
2886
2887 * simpleindex: Explicitly call flush() on the database, as that is good
2888   practice (since you see any exceptions).
2889
2890 portability:
2891
2892 * Fix compilation failure in testsuite on OpenBSD, introduced by new regression
2893   test in 1.0.18.  Fixes ticket#458.
2894
2895 * Fix getopt-related warning on Cygwin.
2896
2897 Xapian-core 1.0.18 (2009-02-14):
2898
2899 API:
2900
2901 * Document: Add new add_boolean_term() method, which is an alias for add_term()
2902   with wdfinc=0.
2903
2904 * QueryParser:
2905
2906   + Add support for quoting boolean terms so they can contain arbitrary
2907     characters (partly addresses ticket#128).
2908
2909   + Add ENCLOSING_MARK and COMBINING_SPACING_MARK categories, plus several
2910     zero-width space characters, as phrase generators.  This mirrors a better
2911     fix in 1.1.4, but without losing compatibility with existing databases.
2912
2913   + Fix handling of an explicit AND before a hated term (foo AND -bar).
2914     (ticket#447)
2915
2916 * TermIterator: Only include trailing '+' or '#' on a term if it isn't followed
2917   by a word character (makes more sense and matches QueryParser's behaviour).
2918   (ticket#446)
2919
2920 * Database: Fix many methods to behave better on a database with no
2921   subdatabases, such as is constructed by Database().  Fixes ticket#415.
2922
2923 testsuite:
2924
2925 * Add test coverage for xapian-compact, and improve coverage for
2926   WritableDatabase::replace_document().
2927
2928 * apitest: Rename matchfunctor<n> to matchdecider<n> to match current
2929   terminology.
2930
2931 flint backend:
2932
2933 * When updating documents, don't update posting entries which haven't changed.
2934   Largely fixes ticket #250.
2935
2936 * If the number of entries in the position table happened to be 4294967296 or
2937   an exact multiple, Xapian would ignore positional data for that table when
2938   running queries, and xapian-compact wouldn't copy its contents.
2939
2940 * Iterating all the terms in the database with a prefix is now slightly more
2941   efficient.
2942
2943 * Fix locking code to work if stdin and/or stdout have been closed.
2944
2945 * If a document is replaced with itself unmodified, we no longer increase the
2946   automatic flush counter.
2947
2948 * When iterating a posting list modified since the last flush(), the reported
2949   wdf is now correct (previously it was too high by its old value).
2950
2951 * Replacing a document deleted since the last flush failed to update the
2952   collection frequency and wdf, and caused an assertion failure when assertions
2953   were enabled.
2954
2955 * WritableDatabase::replace_document() didn't always remove old positional
2956   data (the only effect is that the position table was bloated by unwanted
2957   entries).
2958
2959 * xapian-inspect:
2960
2961   + New "until" command which shows entries until a specified key is reached.
2962
2963   + New "open" command which allows easy switching between tables.
2964
2965 * xapian-compact: Fix typos in --help output.
2966
2967 quartz backend:
2968
2969 * Replacing a document deleted since the last flush failed to update the
2970   collection frequency and wdf, and caused an assertion failure when assertions
2971   were enabled.
2972
2973 * WritableDatabase::replace_document() didn't always remove old positional
2974   data (the only effect is that the position table was bloated by unwanted
2975   entries).
2976
2977 remote backend:
2978
2979 * Throw UnimplementedError if a MatchDecider is used with the remote backend.
2980   Previously Xapian returned incorrect results in this case.
2981
2982 build system:
2983
2984 * configure: With --enable-maintainer-mode, enable -Werror for GCC >= 4.1
2985   rather than >= 4.0 as Apple's GCC 4.0 gives bogus uninitialised variable
2986   warnings.
2987
2988 documentation:
2989
2990 * The API documentation now includes Xapian::Error and subclasses, and doesn't
2991   mention Xapian::Query::Internal.
2992
2993 * Make clear in the Xapian::Document API documentation that this class is a
2994   lazy handle and discuss the issues this can cause.
2995
2996 * INSTALL: Improve text about zlib dependency.
2997
2998 * HACKING: Add details of our licensing policy for accepting patches.
2999
3000 examples:
3001
3002 * quest: If no database is specified, still parse the query and report
3003   Query::get_description() to provide an easy way to check how a query parses.
3004
3005 portability:
3006
3007 * Fix GCC 4.2 warning.
3008
3009 xapian-core 1.0.17 (2009-11-18):
3010
3011 API:
3012
3013 * QueryParser:
3014
3015   + Fix handling of a group of two or more terms which are all stopwords which
3016     notably caused issues when default_op was OP_AND, but could probably
3017     manifest in other cases too.  Fixes ticket#406.
3018
3019   + Fix interaction of FLAG_PARTIAL and FLAG_SYNONYM.  (ticket#407)
3020
3021 * Database: A database created via the default constructor no longer causes a
3022   segfault when the methods get_metadata() or metadata_keys_begin() are called.
3023
3024 flint backend:
3025
3026 * Don't try to close the fd one more than the maximum allowable when locking
3027   the database.  Harmless, except it causes a warning when running under
3028   valgrind.  (ticket#408)
3029
3030 remote backend:
3031
3032 * Xapian::Sorter isn't supported with the remote backend so throw
3033   UnimplementedError rather than giving incorrect results.  (ticket#384)
3034
3035 * Fix potential reading off the end of the MSet which is returned internally
3036   by the remote server.
3037
3038 documentation:
3039
3040 * Various documentation comment improvements for the Database class.
3041
3042 examples:
3043
3044 * examples/quest.cc: Tighten up the type of the error we catch to detect an
3045   unknown stemming language.
3046
3047 portability:
3048
3049 * xapian-config: Need to quote ^ for Solaris /bin/sh.
3050
3051 * configure: Actually use any flags we determine are needed to switch the
3052   compiler to proper ANSI C++ mode, when building xapian-core - this stopped
3053   working in 1.0.12, breaking support for HP's aCC, Compaq's cxx, Sun's CC, and
3054   SGI's CC.
3055
3056 Xapian-core 1.0.16 (2009-09-10):
3057
3058 flint backend:
3059
3060 * Fix a typo which stopped this fix in 1.0.12 from working (ticket #398):
3061
3062   If we fail to get the lock after we spawn the child lock process (the common
3063   case is because the database is already open for writing) then we now clean
3064   up the child process properly.
3065
3066 documentation:
3067
3068 * Improve API documentation of QueryParser::set_default_op() and
3069   QueryParser::get_default_op().
3070
3071 portability:
3072
3073 * Fix build failure on Mac OS X 10.6.
3074
3075 Xapian-core 1.0.15 (2009-08-26):
3076
3077 testsuite:
3078
3079 * Fix the test harness not to report heaps of bogus errors when using valgrind
3080   3.5.0.
3081
3082 flint backend:
3083
3084 * Backport the lazy update changes from 1.1.2:
3085
3086   WritableDatabase::replace_document() now updates the database lazily in
3087   simple cases - for example, if you just change a document's values and
3088   replace it with the same docid, then the terms and document data aren't
3089   needlessly rewritten.  Caveats: currently we only check if you've looked at
3090   the values/terms/data, not if they've actually been modified, and only keep
3091   track of the last document read.
3092
3093 * Fix PostingIterator::skip_to() on an unflushed WritableDatabase to skip
3094   documents which were added and deleted since the last flush.  (ticket#392)
3095
3096 documentation:
3097
3098 * Overhaul the doxygen options we use and tweak various documentation comments
3099   to improve the generated API documentation.
3100
3101 * Explicitly document that an empty prefix argument to
3102   QueryParser::add_prefix() means "no prefix".
3103
3104 * Update the documentation comments for Enable::set_sort_by_value(),
3105   set_sort_by_value_then_relevance(), and set_sort_by_relevance_then_value() to
3106   mention sortable_serialise() as a good way to store numeric values for
3107   sorting.
3108
3109 Xapian-core 1.0.14 (2009-07-21):
3110
3111 API:
3112
3113 * When using more than one ValueRangeProcessor, QueryParser didn't reset the
3114   begin and end strings to ignore any changes made by a ValueRangeProcessor
3115   which returned false, so further ValueRangeProcessors would see any changes
3116   it had made.  This is now fixed, and test coverage improved.
3117
3118 testsuite:
3119
3120 * The test harness code which launches xapian-tcpsrv child processes was
3121   failing to close a file descriptor for each one launched due to a bug in
3122   the code which is meant to track them.  This was causing apitest to fail
3123   on OpenBSD (ticket#382).  Also wait between testcases for any spawned
3124   xapian-tcpsrv processes to exit to avoid spurious failures when a database is
3125   reused by the next testcase.
3126
3127 * tests/runtest.in: Use "ulimit -n" where available to limit the number of
3128   available file descriptors to 64 so we catch file descriptor leaks sooner.
3129
3130 * When measuring CPU time used for scalability tests, we no longer try to
3131   include the CPU time used by child processes, as we can only get that for
3132   child processes which have exited and it's hard to ensure that they have
3133   with the current framework.  Although this means we only tests the
3134   client-side scaling for remote tests, the local backend tests cover most of
3135   the work done by the server part of the remote backend.
3136
3137 * apitest: In testcase topercent2, don't expect max_attained or max_possible to
3138   be exact as rounding errors in different ways of calculating can cause small
3139   variations.  On trunk we already have similar code because the new weighting
3140   scheme stuff gives different bounds in the different cases.  This should fix
3141   testsuite failures seen on some of the Debian and Ubuntu buildds.
3142
3143 * The test harness now always reports the full exception message (was
3144   conditional on --verbose), and output for different exception types and
3145   other causes of failure is now more consistent.
3146
3147 * For scalability tests, the test harness now increases the number of
3148   repetitions until the first run takes more than 0.001 seconds, to avoid
3149   trying to base calculations on a length of time we probably can't reliably
3150   measure to start with.
3151
3152 * Add test coverage for Stem::get_description() for each supported language.
3153
3154 * queryparsertest: Reenable tests which require the inmemory backend to be
3155   enabled by fixing typo XAPIAN_HAS_BACKEND_INMEMORY ->
3156   XAPIAN_HAS_INMEMORY_BACKEND.
3157
3158 flint backend:
3159
3160 * Use F_FULLFSYNC where available (Mac OS X currently) to ensure that changes
3161   have been committed to disk.  (ticket#288)
3162
3163 remote backend:
3164
3165 * Fix handling of percentage weights in various cases when we're searching
3166   multiple remote databases or a mix of local and remote databases.
3167
3168 build system:
3169
3170 * configure: -Wshadow produces false positives with GCC 4.0, so only enable it
3171   for >= 4.1 since we enable -Werror for maintainer-mode builds for GCC >= 4.0.
3172
3173 * configure: Check that we can find the valgrind/memcheck.h header as well as
3174   the valgrind binary.
3175
3176 * Change how snowball generates the data used by its among operation - instead
3177   of using pointers to the strings in struct among, store an offset into a
3178   constant pool, as this reduces the number of relocations by about 2300, which
3179   should decrease the time taken by the dynamic linker when loading the
3180   library.  This also reduces the size of the shared library significantly
3181   (on x86-64 Linux, the stripped shared library is 4% smaller).
3182
3183 Xapian-core 1.0.13 (2009-05-23):
3184
3185 API:
3186
3187 * Xapian::Document no longer ever stores empty values explicitly.  This
3188   wasn't intentional behaviour, and how this case was handled wasn't
3189   documented.  The amended behaviour is consistent with how user metadata
3190   is handled.  This change isn't observable using Document::get_value(),
3191   but can be noticed when iterating with Document::values_begin(), using
3192   Document::values_count(), or trying to delete the value with
3193   Document::remove_value().
3194
3195 testsuite:
3196
3197 * Fix testcase scaleweight4 not to fail on x86 when compiled with -O0.  The
3198   problem was in the testcase code, and was caused by excess precision in
3199   intermediate FP values.
3200
3201 * Testcases which check that operations have the expected O(...) behaviour now
3202   check CPU time instead of wallclock time on most platforms, which should
3203   eliminate occasional failures due to load spikes from other processes.
3204   (ticket#308)
3205
3206 * Fix test failures due to SKIP_TEST_FOR_BACKEND("inmemory") not skipping when
3207   it should due to comparing char * strings with == (on trunk the return value
3208   being tested is std::string rather than const char *).
3209
3210 * Improve test coverage in several corner cases.
3211
3212 * Fix testcase consistency2 to actually be run (fortunately it passes).
3213
3214 * In the generated testcases, call get_description() on the default
3215   constructed object of each class to make sure that works (and doesn't try to
3216   dereference NULL, or fail some assertion, etc).  All currently checked
3217   classes are fine - this is to avoid future regressions or such problems with
3218   new classes.
3219
3220 * In the test coverage build, use "--coverage" instead of "-fprofile-arcs
3221   -ftest-coverage".
3222
3223 * The test harness now has the inmemory backend flagged as supporting
3224   user-specified metadata (apart from iteration over metadata keys).
3225
3226 matcher:
3227
3228 * If a query contains a MatchAll subquery, check for it before checking the
3229   other terms so that the loop which checks how many terms match can exit
3230   early if they all match.
3231
3232 * When an OR or ANY_MAYBE decayed to an AND, we were carefully swapping the
3233   children for maximum efficiency, but the condition was reversed so we were
3234   in fact making things worse.  This was noticed because it was resulting in
3235   the same query running faster when more results were asked for!
3236
3237 * Only build the termname to termfreq and weight map for the first subdatabase
3238   instead of rebuilding it for each one.  Also don't copy this map to return
3239   it.  This should speed up searches a little, especially those over multiple
3240   databases.
3241
3242 * If a submatcher fails but ErrorHandler tells us to continue without it, we
3243   just use a NULL pointer to stand in rather than allocating a special dummy
3244   place-holder object.
3245
3246 * Remove AndPostList, in favour of MultiAndPostList.  AndPostList was only used
3247   as a decay product (by AndMaybePostList and OrPostList), and doesn't appear
3248   to be any faster.  Removing it reduces CPU cache pressure, and is less code
3249   to maintain.
3250
3251 * Call check() instead of skip_to() on the optional branch of AND_MAYBE.
3252
3253 flint backend:
3254
3255 * Fix a bug in TermIterator::skip_to() over metadata keys.
3256
3257 remote backend:
3258
3259 * Fix xapian-tcpsrv --interface option to work on MacOS X (ticket#373).
3260
3261 * Fix typo which caused us to return the docid instead of the maximum weight
3262   a document from a remote match could return!  This could have led to wrong
3263   results when searching multiple databases with the remote backend, but
3264   probably usually didn't matter as with BM25 the weights are generally small
3265   (often all < 1) while docids are inevitably >= 1.
3266
3267 inmemory backend:
3268
3269 * The inmemory backend doesn't support iterating over metadata keys.  Trying
3270   to do so used to give an empty iteration, but has now been fixed to throw
3271   UnimplementedError (and this limitation has now been documented).
3272
3273 build system:
3274
3275 * Remove a lot of unused header inclusions and some unused code which should
3276   make the build faster and slightly smaller.
3277
3278 * Fix to compile under --disable-backend-flint, --disable-backend-remote, and
3279   --disable-backend-inmemory.
3280
3281 * Don't remove any built sources in "make clean" even under
3282   --make-maintainer-mode as that breaks switching a tree away from
3283   maintainer-mode with: make distclean;./configure
3284
3285 * configure: Enable more GCC warnings - "-Woverloaded-virtual" for all
3286   versions, "-Wstrict-null-sentinel" for 4.0+, "-Wlogical-op
3287   -Wmissing-declarations" for 4.3+.  Notably "-Wmissing-declarations" caught
3288   that consistency2 wasn't being run.
3289
3290 * Internally, fix the few places where we pass std::string by value to pass
3291   by const reference instead (except where we need a modifiable copy anyway) as
3292   benchmarking shows that const reference is slightly faster and generates
3293   less code with GCC's reference counted std::string implementation - with a
3294   non-reference counted implementation, const reference should be much faster.
3295   (ticket#140)
3296
3297 documentation:
3298
3299 * INSTALL: We no longer regularly test build with GCC 2.95.4 and we're raising
3300   the minimum GCC version required to 3.1 for Xapian 1.1.x.
3301
3302 * Document what passing maxitems=0 to Enquire::get_mset() does.
3303
3304 * docs/queryparser.html: Add examples of using a prefix on a phrase or
3305   subexpression.
3306
3307 * Correct doxygen comments for user metadata functions:
3308   Database::get_metadata() can't throw UnimplementedError but
3309   WritableDatabase::set_metadata() can.
3310
3311 * Document that Database::metadata_keys_begin() returns an end iterator if the
3312   backend doesn't support metadata.
3313
3314 * HACKING: Update the list of Debian/Ubuntu packages needed for a development
3315   environment.
3316
3317 debug code:
3318
3319 * Fix build with --enable-debug.
3320
3321 * Added some more assertions.
3322
3323 Xapian-core 1.0.12 (2009-04-19):
3324
3325 API:
3326
3327 * WritableDatabase::remove_spelling() now works properly.
3328
3329 * The QueryParser now treats NON_SPACING_MARK Unicode characters as phrase
3330   generators, which improves handling of Arabic.  This is a stop-gap solution
3331   for 1.0.x which will work with existing databases without requiring
3332   reindexing - in 1.1.0, NON_SPACING_MARK will be regarded as part of a word.
3333   (ticket#355)
3334
3335 * Fix undefined behaviour in distribution of OP_NEAR and OP_PHRASE over a
3336   non-leaf subquery (indentified by valgrind on testcase nearsubqueries1).
3337   (ticket#349)
3338
3339 * Enhance distribution of OP_NEAR/OP_PHRASE over non-leaf subqueries to work
3340   when there are multiple non-leaf subqueries (ticket#201).
3341
3342 * Enquire::get_mset() no longer needlessly checks if the documents exist.
3343
3344 * PostingIterator::get_description() output improved visually in some cases.
3345
3346 testsuite:
3347
3348 * Add make targets to assist generating a testsuite code coverage report with
3349   lcov.  See HACKING for details.
3350
3351 * Improved test coverage in a number of places and removed some used code as
3352   shown by lcov's coverage report.
3353
3354 flint backend:
3355
3356 * xapian-compact:
3357
3358   + Now handles databases which contains no documents but have user metadata
3359     (ticket#356).
3360
3361   + Fix test for the total document length overflowing.
3362
3363 * Release the database lock if the database is closed due to an unrecoverable
3364   error during modifications. (ticket#354)
3365
3366 * If we fail to get the lock after we spawn the child lock process (the common
3367   case is because the database is already open for writing) then we now clean
3368   up the child process properly.
3369
3370 build system:
3371
3372 * Overriding CXXFLAGS at make-time (e.g. "make CXXFLAGS=-Os") no longer
3373   overrides any flags configure detected to be required to make the compiler
3374   accept ISO C++ (for GCC, no such flags are required, so this doesn't
3375   change anything).
3376
3377 documentation:
3378
3379 * Update documentation and code comments to reflect that 1.1 will be a
3380   development series, and 1.2 the next release series.
3381
3382 * docs/admin_notes.html: Document the child process used for locking which
3383   exec-s "cat" (ticket #258).
3384
3385 * include/xapian/unicode.h: Fix documentation comment typos.
3386
3387 * include/xapian/matchspy.h: Removed currently unused header to stop doxygen
3388   from generating documentation for it.
3389
3390 Xapian-core 1.0.11 (2009-03-15):
3391
3392 API:
3393
3394 * Enquire::get_mset():
3395
3396   + Now throws UnimplementedError if there's a percentage cutoff and sorting is
3397     primarily by value - this has never been correctly supported and it's
3398     better to warn people than give incorrect results.
3399
3400   + No longer needlessly copies the results internally.
3401
3402   + When searching multiple databases, now recalculates the maximum attainable
3403     weight after each database which may allow it to terminate earlier.
3404     (ticket#336).
3405
3406   + Fix inconsistent percentage scores when sorting primarily by value, except
3407     when a MatchDecider is also being used; document this remaining problem
3408     case.  (ticket#216)
3409
3410 * Enquire::set_sort_by_value() (and similar methods): Rename the wrongly named
3411   "ascending" parameter to "reverse", and note that its value should always be
3412   explicitly given since defaulting to "reverse=true" is confusing and the
3413   default will be deprecated in 1.1.0.  (ticket#311)
3414
3415 * Database::allterms_begin(): Fix memory leak when iterating all terms from
3416   more than one database.
3417
3418 * Query::get_terms_begin(): Don't return "" from the TermIterator (happened
3419   when the query contained or was Query::MatchAll).
3420
3421 * Add QueryParser::FLAG_DEFAULT to make it easier to add flags to those set by
3422   default.
3423
3424 testsuite:
3425
3426 * The testsuite now reports problems detected by valgrind with newer valgrind
3427   versions.  Drop support for running the testsuite under valgrind < 3.3.0
3428   (well over a year old) as this greatly simplifies the configure tests.
3429
3430 * Fix usage message for options which take arguments in --help output from test
3431   programs - "-x=foo" doesn't work, the correct syntax is "-x foo".
3432
3433 * If comparing MSet percentages fails, report the differing percentages if in
3434   verbose mode.
3435
3436 * Add test that backends don't truncate total document length to 32 bits.
3437
3438 * Disable lockfileumask1 (regression testcase added in 1.0.10) on Cygwin and on
3439   OS/2.
3440
3441 flint backend:
3442
3443 * The configure test for pread() and pwrite() got accidentally disabled in
3444   0.8.4 and we've always been using llseek() followed by read() or write()
3445   since then.  The configure test is now fixed, and gives a slight speedup
3446   (3% measured for searching).
3447
3448 * The child process used to implement WritableDatabase locking now changes
3449   directory to / so that it doesn't block unmounting of any partitions and
3450   closes any open file descriptors which aren't relating to locking so that
3451   if those files are closed by our parent and deleted the disk space gets
3452   released right away.
3453
3454 * We now reuse the same zlib zstream structures rather than using a fresh
3455   one for each operation.  This doesn't make a measurable difference in
3456   our own tests on Linux but reportedly is measurably faster on some
3457   systems.  (ticket #325)
3458
3459 quartz backend:
3460
3461 * The pread()/pwrite() fix also speeds up quartz.
3462
3463 remote backend:
3464
3465 * Avoid copying Query::Internal objects needlessly when unserialising Query
3466   objects.
3467
3468 inmemory backend:
3469
3470 * Store the (non-normalised) document lengths as Xapian::termcount (unsigned
3471   int) rather than Xapian::doclength (double) which saves 4 bytes per document.
3472
3473 build system:
3474
3475 * configure: The output of g++ --version changed format (again) with GCC 4.3
3476   which meant configure got "g++" for the version.  Instead use the (hopefully)
3477   more robust technique of using g++ -E to pull out __GNUC__ and
3478   __GNUC_MINOR__.
3479
3480 documentation:
3481
3482 * API documentation:
3483
3484   + WritableDatabase::flush() can't throw DatabaseLockError.
3485
3486   + WritableDatabase's constructor can throw at least DatabaseCorruptError or
3487     DatabaseLockError.
3488
3489   + Document how to get all matches from Enquire::get_mset().
3490
3491   + Other minor improvements.
3492
3493 * docs/sorting.html: Clarify meaning.
3494
3495 portability:
3496
3497 * Fix "#line" directives in generated file queryparser/queryparser_internal.cc
3498   to give a relative path - previously they had a full path when generated by a
3499   VPATH build (as release tarballs are), and this confused GCC 2.95 and
3500   depcomp.
3501
3502 * Fix for compiling with Sun's compiler (untested as we no longer have access
3503   to it).
3504
3505 Xapian-core 1.0.10 (2008-12-23):
3506
3507 API:
3508
3509 * Composing an OP_NEAR query with two non-term subqueries now throws
3510   UnimplementedError instead of AssertionError (in a --enable-assertions build)
3511   or leading to unexpected results (otherwise).  This partly addresses bug#201.
3512
3513 * Using a MultiValueSorter with no values set no longer causes a hang or
3514   segmentation fault (but it is still rather pointless!)
3515
3516 matcher:
3517
3518 * If we're using values for sorting and for another purpose, cache the
3519   Document::Internal object created to get the value for sorting, like we do
3520   between other uses.
3521
3522 flint backend:
3523
3524 * If the disk became full while flushing database changes to disk, the
3525   WritableDatabase object would throw a DatabaseError exception but be left in
3526   an inconsistent state such that further use could lead to the database on
3527   disk ending up in a "corrupt" state (theoretically fixable, but no tool
3528   to fix such a database exists).  Now we try to ensure that the object is
3529   left in a consistent state, but if doing so throws a further exception, we
3530   put the WritableDatabase object in a "closed" state such that further
3531   attempts to use it throw an exception.
3532
3533 * Create the lockfile "flintlock" with permissions 0666 so that the umask is
3534   honoured just like we do for the other files (previously we used 0600).
3535   Previously it wasn't possible to lock a database for update if it was
3536   owned by another user, even if you otherwise had sufficient permissions via
3537   "group" or "other".
3538
3539 * Fix garbled exception message when a base file can't be reread.
3540
3541 quartz backend:
3542
3543 * Fix garbled exception message when a base file can't be reread.
3544
3545 remote backend:
3546
3547 * xapian-tcpsrv and xapian-progsrv now accept -w as a short form of --writable,
3548   as was always intended.
3549
3550 build system:
3551
3552 * This release now uses newer versions of the autotools (autoconf 2.62 ->
3553   2.63; automake 1.10.1 -> 1.10.2).
3554
3555 documentation:
3556
3557 * INSTALL: Add new paragraphs about HP's aCC and IRIX (adapted from footnotes
3558   in PLATFORMS).
3559
3560 * PLATFORMS: HP testdrive has been shut down, so all mark all those machines as
3561   "no longer available".  Update atreus' build report to 1.0.10.
3562
3563 * docs/queryparser.html: Add link to valueranges.html.
3564
3565 examples:
3566
3567 * delve: Add missing "and" to --help output.  Report termfreq and collection
3568   freq for each term we're asked about.
3569
3570 portability:
3571
3572 * Fix to build with GCC 4.4 snapshot.
3573
3574 Xapian-core 1.0.9 (2008-10-31):
3575
3576 API:
3577
3578 * Database::get_spelling_suggestion() is now faster (15% speed up for parsing
3579   queries with FLAG_SPELLING_CORRECTION set in a test on real world data).
3580
3581 * Fix OP_ELITE_SET segmentation fault due to excess floating point precision
3582   on x86 Linux (and possibly other platforms).
3583
3584 * Database::allterms_begin() over multiple databases now gives a TermIterator
3585   with operations O(log(n)) rather than potentially O(n) in the number of
3586   databases.
3587
3588 * Add new Database methods metadata_keys_begin() and metadata_keys_end() to
3589   allow the complete list of metadata in a database to be retrieved (this
3590   API addition is needed so that copydatabase can copy database metadata).
3591
3592 testsuite:
3593
3594 * Remove the cached test databases before running the testsuite.
3595
3596 * apitest: Fix cursordelbug1 to work on Microsoft Windows (bug#301).
3597
3598 * apitest,queryparsertest: Skip tests which fail because the timer granularity
3599   is too coarse to measure how long the test took.  In practice, this is only
3600   an issue on Microsoft Windows (bug#300 and bug#308).
3601
3602 matcher:
3603
3604 * Adjust percent cutoff calculations in the matcher in a way which corresponds
3605   to the change to percentage calculations made in 1.0.7 to allow for excess
3606   precision.
3607
3608 * Query::MatchAll no longer gives match results ranked by increasing document
3609   length.
3610
3611 flint backend:
3612
3613 * xapian-compact: Fix crash while compacting spelling table for a single
3614   database when built with MSVC, and probably other platforms, though Linux
3615   got lucky and happened to work (bug#305).
3616
3617 build system:
3618
3619 * configure: Disable -Wconversion for now - it's not useful for older GCC and
3620   is buggy in GCC 4.3.
3621
3622 * configure: Set -Wstrict-overflow to 1 instead of 5, to avoid unreasonable
3623   warnings under GCC 4.3.
3624
3625 documentation:
3626
3627 * Minor improvements to API documentation, including documenting the
3628   XAPIAN_FLUSH_THRESHOLD environmental variable in WriteableDatabase::flush()
3629   (bug#306).
3630
3631 * valueranges.html: Fix typos in example code, and drop superfluous empty
3632   destructor from ValueRangeProcessor subclass.
3633
3634 * HACKING: Several improvements.
3635
3636 examples:
3637
3638 * copydatabase: Also copy user metadata.
3639
3640 Xapian-core 1.0.8 (2008-09-04):
3641
3642 API:
3643
3644 * Fix output of RSet::get_description
3645
3646 testsuite:
3647
3648 * Report subtotals per backend, rather than per testgroup per backend to make
3649   the output easier to read.
3650
3651 flint backend:
3652
3653 * Fix WritableDatabase::add_document() and replace_document() not to be O(n*n)
3654   in the number of values in the new document.
3655
3656 * Fix handling of a table created lazily after the database has had commits,
3657   and which is then cursored while still in sequential mode.
3658
3659 * Fix failure to remove all the Btree entries in some cases when all the
3660   postings for a term are removed.  (bug#287)
3661
3662 * xapian-inspect: Show the help message on start-up.  Correct the documented
3663   alias for next from ' ' to ''.  Avoid reading outside of input string when it
3664   is empty.  (bug#286)
3665
3666 quartz backend:
3667
3668 * Backport fix from flint for WritableDatabase::add_document() and
3669   replace_document() not to be O(n*n) in the number of values in the new
3670   document.
3671
3672 build system:
3673
3674 * configure: Report bug report URL in --help output.
3675
3676 * xapian-config: Report bug report URL in --help output.
3677
3678 * configure: Fix deprecation error for --enable-debug=full to say to instead
3679   use '--enable-assertions --enable-log' not '--enable-debug --enable-log'.
3680
3681 documentation:
3682
3683 * valueranges.html: Expand on some sections.
3684
3685 examples:
3686
3687 * quest: Fix to catch QueryParserError instead of const char * which
3688   QueryParser threw in Xapian < 1.0.0.
3689
3690 * copydatabase: Use C++ forms of C headers.  Only treat '\' as a directory
3691   separator on platforms where it is.  Update counter every 13 counting up to
3692   the end so that the digits all "rotate" and the counter ends up on the exact
3693   total.
3694
3695 portability:
3696
3697 * Eliminate literal top-bit-set characters in testsuite source code.
3698
3699 Xapian-core 1.0.7 (2008-07-15):
3700
3701 API:
3702
3703 * OP_VALUE_RANGE, OP_VALUE_GE, and OP_VALUE_LE:
3704
3705   + If there were gaps in the document id numbering, these operators could
3706     return document ids which weren't present in the database.  This has been
3707     fixed.
3708
3709   + These operators are now more efficient when there are a lot of "missing"
3710     document ids (bug#270).
3711
3712   + Optimise Query(OP_VALUE_GE, <n>, "") to Query::MatchAll.
3713
3714 * Xapian::QueryParser:
3715
3716   + QueryParser now stops parsing immediately when it hits a syntax error.
3717     This doesn't change behaviour, but does mean failing to parse queries is
3718     now more efficient.
3719
3720   + Cases of O(N*N) behaviour have been fixed.
3721
3722 * Xapian::Stem now recognises "nl" as an alias for "dutch" (debian bug 484458).
3723
3724 * Setting sort by value was being ignored by a Xapian::Enquire object which had
3725   previously had a Xapian::Sorter set (bug#256).
3726
3727 testsuite:
3728
3729 * Improved test coverage in a few places.
3730
3731 matcher:
3732
3733 * When using a MatchDecider, we weren't reducing matches_lower_bound unless
3734   all the potential results were retrieved, which led to the lower bound
3735   being too high in some such cases.
3736
3737 * We now track how many documents were tested by a MatchDecider and how many
3738   of those it rejected, and set matches_estimated based on this rate.  Also,
3739   matches_upper_bound is reduced by the number of rejected documents.
3740
3741 * Fixed matches_upper_bound in some cases when collapsing and using a
3742   MatchDecider.
3743
3744 * Fixed matches_lower_bound when collapsing and using a percentage cutoff.
3745
3746 * When using two or more of a MatchDecider, collapsing, or a percentage
3747   cutoff, we now only round the scaled estimate once, and we also round it to
3748   the nearest rather than always rounding down.  Hopefully this should
3749   improve the estimate a little in such cases.
3750
3751 * Fix problem on x86 with the top match getting 99% rather than 100% (caused
3752   by excess precision in an intermediate value).
3753
3754 flint backend:
3755
3756 * If Database::reopen() is called and the database revision on disk hasn't
3757   changed, then do as little work as possible.  Even if it has changed, don't
3758   bother to recheck the version file (bug#261).
3759
3760 * xapian-compact:
3761
3762   + Fix check for user metadata key to not match other key types we may add in
3763     the future.  When compacting, we can't assume how we should handle them.
3764
3765   + If the same user metadata key is present in more than one source database
3766     with different tag values, issue a warning and copy an arbitrary tag value.
3767
3768   + Fix potential SEGV when compacting database(s) with user metadata but no
3769     postings.
3770
3771   + In error message, refer to "iamflint" as the "version file", not the
3772     "meta file".
3773
3774 * xapian-inspect:
3775
3776   + Print top-bit-set characters as escaped hex forms as they often won't be
3777     valid UTF-8 sequences.
3778
3779   + If we're passed a database directory rather than a single table, issue a
3780     special error message since this is an obvious mistake for users to make.
3781
3782 * Fix cursor handling for a modified table which has previously only had
3783   sequential updates which usually manifested as zlib errors (bug#259).
3784
3785 quartz backend:
3786
3787 * Fix cursor handling for a modified table which has previously only had
3788   sequential updates which usually manifested as incorrect data being returned
3789   (bug#259).
3790
3791 * Calling skip_to() as the first operation on an all-documents PostingIterator
3792   now works correctly.
3793
3794 remote backend:
3795
3796 * Improve performance of matches with multiple databases at least one of which
3797   is remote, and when the top hit is from a remote database (bug#279).
3798
3799 * When remote protocol version doesn't match, the error message displayed
3800   now shows the minor version number supplied by the server correctly.
3801
3802 * We now wait for the connection to close after sending MSG_SHUTDOWN for a
3803   WritableDatabase, which ensures that changes have been written to disk
3804   and the lock released before the WritableDatabase destructor returns
3805   (as is the case with a local database).
3806
3807 * We no longer ever send MSG_SHUTDOWN for a read-only Database - just closing
3808   the connection is enough (and is protocol compatible).
3809
3810 inmemory backend:
3811
3812 * Fix bug which resulted in the values not being stored correctly when
3813   replacing an existing document, or if there are gaps in the document id
3814   numbering.
3815
3816 build system:
3817
3818 * This release now uses newer versions of the autotools (autoconf 2.61 ->
3819   2.62; automake 1.10 -> 1.10.1; libtool 1.5.24 -> 1.5.26).  The newer
3820   autoconf reportedly results in a faster configure script, and warns about
3821   use of unrecognised configure options.
3822
3823 * Fix configure to recognise --enable-log=profile and fix build problems when
3824   this is enabled.
3825
3826 * "make up" in the "tests" subdirectory now does "make" in the top-level.
3827
3828 * Fix "make distcheck" by using dist-hook to install generated files from
3829   either srcdir or builddir, with the appropriate dependency to generate them
3830   automatically in maintainer mode builds.
3831
3832 documentation:
3833
3834 * intro_ir.html: Improve wording a bit.
3835
3836 * The documentation now links to trac instead of bugzilla.  For links to the
3837   main website, we now prefer xapian.org to www.xapian.org.
3838
3839 * Doxygen-generated API documentation:
3840
3841   + Improved documentation in several places.
3842
3843   + The helper macro XAPIAN_VISIBILITY_DEFAULT no longer appears in the output.
3844
3845   + Header and directory relationship graphs are no longer generated as they
3846     aren't actually informative here.
3847
3848 * HACKING: Numerous updates and improvements.
3849
3850 examples:
3851
3852 * quest: Output get_description() of the parsed query.
3853
3854 portability:
3855
3856 * Fix build with GCC 2.95.3.
3857
3858 * Fix build with GCC 4.3.
3859
3860 * Newer libtool features improved support for Mac OS X Leopard and added
3861   support for AIX 6.1.
3862
3863 debug code:
3864
3865 * Database::get_spelling_suggestion() now debug logs with category APICALL
3866   rather than SPELLING, for consistency with all other API methods.
3867
3868 * Added APICALL logging to a few Database methods which didn't have it.
3869
3870 * Remove debug log tracing from get_description() methods since logging for
3871   other methods calls get_description() methods on parameters, so logging these
3872   calls just makes for more confusing debug logs.  A get_description() method
3873   should have no side-effects so it's not very interesting even when explicitly
3874   called by the user.
3875
3876 Xapian-core 1.0.6 (2008-03-17):
3877
3878 API:
3879
3880 * Add new query operators OP_VALUE_LE and OP_VALUE_GE which perform "single
3881   ended" range checks, and a corresponding new Query constructor.
3882
3883 * Add Unicode::toupper() to complement Unicode::tolower().
3884
3885 * Xapian::Stem has been further optimised - stemtest now runs ~2.5% faster.
3886
3887 testsuite:
3888
3889 * tests/runtest: Fixed to handle test programs with a ".exe" extension.
3890
3891 * tests/queryparsertest: Add a couple more testcases which already work to
3892   improve test coverage.
3893
3894 * tests/apitest: Add caseconvert1 testcase to test Unicode::tolower() and
3895   Unicode::toupper().
3896
3897 flint backend:
3898
3899 * xapian-check: Fix not to report an error for a database containing no
3900   postings but some user metadata.
3901
3902 * Update the base files atomically to avoid problems with reading processes
3903   finding partially written ones.
3904
3905 * Create lazy tables with the correct revision to avoid producing a database
3906   which we later report as "corrupt" (bug#232).
3907
3908 * xapian-compact: Fix compaction for databases which contain user metadata
3909   keys.
3910
3911 quartz backend:
3912
3913 * Update the base files atomically to avoid problems with reading processes
3914   finding partially written ones.
3915
3916 remote backend:
3917
3918 * The addition of OP_VALUE_LE and OP_VALUE_GE required an update to the Query
3919   serialisation, which required a minor remote protocol version bump.
3920
3921 * Fix to actually set the writing half as the connection as non-blocking when
3922   a timeout is specified.  This would have prevented timeouts from operating
3923   correctly in some situations.
3924
3925 build system:
3926
3927 * configure: GCC warning flag overhaul:  Stop passing "-Wno-multichar" since
3928   any multi-character character literal is bound to be a typo (I believe we
3929   were only passing it after misinterpreting its sense!)  Pass
3930   "-Wformat-security", and "-Wconversion" for all GCC versions.  Add
3931   "-Winit-self" and "-Wstrict-overflow=5" for GCC >= 4.2.  The latter might
3932   prove too aggressive, but seems reasonable so far.  Fix some minor niggles
3933   revealed by "-Wconversion" and "-Wstrict-overflow=5".
3934
3935 * Add XAPIAN_NORETURN() annotations to functions and non-virtual methods which
3936   don't return.
3937
3938 documentation:
3939
3940 * docs/intro_ir.html: Briefly mention how pure boolean retrieval is supported.
3941
3942 * docs/valueranges.html: Fix example of using multiple VRPs to come out as a
3943   "program listing".
3944
3945 * include/xapian/queryparser.h: Fix incorrect example in doccomment.
3946
3947 * docs/quickstart.html: Remove information covered by INSTALL since
3948   there's no good reason to repeat it and two copies just risks one
3949   getting out of date (as has happened here!)
3950
3951 * docs/quickstart.html: Fix very out of date reference to MSet::items
3952   (bug#237).
3953
3954 * PLATFORMS: Remove reports for 0.8.x as they're too old to be interesting.
3955   Separate out 0.9.x reports.  Add Solaris 9 and 10 success reports from James
3956   Aylett.  Update from Debian buildd logs.
3957
3958 portability:
3959
3960 * Now builds on OS/2, thanks to a patch by Yuri Dario.
3961
3962 * Fix testsuite to build on mingw (broken by changes in 1.0.5).
3963
3964 debug code:
3965
3966 * Fix --enable-assertions build, broken by changes in 1.0.5.
3967
3968 Xapian-core 1.0.5 (2007-12-21):
3969
3970 API:
3971
3972 * More sophisticated sorting of results is now possible by defining a
3973   functor subclassing Xapian::Sorter (bug#100).
3974
3975 * Xapian::Enquire now provides a public copy constructor and assignment
3976   operator (bug#219).
3977
3978 * Xapian::Document::values_begin() didn't ensure that values had been read
3979   when working on a Document read from a database.  However, values_end() did
3980   (and so did values_count()) so this wasn't generally a problem in practice.
3981
3982 * Xapian::PostingIterator::skip_to() now works correctly when running over
3983   multiple databases.
3984
3985 * Xapian::Database::postlist_begin() no longer adds a "MultiPostList" wrapper
3986   for the common case when there's only one subdatabase.
3987
3988 * Xapian::TradWeight now avoids division by zero in the (rare) situation of the
3989   average document length being zero (which can only happen if all documents
3990   are empty or only have terms with wdf 0).
3991
3992 * Calling Xapian::WritableDatabase methods when we don't have exactly one
3993   subdatabase now throws InvalidOperationError.
3994
3995 testsuite:
3996
3997 * apitest:
3998
3999   + Testcases now describe the conditions they need to run, and are
4000     automatically collated by a Perl script.  This makes it significantly
4001     easier to add a new testcase.
4002
4003   + The test harness's "BackendManager" has been overhauled to allow
4004     cleaner implementations of testcases which are currently hard to
4005     write cleanly, and to make it easier to add new backend settings.
4006
4007   + Add a "multi" backend setting which runs suitable tests over two
4008     subdatabases combined.  There's a corresponding new make target
4009     "check-multi".
4010
4011   + Add more feature tests of document values.
4012
4013   + sortrel1 now runs for inmemory too.
4014
4015   + Add simple feature test for TradWeight being used to run a query.
4016
4017   + Fix spell3 to work on Microsoft Windows (bug#177).
4018
4019   + API classes are now tested to check they have copy constructors and
4020     assignment operators, and also that most have a default constructor.
4021
4022   + quartztest testcases adddoc2 and adddoc3 have been reworked as apitest
4023     testcases adddoc5 and adddoc6, which run for other backends.
4024
4025   + stubdb1 now explicitly creates the database it needs - generally this
4026     bug didn't manifest because an earlier test has already created it.
4027
4028 * queryparsertest: Add feature tests to check that ':' is being inserted
4029   between prefix and term when it should be.
4030
4031 * Fix extracting of valgrind error messages in the test harness.
4032
4033 * tests/valgrind.supp: Add more variants of the zlib suppressions.
4034
4035 matcher:
4036
4037 * Xapian::Enquire: When the "first" parameter to get_mset() is non-zero, avoid
4038   copying all the wanted items after performing the match.
4039
4040 * Fix bug in handling a pure boolean match over more than one database under
4041   set_docid_order(ASCENDING) - we used to exit early which isn't correct.
4042
4043 * When collapsing on a value, give a better lower bound on the number of
4044   matches by keeping track of the number of empty collapse values seen.
4045
4046 * Xapian::BM25Weight: Fix bug when k2 is non-zero: a non-initialised value
4047   influenced the weight calculations.  By default k2 is zero, so this bug
4048   probably won't have affected most users.
4049
4050 * The mechanism used to collate term statistics across multiple databases has
4051   been greatly simplified (bug#45).
4052
4053 flint backend:
4054
4055 * xapian-check:
4056
4057   + Update to handle flint databases produced by Xapian 1.0.3 and later.
4058
4059   + Fix not to go into an infinite loop if certain checks fail.
4060
4061 quartz backend:
4062
4063 * quartzcompact: Fix equality testing of C strings to use strcmp() rather than
4064   '=='!  In practice, using '==' often gives the desired effect due to pooling
4065   of constant strings, but this may have resulted in a bug on some platforms.
4066
4067 remote backend:
4068
4069 * If we're doing a match with only one database which is remote then just
4070   return the unserialised MSet from the remote match.  This requires an
4071   update to the MSet serialisation, which requires a minor remote protocol
4072   version bump.
4073
4074 build system:
4075
4076 * XO_LIB_XAPIAN now hooks LT_INIT as well as AC_PROG_LIBTOOL and
4077   AM_PROG_LIBTOOL.
4078
4079 * Distribute preautoreconf, dir_contents, docs/dir_contents and
4080   tests/dir_contents.
4081
4082 * Fix preautoreconf to correctly handle all the sources passed to doxygen to
4083   create the collated internal source documentation, and to work in a VPATH
4084   build.
4085
4086 documentation:
4087
4088 * sorting.html: New document on the topic of sorting match results.
4089
4090 * HACKING,admin_notes.html,bm25.html,glossary.html,intro_ir.html,overview.html,
4091   quickstart.html,scalability.html,termgenerator,html,synonyms.html: Assorted
4092   minor improvements.
4093
4094 * valueranges.html: State explicitly that Xapian::sortable_serialise() is used
4095   to encode values at index time, and give an example of how it is called.
4096
4097 * API documentation:
4098
4099  + Clarify get_wdf() versus get_termfreq().
4100
4101  + We now use pngcrush to reduce the size of PNG files in the HTML version.
4102
4103  + The HTML version no longer includes various intermediate files which doxygen
4104    generates.
4105
4106  + Hide the v102 namespace from Doxygen as it isn't user visible.
4107
4108  + Stop describing get_description() as an "Introspection method", as this
4109    doesn't help to explain what it does, and get_description() doesn't really
4110    fall under common formal definitions of "introspection".
4111
4112 * index.html: Add a list of documents on particular topics and include links to
4113   previously unlinked-to documents.  Weed down the top navigation bar which had
4114   grown to unwieldy length.
4115
4116 * PLATFORMS: Update for Debian buildds.
4117
4118 * Improve documentation comment for Document::termlist_count().
4119
4120 * admin_notes.html: Note that this document is up-to-date for 1.0.5.
4121
4122 * INSTALL: zlib 1.2.0 apparently fixes a memory leak in deflateInit2(), which
4123   we use, so that's another reason to prefer 1.2.x.
4124
4125 portability:
4126
4127 * Add explicit includes of C headers needed to build with the latest snapshots
4128   of GCC 4.3.  Fix new warnings.
4129
4130 * xapian-config: On platforms which we know don't need explicit dependencies,
4131   --ltlibs now gives the same output as --libs.
4132
4133 * The minimum supported GCC version is now 2.95.3 (rather than 2.95) as 2.95.3
4134   added support for '#include <sstream>' which means we no longer need to
4135   maintain our own version.
4136
4137 * Fix build with SGI's compiler on IRIX.
4138
4139 * Fix or suppress some MSVC warnings.
4140
4141 debug code:
4142
4143 * Remove incorrect assertion in MultiAndPostList (bug#209).
4144
4145 * Fix build when configured with "--enable-log --disable-assertions".
4146
4147 Xapian-core 1.0.4 (2007-10-30):
4148
4149 API:
4150
4151 * Query:
4152
4153   + Add OP_SCALE_WEIGHT operator (and a corresponding constructor which
4154     takes a single subquery and a parameter of type "double").  This
4155     multiplies the weights from the subquery by the parameter, allowing
4156     adjustment of the importance of parts of the query tree.
4157
4158   + Deprecate the essentially useless constructor Query(Query::op, Query).
4159
4160 * QueryParser:
4161
4162   + A field prefix can now be set to expand to more than one term prefix.
4163     Similarly, multiple term prefixes can now be applied by default.  This is
4164     done by calling QueryParser::add_boolean_prefix() or
4165     QueryParser::add_prefix() more than once with the same field name but a
4166     different term prefix (previously subsequent calls with the same field name
4167     had no effect).
4168
4169   + Trying to set the same field as probabilistic and boolean now throws
4170     InvalidOperationError.
4171
4172   + Fix parsing of `term1 site:example.org term2', broken by changes in 1.0.2.
4173
4174   + Drop special treatment for unmatched ')' at the start of the query, as it
4175     seems rather arbitrary and not particularly useful and was causing us to
4176     parse `(site:example.org) -term' incorrectly.
4177
4178   + The QueryParser now generates pure boolean Query objects for strings such
4179     as `site:example.org' by applying OP_SCALE_WEIGHT with a factor of 0.0.
4180
4181   + Fix handling of `"quoted phrase" +term' and `"quoted phrase" -term'.
4182
4183   + Fix handling of `site:example.org -term'.
4184
4185   + Fix problem with spelling correction of hyphenated terms (or other terms
4186     joined with phrase generators): the position of the start of the term
4187     wasn't being reset for the second term in the generated phrase, resulting
4188     in out of bounds errors when substituting the new value in the corrected
4189     query string.
4190
4191   + The parser stack is now a std::vector<> rather than a fixed size, so it
4192     will typically use less memory, and can't hit the fixed limit.
4193
4194   + Fix handling of STEM_ALL and update the documentation comment for
4195     QueryParser::set_stemming_strategy() to explain how it works clearly.
4196
4197 * PostingIterator: positionlist_begin() and get_wdf() should now always
4198   throw InvalidOperationError where they aren't meaningful (before in some
4199   cases UnimplementedError was thrown).
4200
4201 testsuite:
4202
4203 * Add tests for new features.
4204
4205 * Add another valgrind suppression for a slightly different error from zlib
4206   in Ubuntu gutsy.
4207
4208 * Remove quartztest's test_postlist1 and test_postlist2, replacing the coverage
4209   lost by extending and adding tests which work with other backends as well.
4210
4211 * If a test throws a subclass of std::exception, the test harness now
4212   reports the class name and the extra information returned by std::exception's
4213   what() method.
4214
4215 matcher:
4216
4217 * Several performance improvements have been made, mainly to the handling
4218   of OP_AND and related operations (OP_FILTER, OP_NEAR, and OP_PHRASE).
4219   In combination, these are likely to speed up searching significantly
4220   for most users - in tests on real world data we've seen savings of 15-55%
4221   in search times).  These improvements are:
4222
4223   + OP_AND of 3 or more sub-queries is now processed more efficiently.
4224
4225   + Sub-queries from adjacent OP_AND, OP_FILTER, OP_NEAR, and OP_PHRASE are now
4226     combined into a single multi-way OP_AND operation, and the filters which
4227     implement the near/phrase restrictions are hoisted above this so they need
4228     to check fewer documents (bug#23).
4229
4230   + If an OP_OR or OP_AND_MAYBE decays to OP_AND, we now ensure that the less
4231     frequent sub-query is on the left, which OP_AND is optimised to expect.
4232
4233 * When the Enquire::get_mset() parameter checkatleast is set, and we're sorting
4234   by relevance with forward ordering by docid, and the query is pure boolean,
4235   the matcher was deciding it was done before the checkatleast requirement was
4236   satisfied.  Then the adjustments made to the estimated and max statistics
4237   based on checkatleast meant the results claimed there were exactly msize
4238   results.  This bug has now been fixed.
4239
4240 * Queries involving an OP_VALUE_RANGE filter now run around 3.5 times faster
4241   (bug#164).
4242
4243 * The calculations behind MSet::get_matches_estimated() were always rounding
4244   down fractions, but now round to the nearest integer.  Due to cumulative
4245   rounding, this could mean that the estimate is now a few documents higher in
4246   some cases (and hopefully a better estimate).
4247
4248 * Implement explicit swap() methods for internal classes MSetItem and ESetItem
4249   which should make the final sort of the MSet and ESet a little more
4250   efficient.
4251
4252 flint backend:
4253
4254 * Fixed a bug introduced in 1.0.3 - trying to open a flint database for reading
4255   no longer fails if it isn't writable.
4256
4257 * We no longer use member function pointers in the Btree implementation which
4258   seems to speed up searching a little.
4259
4260 remote backend:
4261
4262 * The remote protocol minor version has been increased (to accommodate
4263   OP_SCALE_WEIGHT).  If you are upgrading a live system which uses the
4264   remote backend, upgrade the servers before the clients.
4265
4266 build system:
4267
4268 * Added macro machinery to allow branch prediction hints to be specified and
4269   used by compilers which support this (current GCC and Intel C++).
4270
4271 * In a developer build, look for rst2html.py if rst2html isn't found as some
4272   Linux distros have it installed under with an extension.
4273
4274 documentation:
4275
4276 * In the API documentation, explicitly note that Database::get_metadata()
4277   returns an empty string when the backend doesn't support user-specified
4278   metadata, and that WritableDatabase::set_metadata() throws UnimplementedError
4279   in this case.  Also describe the current behaviour with multidatabases.
4280
4281 * README: Remove the ancient history lesson - this material is better left to
4282   the history page on the website.
4283
4284 * deprecation.html:
4285
4286   + Deprecate the non-pythonic iterators in favour of the pythonic ones.
4287
4288   + Move "Stem::stem_word(word)" in the bindings to the right section (it was
4289     done in 1.0.0, as already indicated).
4290
4291   + Improve formatting.
4292
4293 * When running rst2html, using "--verbose" was causing "info" messages to be
4294   included in the HTML output, so drop this option and really fix this issue
4295   (which was thought to have been fixed by changes in 1.0.3).
4296
4297 * install.html: Reworked - this document now concentrates on giving
4298   a brief overview of building which should be suitable for most common cases,
4299   and defers to the INSTALL document in each tarball for more details.
4300
4301 * PLATFORMS: Update from tinderbox and buildbot.
4302
4303 * remote.html: xapian-tcpsrv has been able to handle concurrent read
4304   access since 0.3.1 (7 years ago) so update the very out-of-date information
4305   here.  Also, note that some newer features aren't supported by the remote
4306   backend yet.
4307
4308 * HACKING: Note specifically that std::list::size() is O(n) for GCC.
4309
4310 * intro_ir.html: Add link to the forthcoming book "Introduction to
4311   Information Retrieval", which can be read online.
4312
4313 * scalability.html: Update size of gmane.
4314
4315 * quartzdesign.html: Note that Quartz is now deprecated.
4316
4317 debug code:
4318
4319 * The debug assertion code has been rewritten from scratch to be cleaner and
4320   pull in fewer other headers.
4321
4322 Xapian-core 1.0.3 (2007-09-28):
4323
4324 API:
4325
4326 * Add support for user specified metadata (bug#143).  Currently supported by
4327   the flint and inmemory backends.
4328
4329 * Deprecate Enquire::register_match_decider() which has always been a no-op.
4330
4331 * Improve the lower bound on the number of matching documents for an AND query
4332   - if the sum of the lower bounds for the two sides is greater than the
4333   number of documents in the database, then some of them must have both terms.
4334
4335 * Spelling correction: Fix off-by-one error in loop bounds when initialising
4336   (bug#194).
4337
4338 * If the check_at_least parameter to Enquire::get_mset() is used, but there
4339   aren't that many results, then MSet::get_matches_lower_bound() and
4340   MSet::get_matches_upper_bound() weren't always reported as equal - this
4341   bug is now fixed.
4342
4343 * When sorting by value, and using the check_at_least parameter to
4344   Enquire::get_mset(), some potential matches weren't being counted.
4345
4346 * Failing to create a flint or quartz database because we couldn't create the
4347   directory for it now throws DatabaseCreateError not DatabaseOpeningError.
4348
4349 testsuite:
4350
4351 * Fix display of valgrind output when a test fails because valgrind detected
4352   a problem.
4353
4354 * Add another version of valgrind suppression for the zlib end condition check
4355   as this gives a different backtrace for zlib in Ubuntu gutsy.
4356
4357 flint backend:
4358
4359 * The Flint database format has been extended to support user metadata, and
4360   each termlist entry is now a byte shorter (before compression).  As a
4361   result, Xapian 1.0.2 and earlier won't be able to read Xapian 1.0.3
4362   databases.  However, Xapian 1.0.3 can read older databases.  If you open an
4363   older flint database for writing with Xapian 1.0.3, it will be upgraded
4364   such that it cannot then be read by Xapian 1.0.2 and earlier.
4365
4366 * Zlib compression wasn't being used for the spelling or synonym tables (due
4367   to a typo - Z_DEFAULT_COMPRESSION where it should be Z_DEFAULT_STRATEGY).
4368
4369 * xapian-check: Allow "db/record." and "db/record.DB" as arguments.
4370
4371 * Fix "key too long" exception message by substituting FLINT_BTREE_MAX_KEY_LEN
4372   with its numeric value.
4373
4374 * Assorted minor efficiency improvements.
4375
4376 * If we reach the flush threshold during a transaction, we now write out the
4377   postlist changes, but don't actually commit them.
4378
4379 * Check length of new terms is at most 245 bytes for flint in add_document()
4380   and replace_document() so that the API user gets an error there rather
4381   than when flush() is called (explicitly or implicitly).  Fixes bug#44.
4382
4383 * Flint used to read the value of the environmental variable
4384   XAPIAN_FLUSH_THRESHOLD when the first WritableDatabase was opened and would
4385   then cache this value.  However the program using Xapian may have changed
4386   it, so we now reread it each time a WritableDatabase is opened.
4387
4388 * Implement TermIterator::positionlist_count() for the flint backend.
4389
4390 remote backend:
4391
4392 * Fix the result of MSet::get_matches_lower_bound() when using the
4393   check_at_least parameter to get_mset().
4394
4395 inmemory backend:
4396
4397 * Implement TermIterator::positionlist_count() for the inmemory backend.
4398
4399 build system:
4400
4401 * xapian-config: We always need to include dependency_libs in the output of
4402   `xapian-config --libs` if shared libraries are disabled.
4403
4404 * Distribution tarballs are now in the POSIX "ustar" format.  This supports
4405   pathnames longer than 99 characters (which we now have a few instances of
4406   in the doxygen generated documentation) and also results in a distribution
4407   tarball that is about half the size!  This format should be readable by any
4408   tar program in current use - if your tar program doesn't support it, we'd
4409   like to know (but note that the GNU tar tarball is smaller than the size
4410   reduction in the xapian-core tarball...)
4411
4412 * configure no longer generates msvc/version.h - this is now entirely handled
4413   by the MSVC-specific makefiles.
4414
4415 documentation:
4416
4417 * Add a glossary.
4418
4419 * docs/stemming.html: Reorder the initial paragraphs so we actually answer the
4420   question "What is a stemming algorithm?" up front.
4421
4422 * When running rst2html, use "--exit-status=warning" rather than "--strict".
4423   The former actually gives a non-zero exit status for a warning or worse,
4424   while the former doesn't, but does include any "info" messages in the output
4425   HTML.
4426
4427 * docs/deprecation.rst: Add "Database::positionlist_begin() throwing
4428   RangeError and DocNotFoundError".
4429
4430 * valueranges.rst: Correct out-of-date reference to float_to_string.
4431
4432 * HACKING: Document a few more "coding standards".
4433
4434 * PLATFORMS: Updated.
4435
4436 * docs/overview.html: Restore HTML header accidentally deleted in November
4437   2006.
4438
4439 * Fix several typos.
4440
4441 portability:
4442
4443 * Add missing instances of "#include <string.h>" to fix compilation with recent
4444   GCC 4.3 snapshots.
4445
4446 * Fix some warnings for various compilers and platforms.
4447
4448 Xapian-core 1.0.2 (2007-07-05):
4449
4450 API:
4451
4452 * Xapian now offers spelling correction, based on a dynamically maintained
4453   list of spelling "target" words.  This is currently supported by the
4454   flint backend, and works when searching multiple databases.
4455
4456 * Xapian now offers search-time synonym expansion, based on an externally
4457   provided synonym dictionary.  This is currently supported by the flint
4458   backend, and works when searching multiple databases.
4459
4460 * TermGenerator: now offers support for generating spelling correction
4461   data.
4462
4463 * QueryParser:
4464
4465   + New flag FLAG_SPELLING_CORRECTION to enable spelling correction, and a new
4466     method, "get_corrected_query_string()" to get the spelling corrected
4467     query string.
4468
4469   + New flags have been added to allow the new synonym expansion feature to be
4470     enabled and controlled.  Synonym expansion can either be automatic, or only
4471     for terms explicitly indicated in the query string by the new "~" operator.
4472
4473   + The precedence of the boolean operators has been adjusted to match their
4474     usual precedence in mathematics and programming languages.  "NOT" now binds
4475     as tightly as "AND" (previously "AND NOT" would bind like "AND", but just
4476     "NOT" would bind like "OR"!)  Also "XOR" now binds more tightly than "OR",
4477     but less tightly than "AND" (previously it bound just like "OR").
4478
4479   + '+' and '-' have been fixed to work on bracketed subexpressions as
4480     documented.
4481
4482   + If the stemmer is "none", no longer put a Z prefix on terms; this now
4483     matches the output of TermGenerator.
4484
4485 * Add new Xapian::sortable_serialise() and Xapian::sortable_unserialise()
4486   functions which serialise and unserialise numbers (currently only
4487   doubles) to a string representation which sorts in numeric order.  Small
4488   integers have a short representation.
4489
4490 * NumberValueRangeProcessor has been changed to work usefully.  Previously
4491   the numbers had to be the same length; now numbers are serialised to
4492   strings such that a string sort on the string orders the numbers correctly.
4493   Negative and floating point numbers are also supported now.  The old
4494   NumberValueRangeProcessor is still present in the library to preserve
4495   ABI compatibility, but code linking against 1.0.2 or later will pick
4496   up the new implementation, which really lives in a sub-namespace.
4497
4498 * Documents now have a get_docid() method, to get the document ID from the
4499   database they came from.
4500
4501 * Add support for a new type of match decider, called a "matchspy".  Unlike
4502   the old deciders, this will reliably be tested on every candidate
4503   document, so can be used to tally statistics on them.
4504
4505 * Fixed a segfault when getting a description for a MatchNothing query
4506   joined with AND_NOT (bug #176).
4507
4508 * Header files have been tidied up to remove some unnecessary includes.
4509   Applications using "#include <xapian.h>" will not be affected.  We don't
4510   intend to support direct inclusion of individual header files from the xapian
4511   directory, but if you do that, you may have to update you code.
4512
4513 testsuite:
4514
4515 * Feature tests added for all new features.
4516
4517 * Improved test coverage in queryparsertest.  Some tests in queryparsertest
4518   now use flint databases, so the test now ensures that the .flint
4519   subdirectory exists.
4520
4521 * The test harness no longer creates <dbdir>/log for flint (flint doesn't
4522   create a log like quartz does).
4523
4524 * apitest: "-bremote" must now be "-bremoteprog" (to better match
4525   "-bremotetcp"); "-bvoid" must now be "-bnone" (to better describe not
4526   using a database backend).
4527
4528 * To complement "make check-flint", "make check-quartz", and "make
4529   check-remote", you can now run tests for the remotetcp backend with
4530   "make check-remotetcp", for the remoteprog backend with "make
4531   check-remoteprog", for the inmemory backend with "make check-inmemory", and
4532   tests not requiring a backend with "make check-none".
4533
4534 * Several extra tests of the check_at_least parameter supplied to
4535   get_mset() were added.
4536
4537 * Fix memory leak and fd leak in remotetcp handling, so apitest now passes
4538   under valgrind.
4539
4540 * quartztest: no longer test QuartzPostList::get_collection_freq(), which
4541   has been removed.
4542
4543 * Add regression test emptyquery2 for bug #176.
4544
4545 * Add regression test matchall1 for bug with MatchAll queries.
4546
4547 * Enhanced test coverage of match functor, to check that it returns all
4548   matching documents.
4549
4550 matcher:
4551
4552 * Fix bug when check_at_least was supplied - the matches after the
4553   requested MSet size were being returned to the user.  The parameter is
4554   also now handled in a more efficient way - no extra memory is required
4555   (previously, extra memory proportional to the value of check_at_least was
4556   required).
4557
4558 * Fix bug which used incorrect statistics, and caused assertion failures,
4559   when performing a search using a MatchAll query.
4560
4561 * Optimisation for single term queries: we don't need to look at the top
4562   document's termlist to determine that it matches all the query terms.
4563
4564 flint backend:
4565
4566 * The value and position tables are now only created if there is anything to
4567   add to them.  So if you never use document values, there's no value.DB,
4568   value.baseA, or value.baseB.  This means the table doesn't need to be opened
4569   for searching (saving a file handle and a number of syscalls) and when
4570   flushing changes, we don't need to update baseA/baseB just to keep the
4571   revisions in step.  The flint database version has been increased, but the
4572   new code will happily open and read/update flint databases from Xapian 1.0.0
4573   and 1.0.1.  Xapian 1.0.2 flint databases can't be read by Xapian 1.0.1 or
4574   earlier though.
4575
4576 * Two new optional tables are now supported: "spelling", which is used to
4577   store information for spelling correction, and "synonym", which is used
4578   to store synonym information.
4579
4580 * xapian-compact: Now compacts and merges spelling and synonym tables.
4581   Also has a new option "--no-renumber" to preserve document ids from
4582   source databases.
4583
4584 * xapian-check: Now checks the spelling and synonym tables (only the Btree
4585   structure is currently checked, not the information inside).
4586
4587 * Database::term_exists(), Database::get_termfreq(), and
4588   Database::get_collection_freq() are now slightly more efficient for flint
4589   databases.
4590
4591 * New utility 'xapian-inspect' which allowing interactive inspection of key/tag
4592   pairs in a flint Btree.  Useful for development and debugging, and an
4593   approximate equivalent to quartzdump.
4594
4595 * WritableDatabase::delete_document() no longer cancels pending changes if the
4596   document doesn't exist.
4597
4598 * Fix handling of exceptions during commit - previously, this could result
4599   in tables getting out-of-sync, perhaps even resulting in a corrupt database.
4600
4601 * Optimise iteration of all documents in the case where all the document
4602   IDs up to lastdocid are used; in this case, we no longer need to access disk
4603   to get the document IDs.
4604
4605 quartz backend:
4606
4607 * WritableDatabase::delete_document() no longer cancels pending changes if the
4608   document doesn't exist.
4609
4610 * We no longer create a postlist just to find the termfreq or collection
4611   frequency.
4612
4613 remote backend:
4614
4615 * Calling WritableDatabase::delete_document() on a non-existent document now
4616   correctly propagates DocNotFoundError.
4617
4618 * The minor remote protocol version has increased (to fix the previous issue).
4619   You should be able to cleanly upgrade a live system by upgrading servers
4620   first and then clients.
4621
4622 * progclient: Reopen stderr on the child process to /dev/null rather than
4623   closing it.  This fixes apitest with the remoteprog backend to pass when run
4624   under valgrind (it failed in this case in 1.0.0 and 1.0.1).  It probably
4625   has no effect otherwise.
4626
4627 * check_at_least is now passed to the remote server to reduce the work
4628   needed to produce the match, and the serialised size of the returned MSet.
4629
4630 inmemory backend:
4631
4632 * Bug fix: using replace_document() to add a document with a specific
4633   document id above the highest currently used would create empty documents
4634   for all document ids in between.
4635
4636 build system:
4637
4638 * Work around an apparent bug in automake which causes the entries in .libs
4639   subdirectories generated for targets of bin_PROGRAMS not to be removed on
4640   make clean.  This was causing make distcheck to fail.
4641
4642 * Snapshots and releases are now bootstrapped with automake 1.10, and
4643   libtool 1.5.24.
4644
4645 * HTML documentation generated from RST files is now installed.
4646
4647 documentation:
4648
4649 * The API documentation is now generated with Doxygen 1.5.2, which fixes the
4650   missing docs for Xapian::Query.
4651
4652 * Ship and install internals.html.
4653
4654 * Generating the doxygen-collated documentation of the library internals (with
4655   "make doxygen_source_docs") now only tries to generate an HTML version.  The
4656   PDF version kept exceeding TeX limits, and HTML is a more useful format for
4657   this anyway.
4658
4659 * API docs for Xapian::QueryParser now make it clear that the default value for
4660   the stemming strategy is STEM_NONE.
4661
4662 * API docs now describe the NumberValueRangeProcessor more clearly.
4663
4664 * Several typo fixes and assorted wording improvements.
4665
4666 * queryparser.html: Mention "AND NOT" as an alternative way to write "NOT",
4667   and document synonym expansion.
4668
4669 * admin_notes.html: Updated for changes in this release, and corrected a
4670   few minor errors.
4671
4672 * spelling.rst: New file, documenting the spelling correction feature.
4673
4674 * synonyms.rst: New file, documenting the synonyms expansion feature.
4675
4676 * valueranges.rst: The NumberValueRangeProcessor is now documented.
4677
4678 * HACKING: Mention new libtool, and more details about preferring
4679   pre-increment.  Also add a note about 2 space indentation of protection
4680   level declarations in classes.
4681
4682 * INSTALL: note that zlib must be installed before you can build.
4683
4684 examples:
4685
4686 * copydatabase: Now copies synonym and spelling data.  Also, fix a cosmetic
4687   bug with progress output when a specified database directory has a trailing
4688   slash.
4689
4690 portability:
4691
4692 * Fix to build on with OpenBSD's zlib (xapian-core 1.0.0 and 1.0.1 didn't).
4693
4694 * Fixed to build with older zlib such as zlib 1.1.5 which Solaris apparently
4695   uses (xapian-core 1.0.0 and 1.0.1 didn't).  However, we recommend using zlib
4696   1.2.x as decompressing is apparently about 20% faster.
4697
4698 * msvc/version.h.in: Generated version.h for MSVC build no longer has the
4699   remote backend marked as disabled.
4700
4701 * Fix warnings from Intel's C++ compiler.
4702
4703 * Fixes for compilation with gcc-2.95 and GCC 4.3 snapshots.
4704
4705 packaging:
4706
4707 * RPMs:
4708
4709   + Rename xapian.spec to xapian-core.spec to match tarball name.
4710
4711   + Append the user name to BuildRoot.
4712
4713 debug code:
4714
4715 * Better debug logging from the queryparser internals.
4716
4717 Xapian-core 1.0.1 (2007-06-11):
4718
4719 API:
4720
4721 * Xapian::Error:
4722
4723   + Make Error::error_string member std::string rather than char * to avoid
4724     problems with double free() with copied Error objects.  Unfortunately
4725     this mean an incompatible ABI change which we had hoped to avoid until
4726     1.1.0, but in this case there didn't seem to be a sane way to fix the
4727     problem without an ABI change.
4728
4729   + Error::get_description() now converts my_errno to error_string if it hasn't
4730     been already rather than not including any error description in this case.
4731
4732   + Add new method "get_description()" to get a string describing the error
4733     object.  This is used in various examples and scripts, improving their
4734     error reporting.
4735
4736 * Xapian::Database: Add new form of allterms_begin() and allterms_end()
4737   which allow iterating of all terms with a particular prefix.  This
4738   is easier to use than checking the end condition yourself, and is
4739   more efficiently implemented for the remote backend (fixes bug#153).
4740
4741 * Xapian::Enquire: Passing an uninitialised Database object to Enquire will
4742   now cause InvalidArgumentError to be thrown, rather than causing a segfault
4743   when you call Enquire::get_mset().  If you really want an empty database,
4744   you can use Xapian::InMemory::open() to create one.
4745
4746 * Xapian::QueryParser: Multiple boolean prefixed terms with the same term
4747   prefix are now combined with OR before such groups are combined with AND
4748   (bug#157).  Multiple value ranges on the same value are handled similarly.
4749
4750 * Xapian::Query OP_VALUE_RANGE: Avoid calling db->get_lastdocid() repeatedly
4751   as we know the answer won't change - this reduces the run time of a
4752   particular test case by 25%.
4753
4754 testsuite:
4755
4756 * Add test for serialisation of error strings.
4757
4758 * Improved output in various situations:
4759
4760   + Quote strings in TEST_STRINGS_EQUAL().
4761
4762   + queryparsertest: Use TEST_STRINGS_EQUAL when comparing query descriptions
4763     against their expected output, since this makes it much easier to see the
4764     differences.
4765
4766   + Report whole message for exceptions, rather than a truncated version, in
4767     verbose mode.
4768
4769   + Make use of Xapian::Error::get_description(), giving better error
4770     reports.
4771
4772 * queryparsertest: New test of custom ValueRangeProcessor subclass
4773   (qp_value_customrange1).
4774
4775 * apitest: flintdatabaseformaterror1 and flintdatabaseformaterror2 now use a
4776   genuine Xapian 0.9.9 flint database for their tests, and more cases are
4777   tested.  The two tests have also been split into 3 now.
4778
4779 * Fix test harness not to invoke undefined behaviour in cases where a paragraph
4780   of test data contains two or fewer characters.
4781
4782 * Implement a better fix for the MSVC ifstream issue which was fixed in 1.0.0.
4783   This fixes an unintentional side-effect of the previous fix which meant that
4784   apitest's consistency1 wasn't working as intended (it now has a regression
4785   test to make sure it is testing what we intend).
4786
4787 flint backend:
4788
4789 * xapian-compact: Don't uncompress and recompress tags when compacting a
4790   database.  This speeds up xapian-compact rather a lot (by more than 50% in a
4791   quick test).
4792
4793 * If the docid counter wraps, Flint now throws DatabaseError (fixes bug#152).
4794
4795 * Remove the special case error message for pre-0.6 databases since they'll
4796   be quartz format (the check is only in flint because this code was taken from
4797   quartz).
4798
4799 quartz backend:
4800
4801 * If the docid counter wraps, Quartz now throws DatabaseError (fixes bug#152).
4802
4803 remote backend:
4804
4805 * The remote protocol now has a minor version number.  If the major
4806   version number is the same, a client can work with any server with
4807   the same or higher minor version number, which makes upgrading live
4808   systems easier for most remote protocol changes - just upgrade the servers
4809   first.
4810
4811 * When a read-only remote database is closed, the client no longer sends a
4812   (totally bogus) MSG_FLUSH to the server, and the reply is also eliminated.
4813   This reduces the time taken to close a remote database a little (fixes
4814   bug#149).
4815
4816 inmemory backend:
4817
4818 * skip_to() on an allterms TermIterator from an InMemory Database can no longer
4819   move backwards.
4820
4821 * An allterms TermIterator now initialises lazily, which can save some work if
4822   the first operation is a skip_to() (as it often will be).
4823
4824 build system:
4825
4826 * Fix VPATH compilation in maintainer mode with gcc-2.95.
4827
4828 * Fix multiple target rule for generating the queryparser source files in
4829   parallel builds.
4830
4831 * Distribute missing stub Makefiles for "bin", "examples", and
4832   "include/xapian".
4833
4834 documentation:
4835
4836 * Document the design flaw with NumberValueRangeProcessor and why it shouldn't
4837   be used.
4838
4839 * ValueRangeProcessor and subclasses now have API documentation and an overview
4840   document.
4841
4842 * Expand documentation of value range Query constructor.
4843
4844 * Improved API documentation for the TermGenerator class.
4845
4846 * docs/deprecation.rst:
4847
4848   + Fix copy and paste error - set_sort_forward() should be changed to
4849     set_docid_order().
4850
4851   + Improve entry for QueryParserError.
4852
4853 * PLATFORMS: Updated from tinderbox.
4854
4855 examples:
4856
4857 * copydatabase: Rewritten to use the ability to iterate over all the documents
4858   in a database.  Should be much more efficient for databases with sparsely
4859   distributed document IDs.
4860
4861 * simpleindex: Rewritten to use the TermGenerator class, which eliminates a
4862   lot of non-Xapian related code and is more typical of what a user is likely
4863   to want to do.
4864
4865 * simplesearch,simpleexpand: Rewritten to use the QueryParser class, which
4866   is more typical of what a user is likely to want to do.
4867
4868 portability:
4869
4870 * xapian-config: Add special case check for host_os matching linux* or
4871   k*bsd-gnu since vanilla libtool doesn't correctly probe link_all_deplibs=no
4872   for them.
4873
4874 packaging:
4875
4876 * RPMs: Add "# norootforbuild" comment which SuSE's build scripts look for.
4877   Rename "Source0:" to "Source:" as there's only one tarball now.  Add gcc-c++
4878   and zlib-devel to "Build-Requires:".
4879
4880 * The required automake version has been lowered to 1.8.3, so RPMs can now be
4881   built on RHEL 4 and SLES 9.
4882
4883 Xapian-core 1.0.0 (2007-05-17):
4884
4885 API:
4886
4887 * Xapian::Database:
4888
4889   + The Database(const std::string &) constructor has been marked as "explicit".
4890     Hopefully this won't affect real code, but it's possible.  Instead of
4891     passing a std::string where a Xapian::Database is expected, you'll now
4892     have to explicitly write `Xapian::Database(path)' instead of `path'.
4893
4894   + Fixed problem when calling skip_to() on an allterms iterator over multiple
4895     databases which could cause a debug assertion in debug builds, and possible
4896     misbehaviour in normal builds.
4897
4898 * Xapian::Error:
4899
4900   + The constructors of Error subclasses which take a `const std::string &'
4901     parameter are now explicit.  This is very unlikely to affect any real code
4902     but if it does, just write `Xapian::Error(msg)' instead of `msg'.
4903
4904   + Xapian::Error::get_type() now returns const char* rather than std::string.
4905     Generally existing code will just work (only one change was required in
4906     Xapian itself) - the simplest change is to write `std::string(e.get_type())'
4907     instead of `e.get_type()'.
4908
4909   + Previously, the errno value was lost when an error was propagated from
4910     a remote server to the client, because errno values aren't portable
4911     between platforms.  To fix this, Error::get_errno() is now deprecated and
4912     you should use Error::get_error_string() instead, which returns a string
4913     expanded from the errno value (or other system error code).
4914
4915 * Xapian::QueryParser:
4916
4917   + Now assumes input text is encoded as UTF-8.
4918
4919   + We've made several changes to term generation strategy.  Most notably:
4920     Unicode support has been added; '_' now counts as a word character; numbers
4921     and version numbers are now parsed as a single term; single apostrophes are
4922     now included in a term; we now store unstemmed forms of all terms; and we
4923     no longer try to "normalise" accents.
4924
4925   + parse_query() now throws the new Xapian::Error subclass QueryParserError
4926     instead of throwing const char * (bug#101).
4927
4928   + Pure NOT queries are now supported (for example, `NOT apples' will match
4929     all documents not indexed by the stemmed form of `apples').  You need
4930     to enable this feature by passing QueryParser::FLAG_PURE_NOT in flags
4931     to QueryParser::parse_query().
4932
4933   + We now clear the stoplist when we parse a new query.
4934
4935   + Queries such as `+foo* bar', where no terms in the database match the
4936     wildcard `foo*', now match no documents, even if `bar' exists.  Handling
4937     of `-foo*' has also been fixed.
4938
4939   + Now supports wildcarding the last term of a query to provide better support
4940     for incremental searching.  Enabled by QueryParser::FLAG_PARTIAL.
4941
4942   + The default prefix can now be specified to parse_query() to allow parsing
4943     of text entry boxes for particular fields.
4944
4945   + QueryParser::set_stemming_options() has been deprecated since 0.9.0 and
4946     has now been removed.
4947
4948 * Xapian::Stem:
4949
4950   + Now assumes input text is encoded as UTF-8.
4951
4952   + We've updated to the latest version of the Snowball stemmers.  This means
4953     that a small number of words produce different (and generally better)
4954     stems and that some new stemmers are supported: german2 (like german but
4955     normalises umlauts), hungarian, kraaij_pohlmann (a different Dutch
4956     stemmer), romanian, and turkish.
4957
4958 * Xapian::TermGenerator:
4959
4960   + New class which generates terms from a piece of text.
4961
4962 * Xapian::Enquire:
4963
4964   + The Enquire(const Database &) constructor has been marked as "explicit".
4965     This probably won't affect real code - certainly no Xapian API methods
4966     or functions take an Enquire object as a parameter - but calls to user
4967     methods or functions taking an Enquire object could be affected.  In
4968     such cases, you'll now have to explicitly write `Xapian::Enquire(db)'
4969     instead of `db'.
4970
4971   + Enquire::get_eset() now produces better results when used with multiple
4972     databases - without USE_EXACT_TERMFREQ they should be much more similar to
4973     results from an equivalent single database; with USE_EXACT_TERMFREQ they
4974     should be identical.
4975
4976   + Track the minimum weight required to be considered for the MSet separately
4977     from the minimum item which could be considered.  Trying to combine the two
4978     caused several subtle bugs (bug#86).
4979
4980   + Enquire::get_query() is now `const'.  Should have no effect on user code.
4981
4982   + Enquire::get_mset() now handles the common case of an "exact" phrase search
4983     (where the window size is equal to the number of terms) specially.
4984
4985   + Enquire::include_query_terms and Enquire::use_exact_termfreq are now
4986     deprecated in favour of capitalised versions Enquire::INCLUDE_QUERY_TERMS
4987     and Enquire::USE_EXACT_TERMFREQ (for consistency with our other manifest
4988     constants, and general C/C++ conventions).
4989
4990 * Xapian::RSet:
4991
4992   + RSet::contains(MSetIterator) is now `const'.  Should have no effect on user
4993     code.
4994
4995 * Xapian::SimpleStopper::add() now takes `const std::string &' not `const
4996   std::string'.  Should have no effect on user code.
4997
4998 * Xapian::Query:
4999
5000   + We now only perform internal validation on a Query object when it's either
5001     constructed or changed, to avoid O(n^2) behaviour in some cases.
5002
5003   + Xapian::Query::MatchAll (an alias for Query("")) matches all terms in the
5004     document (useful for "pure NOT" queries) and Xapian::Query:MatchNothing
5005     is now a more memorable alias for Query().
5006
5007 * Instead of explicitly checking that a term exists before opening its
5008   postlist, we now do both in one operation, which is more efficient.
5009
5010 * MatchDecider::operator() now returns `bool' not `int'.
5011
5012 * ExpandDecider::operator() now returns `bool' not `int'.
5013
5014 * Xapian::TermIterator::get_termfreq() now throws InvalidOperationError
5015   if called on a TermIterator from a freshly created Document (since
5016   there's no meaningful term frequency as there's no Database for
5017   context).
5018
5019 * <xapian/output.h> is no longer available as an externally visible header.
5020   It's not been included by <xapian.h> since 0.7.0.  Instead of using
5021   `cout << obj;' use `cout << obj.get_description();'.
5022
5023 * New constant Xapian::BAD_VALUENO which is -1 cast to Xapian::valueno.
5024
5025 * New Xapian::ValueRangeProcessor hierarchy: DateValueRangeProcessor,
5026   NumberValueRangeProcessor, and StringValueRangeProcessor.  In
5027   conjunction with the new QueryParser::add_valuerangeprocessor()
5028   method and the new Query::OP_VALUE_RANGE op these allow you to
5029   implement ranges in the query parser, such as `$50..100',
5030   `10..20kg', `01/02/2007..03/04/2007'.
5031
5032 testsuite:
5033
5034 * Many new and improved testcases in various areas.
5035
5036 * If a test throws an unknown exception, say so in the test failure message.
5037   If it throws std::string, report the first 40 characters (or first line if
5038   less than 40 characters) of the string even in non-verbose mode.
5039
5040 * Use of valgrind improved:
5041
5042   + The test harness now only hooks into valgrind if environment variable
5043     XAPIAN_TESTSUITE_VALGRIND is set, which makes it easy to run test programs
5044     under valgrind in the normal way.  The runtest script sets this
5045     automatically.
5046
5047   + runtest now passes "--leak-resolution=high" to valgrind to prevent
5048     unrelated leak reports related to STL classes from being combined.
5049
5050   + configure tests for valgrind improved and streamlined.
5051
5052   + New runsrv script to run xapian-tcpsrv and xapian-progsrv.  We need to
5053     run these under valgrind to avoid issues with excess numerical precision
5054     in valgrind's FP handling, but we can use "--tool=none" which is a lot
5055     faster than running them under valgrind's default memcheck tool.
5056
5057 * The test harness now starts xapian-tcpsrv in a more reliable way - it will
5058   try sequentially higher port numbers, rather than failing because a
5059   xapian-tcpsrv (or something else) is already using the default port.
5060   It also no longer leaks file descriptors (which was causing later tests
5061   to fail on some platforms), and if xapian-tcpsrv fails to start, the error
5062   message is now reported.
5063
5064 * remotetest has been removed and its testcases have either been added to
5065   apitest or just removed if redundant with tests already in apitest.
5066
5067 * termgentest is a new test program which tests the Xapian::TermGenerator
5068   class.
5069
5070 * TEST_EQUAL_DOUBLE() now uses a slightly less stringent threshold -
5071   DBL_EPSILON is too strict for calculations which include multiple
5072   steps.  Also, we now use it instead of doubles_are_equal_enough() and
5073   weights_are_equal_enough() which try to perform the same job.
5074
5075 * New macro TEST_STRINGS_EQUAL() which displays the strings on separate lines
5076   so the differences can be clearly seen.
5077
5078 * Test programs are now linked with '-no-install' which means that libtool
5079   doesn't need to generate shell script wrappers for them on most platforms.
5080
5081 * runtest: Now turns on MALLOC_CHECK_ and MALLOC_PERTURB_ for glibc if
5082   valgrind isn't being used.
5083
5084 * Better support for Microsoft Windows:
5085
5086   + test_emptyterm2 no longer tries to delete a database from disk while a
5087     WritableDatabase object still exists for it, since this isn't supported
5088     under Microsoft Windows.
5089
5090   + Fallback handling when srcdir isn't specified how takes into account .exe
5091     extensions and different path separators.
5092
5093 flint backend:
5094
5095 * Flint is now the default backend.
5096
5097 * xapian-check: New program which performs consistency checks on a flint
5098   database or table.
5099
5100 * xapian-compact: Now prunes unused docids off the start of each source
5101   database's range of docids.
5102
5103 * Positional information is now encoded using a highly optimised fls()
5104   implementation, which is much faster than the FP code 0.9.x used.
5105   Unfortunately the old encoding could occasionally add extra bits
5106   on some architectures, which was harmless except the databases
5107   wouldn't be portable.  Because of this, the flint format has had to
5108   be changed incompatibly.
5109
5110 * The lock file is now called "flintlock" rather than "flicklock" (which
5111   was a typo!)
5112
5113 * Flint now releases its lock correctly if there's an error in
5114   WritableDatabase's constructor.  Previously the lock would remain until
5115   the process exited.
5116
5117 * Flint now throws new Xapian::Error subclass DatabaseVersionError instead of
5118   DatabaseOpeningError when it fails to open a database because it has an
5119   unsupported version.  DatabaseVersionError is a subclass of
5120   DatabaseOpeningError so existing code should continue to work, but it's
5121   now much easier to determine if the problem is that a database needs
5122   rebuilding.
5123
5124 * If you try to open a flint database with an older or newer version than
5125   flint understands, the exception message now gives the version understood,
5126   rather than "I only understand FLINT_VERSION" (literally).
5127
5128 * If we fail to obtain the lock, report why in the exception message.
5129
5130 * Flint now compresses tags in the record and termlist tables using zlib.
5131
5132 * More robust code to handle the flint locking child process, in case of
5133   unexpected errors.
5134
5135 * If a document was replaced more than once between flushes, the document
5136   length wouldn't be updated after the first change.
5137
5138 quartz backend:
5139
5140 * Quartz is still supported, but use in new projects is deprecated (use Flint
5141   instead).  Quartz will be removed eventually.
5142
5143 * quartzcheck: Test if this is a quartz database by looking at "meta" not
5144   "record_DB".  If "record_DB" is >= 2GB and we don't have a LFS aware stat
5145   function then stat can fail even though the file is there.  Also open the
5146   database explicitly as a Quartz database for extra robustness.
5147
5148 * If a document was replaced more than once between flushes, the document
5149   length wouldn't be updated after the first change.
5150
5151 remote backend:
5152
5153 * The remote backend is now supported under Microsoft Windows.
5154
5155 * Open a fresh copy of the database(s) on each connection to a xapian-tcpsrv
5156   rather than relying on being able to share a database across fork() or
5157   between threads (which we don't promise will work).
5158
5159 * xapian-tcpsrv: New "--interface" option allows the hostname or address of the
5160   interface to listen on to be specified (the default is the previous behaviour
5161   of listening on all interfaces).
5162
5163 * If name lookup fails, report the h_errno code from gethostbyname() rather
5164   than whatever value errno happens to currently have!
5165
5166 * Fix bugs in query unserialisation.
5167
5168 * The remote backend now supports all operations (get_lastdocid(), and
5169   postlist_begin() have now been implemented).
5170
5171 * Currently a read-only server can be opened as a WritableDatabase (which is
5172   a minor bug we plan to fix).  In this case, operations which write will fail
5173   and the exception is now InvalidOperationError not NetworkError.
5174
5175 * If a remote server catches NetworkTimeoutError then it will now only
5176   propagate it if we can send it right away (since the connection is
5177   probably unhappy).  After that (and for any other NetworkError) we now
5178   just rethrow it locally to close the connection and let it be logged if
5179   required.
5180
5181 * The timeout parameter to RemoteDatabase wasn't being used, instead the
5182   client would wait indefinitely for the server to respond.
5183
5184 * A timeout of zero to the remote backend now means "never timeout".  This
5185   is now the default idle timeout for WritableDatabase (the connection
5186   timeout default is now 10 seconds, rather than defaulting to the idle
5187   timeout).
5188
5189 * Fix handling of the document length in remote termlists.
5190
5191 * The remote backend now checks when decoding serialised string that the
5192   length isn't more than the amount of data available (bug#117).
5193
5194 * The remote backend now handles the unique term variants of delete_document
5195   and replace_document on the server side.
5196
5197 * The RSet serialisation now encodes deltas between docids (rather than the
5198   docids themselves) which greatly reduces the size of the encoding of a
5199   sparse RSet for a large database.
5200
5201 * We now encode deltas between term positions when sending data after calling
5202   positionlist_begin() on a remote database.
5203
5204 * When using a MatchDecider with remote database(s), don't rerun the
5205   MatchDecider on documents which a remote server has already checked.
5206
5207 * Apply the "decreasing weights with remote database" optimisation which we use
5208   in the sort_by_relevance case in the sort_by_relevance_then_value case too.
5209
5210 * We now throw NetworkError rather than InternalError for invalid data received
5211   over the remote protocol.
5212
5213 * We now close stderr of the spawned backend program when using the "prog" form
5214   of the remote backend.  Previously stderr output would go to the client
5215   application's stderr.
5216
5217 muscat36 backend:
5218
5219 * Support for the old Muscat 3.6 backends has been completely removed.  It's
5220   still possible to convert Muscat 3.6 databases to Xapian databases by
5221   building 0.9.10 and using copydatabase to create a quartz database, which can
5222   then be read by 1.0.0 (and converted to a flint database using copydatabase
5223   again).
5224
5225 build system:
5226
5227 * We've added GCC visibility annotations to the library, which when using GCC
5228   version 4.0 or later reduce the size and load time of the library and
5229   increase the runtime speed a little.  Under x86_64, the stripped library is
5230   6.4% smaller (1.5% smaller with debug information).
5231
5232 * configure: If using GCC, use -Bsymbolic-functions if it is supported
5233   (it requires a very recent version of ld currently).  This option reduces the
5234   size and load time of the shared library by resolving references within the
5235   library when it's created.
5236
5237 * We automatically define _FORTIFY_SOURCE in config.h if GCC is in use
5238   and it's not already set (you can override this as documented in INSTALL).
5239   This adds some checking (mostly at compile time) that important return
5240   values aren't ignored and that array bounds aren't exceeded.
5241
5242 * `./configure --enable-quiet' already allows you to specify at configure time
5243   to pass `--quiet' to libtool.  Now you can override this at make-time by
5244   using `make QUIET=' (to turn off `--quiet') or `make QUIET=y' (to turn on
5245   `--quiet').
5246
5247 * In non-maintainer mode, we don't need the tools required to rebuild some of
5248   the documentation, so speed up configure by not even probing for them in
5249   this common case.
5250
5251 * The makefiles now use non-recursive make in all directories except "docs" and
5252   "tests".  For users, this means that the build is faster and requires less
5253   disk space (bug#97).
5254
5255 * configure: Add proper detection for SGI's C++ (check stderr output of
5256   "CC -v") and automatically pass -ptused in CXXFLAGS for xapian-core and any
5257   applications using xapian-config --cxxflags since it seems to be required to
5258   avoid template linking errors.
5259
5260 * XO_LIB_XAPIAN now checks for the case where XAPIAN_CONFIG wasn't specified
5261   and xapian-config wasn't found, but the library appears to be installed -
5262   this almost certainly means that the user has installed xapian-core from
5263   a package, but hasn't installed the -dev or -devel package, so include
5264   that advice in the error message.
5265
5266 * `./configure --with-stlport-compiler' now requires a compiler name as an
5267   argument.
5268
5269 * configure: Disable probes for f77, gcj, and rc completely by preventing
5270   the probe code from even appearing in configure - this reduces the size of
5271   configure by 209KB (~25%) and should speed it up significantly.
5272
5273 * configure: Suppress more unhelpful warnings and "remarks" for HP's aCC, and
5274   turn on "+wlint", which seems useful.
5275
5276 * A number of cases of unnecessary header inclusions have been addressed,
5277   which should speed up compilation (fewer headers to parse when compiling
5278   many source files).  This also reduces dependencies within the source code,
5279   and thus the number of files which need to be rebuilt when a header is
5280   changed.
5281
5282 * configure: Cache the results of some of our custom tests.
5283
5284 documentation:
5285
5286 * The documentation has all been updated for changes in Xapian 1.0.0.
5287
5288 * Many of the documentation comments in the API headers (which are collated
5289   using doxygen to generated the API reference) have been improved, and some
5290   missing ones added.  Also, internal classes, members, and methods are now all
5291   marked as such so that none should appear in the generated documentation.  In
5292   particular, the class inheritance graphs should be a lot clearer.  A few other
5293   problems have also been addressed.
5294
5295 * docs/internals.html: New separate index page for the "internal"
5296   documentation.
5297
5298 * docs/deprecated.html: New document describing deprecation policy.  This
5299   includes lists of features which have been removed, or which are deprecated
5300   and scheduled for removal, along with suggested replacements.
5301
5302 * docs/admin_notes.html: New document introducing Xapian for sysadmins.
5303
5304 * docs/termgenerator.html: New document describing the new term generation
5305   strategy implemented by the Term::Generator class.
5306
5307 * docs/bm25.html,docs/intro_ir.html: These have been overhauled to make them
5308   fit better with the rest of the documentation, and with Xapian itself.
5309
5310 * docs/overview.html: Fixed links to error classes in generated API
5311   documentation.
5312
5313 * HACKING,INSTALL: Many updates and improvements.
5314
5315 * xapian-config: Improve --version output so that help2man produces a better
5316   man page.
5317
5318 * PLATFORMS: Remove reports for 0.7.* and demote reports for 0.8.* to "older
5319   reports" status.  All SF compilefarm machines are now "no longer available",
5320   so update the symbols and key to reflect this.  Update with recent success
5321   reports from the tinderbox and other sources.
5322
5323 * AUTHORS: Thanks several bug reporters I missed before, as well as recent
5324   contributors.
5325
5326 * docs/code_structure.html now looks nicer and includes links to
5327   svn.xapian.org.
5328
5329 * docs/remote_protocol.html: Fixed several typos and other errors, and document
5330   all the new messages.
5331
5332 * We no longer include docs/apidoc/latex/* in the xapian-core tarballs since
5333   it's just useless bloat.
5334
5335 examples:
5336
5337 * delve:
5338
5339   + Report the exception error string if open a database fails.
5340
5341   + Rename "-k" to "-V" since "keys" were renamed to "values" long ago.  Keep
5342     "-k" as an alias for now, but don't advertise it.  Add handling so "-V3"
5343     shows value #3 for every document in the database.
5344
5345   + No longer stems terms by default.  Add "-s/--stemmer" option to allow a
5346     stemmer to be specified.
5347
5348 * quest: Add "--stemmer" option to allow stemming language to be set, or
5349   stemming to be disabled.
5350
5351 portability:
5352
5353 * Fix compilation with GCC 4.3 snapshot.
5354
5355 * Always use pid_t not int for holding a process id, and use AC_TYPE_PID_T to
5356   `#define pid_t int' if <sys/types.h> doesn't provide pid_t.
5357
5358 * Pass the 4th parameter of setsockopt() as char* which works whether the
5359   function actually takes char* or void* (since C++ allows implicit conversion
5360   from char* to void*).
5361
5362 * Most warnings in the MSVC build have been fixed.
5363
5364 * Refactored most portability workarounds into safeXXXX.h headers.
5365
5366 * Building for mingw in a cygwin environment should work better now.
5367
5368 packaging:
5369
5370 * RPM spec file:
5371
5372   + Updated for the changes in this release.
5373
5374   + ChangeLog.examples is now packaged.
5375
5376 debug code:
5377
5378 * Rename --enable-debug* configure options - conflating the options to "turn on
5379   assertions" and "turn on logging" is confusing. `--enable-debug[=partial]'
5380   becomes `--enable-assertions'; `--enable-debug-verbose' becomes
5381   `--enable-log' and `--enable-debug=full' becomes `--enable-assertions
5382   --enable-log'.  For now the old options give an error telling you the new
5383   equivalent.
5384
5385 * Debug logging from expand is now all of type EXPAND (some was of types
5386   MATCHER and WTCALC before).
5387
5388 * Hook the debug tracing in the lemon generated parser into Xapian's debug
5389   logging framework.
5390
5391 * New assertion types: AssertEqParanoid() and AssertNeParanoid().
5392
5393 * Retry write() if it fails when writing a debug log entry to ensure to avoid
5394   the risk of a partial write.
5395
5396 Xapian-core 0.9.10 (2007-03-04):
5397
5398 API:
5399
5400 * Fix WritableDatabase::replace_document() not to lose positional information
5401   for a document if it is replaced with itself with unmodified postings.
5402
5403 * QueryParser: Add entries to the "unstem" map for prefixed boolean filters
5404   (e.g. type:html).
5405
5406 * Fix inconsistent ordering of documents between pages with
5407   Enquire::set_sort_by_value_then_relevance (fixes bug#110).
5408
5409 testsuite:
5410
5411 * Workaround apparent bug in MSVC's ifstream class.
5412
5413 flint and quartz backends:
5414
5415 * Fix possible double-free after a transaction fails.
5416
5417 * Fix code for recovering from failing to open a table for reading
5418   mid-modification.  If modifications are so frequent that opening for reading
5419   fails 100 times in a row, throw DatabaseModifiedError not
5420   DatabaseOpeningError.
5421
5422 * Don't call std::string::append(ptr, 0) when ptr may be uninitialised
5423   or NULL (rather suspect, and reported to cause SEGV-like behaviour with
5424   MSVC).
5425
5426 * Ensure both_bases is set to false if we don't have both bases when
5427   opening a table using an existing object.
5428
5429 * Use MS Windows API calls to delete files and open files we might want to
5430   delete while they are still open (i.e. the flint and quartz btree base
5431   files).  This fixes a problem when a writer can't discard an old revision at
5432   the exact moment a reader is opening it (bug #108).
5433
5434 remote backend:
5435
5436 * Fix WritableDatabase::has_positions() to refetch the cached value if it
5437   might be out of date.
5438
5439 * Fix incorrect serialisation of a query with non-default termpositions.
5440
5441 inmemory backend:
5442
5443 * If replace_document is used to set the docid of a newly added document which
5444   has previously existed, ensure we mark that document as valid.
5445
5446 documentation:
5447
5448 * Assorted improvements to API documentation.
5449
5450 * docs/Makefile.am: The larger pool_size we set in 0.9.9 for building
5451   sourcedoc.pdf was a bit marginal, so increase it further.
5452
5453 * docs/stemming.html,docs/install.html: Correct 2 references to "CVS" to say
5454   "SVN" instead.
5455
5456 * HACKING: Update the release checklist.
5457
5458 portability:
5459
5460 * Fix flint and quartz to allow 2GB+ B-tree tables when compiling with MSVC.
5461
5462 packaging:
5463
5464 * RPMs: Remove "." from end of "Summary:".  Package the new man page for
5465   xapian-progsrv.
5466
5467 Xapian-core 0.9.9 (2006-11-09):
5468
5469 testsuite:
5470
5471 * Use popen() to run xapian-tcpsrv and wait for "Listening..." before returning
5472   rather than just sleeping for 1 second and hoping that's enough.
5473
5474 * If we can't start xapian-tcpsrv because the port is in use, try higher
5475   numbered ports.
5476
5477 remote backend:
5478
5479 * xapian-tcpsrv: If the port requested is in use, exit with code 69
5480   (EX_UNAVAILABLE) which is useful if you're trying to automate launching of
5481   xapian-tcpsrv instances.
5482
5483 * xapian-tcpsrv: Output "Listening..." once the socket is open and read for
5484   connections (this allows the testsuite to wait until xapian-tcpsrv is ready
5485   before connecting to it).
5486
5487 * xapian-progsrv: Now supports --help, --version, and has a man page.  Fixes
5488   Bug #98.
5489
5490 * Turn on TCP_NODELAY for the TCP variant of the remote backend which
5491   dramatically improves the latency of operations on the database.
5492
5493 build system:
5494
5495 * internaltest: Disable serialiselength1 and serialisedoc1 when the remote
5496   backend is disabled to fix build error in this case.
5497
5498 * Move libbtreecheck.la from testsuite/ to backends/quartz/.
5499
5500 * Move the testsuite harness from testsuite/ to tests/harness/.
5501
5502 documentation:
5503
5504 * Ship our custom INSTALL file rather than the generic one from autoconf which
5505   we've accidentally been shipping instead since 0.9.5.
5506
5507 * docs/Makefile.am: Building sourcedoc.pdf needs a larger pool_size now we're
5508   using pdflatex.
5509
5510 * HACKING: Update debian packaging checklist.
5511
5512 * PLATFORMS: Updated with results from tinderbox.
5513
5514 portability:
5515
5516 * Create "safefcntl.h" as a replacement for <fcntl.h> instead of using
5517   "utils.h" for this purpose, since "utils.h" pulls in many other things we
5518   often don't need.
5519
5520 packaging:
5521
5522 * RPMs: Prevent binaries getting an rpath for /usr/lib64 on FC6.
5523
5524 Xapian-core 0.9.8 (2006-11-02):
5525
5526 API:
5527
5528 * QueryParser: Don't require a prefixed boolean term to start with an
5529   alphanumeric - allow the same set of characters as we do for the second
5530   and subsequent characters.
5531
5532 flint backend:
5533
5534 * Only force a flush on WritableDatabase::allterms_begin() if there are
5535   actually pending changes.
5536
5537 quartz backend:
5538
5539 * Only force a flush on WritableDatabase::allterms_begin() if there are
5540   actually pending changes.
5541
5542 * quartzcheck: Avoid dying because of an unhandled exception if the Btree
5543   checking code finds an error in the low-level Btree structure.  Add a
5544   catch for any other unknown exceptions.
5545
5546 build system:
5547
5548 * When building with GCC, turn on warning flag -Wshadow even when not in
5549   maintainer mode (provided it is supported by the GCC version being used).
5550
5551 * testsuite/backendmanager.cc: Fix compilation when valgrind is detected by
5552   configure.
5553
5554 * If generating apidoc.pdf fails, display the logfile pdflatex generates since
5555   that is likely to show what failed.
5556
5557 documentation:
5558
5559 * Produce a PDF for apidoc rather than PostScript, since the PDF is smaller,
5560   plus at least as easy to print and easier to view for most users.  Use
5561   pdflatex to generate the PDF directly rather than going via a DVI file which
5562   apparently produces a better result and also avoids problems on some Linux
5563   distros where latex is a symlink to pdfelatex (bug#81, bug#95).
5564
5565 * HACKING: Mention automake 1.10 is out but we've not tested it yet.
5566
5567 * HACKING: Add entries to release checklist: make sure new API methods
5568   are wrapped by the bindings, and that bug submitters are thanked.
5569
5570 * HACKING: Note that on Debian, tetex-extra is needed for
5571   fancyhdr.sty.
5572
5573 * HACKING: Note that dch can be used to update debian/changelog.
5574
5575 * docs/code_structure.html: Document backends/remote.
5576
5577 * PLATFORMS: Update from tinderbox.
5578
5579 portability:
5580
5581 * configure: When checking if we need -lm, don't use a constant argument to
5582   log() as the compiler might simply evaluate the whole expression at compile
5583   time.
5584
5585 * configure: Redhat's GCC 2.96 doesn't support -Wundef even though real GCC
5586   version before and after it do!
5587
5588 * configure: Avoid use of double quotes in double-quoted backticks since
5589   it causes problems on some platforms.
5590
5591 * backends/flint/flint_io.cc: Fix compilation on windows (needs to
5592   #include "safewindows.h" to get definition of SSIZE_T).
5593
5594 * Fix our implementation of om_ostringstream to compile so that the build
5595   works once more on older compilers without <sstream> (regression probably
5596   introduced in 0.9.7).
5597
5598 packaging:
5599
5600 * xapian.spec: Package xapian-progsrv.
5601
5602 Xapian-core 0.9.7 (2006-10-10):
5603
5604 API:
5605
5606 * QueryParser:
5607
5608   + Allow a distance to be optionally specified for NEAR - e.g.
5609     "cats NEAR/3 dogs" (bug#92).
5610
5611   + Implement "ADJ" operator - like "NEAR" except the terms must
5612     appear in matching documents in the same order as in the query.
5613
5614   + Fix bug in how we handle prefixed quoted phrases and prefixed brackets.
5615
5616   + Fix parsing of loved and hated prefixed phrases and bracketted expressions.
5617
5618   + Fix handling of stopwords in boolean expressions.
5619
5620   + Don't ignore a stopword if it's the only query term.
5621
5622 * Document::add_value() failed to replace an existing value with the same
5623   number, contrary to what the documentation says (bug #82).
5624
5625 * Enquire::set_sort_by_value(): Don't fetch the document data when fetching
5626   the value to sort on.  Simple benchmarking showed this to speed up sort by
5627   value by a factor of between 3 and 9!
5628
5629 * Implement transactions for flint and quartz.  Also supported are "unflushed"
5630   transactions, which provided an efficient way to atomically group a number
5631   of database modifications.
5632
5633 * The Xapian::Error and Xapian::ErrorHandler classes have been reimplemented.
5634   The new versions have better, clearer documentation comments and are cleaner
5635   internally.
5636
5637 * Change how doubles are serialised by TradWeight, BM25Weight, and in the
5638   remote backend protocol.  The new encoding allows us to transfer any double
5639   value which can be represented by both machines precisely and compactly.
5640
5641 testsuite:
5642
5643 * Add targets "check-flint", "check-quartz", and "check-remote" in tests and at
5644   the top level which run the subset of tests which test the respective backend.
5645
5646 * apitest: Run tests on flint if flint is enabled, rather than if quartz is
5647   enabled!
5648
5649 * apitest: Speed up deldoc4 when run in verbose mode - some stringstream
5650   implementations are very inefficient when the string grows long.
5651
5652 * Turn on GLIBCXX_FORCE_NEW when running tests under valgrind to stop the GNU
5653   C++ STL from using a pooling allocator.  This helps make velgrind's leak
5654   tracking more reliable.
5655
5656 * Probe for required valgrind logging options at configure time rather than
5657   when running the test program.  This saves about 2 seconds per test program
5658   invocation.
5659
5660 * Fix testsuite harness to show valgrind output when a test fails (when running
5661   under valgrind in verbose mode).  This had stopped working, probably due to
5662   changes in valgrind 3.
5663
5664 * internaltest: Check that the destructor on a temporary object gets called
5665   at the correct time (Sun C++ deliberately gets this wrong by default, and it
5666   would be good to catch any other compilers which do the same).
5667
5668 * apitest: When running tests on the remote backend and running under valgrind,
5669   run xapian-tcpsrv and xapian-progsrv under valgrind too to avoid issues
5670   with the precision of doubles (bug#94).
5671
5672 flint backend:
5673
5674 * Retry on EINTR from fcntl or waitpid when creating or releasing the flint
5675   lock file.
5676
5677 * xapian-compact: Add --blocksize option to allow the blocksize to be set
5678   (default is 8K as before.)
5679
5680 * WritableDatabase::replace_document(did, doc) was double-incrementing the
5681   "changes" counter when document did didn't exist so it would flush twice
5682   as often - fixed.
5683
5684 * WritableDatabase::postlist_begin(): Remove forced flush when iterating the
5685   posting list of a term which has modified postings pending.
5686
5687 quartz backend:
5688
5689 * quartzcompact: Add --blocksize option to allow the blocksize to be set
5690   (default is 8K as before.)
5691
5692 * WritableDatabase::replace_document(did, doc) was double-incrementing the
5693   "changes" counter when document did didn't exist so it would flush twice
5694   as often - fixed.
5695
5696 remote backend:
5697
5698 * Most of the remote backend has been rewritten.  It now supports most
5699   operations which a local database does (including writing!), the protocol
5700   used is more compact, and a number of layers of classes have been eliminated
5701   and the sequences of method calls simplified, so the code should be easier to
5702   understand and maintain despite doing more.  A number of bugs have been fixed
5703   in the process.
5704
5705 * xapian-tcpsrv: Report errno if we catch a Xapian::Error which has it set.
5706
5707 * xapian-tcpsrv: Fix memory leak in query unserialisation.
5708
5709 build system:
5710
5711 * Now using autoconf 2.60 for snapshots and releases.  Also now using a
5712   libtool patch which improves support for Sun C++'s -library=stlport4 option.
5713
5714 * configure: Fix generation of version.h to work with Solaris sed.
5715
5716 * automake adds suitable rules for rebuilding doxygen_api_conf and
5717   doxygen_source_conf, so remove our less accurate versions.  Also fix
5718   dependencies for regenerating the doxygen documentation, and make the
5719   documentation build work with parallel make.
5720
5721 * Make use of the dist_ prefix to avoid having to list files in EXTRA_DIST as
5722   well as in *_DATA and man_MANS.
5723
5724 * Removed a few unused #include-s.
5725
5726 * include/xapian/error.h: Add hook to allow SWIG bindings to be built using
5727   GCC's visibility support.
5728
5729 * configure: Turn on automake's -Wportability to help ensure our Makefile.am's
5730   are written in a portable way.
5731
5732 * configure: Disable probing and short-cut tests for a FORTRAN compiler.  We
5733   don't use one, but current libtool versions always check for it regardless.
5734
5735 * xapian-config: Prune -L/usr/lib from output of `xapian-config --libs'.
5736
5737 documentation:
5738
5739 * docs/scalability.html: quartzcompact and xapian-compact now allow you to set
5740   the blocksize, so there's no need to use copydatabase if you want to migrate
5741   a database to a larger blocksize.  Mention gmane.  Other minor tweaks.
5742
5743 * Eliminate "XAPIAN_DEPRECATED" from generated documentation.
5744
5745 * PLATFORMS: Added success report for Nexenta (alpha 5), MSVC, and sparc linux.
5746   Updated other results from tinderbox.
5747
5748 * Add links to the wiki from README and the documentation index.
5749
5750 * docs/overview.html: Add discussion of uses of terms vs values.
5751
5752 * docs/overview.html: Rewrite the section on Xapian::Document to remove some
5753   very out-of-date information and make it clearer.
5754
5755 * include/xapian/database.h: Note that automatically allocated document IDs
5756   don't reuse IDs from deleted documents.
5757
5758 * include/xapian/enquire.h: Note that "set_sort_by_relevance" is the default
5759   setting.
5760
5761 * docs/queryparser.html,include/xapian/queryparser.h: Add note that
5762   FLAG_WILDCARD requires you to call set_database.
5763
5764 * HACKING: Add some advice regarding debugging using -D_GLIBCXX_DEBUG,
5765   valgrind, and gdb.
5766
5767 * HACKING: Give URL to Alexandre Duret-Lutz's autotools tutorial, which is much
5768   more up-to-date than the "goat book".
5769
5770 * HACKING: Update and expand the information about the debian packaging.
5771
5772 * Add missing dir_contents files.
5773
5774 portability:
5775
5776 * xapian/version.h: Add a check that _GLIBCXX_DEBUG is set compatibly if we're
5777   compiling with GNU C++ 3.4 or newer.
5778
5779 * Add configure check to see if "-lm" is needed to get maths functions since
5780   newer versions of Sun's C++ compiler seem to require this.
5781
5782 * Automatically put Sun's C++ compiler into "ANSI C++ compliant library" mode
5783   (using -library=stlport4).  This allows us to remove most of the special
5784   case bits of code we've accumulated for just this compiler, which improves
5785   maintainability.
5786
5787 * Sun's C++ compiler implements non-standards-conforming lifetimes for
5788   temporary objects by default.  This means database locks don't get released
5789   when they should, so we now always pass "-features=tmplife" for Sun C++
5790   which selects the behaviour specified by the C++ standard.
5791
5792 Xapian-core 0.9.6 (2006-05-15):
5793
5794 API:
5795
5796 * Rename Xapian::xapian_version_string() and companions to
5797   Xapian::version_string(), etc.  Keep the old functions as aliases which are
5798   marked as deprecated.
5799
5800 * QueryParser: Add rules to handle a boolean filter with a "+" in front (such
5801   as +site:xapian.org).
5802
5803 testsuite:
5804
5805 * queryparsertest: Add another prefix testcase to improve coverage.
5806
5807 build system:
5808
5809 * configure: Simpler check for VALGRIND being set to empty value.
5810
5811 * include/Makefile.am: Add xapian/version.h.timestamp as a dependency on
5812   all-local so that xapian/version.h actually gets regenerated when required.
5813
5814 * Eliminate XAPIAN_BUILD_BACKEND_* from config.h and just use
5815   XAPIAN_HAS_*_BACKEND from xapian/version.h instead.
5816
5817 documentation:
5818
5819 * remote_protocol.html: Document keep-alive messages.
5820
5821 * xapian/enquire.h: Remove bogus documentation for a parameter which doesn't
5822   exist.
5823
5824 * PLATFORMS: Added a summary.  Updated and pruned old entries for which we
5825   have a newer close match.
5826
5827 * HACKING: Expand on details of what's required when changing Xapian (discuss
5828   documentation requirements, and more on why feature tests are vital).
5829
5830 * HACKING: Update section on building debian packages.
5831
5832 portability:
5833
5834 * The tarball is generated with a patched version of libtool 1.5.22 which
5835   fixes libtool bugs on HP-UX and some BSD platforms.
5836
5837 * configure: Fix problems with test for snprintf which affected cygwin, and
5838   possibly some other platforms.
5839
5840 * configure: Tweak version.h generation to cope with CXXCPP putting carriage
5841   returns into its output as can happen on cygwin.
5842
5843 * Fix renaming of "iamflint.tmp" for MS Windows where you can't rename an open
5844   file.
5845
5846 * Fixed MSVC7 warnings.
5847
5848 * Added workaround for newlib header bug.
5849
5850 Xapian-core 0.9.5 (2006-04-08):
5851
5852 API:
5853
5854 * QueryParser:
5855
5856   + Fix FLAG_BOOLEAN_ANY_CASE to really allow any case combination - previously
5857     it only allowed all uppercase or all lowercase.
5858
5859   + Fix QueryParser's handling of terms with trailing "#", "+", or "-" when
5860     set_database has been called and the term doesn't exist in the database
5861     with the suffix.
5862
5863 * Add mechanism to allow xapian-bindings to override deprecation warnings so
5864   we can continue to wrap deprecated methods without lots of warnings.
5865
5866 * Move Enquire::get_matching_terms_end() and Document::termlist_end() inline in
5867   header.
5868
5869 * Database::termlist_begin(): Eliminate the MultiTermList wrapper in the common
5870   case where we're only dealing with a single database.
5871
5872 * Fix TermIterator::positionlist_begin() to work on TermIterator from
5873   Database::termlist_begin().  Make TermList::positionlist_begin() pure
5874   virtual and put dummy implementations in BranchTermList and other
5875   subclasses which can't (or don't) implement it.  This makes it hard to
5876   accidentally fail to implement it in a backend's TermList subclass.
5877
5878 * TermIterator::positionlist_begin() with the remote backend now throws
5879   UnimplementedError instead of InvalidOperationError.
5880
5881 * Implement Enquire::set_sort_by_relevance_then_value().
5882
5883 testsuite:
5884
5885 * Added missing feature test for QueryParser::FLAG_BOOLEAN_ANY_CASE.
5886
5887 * remotetest: Check mset size in tcpmatch1.
5888
5889 flint backend:
5890
5891 * xapian-compact: Fixed segfault from passing an unknown option (e.g.
5892   "xapian-compact --foo").
5893
5894 quartz backend:
5895
5896 * quartzdump,quartzcompact: Fixed segfault from passing an unknown option
5897   (e.g.  "quartzdump --foo").
5898
5899 remote backend:
5900
5901 * xapian-tcpsrv: Don't perform a name lookup on the IP address which an
5902   incoming connection is from as that could easily slow down the search
5903   response - instead just print the IP address itself if output is verbose.
5904
5905 * xapian-tcpsrv: Allow up to 5 connections in the listen queue instead of just
5906   one.
5907
5908 build system:
5909
5910 * Removed unused code from the matcher and the remote, quartz, and flint
5911   backends.
5912
5913 documentation:
5914
5915 * All installed binaries now support --help and --version and have a man page
5916   (which is generated using help2man).
5917
5918 * docs/overview.html: Bring up to date.
5919
5920 * docs/remote_protocol.html: Document messages for requesting and sending a
5921   termlist and a document.
5922
5923 * PLATFORMS, AUTHORS: Updated.
5924
5925 * INSTALL: Improve wording.
5926
5927 * HACKING: Note that we now use a lightly patched version of libtool 1.5.22.
5928
5929 * HACKING: aclocal is part of automake, not autoconf.
5930
5931 portability:
5932
5933 * Added some tweaks to help support compilation with MSVC.
5934
5935 packaging:
5936
5937 * RPMs: package the new man pages.
5938
5939 debug code:
5940
5941 * Add missing spaces in some debug output.
5942
5943 Xapian-core 0.9.4 (2006-02-21):
5944
5945 API:
5946
5947 * Flag deprecated methods such that the compiler gives a warning, for compilers
5948   which support such a feature (most notably GCC >= 3.1).
5949
5950 * Correct typo in name of definition of function xapian_revision().
5951
5952 testsuite:
5953
5954 * Updated uses of deprecated methods in the testsuite.
5955
5956 build system:
5957
5958 * xapian-config: Set exec_prefix and prefix at top of script so that
5959   xapian-config works after xapian-core is installed.
5960
5961 documentation:
5962
5963 * Add documentation comment for Enquire::set_sort_by_value_then_relevance().
5964
5965 * README: Add pointer to HACKING.  Change "CVS access" to "SVN access".
5966
5967 * PLATFORMS: Updated from tinderbox.
5968
5969 * COPYING: Update second occurrence of old FSF address.
5970
5971 Xapian-core 0.9.3 (2006-02-16):
5972
5973 API:
5974
5975 * Added 4 functions to report version information for the library version being
5976   used (which may not be the same as that compiled against if shared libraries
5977   are in use):  xapian_version_string(), xapian_major_version(),
5978   xapian_minor_version(), xapian_revision().
5979
5980 * Xapian::QueryParser:
5981
5982   + Fix handling of "+" terms in a query when the default query operator is
5983     AND.  Added regression test for this.
5984
5985   + Added "AND NOT" as a synonym for "NOT".  Added feature tests for this.
5986
5987 * Fix prototype for ESet::operator[] to take parameter of type termcount
5988   instead of doccount (doccount and termcount are both typedefs to the same
5989   type so this really just makes the prototype more consistent).
5990
5991 * Xapian::Stem: Check for malloc and calloc failing to allocate memory and
5992   throw an exception.  Richard has fixed this upstream in snowball, so this is
5993   a temporary fix until we import a new version of snowball.
5994
5995 * Xapian::Database: Trying to open a database for reading which doesn't exist
5996   now fails with DatabaseOpeningError instead of FeatureUnavailableError.
5997   Added regression test for this.
5998
5999 * Add Stopper::get_description() and SimpleStopper::get_description().
6000
6001 testsuite:
6002
6003 * Fixed testsuite harness to work with valgrind on 64 bit platforms.
6004
6005 * Merged the "running tests" section of docs/tests.html into the similar
6006   section in HACKING, and make docs/tests.html refer the reader to HACKING for
6007   more information.
6008
6009 * Tidied and enhanced environmental variables which the test suite harness
6010   recongnises:
6011
6012   + OM_TEST_BACKEND: Removed support since the "-b" switch to apitest allows
6013     you control which backend is used, making OM_TEST_BACKEND pretty much
6014     redundant.
6015
6016   + XAPIAN_SIG_DFL: Renamed to XAPIAN_TESTSUITE_SIG_DFL.
6017
6018   + XAPIAN_TESTSUITE_OUTPUT: New environmental variable to control use of
6019     ANSI colour escape sequences in test output (set to "plain" to disable
6020     them, unset, empty, or "auto" to check if stdout is a tty, or anything
6021     else to force colour).
6022
6023 flint backend:
6024
6025 * xapian-compact: Added "--multipass" option to merge postlists in pairs or
6026   triples until all are merged.  Generally this is faster than an N-way merge,
6027   but it does require more disk space for temporary files so it's not the
6028   default.
6029
6030 quartz backend:
6031
6032 * quartzcheck: If the database is too broken to open, emit a warning message
6033   and bump the error count.
6034
6035 build system:
6036
6037 * Now generate snapshots and releases with automake 1.9.6 (was 1.9.5) and
6038   libtool 1.5.22 (was 1.5.18).
6039
6040 * configure: If not cross-compiling, try to actually run a test program built
6041   with the C++ compiler, not just link one.
6042
6043 * configure: Fix to actually skip the check for valgrind if VALGRIND is set to
6044   an empty value.
6045
6046 * configure: Add sanity check for MS Windows that "find" is Unix-like find, not
6047   MSDOS-like.
6048
6049 * Fix conditional compilation of flint backend - it was being disabled when
6050   quartz was, not when flint was supposed to be.
6051
6052 documentation:
6053
6054 * INSTALL,README: Updated.
6055
6056 * Give pointer to replacements for the deprecated Enquire sorting methods
6057   in the doxygen collated documentation.
6058
6059 * PLATFORMS: Added success reports for ppc64 linux and Fedora Core 4.  Updated
6060   from the tinderbox.
6061
6062 * HACKING: Note platforms valgrind now has solid support for; Improve
6063   phrasing in a few places.
6064
6065 * Upgrade to using doxygen 1.4.6 for generating API documentation.
6066
6067 * Change title of the "full source" documentation to "Internal Source
6068   Documentation" rather than "Full source documentation" to make it
6069   clearer it's only useful if you want to modify Xapian itself.
6070
6071 * Fix documentation comments for the values of QueryParser::feature_flag so
6072   doxygen actually pulls out the documentation for them.  Add documentation for
6073   the parameters of QueryParser::parse_query().
6074
6075 * queryparser.html: Document wildcards.
6076
6077 portability:
6078
6079 * Fix compilation with GCC 4.0.1 and later (need to forward declare class
6080   InMemoryDatabase) (bug #69).
6081
6082 * Fix compilation under cygwin (broken in 0.9.2).
6083
6084 * Don't pass NULL for the second parameter of execl() - the Linux man page
6085   says execl takes "one or more pointers to null-terminated strings".  Also
6086   cast the NULL to (void*) to avoid "missing sentinel" warning from GCC4.
6087
6088 * Use snprintf instead of sprintf where available (we were attempting to
6089   do this in some places before, but the configure test was broken so
6090   sprintf was always being used).
6091
6092 * Enable more warnings under aCC and fix minor issues highlighted.  Suppress
6093   "Entire translation unit was empty" warning which isn't useful to us.
6094
6095 * Write top-bit set characters in the source using \xXX notation to avoid
6096   warnings from Intel's C++ compiler.
6097
6098 * configure: TYPE_SOCKLEN_T fails hard, so only run it if we've successfully
6099   run other socket tests.
6100
6101 * queryparser/accentnormalisingitor.h: #include <limits.h> for CHAR_BIT.
6102
6103 * bin/xapian-compact.cc: Fix printf type mismatch on 64 bit platforms.
6104
6105 * Replace pair<bool, string> with a simple class BoolAndString - the pair
6106   results in a 4328 byte symbol on HP-UX which gets truncated (to 4000 bytes).
6107   Most likely this is harmless, but it causes a warning.
6108
6109 * configure: Disable flint backend by default if building for djgpp or msdos.
6110
6111 * xapian-config: Previously when linking without libtool we've always thrown
6112   in dependency_libs, even though only some platforms need it (because it's
6113   generally pretty harmless).  However some Linux distros have an unhelpful
6114   policy of not packaging .la files, so libxapian.la isn't available to
6115   extract dependency_libs from.  Linux is a platform which doesn't require
6116   dependency_libs to be explicitly linked, so extend xapian-config to not
6117   pull in dependency_libs if libtool's link_all_deplibs_CXX=no.
6118
6119 * xapian-config: If the current platform needs dependency_libs and
6120   libxapian.la's dependency_libs contains another .la file, transform it into a
6121   pair of -L and -l options, and recursively expand its dependency_libs (if
6122   any).
6123
6124 * Don't pass functions with C++ linkage to places wanting pointers to functions
6125   with C linkage.  So far this has worked for us, but it causes warnings with
6126   some compilers, and may not be portable.
6127
6128 * Compaq C++ 7.1 doesn't suffer from the problem which previously prevented
6129   it from building Xapian.  This release includes workarounds for some
6130   oddities with errno.h support in this compiler, but currently the build
6131   fails when trying to link a binary with the library.
6132
6133 packaging:
6134
6135 * RPM: Invoke %setup correctly in xapian.spec.
6136
6137 debug code:
6138
6139 * Add missing '#include <iostream>' when TIMING_PATCH is defined.
6140
6141 Xapian-core 0.9.2 (2005-07-15):
6142
6143 API:
6144
6145 * QueryParser:
6146
6147   + Added optional "flags" argument to parse_query method.
6148
6149   + Add flag FLAG_BOOLEAN_ANY_CASE which tells the QueryParser that boolean
6150     operators such as "AND", "OR", and "NEAR" should be recognised even if
6151     they aren't fully capitalised (so "and", "And", "aNd", etc will work too).
6152
6153   + Add flag FLAG_WILDCARD which tells the QueryParser to allow right
6154     truncation e.g. "xap*".
6155
6156   + Fixed to handle "-site:microsoft.com" where site is a boolean prefix.
6157     Added testcases for this.
6158
6159 testsuite:
6160
6161 * The test harness was incorrectly creating a quartz database when a flint one
6162   was requested, which meant tests weren't being run against flint and so it
6163   had bugs rendering it pretty much unusable.
6164
6165 * Added regression test longpositionlist1 (to check encoding/decoding a long
6166   position list, which flint had problems with).
6167
6168 flint backend:
6169
6170 * Bumped format version number.
6171
6172 * Added new "xapian-compact" program which can compact and merge flint
6173   databases in a similar way to how quartzcompact does for quartz databases.
6174
6175 * Fixed to auto-detect database type when opening an existing Flint database
6176   as a WritableDatabase.
6177
6178 * The code to encode the position list size, first entry, and last entry
6179   didn't match the code to decode them!  Reworked both to match, using a
6180   slightly more compact encoding.
6181
6182 * We were failing to append "DB" to the path when opening a table for reading.
6183
6184 * Rewrite of FlintAllTermsList with several fewer member variables.  The
6185   rewrite fixes a bug too - the old version wasn't ignoring the metainfo
6186   entry which is now in the postlist table.
6187
6188 * It seems we need to explicitly kill the child process used for locking.
6189   Otherwise when we have two databases locked just closing the connection
6190   doesn't cause the child to die.  I don't understand why it's needed, but this
6191   fix is at least clean.
6192
6193 quartz backend:
6194
6195 * quartzcompact: Fix mis-repacking of keys in positionlist table when merging
6196   several databases.
6197
6198 * Disable assertion in allterms iteration which is incorrect in a corner case.
6199   This is only a problem if a termname contains zero bytes and you're using a
6200   debug build.  Add regression test test_specialterms2.
6201
6202 remote backend:
6203
6204 * Implement sorting on a value with the remote backend.
6205
6206 build system:
6207
6208 * Pass automake options to AM_INIT_AUTOMAKE rather than specifying them in
6209   Makefile.am.  This way, the version requirements for autoconf and automake
6210   are stated close together.
6211
6212 * configure: -Wshadow causes false positives with GCC 3.0.4, so only enable it
6213   for 3.1 and up.
6214
6215 * configure: Eliminate use of "ln -s" when generating include/xapian/version.h
6216   since it seems to cause problems on Solaris in some setups and isn't really
6217   necessary.
6218
6219 * Add dependency mechanism so version.h gets regenerated when the template is
6220   changed.
6221
6222 * configure: Check for spaces in build directory, source directory, or install
6223   prefix and die with a helpful message.
6224
6225 * Add dependency to generate queryparser_token.h.
6226
6227 * Eliminated TOP_SRCDIR and TOP_BUILDDIR - it's better to just use top_srcdir
6228   and top_builddir directly.
6229
6230 * configure: Generate the list of source files to feed to doxygen by inspecting
6231   all the Makefile.am files prior to running autoreconf rather than by using
6232   "find" when the user runs ./configure.  This speeds up configure, avoids
6233   generating docs for random .cc and .h files which aren't part of xapian-core,
6234   and avoids problems with picking up FIND.EXE on MS Windows.
6235
6236 documentation:
6237
6238 * Expanded explanation of the "descending docid with boolean weighting" trick
6239   for fast date ordered searching in Enquire::set_docid_order() API docs.
6240
6241 * docs/intro_ir.html: Citeseer has moved, so update link.
6242
6243 * testsuite/testsuite.cc: Update URL for valgrind FAQ in comment.
6244
6245 * COPYING: Update FSF address.
6246
6247 * HACKING: Minor updates to release checklist.
6248
6249 portability:
6250
6251 * Assorted tweaks towards allowing compilation with MSVC.
6252
6253 packaging:
6254
6255 * xapian.spec.in: Package xapian-compact.
6256
6257 Xapian-core 0.9.1 (2005-06-06):
6258
6259 API:
6260
6261 * Fix SEGV on get_terms_begin() on an empty Query object.  This was causing
6262   a SEGV in Omega with an empty query.
6263
6264 * Put Query::get_terms_end() inline in header.
6265
6266 flint backend:
6267
6268 * Added the new "flint" backend, which starts out as a copy of the quartz
6269   backend plus some modifications and replacements.  When creating a database
6270   without a specified backend, quartz is still used unless the environmental
6271   variable XAPIAN_PREFER_FLINT is set to a non-empty value.
6272
6273 * apitest now runs tests on flint as well as the other backends.
6274
6275 * Removed undocumented (and hence the little used) quartz "log" feature.
6276
6277 * Implement new fork+fcntl+exec based locking (for Unix) and CreateFile based
6278   locking (for Windows - currently untested).
6279
6280 * Move the special key/tag pair holding the total document length and doc id
6281   high water mark from the record table to the postlist table.  This means that
6282   when appending documents, the insertion point will now always be at the end
6283   of the record table which is more efficient.  We need to jump around the
6284   postlist table to merge postings in anyway.
6285
6286 * Changed metafile magic to be different from quartz, and make the metafile
6287   version a datestamp which we'll change each time the format changes.
6288
6289 * Check the return value of close() when writing the metafile.
6290
6291 * Flint position list table now stores entries using interpolative coding
6292   (which is significantly more compact).
6293
6294 quartz backend:
6295
6296 * quartzcheck: Fixed corner case where you couldn't check a single Btree table
6297   which was just the DB and baseA/baseB files in a directory (Xapian doesn't
6298   produce anything like this, but btreetest does while unit testing the
6299   Btree code).
6300
6301 build system:
6302
6303 * Releases are now created using libtool 1.5.18 and automake 1.9.5.
6304
6305 * configure: Pass more -W flags to g++ (including -Wundef which caught the
6306   getopt problem fixed in this release).  Fixed new GCC warnings from these new
6307   flags.
6308
6309 * Fixed a lingering DOXYGEN_HAVE_DOT reference.
6310
6311 * Fixed accidentally pruned #define which meant that getopt code was being
6312   included even on systems which use glibc (on such systems, we should use
6313   the glibc copy of the code instead).
6314
6315 * queryparser/queryparser.lemony: Add missing '#include <config.h>'.
6316
6317 documentation:
6318
6319 * Added missing documentation comments for a QueryParser methods added in
6320   0.9.0.
6321
6322 * docs/quartzdesign.html: Removed warning that quartz is still in development.
6323
6324 * PLATFORMS: Updated from tinderbox.
6325
6326 * configure: Describe CC_FOR_BUILD in configure --help output.
6327
6328 * HACKING: Updated release instructions to refer to SVN, and note that release
6329   tarballs are now built specially rather than being copies of snapshots.
6330   Update information about the SVN tag name to use for debian files.
6331
6332 * HACKING: Add "email Fabrice" to the release checklist so that RPM
6333   spec files don't lag behind.
6334
6335 * Fixed a few spelling mistakes.
6336
6337 packaging:
6338
6339 * xapian.spec: Remove bogus %setup line left over from when we packaged
6340   xapian-core and xapian-examples together from separate tarballs.
6341
6342 debug code:
6343
6344 * api/omqueryinternal.cc: Fixed compilation with --enable-debug.
6345
6346 * common/omdebug.h: Replace C style cast with static_cast<> which reveals that
6347   we were discarding const (harmlessly though).
6348
6349 Xapian-core 0.9.0 (2005-05-13):
6350
6351 API:
6352
6353 * Query objects really need to be immutable after construction (otherwise we
6354   need a copy-on-write mechanism).  To achieve this the following API changes
6355   were required:
6356
6357   + Remove Query::set_length() in favour of an optional length
6358     parameter to Enquire::set_query().
6359
6360   + Eliminated Query::set_elite_set_size() in favour of optional parameter
6361     to constructor.
6362
6363   + Eliminated Query::set_window() in favour of an optional parameter to the
6364     constructor.
6365
6366 * Removed OP_WEIGHT_CUTOFF, since it doesn't actually seem to add useful
6367   functionality over using Enquire::set_cutoff().
6368
6369 * MSet::max_size() (which only exists so that MSet is an STL container) now
6370   returns MSet::size() and is inlined from the header.
6371
6372 * Added ESet::max_size() (for STL compatibility).
6373
6374 * Fixed Xapian::RSet to have the same "it's a handle" copy semantics as most of
6375   the other classes.
6376
6377 * Rewritten QueryParser class:
6378
6379   + Uses Lemon instead of Bison to generate the parser, which enables us to
6380     stop using static data, so this class is at last reentrant.
6381
6382   + QueryParser now uses a PIMPL style with reference counted internals like
6383     most of the other Xapian classes.
6384
6385   + Direct access to member variables has gone, which unfortunately forces an
6386     API change (but this fixes bug #39).  Instead of accessing
6387     QueryParser::termlist member variable, iterate over terms using
6388     Query::get_terms_begin() and get_terms_end() on the returned Query object.
6389     Direct access to stoplist is replaced by QueryParser::get_stoplist_begin()
6390     and get_stoplist_end(); and to unstem by get_unstem_begin() and
6391     get_unstem_end().
6392
6393   + The rewrite parses many real world examples better than the old version.
6394
6395   + Now allow searches for C#, etc.  If a database has been set, for this and +
6396     and - suffixes, check if the term actually exists, and if not, ignore the
6397     suffix if the unsuffixed term exists.
6398
6399   + Added QueryParser::get_description() method (not very descriptive yet!)
6400
6401   + Added backward compatibility wrapper for old version of
6402     QueryParser::set_stemming_options().
6403
6404   + xapian.h now automatically includes xapian/queryparser.h.  Directly
6405     including xapian/queryparser.h will continue to work for now, but is
6406     deprecated.
6407
6408   + QueryParser::parse_query() was failing to clear termlist and unstem
6409     - the rewrite fixes this.
6410
6411   + New QueryParser parses "term prefix:(term2 term3)" correctly.
6412
6413 * Added Xapian::SimpleStopper which just stops terms specified by a pair of
6414   iterators.  This should be sufficient for the majority of uses.
6415
6416 * Tidied up the Enquire sorting API and added ability to reverse sort on a
6417   value.  Removed sort_bands support.
6418
6419 * Enquire::get_description() improved.
6420
6421 * Methods which return an end iterator where the internals are just NULL are
6422   now inline in the header for efficiency.  Should we ever need to change an
6423   implementation, we can easily move methods back into the library and bump the
6424   library version suitably.
6425
6426 * Added Stem::operator() as preferred alternative to Stem::stem_word().
6427
6428 * Simplified Stem internal design by restructuring to eliminate a few internal
6429   methods.
6430
6431 * BM25Weight: Avoid fetching document length if we're simply going to multiply
6432   it by zero!
6433
6434 testsuite:
6435
6436 * Fixed TEST_EQUAL_DOUBLE to use DBL_EPSILON correctly.
6437
6438 * Rewrite of index_utils test harness code, removing unused and unusual
6439   features.  Data files for tests are now easier to write.  These changes
6440   also fix the bug that ^x didn't actually decode hex values correctly.
6441
6442 * tests/testdata/etext.txt: Stripped carriage returns.
6443
6444 * apitest: Extended stemlang1 to check that trying to create
6445   a stemmer for a non-existent language throws InvalidArgumentError.
6446
6447 * queryparsertest:
6448
6449   + Moved into tests/ subdirectory.
6450
6451   + Reworked to use the standard testsuite harness.
6452
6453   + Added tests for new features in the rewritten QueryParser.
6454
6455 quartz backend:
6456
6457 * quartzcheck: Now checks the structure of all the tables, not
6458   just the postlist table, and cross-checks doclen values between
6459   termlist and postlist tables.  Recognises "--help" option.  Should
6460   now continue after an error (typically it would crash before), and
6461   counts the number of errors found.  Now exits with non-zero status
6462   if any errors were found.  More readable output.
6463
6464 * quartzcompact: Extended to allow merging several quartz
6465   databases to produce a single compact quartz database.  This
6466   allows for faster building - simple index in chunks, then merge
6467   the chunks.
6468
6469 * quartzcompact: Made full compaction a tiny bit more compact.
6470
6471 * quartzcompact: Added "fuller compaction" mode, which ignores the usual "at
6472   least 4 items per block" rule.  This achieves slightly tighter compaction,
6473   though it's probably not advisable to use this option if you plan to update
6474   the compacted database.
6475
6476 * Improved compaction by a few % in non-full case.  Tighter bound on amount of
6477   memory to reserve to read the tag into.
6478
6479 * Fix skip_to on an allterms TermIterator to set the current term when the
6480   skip_to-ed term is in the database.  Add regression test for this
6481   (allterms5).
6482
6483 * Values are stored in sorted order so we can stop unpacking the list once we
6484   get to one after the one we're looking for (in the case where the one we're
6485   looking for doesn't exist).
6486
6487 build system:
6488
6489 * configure: Check that the C++ compiler can actually link a program.
6490   AC_LANG_CXX doesn't, and if it can't find a C++ compiler it'll just return
6491   "g++" which just leads to a later configure test failing in a confusing way.
6492
6493 * configure: corrected configure output of "none known for yes" or "none known
6494   for no" to "none known for g++-3.2" or similar.
6495
6496 * include/xapian/version.h: Define XAPIAN_HAS_xxx_BACKEND for each backend
6497   which is enabled.  The bindings need this, and user code might find it useful
6498   too.
6499
6500 * include/xapian/database.h: Don't declare the backend factory functions if the
6501   corresponding backend has been disabled.  This means that trying to use a
6502   disabled backend will be caught at compile time rather than link time.
6503
6504 * configure: Enhanced valgrind test to (a) see if --tool=memcheck
6505   is needed and (b) see if valgrind actually works (we don't want to
6506   try to use an x86 valgrind on an x86_64 box).
6507
6508 * configure: Suppress 2 Intel C++ warnings which we can't easily code around,
6509   and enable -Werror automatically with --enable-maintainer-mode.
6510
6511 * Clearer make rules for building Postscript doxygen docs.
6512
6513 * Removed some no longer used code.
6514
6515 * Moved a number of method definitions out of headers because they are virtual,
6516   or too large to be sensible candidates for inlining.
6517
6518 * Eliminated the extra library for the queryparser - it's tiny compared to the
6519   main library and having it around just complicates things.
6520
6521 * configure: We no longer need Bison, but we do need CC_FOR_BUILD to compile
6522   Lemon with.
6523
6524 * Snapshot generator now appends _svn6789 or similar to the version string.
6525   Adjusted configure and XO_LIB_XAPIAN macro to take this into account.
6526
6527 * configure: If any tools needed for documentation are missing
6528   and we're in maintainer mode, die with a suitable error in
6529   configure rather than with strange errors when building the
6530   documentation.
6531
6532 * docs/Makefile.am: Explicitly set the pool_size for latex, because we
6533   now seem to overflow the default setting on some systems.
6534
6535 * docs/Makefile.am: Use $(MAKE) instead of make.
6536
6537 documentation:
6538
6539 * Numerous improvements to documentation comments.  Added documentation
6540   comments for QueryParser class.
6541
6542 * HACKING: Added better description of how reference-counted API
6543   classes are structured.
6544
6545 * HACKING: Note that '#include <limits>' isn't supported by GCC 2.95,
6546   and other assorted minor tweaks.
6547
6548 * HACKING: Note how to disable use of VALGRIND on the make check
6549   command line, or when using runtest directly.
6550
6551 * Updated all documentation mentions of CVS to talk about Subversion
6552   instead.
6553
6554 * PLATFORMS: Updated from tinderbox and other sources.
6555
6556 * PLATFORMS: Added minimal testcase which fails to compile with
6557   Compaq's C++ compiler (cxx).
6558
6559 * INSTALL,README: Updated.
6560
6561 * docs/queryparser.html: Note that + and - work on phrases and
6562   bracketed expressions.
6563
6564 * docs/intro_ir.html: Corrected two errors.
6565
6566 * docs/stemming.html: Stemming appears to be applicable to Japanese
6567   so don't say it isn't!
6568
6569 examples:
6570
6571 * Moved xapian-examples module to examples subdirectory of xapian-core.
6572
6573 * quest: Added stopword handling.
6574
6575 portability:
6576
6577 * configure: autoconf identifies Intel's C++ compiler as GCC, so probe for
6578   which we actually have.
6579
6580 * Xapian will now compile cleanly with Intel C++ 8.1 on ia64 Linux and
6581   on x86 Linux.
6582
6583 * backends/quartz/btree.cc: Fixed GCC compilation warning.
6584
6585 * tests/api_db.cc: Fixed warning from Sun's C++ compiler.
6586
6587 * configure: Automatically enable ANSI C++ mode for SGI's compiler
6588   with '-LANG:std'; check that any automatically determined flags
6589   for ANSI C++ mode actually allow us to compile a trivial program
6590   - if they don't it probably means the compiler isn't the one we
6591   were expecting, but one installed with the same name, so we now
6592   drop the flags in this case.
6593
6594 * The compile on IRIX with SGI compiler is now warning free, apart from two
6595   "unused variable" warnings in Snowball generated code.
6596
6597 * On WIN32, don't define NOMINMAX if it is already defined.
6598
6599 packaging:
6600
6601 * xapian.spec: Don't say "%makeinstall" in a comment since rpm
6602   tries to expand it and explodes.
6603
6604 * xapian.spec: '/usr/share' -> '%{_datadir}'.
6605
6606 * xapian.spec: Put the .so in the -devel package (it's only useful
6607   for linking to - the .so.* files are all that's needed at runtime).
6608
6609 debug code:
6610
6611 * net/socketserver.cc: Fixed typo in debug code.
6612
6613 Xapian-core 0.8.5 (2004-12-23):
6614
6615 quartz backend:
6616
6617 * quartzcompact: When full_compaction is enabled, don't fill the last few bytes
6618   of a block if that would mean we needed an extra item and the overhead for
6619   that item would use up more of the next block than we save.  This reduces the
6620   table size after full compaction by up to 0.2% in my tests!
6621
6622 * quartzcompact: Tables sizes will always be a whole number of Kbytes, since
6623   the blocksize is, so report the size in K.  Also report the change in size as
6624   well as the before and after sizes.
6625
6626 * quartzcompact: Added missing '#include <config.h>' so that largefile support
6627   is enabled when we call stat() and we report compression statistics for
6628   tables > 2G.
6629
6630 * quartzcompact: Added --no-full / -n option to disable full compaction.  This
6631   may be useful if you want to update the database after compacting it (need to
6632   test to see if this option is actually useful).
6633
6634 * Renamed Btree::compress() to Btree::compact() for consistency with
6635   "full_compaction" and "quartzcompact".  Also, "compress" is confusing since
6636   we use that term in the zlib patch.
6637
6638 build system:
6639
6640 * xapian-config: Fixed --libs output to not include libxapian.la.
6641
6642 * Added missing '#include <config.h>' to various .cc files (the omissions were
6643   probably harmless, but config.h should be included as the first thing any
6644   source file does).
6645
6646 documentation:
6647
6648 * Minor updates.
6649
6650 packaging:
6651
6652 * RPM spec file: %makeinstall puts the wrong paths in the .la files so use
6653   "make DESTDIR=... install" instead.
6654
6655 debug code:
6656
6657 * Fixed to build with AssertParanoid enabled.
6658
6659 Xapian-core 0.8.4 (2004-12-08):
6660
6661 API:
6662
6663 * Added constructors to Database and WritableDatabase which fulfil the role
6664   that the Auto::open() factory functions currently do.  Auto::open() is
6665   now deprecated.
6666
6667 * Removed the ability to write a Xapian object to an ostream directly, as
6668   it's little used and potentially dangerous ('cout << mset[i];' will
6669   compile, but you almost certainly meant 'cout << *mset[i];').  You can
6670   get the old effect by writing 'cout << obj->get_description();' instead
6671   of 'cout << obj;'.  Note that including xapian.h no longer pulls in
6672   fstream, which code may have been implicitly relying on - if this is
6673   a problem add '#include <fstream>' after '#include <xapian.h>'.
6674
6675 * QueryParser: Be smarter about when to add a ':' when adding a term prefix.
6676
6677 * BoolWeight::unserialise() now returns BoolWeight*, and similarly for
6678   TradWeight and BM25Weight.  BoolWeight::clone() now returns BoolWeight *.
6679
6680 * If a database contains no positional information, change NEAR and PHRASE
6681   queries into AND queries (as otherwise they'd return no matches at all)
6682   (bug #56).  Added feature test phraseorneartoand1.
6683
6684 * Renamed BM25 parameters to match standard naming in papers and elsewhere
6685   (A->k3, B->k1, C->k2, D->b), eliminated the extra factor of 2 which our C
6686   had, and reordered the parameters to k1, k2, k3.  This is an incompatible API
6687   change for BM25Weight(), so if you are using custom parameters for BM25
6688   you'll need to update your code.
6689
6690 * During query expansion, if we estimate the term frequency, ensure it has a
6691   sane value (>= r and <= N - R + r) rather than bodging around the problem
6692   later on.
6693
6694 * TradWeight, BM25Weight: termfreq is always exact for matching (we only
6695   approximate it for query expansion) so replace code to work around bad
6696   approximations with Assert() to make sure this never happens.
6697
6698 testsuite:
6699
6700 * runtest: Enhanced to allow it to run test programs under valgrind and other
6701   tools (gdb was already supported).
6702
6703 * runtest: now works with valgrind 2.1.2 and later (valgrind's --logfile-fd
6704   option was renamed to --log-fd).
6705
6706 * runtest: Allow VALGRIND environmental variable to override the value we got
6707   from configure.
6708
6709 * Added a dependency so "make check" regenerates runtest if necessary.
6710
6711 * The test programs now point the user to the runtest script if srcdir can't
6712   be guessed.  And they no longer look for the test program in the tests
6713   subdirectory of the current directory.
6714
6715 * btreetest: Fixed memory leaks in test_cursor1 (the testcase itself was
6716   causing the leak, not the library).
6717
6718 * apitest: Fixed mset_range_is_same() and mset_range_is_same_weights() helper
6719   functions which were only comparing the first item in the range.  Thankfully
6720   the tests still all pass so this wasn't hiding any bugs.
6721
6722 * apitest: A modified version of changequery1 fails - the bug is obscure and
6723   subtle, and the fix is tricky so set the modified test to SKIP for now.
6724
6725 * apitest: Added test_weight1 which tests the built-in Xapian::Weight
6726   subclasses and test_userweight1 which tests user defined weighting schemes
6727   (bug#8).
6728
6729 * quartztest: Test with DB_CREATE_OR_OPEN in writelock1.
6730
6731 quartz backend:
6732
6733 * An interrupted update could cause any further updates to fail with "New
6734   revision too low" because the new revision was being calculated incorrectly -
6735   fixed (bug#55).
6736
6737 * Fixed Bcursor::del() which didn't always leave the cursor on the next item
6738   like it should.  This may have been causing problems when trying to remove
6739   the last references to a particular term.
6740
6741 * Fixed ultra-obscure bug in the code which finds a key suitable to
6742   discriminating between two blocks in a B-tree branch (discovered by reading
6743   the code).  Comparing the keys didn't consider the length of the second, so
6744   it is possible the code would miscompare.  But in reality this is extremely
6745   unlikely to happen, and even then would probably just mean that the
6746   discriminating key wouldn't be as short as it could be (wasting a few bytes
6747   but otherwise harmless).
6748
6749 * If we're removing a posting list entirely, often there will only be one
6750   chunk, so avoid creating a Bcursor in this case.
6751
6752 * Simplified Btree::compare_keys() by removing the last case which was dead
6753   code as it was covered by an earlier case.
6754
6755 * Check that any user specified block size is a power of 2.  If the block
6756   size passed is invalid, use the default of 8192 rather than throwing an
6757   exception.
6758
6759 * Started to refactor the Btree manager by introducing Item and Key classes
6760   which take care of handling the on-disk format, and eliminated duplicated
6761   tag reading code in Btree and Bcursor.  These changes will pave the way for
6762   improvements to the on disk format.
6763
6764 * Applied the Quartz "DANGEROUS" patch, but disabled for now.  This way it
6765   won't keep being broken by changes to the code.
6766
6767 * quartzcompact: Added --help and --version; Check that the source path and
6768   desitination path aren't the same; Report each table name when we start
6769   compacting it, and some simple stats on the compaction achieved when we
6770   finish.
6771
6772 muscat36 backend:
6773
6774 * Removed a default parameter value from one variant of
6775   Xapian::Muscat36::open_db() so that there's only one candidate for
6776   open_db(string).
6777
6778 build system:
6779
6780 * xapian-config: If flags are needed to select ANSI mode with the current
6781   compiler, then make xapian-config --cxxflags include them so that Xapian
6782   users don't have to jump through the same hoops we do.
6783
6784 * xapian-config: Added --swigflags option for use with SWIG.
6785
6786 * XO_LIB_XAPIAN now passes ac_top_srcdir to xapian-config which uses it
6787   (if provided) to say "configure.ac" or "configure.in" rather than
6788   "configure.in (or configure.ac)" in the "Add AC_PROG_LIBTOOL"
6789   error message.
6790
6791 * Cleaned up the build system in a few places.
6792
6793 * Removed a few totally unneeded header includes.
6794
6795 * Moved a number of functions and methods out of headers because they're not
6796   good inlining candidates (too big or virtual methods).
6797
6798 * Changed C style casts to C++ style.  The syntax is ugly, but they do make the
6799   intent clearer which is a good thing.  Note this as a coding style guideline
6800   in HACKING.
6801
6802 * configure.ac: Automatically add -Werror to CFLAGS and CXXFLAGS if
6803   maintainer mode is enabled and we're using GCC3 or newer.  Don't do
6804   this for older GCCs as GCC 2.95 issues spurious warnings.
6805
6806 * Reworked how include/xapian/version.h is generated so that it works
6807   better with compilers other than GCC, and with HP-UX sed.
6808
6809 * XAPIAN_VERSION is now a string (e.g. "0.8.4").
6810
6811 * Added new #define XAPIAN_REVISION (which is 4 for version 0.8.4).
6812
6813 documentation:
6814
6815 * docs/bm25.html,docs/intro_ir.html: Reworked to talk about Xapian
6816   rather than Muscat.  Also improved the appearance of the formulae.
6817
6818 * HACKING: Valgrind now supports x86 FreeBSD and PowerPC Linux.
6819
6820 * Documented parameters of Enquire::register_match_decider().
6821
6822 * We now use doxygen 1.3.8 to build documentation for snapshots and releases.
6823
6824 * PLATFORMS: Updated from the tinderbox (which now runs builds on machines
6825   available in HP's testdrive scheme) and other assorted reports.
6826
6827 * PLATFORMS: Removed reports from versions prior to 0.7.0.  So much
6828   has changed that these are of little value.
6829
6830 * docs/scalability.html: Added note warning about benchmarking from cold.
6831
6832 * Assorted other minor documentation improvements.
6833
6834 portability:
6835
6836 * configure.ac: Improved snprintf configure test to actually
6837   check that it works (older implementations may have different
6838   semantics for the return value, and at least one ignores the length
6839   restriction entirely!)
6840
6841 * Reworked the GNU getopt source we use so that the header is clean and
6842   suitable for use from a reasonably ISO-conforming C++ compiler instead of
6843   being full of cruft for working around quirky C compilers which C++ compilers
6844   tend to stumble over.
6845
6846 * Use SOCKLEN_T for the type we need to pass to various socket calls, since
6847   HPUX defines socklen_t yet wants int in those calls.  Reworked the
6848   TYPE_SOCKLEN_T test we use.
6849
6850 * On Windows, we want winsock2.h instead of sys/socket.h.  Mingw doesn't seem
6851   to even have the latter, so I think previously we've been compiling by
6852   picking one up from somewhere random!
6853
6854 * Change the small number of C sources we have to be C++ so we can compile
6855   everything with the C++ compiler.  This way we don't need to worry about
6856   configure choosing a mismatching pair of compilers, or about whether
6857   configure tests with the C compiler don't apply to the C++ compiler, or vice
6858   versa.
6859
6860 * Compiles and passes testsuite with HP's aCC (we have to compile in
6861   ANSI mode, so we automatically add -AA to CXXFLAGS).
6862
6863 * If the link test detects pread and pwrite are present, get configure to try
6864   out prototypes for pread and pwrite.  This is much cleaner than trying to
6865   find the right combination of preprocessor defines to get each platform's
6866   system headers to provide prototypes.
6867
6868 * configure: Disable probing for pread/pwrite on HP-UX as they're present but
6869   don't work when LFS (Large File Support) is enabled, and we definitely want
6870   LFS.
6871
6872 * Fixed some warnings from Sun's C++ compiler.
6873
6874 * Provide our own C_isalpha(), etc replacements for isalpha(), etc
6875   which always work in the C locale and avoid signed char problems.
6876
6877 * For mingw/cygwin, pass -no-undefined when linking libxapianqueryparser.la
6878   so libtool builds a shared library.  Also pass the magic linker flag
6879   -Wl,--enable-runtime-pseudo-reloc if configure has determined it is needed.
6880
6881 * For cygwin, use the underlying MoveFile API call for locking, as link()
6882   doesn't work on FAT partitions.  And don't rely on HAVE_LINK to control
6883   whether we use link() otherwise - if the configure test somehow misfires, a
6884   compilation error is better than using rename() on Unix as that would cause a
6885   second writer to smash the lock of the first.
6886
6887 * Closer to building with Compaq C++ - add "-std strict_ansi" to CXXFLAGS, and
6888   tweaked the code in several places.  It currently dies trying to compile
6889   the PIMPL smart pointer template code which looks hard to fix.
6890
6891 debug code:
6892
6893 * HACKING: Document that %% in XAPIAN_DEBUG_LOG is substituted with
6894   the process-id, and that setting XAPIAN_DEBUG_FLAGS to -1 enables
6895   all debug messages.
6896
6897 * Removed compatibility code for checking environment variables OM_DEBUG_FILE
6898   and OM_DEBUG_TYPES.
6899
6900 Xapian-core 0.8.3 (2004-09-20):
6901
6902 API:
6903
6904 * Fixed bug which caused a segmentation fault or odd "Document not found"
6905   exceptions when new check_at_least parameter to Enquire::get_mset() was used
6906   and there weren't many matches (regression test checkatleast1).
6907
6908 remote backend:
6909
6910 * Renamed omtcpsrv to xapian-tcpsrv and omprogsrv to xapian-progsrv.
6911
6912 packaging:
6913
6914 * RPM packaging now has a separate package for the runtime libraries to
6915   allow 32 and 64 bit versions to be installed concurrently.
6916
6917 * RPM for xapian-core now includes binaries from xapian-examples.
6918
6919 debug code:
6920
6921 * Fixed to compile with debug tracing enabled.
6922
6923 Xapian-core 0.8.2 (2004-09-13):
6924
6925 API:
6926
6927 * Removed the compatibility layer which allowed programs written against the
6928   pre-0.7.0 API to be compiled.
6929
6930 * Added new ESet methods swap(), back() and operator[].
6931
6932 * Xapian::WritableDatabase::replace_document can now be used
6933   to add a document with a specific docid (to allow keeping docids
6934   in sync with numeric UIDs from another system).
6935
6936 * Added Xapian::WritableDatabase::replace_document and
6937   delete_document variants which take a unique id term name rather
6938   than a document id.
6939
6940 * Enquire::get_mset(): If a matchdecider is specified and no matches
6941   are requested, the lower bound on the number of matches must be 0
6942   (since the matchdecider could reject all the matches).
6943
6944 * Renamed Query::is_empty() to Query::empty() for consistency.  Keep
6945   Query::is_empty() for now as a deprecated alias.
6946
6947 * Enquire::set_sorting() now takes an optional third parameter which allows
6948   you to specify a sort by value, then relevance, then docid instead of
6949   by value then docid.
6950
6951 * Enquire::get_mset() now takes an optional "check_at_least" parameter
6952   which allows Omega's MIN_HITS functionality to be implemented in the matcher
6953   (where it can be done a bit more efficiently).
6954
6955 testsuite:
6956
6957 * Reworked quartztest's positionlist1 into a generic api test as apitest's
6958   poslist3.
6959
6960 * apitest: Reenabled allterms2, but with the iterator copying parts removed -
6961   TermIterator is an input_iterator so that part was invalid.
6962
6963 * Overhauled btreetest and quartztest - tests at the Btree level are now all
6964   in btreetest.  Those at the QuartzDatabase level are in quartztest.
6965
6966 * Split api_db.cc into 3 files as it has grown rather large.
6967
6968 * tests/runtest: Added support for easily running gdb on a test program,
6969   automatically sorting out srcdir and libtool.
6970
6971 quartz backend:
6972
6973 * Refactored the quartz backend code to reduce the number of layered classes
6974   and eliminate unnecessary buffering, reducing memory usage so that more
6975   posting list changes can be batched together (see next change) and database
6976   building can be done several times faster.
6977
6978 * Added tunable flush threshold - set XAPIAN_FLUSH_THRESHOLD=50000 to flush
6979   every 50000 documents.  The default is now every 10000 documents (was
6980   every 1000 documents previously).  The optimum value will most likely
6981   depend on your data and hardware.
6982
6983 * WritableDatabase::get_document() no longer forces pending changes to be
6984   flushed.  The document will read things lazily from the database, and that
6985   reading may trigger a forced flush).
6986
6987 * WritableDatabase::get_avlength() no longer forces pending changes to be
6988   flushed.  This means you can now search a modified WritableDatabase without
6989   causing a flush unless the search includes a term whose postlist has pending
6990   modifications.
6991
6992 * Reduced quartz postlist chunk threshold from "2048 or a few bytes more" to
6993   "2000 or a few bytes more" so that full size chunks won't get split by the
6994   Btree.
6995
6996 * Improved the "Db block overwritten" message.  The DatabaseCorruptError
6997   version now suggests multiple writers may be the cause, while the
6998   DatabaseModifiedError version uses less alarming wording and says to call
6999   Database::reopen().
7000
7001 * QuartzWritableDatabase now stores the total document length and the last
7002   docid itself rather than tallying added and removed document length and
7003   writing the last docid back every time a document is added.  This gives
7004   cleaner code and a small performance win.
7005
7006 * Make the first key null for blocks more than 1 away from the leaves.
7007   It saves disk space for a tiny CPU and RAM cost so is bound to be
7008   a win overall.
7009
7010 * matcher/localmatch.cc: Fixed problems handling termweights in queries with
7011   the same term repeated (bug #37) and added regression test (qterminfo2).
7012
7013 * Sped up iteration over all the terms in a database (QuartzCursor now only
7014   reads the tag from the Btree if asked to).
7015
7016 * Cancelling an operation is now implemented more efficiently.
7017
7018 inmemory backend:
7019
7020 * Fixed bugs with deleting a document while a PostingIterator over it is
7021   active.
7022
7023 muscat36 backend:
7024
7025 * Fixed to compile now that internal_end_session() has gone (broken in 0.8.1).
7026
7027 build system:
7028
7029 * Fixed to compile when configured with --disable-inmemory (bug #33).
7030
7031 * XO_LIB_XAPIAN now AC_SUBSTs XAPIAN_VERSION so your application's build
7032   system can easily check for a particular version of Xapian.
7033
7034 * When compiling with GCC, we check that the compiler used to compile the
7035   library and the compiler used to compile the application have compatible
7036   C++ ABI versions.  Unfortunately GCC 3.1 incorrectly reports the same
7037   ABI version as GCC 3.0, so we now special case that test.
7038
7039 * Bumped the versions of the autotools we require for bootstrapping, and
7040   updated the documentation of these in the HACKING document.
7041
7042 * Quote macro names to fix warnings from newer aclocal.
7043
7044 documentation:
7045
7046 * Improved API documentation for Xapian::WritableDatabase::replace_document and
7047   delete_document.
7048
7049 * Added documentation comments for MSet methods size(), empty(), swap(),
7050   begin(), end(), back().
7051
7052 * Removed bogus documentation comments saying that some Enquire methods can
7053   throw DatabaseOpeningError.
7054
7055 * Updated quartz design docs to reflect recent changes.  Also pulled
7056   out the Btree and Bcursor API docs and slotted them in as doxygen
7057   documentation comments - this way they're much more likely to
7058   be kept up-to-date.
7059
7060 * Corrected multiple occurrences of "an Xapian::XXX" to "a Xapian::XXX"
7061   (presumably these all resulted from replacing "Om" with "Xapian::").
7062
7063 * Various minor updates and improvements.
7064
7065 portability:
7066
7067 * Reworked how we cope with fcntl.h #define-ing open on Solaris.  This change
7068   finally allows Sun's C++ compiler to produce a working Xapian build on
7069   sparc Solaris!
7070
7071 * configure.ac: Don't define DATADIR - we no longer use it and clashes
7072   with more recent mingw headers.
7073
7074 * matcher/andpostlist.cc: Initialise lmax and rmax to 0.  This cures
7075   the SIGFPE on apitest's qterminfo2 on alpha linux.
7076
7077 Xapian-core 0.8.1 (2004-06-30):
7078
7079 API:
7080
7081 * New method Xapian::Database::get_lastdocid which returns the highest used
7082   document id for a database (useful for re-synchronizing an indexer which
7083   was interrupted).  Implemented for quartz and inmemory.
7084
7085 * Xapian::MSet::get_matches_*() methods now take collapsing into account, and
7086   the documentation has been clarified to state explicitly that collapsing and
7087   cutoffs are taken into account (bug#31).
7088
7089 * Xapian::MSet: Need to adjust index by firstitem when indexing into items
7090   (bug#28).
7091
7092 * MSetIterator and ESetIterator are now bidirectional iterators (rather than
7093   just input iterators)
7094
7095 * Fixed post-increment forms of PostingIterator, TermIterator,
7096   PositionIterator, and ValueIterator so that *i++ works (as it must for them
7097   to be true input iterators).
7098
7099 * Xapian::QueryParser: If we fail to parse a query, try stripping out
7100   non-alphanumerics (except '.') and reparsing.
7101
7102 * Fixed memory leaked upon Xapian::QueryParser destruction.
7103
7104 * Removed several unused Xapian::Error subclasses (these were used by the
7105   indexer framework which we decided was a failed experiment).
7106
7107 testsuite:
7108
7109 * queryparsertest: Pruned near-duplicate queryparsertest testcases.
7110
7111 * queryparsertest: Added test case for `term NOT "a phrase'.
7112
7113 * remotetest: Use 127.0.0.1 instead of localhost so that tcpmatch1 doesn't fail
7114   just because the network setup is broken.
7115
7116 * apitest: Make emptyquery1 check that Query("") causes an InvalidArgumentError
7117   exception.
7118
7119 quartz backend:
7120
7121 * Fixed bug which meant we sometimes failed to remove a posting when deleting
7122   or replacing a document.
7123
7124 * Fixed PostlistChunkReader to take a copy of the postlist data being read to
7125   avoid problems with reading data from a string that's been deleted.
7126
7127 * Fixed bug in postlist merging which could occasionally extend a postlist
7128   chunk to overlap the docid range of the next chunk.
7129
7130 * Eliminated the split cursor in each Btree object - we only actually need a
7131   single block buffer to handle splitting blocks.  This reduces the memory
7132   overhead of each Bcursor (and hence each QuartzPostList).
7133
7134 * Changed 2 calls to abort() to throw Xapian::DatabaseCorruptError instead,
7135
7136 * If Btree is writable, throw DatabaseCorruptError if we detect overwritten.
7137
7138 * Check the return value of fdatasync()/fsync()/_commit() and raise an error.
7139   If they fail, we really want to know as it could cause data corruption.
7140
7141 * Assorted clean ups, improved comments, debug tracing, assertions.
7142
7143 * When merging in postlist changes, removed an unneeded call to
7144   QuartzBufferedTable::get_or_make_tag() in a case when we're using a cursor
7145   which has already fetched the tag.
7146
7147 * Added SON_OF_QUARTZ define to disable incompatible changes to database
7148   formats by default, and use it to control the docid encoding for keys such
7149   that we're always inserting at the end of the table when added new documents.
7150
7151 * Reopening the readonly version of a writable Btree is now more efficient
7152   (we used to close and reopen all the files and destroy and recreate a lot
7153   of objects and buffers).
7154
7155 * Share file descriptors between the read and write Btree objects so that a
7156   quartz WritableDatabase now uses 5 fds rather than 10.
7157
7158 * Added configure test for glibc, because otherwise we need to include a header
7159   before we can check for glibc in order to define something we should be
7160   defining before we include any headers!  Defining _XOPEN_SOURCE on OpenBSD
7161   seems to do the opposite to Linux and *disable* pread and pwrite!
7162
7163 backends:
7164
7165 * Stripped out the session machinery - all that is actually required is to
7166   ensure that any unflushed changes are flushed when the destructor runs.
7167
7168 * A few other backend interface cleanups.
7169
7170 build system:
7171
7172 * Unified the shlib version numbers (the small benefit of tracking them
7173   individually makes it hard to justify the extra work required, and having one
7174   version simplifies debian packaging too).
7175
7176 * configure.in: Fix typo (STLPORT_CXXLAGS -> STLPORT_CXXFLAGS)
7177
7178 * Removed trivial m4/Makefile.am and autoconf/Makefile.am and do the work
7179   from the top level Makefile.am instead.  It's easier to see the structure
7180   this way, and it also removes a couple of recursive make invocations which
7181   will speed up builds a little.
7182
7183 documentation:
7184
7185 * HACKING: Added a list of subtasks when doing a release.
7186   Currently it's always me that does this, but it may not always be
7187   and anyhow it'll help me to have a list to run through.
7188
7189 * include/xapian/database.h: Remove references to sessions in doxygen
7190   comments.
7191
7192 * docs/quickstart.html: Corrected lingering reference to "om.h" and
7193   note that we need <iostream>.
7194
7195 * docs/quickstartindex.cc.html,docs/quickstartexpand.cc.html,
7196   docs/quickstartsearch.cc.html: Add <iostream>.
7197
7198 * PLATFORMS,AUTHORS: Updated.
7199
7200 * docs/quartzdesign.html: Corrected various pieces of out of date
7201   information, and improved wording in a couple of places.
7202
7203 * docs/scalability.html: Removed the reference to the Quartz update bottleneck
7204   "currently being addressed for Xapian 0.8" as it's now been addressed!  Also
7205   reworded to remove use of first person (it was originally a message sent to
7206   the mailing list).
7207
7208 Xapian-core 0.8.0 (2004-04-19):
7209
7210 * Omega, xapian-examples and xapian-bindings now have their own NEWS files.
7211
7212 API:
7213
7214 * Throw an exception when an empty query is used to build in the binary
7215   operator Query constructor (previously this caused a segfault.  Added
7216   regression test.
7217
7218 * Made the TradWeight constructor explicit.  This is technically an API change
7219   as before you could pass a double where a Xapian::Weight was required - now
7220   you must pass Xapian::TradWeight(2.0) instead of 2.0.  That seems desirable,
7221   and it's unlikely any existing code will be affected.
7222
7223 * Added "explicit" qualifier to constructors for internal use which take a
7224   single parameter.
7225
7226 * Renamed Xapian::Document::add_term_nopos to Xapian::Document::add_term
7227   (with forwarding wrapper method for compatibility with existing code).
7228
7229 * The reference counting mechanism used by most API classes now handles
7230   creating a new object slightly more efficiently.
7231
7232 * Xapian::QueryParser: Don't use a raw term for a term which starts with a
7233   digit.
7234
7235 testsuite:
7236
7237 * apitest, quartztest: Added a couple of tests, and commented out some test
7238   lines which fail in debug builds.
7239
7240 * quartztest: cause a test to fail if there's still a directory after a call
7241   to rmdir(), or if there isn't a directory after calling mkdir().
7242
7243 * apitest: Check returned docids are the expected values in a couple more
7244   cases.  Improved wording of a comment.
7245
7246 quartz backend:
7247
7248 * We now merge a batch of changes into a posting list in a single pass which
7249   relieves an update bottleneck in previous versions.
7250
7251 * When storing the termlist, pack the wdf into the same byte as the reuse
7252   length when possible - doing so typically makes the termlist 14% smaller!
7253   This change is backward compatible (0.7 database will work with 0.8, but
7254   databases built or updated with 0.8 won't work with 0.7).
7255
7256 * quartzcheck: Check the structure within the postlist Btree as well as
7257   the Btree structures themselves.
7258
7259 * Reduced code duplication in the btree manager and btreechecking code.
7260
7261 * quartzdump: Backslash escape space and backslash in output rather than hex
7262   encoding them; renamed start-term and end-term to start-key and end-key;
7263   removed rather pointless "Calling next" message; if there's an error, write
7264   it to stderr not stdout, and exit with return code 1.
7265
7266 * Corrected a number of comments in the source.
7267
7268 * Removed several needless inclusions of quartz_table_entries.h.
7269
7270 * Removed OLD_TERMLIST_FORMAT code - it has been disabled for since 0.6.0.
7271
7272 * Removed all the quartz lexicon code and docs.  It's been disabled for ages,
7273   and we've not missed it.
7274
7275 build system:
7276
7277 * XO_LIB_XAPIAN autoconf macro can now be called without arguments in the
7278   common case where you want the test to fail if Xapian isn't found.
7279
7280 * Fixed the configure test for valgrind - it wasn't working correctly when
7281   valgrind was installed but was too a version to support VALGRIND_COUNT_ERRORS
7282   and VALGRIND_COUNT_LEAKS.
7283
7284 * GCC 2.95 supported -Wno-long-long and is our minimum recommended version, so
7285   unconditionally use -Wno-long-long with GCC, and don't test for it on other
7286   compilers (the old test incorrectly decided to use it with SGI's compiler
7287   resulting in a warning for every file compiled).
7288
7289 documentation:
7290
7291 * Updated the quickstart tutorial and removed the warning that "this
7292   document isn't up to date".
7293
7294 * docs/intro_ir.html: Added a link to "Information Retrieval" by Keith van
7295   Rijsbergen which can be downloaded from his website!
7296
7297 * docs/quartzdesign.html: Some minor improvements.
7298
7299 * docs/matcherdesign.html: Merged in more details from a message sent to the
7300   mailing list.
7301
7302 * docs/queryparser.html: Grammar fixes.
7303
7304 * Doxygen wasn't picking up the documentation for PostingIterator and
7305   PositionListIterator - fixed.  Added doxygen comments for Xapian::Stopper
7306   and Xapian::QueryParser.
7307
7308 * PLATFORMS: Updated with many results from tinderbox and from users.
7309
7310 * AUTHORS: Updated the list of contributors.
7311
7312 * HACKING: XAPIAN_DEBUG_TYPES should be XAPIAN_DEBUG_FLAGS.
7313
7314 * HACKING: Updated to mention that building from CVS requires
7315   `./configure --enable-maintainer-mode' (or use bootstrap).
7316
7317 * HACKING: Added notes about using "using", and pointers to a couple of useful
7318   C++ web resources.
7319
7320 portability:
7321
7322 * Solaris: Code tweaks for compiling with Sun's C++ compiler.
7323
7324 * IRIX: Code tweaks for compiling with SGI's C++ compiler.
7325
7326 * NetBSD mkdir() doesn't cope with a trailing / on the path - fixed our code to
7327   cope with this.
7328
7329 * mingw/cygwin: Only use O_SYNC (on the debug log) if the headers define it.
7330
7331 * backends/quartz/quartz_table_manager.cc: Fix for building on mingw.
7332
7333 * mingw: Added configure test for link() to avoid infinite loop in our C++
7334   wrapper for link.
7335
7336 * mingw and cygwin both need -Wl,--enable-runtime-pseudo-reloc passing when
7337   linking.  Arrange for xapian-config to include this, and check that the ld
7338   installed is a new enough version (or at least that it was at configure
7339   time).  Also pass to programs linked as part of the xapian-core build.
7340
7341 * cygwin: Close a QuartzDatabase or QuartzWritableDatabase before trying to
7342   overwrite it - cygwin doesn't allow use to delete open/locked files...
7343
7344 * backends/quartz/quartz_termlist.cc: Use Xapian::doccount instead of
7345   unsigned int in set_entries().
7346
7347 * Database::Internal::Internal::keep_alive() should be
7348   Database::Internal::keep_alive().
7349
7350 * Make Xapian::Weight::Weight() protected rather than private as we want to be
7351   able to call it from derived classes (GCC 3.4 flags this, other compilers
7352   seem to miss it).
7353
7354 debug code:
7355
7356 * Open debug log with flag O_WRONLY so that we can actually write to it!
7357
7358 * backends/quartz/quartz_values.cc: Fixed problem with dereferencing
7359   a pointer to the end of a string in debug output.
7360
7361 Xapian 0.7.5 (2003-11-26):
7362
7363 API:
7364
7365 * Xapian::QueryParser now supports prefixes on phrases and expressions (e.g.
7366   author:(twain OR poe) subject:"space flight").
7367
7368 * Added missing default constructors for TermIterator, PostingIterator, and
7369   PositionIterator classes.
7370
7371 * Fixed PositionIterator assignment operator.
7372
7373 testsuite:
7374
7375 * queryparsertest: Added testcase for new phrase and expression prefix support.
7376
7377 * apitest: Added regression tests for API fixes.
7378
7379 backends:
7380
7381 * quartzcompact: Fix the name that the meta file gets copied to (was
7382   /path/to/dbdirmeta rather than /path/to/dbdir/meta).
7383
7384 build system:
7385
7386 * Changed to using AM_MAINTAINER_MODE.  If you're doing development work on
7387   Xapian itself, you should configure with "--enable-maintainer-mode" and
7388   ideally use GNU make.
7389
7390 * Fixed configure test for fdatasync to work (I suspect a change in a recent
7391   autoconf broke it as it relied on autoconf internal naming).
7392
7393 * Fully updated to reflect move of libbtreecheck.la from backends/quartz
7394   to testsuite.  btreetest and quartzcheck should build correctly now.
7395
7396 documentation:
7397
7398 * Added first cut of documentation for Xapian::QueryParser query syntax.
7399
7400 * Fixed incorrectly formatted doxygen documentation comments which resulted in
7401   some missing text in the collated API and internal classes documentation.
7402
7403 * Documented --enable-maintainer-mode and problems with BSD make in HACKING.
7404
7405 * Fixed typo in docs/scalability.html.
7406
7407 * PLATFORMS: Updated from the tinderbox.
7408
7409 omega:
7410
7411 * omega: Parsing of the probabilistic query is now delayed until we need some
7412   information from it.  This means that we can now use options set by the
7413   omegascript template to control the behaviour of the query parser.
7414   $set{stemmer,...} now controls the stemming language (e.g. $set{stemmer,fr})
7415   and $setmap{prefix,...} now sets the QueryParser prefix map (e.g.
7416   $setmap{prefix,subject,XT,abstract,XA}).
7417
7418 * omega: Fixed $setmap not to add bogus entries.
7419
7420 * docs/omegascript.txt: Expanded documentation of $set and $setmap to list
7421   values which Omega itself makes use of.
7422
7423 * omega: Cleaned up the start up code quite a bit.
7424
7425 * omega: Removed the unfinished code for caching omegascript command
7426   expansions.  Added code to cache $dbsize.  The only other value correctly
7427   marked for caching is already being cached!
7428
7429 Xapian 0.7.4 (2003-10-02):
7430
7431 API:
7432
7433 * Fixed small memory leak if Xapian::Enquire::set_query() is called more than
7434   once.
7435
7436 * Xapian::ESet now has reference counted internals (library interface version
7437   bumped because of this).
7438
7439 * Removed unused OmDocumentTerm::termfreq member variable.
7440
7441 * OmDocumentTerm ctor now takes wdf, and replaced set_wdf() with inc_wdf() and
7442   dec_wdf().
7443
7444 * Removed unused open_document() method from SubMatch and derived classes.
7445
7446 * Calls made by the matcher to Document::Internal::open_document() now use the
7447   lazy flag provided for precisely this purpose, but apparently never used -
7448   this should give quite a speed boost to any matcher options which use values
7449   (e.g. sort, collapse).
7450
7451 testsuite:
7452
7453 * Finished off support for running tests under valgrind to check for memory
7454   leaks and access to uninitialised variables.
7455
7456 * apitest: Sped up deldoc4.
7457
7458 * btreetest: Removed superfluous `/'s from constructed paths.
7459
7460 * quartztest: adddoc2 now checks that there weren't any extra values created.
7461
7462 backends:
7463
7464 * quartz: don't start the document's TermIterator from scratch on every
7465   iteration in replace_document().  Should be a small performance win.
7466
7467 * quartz: Pass 0 for the lexicon/postlist table when creating a termlist just
7468   to find the doc length.
7469
7470 * quartz: quartz_table_entries.cc: Removed rather unnecessary use of
7471   const_cast.
7472
7473 * quartz: quartz_table.cc: Removed unused variable.
7474
7475 * quartz: Improved encapsulation of class Btree.
7476
7477 build system:
7478
7479 * libbtreecheck.la now has an explicit dependency on libxapian.la.
7480
7481 * We now set the dependencies for libxapian correctly so that linking
7482   applications will pull in other required libraries.
7483
7484 * matcher/Makefile.am: Ship networkmatch.cc even if "make dist" is run from a
7485   tree with the remote backend disabled.
7486
7487 * configure.in: Sorted out tests for gethostbyname and gethostbyaddr using
7488   standard autoconf macros.
7489
7490 * configure.in: If fork is found, but socketpair isn't, automatically disable
7491   the remote backend rather than configure dying with an error.
7492
7493 * autoconf/: Removed various unused autoconf macros.
7494
7495 portability:
7496
7497 * xapian-config.in: Link with libxapianqueryparser before libxapian, since
7498   that's the dependency order.
7499
7500 * Removed or replaced uses of <iostream> and <iosfwd> in the library sources
7501   - we don't need or want the library to pull in cin and friends.
7502
7503 * extra/queryparser.yy: Fixed to build with Sun's C++ compiler.
7504
7505 * Make the dummy source file C++ rather than C so that automake tells libtool
7506   that this is a C++ library - vital for correct linking on some platforms.
7507
7508 * Makefile.am: Pass -no-undefined to libtool so that we can build build a DLL
7509   on MS Windows.
7510
7511 * configure.in: Fixed check for socketpair - we were automatically disabling
7512   the remote backend on platforms where socketpair is in libsocket
7513   (such as Solaris).
7514
7515 * Use O_BINARY for binary I/O if it exists.
7516
7517 * common/utils.h: mkdir() only takes one argument on mingw.
7518
7519 * common/utils.h,testsuite/backendmanager.cc: Touch file using open() rather
7520   than system().
7521
7522 * common/utils.cc: Fixed to compile if snprintf isn't available.
7523
7524 documentation:
7525
7526 * docs/scalability.html: Fixed slip (32GB should be 32TB);  Added note about
7527   Linux 2.4 and ext2 filesize limits.
7528
7529 * PLATFORMS: Updated.
7530
7531 * NEWS: Fixed a few typos.
7532
7533 bindings:
7534
7535 * xapian.i: using namespace std in SWIG parsed segment to sort out typemaps.
7536
7537 packaging:
7538
7539 * Updated RPM packaging.
7540
7541 omega:
7542
7543 * omega: $topdoc now ensures the match has been run; $date no longer ensures
7544   the match has been run.
7545
7546 * omega: Fixed to build with Sun's C++ compiler.
7547
7548 Xapian 0.7.3 (2003-08-08):
7549
7550 API:
7551
7552 * MSetIterator: Fixed MSetIterator::get_document() to work when get_mset() was
7553   called with first != 0 (regression test msetiterator3).
7554
7555 testsuite:
7556
7557 * internaltest: Changed test exception1 to actually test something (hopefully
7558   what was originally intended!)
7559
7560 * Added long option support to the testsuite programs (and quartzdump).
7561
7562 * Testsuite now builds on platforms for which we use our own stringstream
7563   implementation.
7564
7565 * Only use \r in test output if the output is a tty.
7566
7567 * Increased default timeout used by tests running on the remote backend from 10
7568   seconds to 5 minutes to avoid tests failing just because the machine running
7569   them is slow and/or busy.
7570
7571 * Fixed check for broken exception handling - we were getting "Xapian::"
7572   prefixed to one version and not on the other.
7573
7574 * tests/runtest: Set srcdir if it isn't already to make it easy to manually run
7575   test programs from a VPATH build.
7576
7577 * apitest: Check termfreq in allterms4.
7578
7579 backends:
7580
7581 * quartz: Fixed allterms TermIterator to not give duplicate terms when a
7582   posting list is chunked; added regression test (allterms4).
7583
7584 * quartz: Check for EINTR when reading or writing blocks and retry the
7585   operation.  This should mean quartz won't fail falsely if a signal is
7586   received (e.g. if alarm() is used).
7587
7588 build system:
7589
7590 * Renamed libomqueryparser to libxapianqueryparser - for backward compatibility
7591   we still provide a library with the old name for now.
7592
7593 * xapian.m4: Added XO_LIB_XAPIAN to replace OM_PATH_XAPIAN.  XO_LIB_XAPIAN will
7594   automagically enable use of "xapian-config --ltlibs" if A[CM]_PROG_LIBTOOL is
7595   used in configure.in.
7596
7597 * xapian-config: Now supports linking with libtool - using libtool means that
7598   the run-time library path is set and that you can now link with an
7599   uninstalled libxapian.  Also xapian-config will now work once xapian-core's
7600   configure has been run, rather than only after "make all".
7601
7602 * xapian-config: Now automatically tries to link libxapianqueryparser too.
7603
7604 * bootstrap: Removed bootstrap scripts in favour of top-level bootstrap which
7605   creates a top-level configure you can optionally use to configure all checked
7606   out Xapian modules with one command, and which creates a top level Makefile
7607   to build all checked out Xapian modules with one command.
7608
7609 * Added versioning information to libxapian and libxapianqueryparser.
7610
7611 * xapian-example/omega: Use libtool and XO_LIB_XAPIAN so we can link with an
7612   uninstalled Xapian, and so the run time load path gets built into the
7613   binaries (no need to set LD_LIBRARY_PATH just because you install Xapian with
7614   a non-standard prefix).
7615
7616 * configure: Stop the API documentation from being regenerated when
7617   include/xapian/version.h changes (since it's generated by configure).
7618
7619 * Fixed "make dist" in VPATH builds.
7620
7621 portability:
7622
7623 * common/getopt.h: #include <stdlib.h>, <stdio.h>, and <unistd.h> before
7624   defining getopt as a macro - this avoids problems with clobbering prototypes
7625   of getopt() in system headers.
7626
7627 * bin/quartzcompact.cc: Need stdio.h for rename().
7628
7629 * languages/Makefile.am: Fixed compilation for compilers other than GCC.
7630
7631 * Moved rset serialisation into a method of RSet::Internal, so
7632   omrset_to_string() is now just glue code.  This eliminates the need for it to
7633   be a friend of RSet::Internal which Sun's C++ compiler didn't seem to be able
7634   to cope with.
7635
7636 documentation:
7637
7638 * Fix incorrect documentation comment for Enquire::set_set_forward().  (Looked
7639   like a cut&paste error)
7640
7641 * COPYING: Updated FSF address, and reinstated missing section: "How to Apply
7642   These Terms to Your New Programs"
7643
7644 * PLATFORMS: Updated some linux results: RH7.3 on x86, and Debian on alpha and
7645   arm; Updated FreeBSD success report; Updated with results from the tinderbox.
7646
7647 * docs/mkdoc.pl: Don't choke on a comment at the end of the DIST_SUBDIRS line
7648   in a Makefile.am.
7649
7650 * HACKING: Improved note about why libtool 1.5 is needed.
7651
7652 * HACKING: Added note about additional tools needed for building a
7653   distribution.
7654
7655 bindings:
7656
7657 * Fixed VPATH builds.
7658
7659 * python: Fixed to link with libomqueryparser.
7660
7661 * guile,tcl8: Updated typemaps to SWIG 1.3 style.
7662
7663 omega:
7664
7665 * omindex.cc: Added missing `#include <errno.h>'.
7666
7667 * omindex/scriptindex: Fixed signed character issue in accent normalisation.
7668
7669 * omindex: fixed memory and file descriptor leak on indexing a zero-sized file.
7670
7671 * omindex: Fixed sense of test for unreadable files.
7672
7673 * omindex: Improved log messages to distinguish re-indexed/added.
7674
7675 * omindex,omega,scriptindex: Fixed to compile with mingw.
7676
7677 * omindex: Fixed to compile with GNU getopt so we can build on non-glibc
7678   platforms.
7679
7680 examples:
7681
7682 * msearch: Quick fix to get mingw building going.
7683
7684 * getopt: Copied over our fixes for better C++ compatibility.
7685
7686 * simplesearch: Stem search terms.
7687
7688 * simpleindex: Fixed not to run words together between lines.
7689
7690 * simpleindex: Create database if it doesn't exist.
7691
7692 Xapian 0.7.2 (2003-07-11):
7693
7694 testsuite:
7695
7696 * Fixed NULL pointer dereference when a test threw an unexpected exception.
7697
7698 backends:
7699
7700 * Quartz: When asked to create a quartz database, try to create the directory
7701   if it doesn't already exist.  Then we don't have to do it in every single
7702   Xapian program which wants to create a database...
7703
7704 portability:
7705
7706 * common/getopt.h: Fixed to work better with C++ compilers on non-glibc
7707   platforms.
7708
7709 * common/utils.h: missing #include <ctype.h>
7710
7711 * Quartz: Defined _XOPEN_SOURCE=500 for GLIBC so we get pread() and pwrite().
7712
7713 * common/utils.h: Improved mingw implementation of rmdir().
7714
7715 documentation:
7716
7717 * PLATFORMS: Added MacOS X 10.2 success report.
7718
7719 * Improvements to doxygen-generated documentation.
7720
7721 bindings:
7722
7723 * Moved to separate xapian-bindings module.
7724
7725 * Added configure check for SWIG version (require at least 1.3.14).
7726
7727 * bindings/swig/xapian.i: Fixed over-enthusiastic automatic conversion of
7728   termname to std::string.
7729
7730 * PHP4 bindings much closer to working once again; updated guile and tcl8
7731   somewhat.
7732
7733 omega:
7734
7735 * omega: If the same database is listed more than once, only search the first
7736   occurrence.
7737
7738 * omega: use snprintf to help guard against buffer overflows.
7739
7740 Xapian 0.7.1 (2003-07-08):
7741
7742 testsuite:
7743
7744 * Fixed testsuite programs to not try to use "rm -rf" under mingw.
7745
7746 backends:
7747
7748 * Quartz: Use pread() and pwrite() on platforms which support them.  Doing so
7749   avoids one syscall per block read/write.
7750
7751 * Quartz block count is now unsigned, which should nearly double the size of
7752   database for a given block size.  Not tested this yet.
7753
7754 omega:
7755
7756 * omindex: Fixed compilation problem in 0.7.0.
7757
7758 documentation:
7759
7760 * Added new document discussing scalability issues.
7761
7762 * PLATFORMS: Updated.
7763
7764 Xapian 0.7.0 (2003-07-03):
7765
7766 API:
7767
7768 * Moved everything into a Xapian namespace, which the main header now being
7769   xapian.h (rather than om/om.h).
7770
7771 * Three classes have been renamed for better naming consistency:
7772   OmOpeningError is now Xapian::DatabaseOpeningError, OmPostListIterator is
7773   now Xapian::PostingIterator, and OmPositionListIterator is now
7774   Xapian::PositionIterator.
7775
7776 * xapian.h includes <iosfwd> rather than <iostream> - if you were relying on
7777   the implicit inclusion, you'll need to add an explicit "#include <iostream>".
7778
7779 * Replaced om_termname with explicit use of std::string - om_termname was just
7780   a typedef for std::string and the typedef doesn't really buy us anything.
7781
7782 * Older code can be compiled by continuing to use om/om.h which uses #define
7783   and other tricks to map the old names onto the new ones.
7784
7785 * Define XAPIAN_VERSION (e.g. 0.7.0), XAPIAN_MAJOR_VERSION (e.g. 0), and
7786   XAPIAN_MINOR_VERSION (e.g. 7).
7787
7788 * Updated omega and xapian-examples to use Xapian namespace.
7789
7790 queryparser:
7791
7792 * Xapian::QueryParser: Accent normalisation added; Improved error reporting;
7793   Fixed to handle the most common examples found in the wild which used to give
7794   "parse error".
7795
7796 bindings:
7797
7798 * Python bindings brought up to date - use ./configure --enable-bindings to
7799   build them.  Requires Python >= 2.0 - may require Python >= 2.1.
7800
7801 * Enabled optional building of bindings as part of normal build process.  Old
7802   Perl and Java bindings dropped; for Perl, use Search::Xapian from CPAN; Java
7803   JNI bindings will be replaced with a SWIG-based implmentation.
7804
7805 internal implementation changes:
7806
7807 * Removed one wrapper layer from the internal implementation of most API
7808   classes.
7809
7810 * Xapian::Stem now uses reference counted internals.
7811
7812 * Internally a lot of cases of unnecessary header inclusion have been removed
7813   or replaced with forward declarations of classes.  This should speed up
7814   compilation and recompilation of the Xapian library.
7815
7816 * Suppress warnings in Snowball generated C code.
7817
7818 * Reworked query serialisation in the remote backend so that the code is now
7819   all in one place.  The serialisation is now rather more compact and no longer
7820   relies on flex for parsing.
7821
7822 testsuite:
7823
7824 * Moved all the core library tests to tests subdirectory.
7825
7826 * apitest now allows backend to be specified with "-b" rather than having to
7827   mess with environmental variables.
7828
7829 * Testsuite programs can now hook into valgrind for leak checking, undefined
7830   variable checking, etc.
7831
7832 backends:
7833
7834 * Fixed parsing of port number in remote stub databases.
7835
7836 * Quartz: Improved error message when asked to open a pre-0.6 Quartz database.
7837
7838 * Quartz backend: Workaround for shared_level problem turns out to
7839   be arguably the better approach, so made it permanent and tidied up
7840   code.
7841
7842 build system:
7843
7844 * Build system fixed to never leave partial files in place of the expected
7845   output if a build is interrupted.
7846
7847 * quartzcheck, quartzdump, and quartzcompact are now built by "make" rather
7848   than only by "make check".
7849
7850 * xapian-config: Removed --prefix and --exec-prefix - you can't reliably
7851   install Xapian with a different prefix to the one it was configured with,
7852   yet these options give the impression you can.
7853
7854 miscellaneous:
7855
7856 * Fixed sending debug output to a file with XAPIAN_DEBUG_LOG with a value which
7857   didn't contain "%%" (%% expands to the current PID).
7858
7859 * Fixed Xapian::MSetIterator::get_collapse_count() to work as intended.
7860
7861 omega:
7862
7863 * omindex,scriptindex: Normalise accents in probabilistic terms.
7864
7865 * omindex: Read output from pstotext and pdftotext via pipes rather
7866   than temporary files to side-step the whole problem of secure temporary file
7867   creation; Use pdfinfo to get the title and keywords from when indexing a PDF;
7868   Safe filename escaping tweaked to not escape common safe punctuation.
7869
7870 * omindex: Implement an upper limit on the length of URL terms - this is a
7871   slightly conservative 240 characters.  If the URL term would be longer than
7872   this, its last few bytes are replaced by a hash of the tail of the URL.  This
7873   means that (apart from hopefully very rare collisions) urlterms should still
7874   be unique ids for documents.  This is forward and backward compatible for
7875   URLs less than 240 characters.
7876
7877 * omindex: Clean up processing of HTML documents:
7878   - Ignore the contents of <script> and <style> tags in HTML.
7879   - Strip initial whitespace in each tag in an HTML document.
7880   - Try not to split words in half when truncating title and summary.
7881
7882 * query.cc: Set STEM_LANGUAGE near the start of the file so it's easy
7883   for users to change until we get better configurability.
7884
7885 * omega: Replaced half-hearted logging support with flexible OmegaScript-based
7886   approach with new $log command.  Also added $now to allow the current
7887   date/time to be logged.
7888
7889 * templates/xml: added collapse info to xml template.
7890
7891 documentation:
7892
7893 * Assorted minor documentation improvements.
7894
7895 * PLATFORMS: Updated.
7896
7897 rpms:
7898
7899 * Improved RPM packaging of xapian-core and omega.
7900
7901 Xapian 0.6.5 (2003-04-10):
7902
7903 * OmEnquire: optimised the handling when sort_bands == 1 and fixed incorrect
7904   results in this and some other sorting cases; added some sorting testcases.
7905
7906 * OmMSetIterator: added get_collapse_count() which returns a lower bound on
7907   the number of items which were removed by collapsing onto the current item.
7908
7909 * OmStem: added default OmStem constructor and "none" language.  Both of these
7910   give a stemmer object which leaves terms unchanged which should allow for
7911   simpler logic in programs using Xapian.  The default constructor also removes
7912   the need to mess with pointers in some cases.
7913
7914 * Automatically disable the remote backend if we don't have fork() since the
7915   remote backend requires it in several places.
7916
7917 * Fixed to build with debug enabled.
7918
7919 * testsuite: fixed to still build when some backends are disabled.
7920
7921 * extra/parsequerytest.cc: Fixed to build with GCC 2.95.
7922
7923 * Testsuite: Added regression test for Quartz bug which caused problems with
7924   long terms on machines with signed chars.
7925
7926 * testsuite/index_utils.cc: Handling of ^x was just downright wrong due to a
7927   typo.
7928
7929 * Improved portability: Fix for 64 bit machines.  Fixed btreetest to build with
7930   older compilers lacking <sstream>.  Xapian is now much closer to building
7931   with Sun's CFront-based Sun Pro C++ compiler, and with a Linux to mingw
7932   cross-compiler.
7933
7934 * PLATFORMS: Updated with the results of many test builds.
7935
7936 * Improved RPM packaging of xapian-core and omega.
7937
7938 * Documentation: Use http://www.doxygen.org/ as URL for doxygen; Fixed bad link
7939   to our own website in overview.html; code_structure.html now only includes
7940   directories in the build system.
7941
7942 * HACKING: updated.
7943
7944 * Removed bugs/todo.xml, TODO, TODO.release, docs/todo.html, and
7945   docs/todo-release.html from the distribution.  Bugs and todo items will be
7946   tracked in Bugzilla instead.
7947
7948 * Install docs in /usr/share/doc/xapian-core instead of /usr/share/xapian-core.
7949
7950 * omega: If xP and P are both empty, there may be a boolean query, so don't
7951   force first page of hits.
7952
7953 * omega: Fixed off-by-one error in rounding down topdoc - it was possible to
7954   get to an empty page of hits if there were exactly a multiple of HITSPERPAGE
7955   matches and the matcher over-estimated the number of matches and Omega
7956   displayed page links.
7957
7958 * omega: Fixed handling of multiple DB parameters to be as documented.
7959
7960 * omega: Added $collapsed to report get_collapse_count() for the current hit.
7961
7962 * omega: Added $transform{} which does regexp manipulation (currently disabled
7963   until configure tests for regexp library are added)
7964
7965 * omega: Added $uniq{} to eliminate duplicates from a sorted list.
7966
7967 * omega: Don't force page 1 for a query with repeated terms!
7968
7969 * omega: removed duplicates from terms listed in term frequencies.
7970
7971 * omega: Added cgi parameter COLLAPSE to collapse on key values
7972
7973 * omega: Added $value{key[,docid]} support to omegascript
7974
7975 * omega: Renamed DATE1, DATE2, and DAYSMINUS to the more meaningful START, END,
7976   and SPAN (NB SPAN is days before END, or after START, or before today -
7977   whereas SPAN was before *DATE1* or before today).  The old parameters names
7978   are supported (with the original semantics) for now.
7979
7980 * omega: Actually install documentation!
7981
7982 * templates/query: propagate B boolean filters
7983
7984 * templates/godmode: removed link to EuroFerret image
7985
7986 * templates/godmode: added value dumping, for values from 0-255
7987
7988 * omindex: Report correct version number (was hard-wired to 1.0!)
7989
7990 * scriptindex: Allow '_' in fieldnames.  Diagnose bad characters in fieldnames
7991   better.
7992
7993 * dbi2omega: Added DBUSER and DBPASSWD environmental variable support so that
7994   password protected DBs can easily be used
7995
7996 * scriptindex.cc: added missing "#include <stdio.h>" which caused builds
7997   to fail for some platforms.
7998
7999 Xapian 0.6.4 (2002-12-24):
8000
8001 * Quartz backend: Fixed double setting of position list when updating a
8002   document with term position information (overall result was correct, just
8003   inefficient); when deleting a position_list, don't check if it's empty,
8004   just ask the layer below to delete it and let it handle the case when
8005   there's nothing to delete; Fixed unpacking of termlist on platforms where
8006   char is signed.
8007
8008 * OmQueryParser: Added support for searching probabilistic fields (using
8009   <field>:<term>); the unstem multimap now includes "." on the end of a
8010   term if it was there in the query.
8011
8012 * Don't include "om.h" as a dependency for the api docs since it's generated
8013   a configure time and the dependency was forcing users to regenerate the
8014   documentation, which requires doxygen to be installed.
8015
8016 * Bindings: Python bindings updated to work with the updated API (still
8017   disabled by default).
8018
8019 * Muscat 3.6 backend: Fixed to build with the new database factory functions;
8020   fixed compilation warnings; Muscat 3.6 DA and DB databases don't support
8021   positional information.  Instead of throwing an exception when we try to
8022   access it, return an empty position list (like a quartz database with no
8023   position information would).  This allows copydatabase to be used to convert
8024   a Muscat 3.6 database to a quartz one.
8025
8026 * Documentation: quartzdesign and todo list updated.
8027
8028 * quartzcheck: default mode changed to "v" rather than "+", since "+" is too
8029   verbose for a btree of any size; if you pass a quartz database directory,
8030   quartzcheck will now check all the tables which make up a quartz database.
8031
8032 * quartzcompact: new tool which makes a copy of a quartz database with full
8033   compaction turned on - this results in a smaller database which is faster
8034   to search.  The next update will result in a lot of block splitting though
8035   (since all blocks are as full as possible).
8036
8037 * omega: Added $unstem to map a stemmed term to the form(s) used in the query;
8038   $queryterms now only includes the first occurrence of each stemmed form;
8039   $prettyterm makes use of the unstem map; prefer MINHITS to MIN_HITS and
8040   RAWSEARCH to RAW_SEARCH since none of the other CGI parameter names have
8041   _ separating words (continue to support old names for now); fixed default
8042   template to not generate topterms twice, and fixed topterms to not stick
8043   outside the green box; corrected omegascript docs - it's $setrelevant
8044   not $set_relevant.
8045
8046 * scriptindex: index=nopos with new indexnopos action; index and indexnopos now
8047   take an optional prefix argument; index=nopos is handled specially for
8048   backwards compatibility; added new data action to generate terms for date
8049   range searching.
8050
8051 Xapian 0.6.3 (2002-12-14):
8052
8053 * Updated PLATFORMS and todo list.  Noted in HACKING that Bison 1.50 seems to
8054   work with Xapian.
8055
8056 * OmQueryParser now creates an "unstem" multimap to allow probabilistic
8057   query terms to be converted back to the form the user originally typed.
8058
8059 * Updated documentation for remote protocol description and the quickstart
8060   tutorial which were both very out of date.
8061
8062 * No longer use OmSettings to pass matcher parameters.  This completes the
8063   removal of OmSettings.
8064
8065 * Added workaround for problem with cursors sharing levels in the btree.
8066   This should fix sporadic problems with large databases (small databases
8067   have fewer btree levels so aren't affected).
8068
8069 * Stub databases now work again, though with a different format.  The new
8070   format allows multiple databases to be specified in the stub file.
8071
8072 * OmEnquire::get_eset() now takes a flags argument of bit constants |-ed
8073   together instead of 2 bools.
8074
8075 * Applied Martin Porter's better fix for the btree sequential addition bug
8076   which Richard fixed a few months ago.  Richard's fix resulted in a correct
8077   btree, but didn't always utilise space as efficiently as possible.
8078
8079 * Fixed the remote backend to handle weighting schemes after the OmSettings
8080   changes.  You can now even implement your own weighting scheme and use it
8081   with the remote backend provided you register it with SocketServer at
8082   runtime (this feature has been on the todo list for ages).
8083
8084 Xapian 0.6.2 (2002-12-07):
8085
8086 * Set env var XAPIAN_SIG_DFL to stop the testsuite installing its
8087   signal handler (may be useful with some debugging tools).
8088
8089 * backends/quartz/btree.cc: max_item_size wasn't being set due to
8090   some over-zealous code pruning.  It was defaulting to 0, and
8091   was causing the code to write off the end of allocated memory
8092   blocks.
8093
8094 * matcher/localmatch.cc: fixed handling of wtscheme() - we were
8095   trying to use it for the extra weights, and then double
8096   deleting it!
8097
8098 * common/omdebug.cc,common/omdebug.h: Fixed permissions on newly
8099   created log file (was getting 000!); Simplified class internals;
8100   Renamed env vars: OM_DEBUG_FILE is now XAPIAN_DEBUG_LOG,
8101   OM_DEBUG_TYPES is now XAPIAN_DEBUG_FLAGS (old versions still work
8102   for now).
8103
8104 * testsuite/testsuite.cc: Fixed so running "gdb .libs/apitest"
8105   finds srcdir (for an in-tree build at least).
8106
8107 * Fixed to compile with --enable-debug=full.
8108
8109 * docs/remote.html: Updated from OmSettings to factory functions.
8110
8111 * PLATFORMS: ixion is actually Linux 2.2.
8112
8113 * OmWritableDatabase now has a default constructor.
8114
8115 * Weighting scheme now specified by passing OmWeight object to OmEnquire.
8116   This also allows user weighting schemes (just subclass OmWeight and
8117   pass in an instance of this new class).  [This doesn't currently work
8118   with the remote backend.]
8119
8120 * No longer use OmSettings to specify parameters for constructing databases.
8121   Instead there's a factory function for each database type - temporary naming
8122   scheme is OmXxx__open(), mostly because it's easy to grep for later.
8123   Instead of create and overwrite flags, we pass in a value - a new possible
8124   opening mode is "create or open".  [At present stub databases and the
8125   machinery in InMemory to allow the multierrhandler1 test aren't working.
8126   Everything else should be.]
8127
8128 * OmEnquire::get_eset() takes parameters instead of an OmSettings object.
8129
8130 * Fixed reversed sense of use_query_terms (and fixed reversed sense test in
8131   apitest which meant this wasn't spotted).
8132
8133 * Documentation: Link to annotated class lists in doxygen generated
8134   documentation instead of the rather empty index pages; added doxygen
8135   markup so that apidoc now documents header files; updated todo list.
8136
8137 * Documentation: intro doc thing was very out of date in places - fixed.
8138
8139 * Omega: index .php files as HTML, with the PHP code stripped out; omindex
8140   return non-zero return code if an unexpected exception is caught; fixed
8141   HTML parser to not read one character past the end of the document in
8142   some cases; updated in line with OmSettings related changes to the API;
8143   Fixed $dbname to return "default" for the default database instead of "";
8144   templates/query: Removed now unused xDEFAULTOP hidden field, and superfluous
8145   "}"; dbi2omega now more efficient and can be restricted to listed fields.
8146
8147 Xapian 0.6.1 (2002-11-28):
8148
8149 * Fixed to compile with GCC 3.0.
8150
8151 * PLATFORMS: Updated.
8152
8153 Xapian 0.6.0 (2002-11-27):
8154
8155 * Quartz database backend: lexicon disabled (./configure CXXFLAGS=-DUSE_LEXICON
8156   to reenable it), and encoding schemes simplified and made more compact;
8157   extended and added test cases; minimum block size is now 2048 bytes (as
8158   documented before, but now we actually enforce this); btree checking code
8159   split off and only linked in when required; tidied up btreetest's output.
8160
8161 * Replaced our stemmers with those from Snowball.  These give better results,
8162   and are actively maintained by Martin Porter (who wrote the original Xapian
8163   stemmers too).  It also means that Xapian now has stemmers for Finnish,
8164   and Russian, and an implementation of Lovins' English stemmer.
8165
8166 * Assorted improvements to the documentation, especially the documentation
8167   of the internals of the Quartz backend.
8168
8169 * Removed the three uses of RTTI (typeid() and dynamic_cast<>) - one was
8170   totally superfluous, and the other two easily avoided.
8171
8172 * Omega and simpleindex example: limit probabilistic term length to 64
8173   characters to stop the index filling up with junk terms which nobody will
8174   ever search for.
8175
8176 * Omega: Added dbi2omega perl script to dump any database which perl DBI can
8177   access into the dump format expected by scriptindex.
8178
8179 Xapian 0.5.5 (2002-12-04):
8180
8181 * Fixed compilation with --enable-debug.
8182
8183 * Minor documentation updates.
8184
8185 * Omega: Fixed paging on default database; removed xDEFAULTOP from the query
8186   template as it's no longer used; removed bogus unmatched '}' from query
8187   template; added dbi2omega perl script to dump any database which perl DBI
8188   can access into the dump format expected by scriptindex; limit length of
8189   probabilistic terms generated to 64 characters.
8190
8191 Xapian 0.5.4 (2002-10-16):
8192
8193 * Fixed a compilation error with "make check" when using GCC 3.2.
8194
8195 * PLATFORMS: checked 0.5.3 works on OpenBSD and Solaris 7.
8196
8197 Xapian 0.5.3 (2002-10-12):
8198
8199 Notable changes: Improvements to the test suite, and internal code cleanups:
8200
8201 * Internal code cleanups on Quartz Btree implementation.
8202
8203 * Minor documentation updates (TODO and PLATFORMS updated; Martin Porter's
8204   stemming paper removed - see the Snowball site for background stemmer
8205   info).
8206
8207 * Implemented QuartzAllTermsList::get_approx_size().
8208
8209 * Removed a couple of occurrences of "using std::XXX;" from externally
8210   visible headers.
8211
8212 * With GCC, add warning flags "-Wall -W" rather than "-Wall -Wunused" (-Wall
8213   implies -Wunused anyway).  Fixed all the warnings this throws up, except in
8214   languages/ (that code is to be replaced with Snowball soon).
8215
8216 * Test suite: Disable colour test output if stdout isn't a terminal and
8217   reworked check for broken exception handling as the previous  version never
8218   seemed to fire.  Other assorted minor improvements.
8219
8220 * include/om/om.h is now removed on "make distclean" rather than "make clean".
8221
8222 Xapian 0.5.2 (2002-10-06):
8223
8224 Further improvements to documentation and portability:
8225
8226 * docs/: converted all text docs to HTML (except omsettings which will
8227   has odd markup (LaTeX?) and will probably soon be obsolete anyway).
8228
8229 * remote backend: Fixed handling of timeouts which are now in the past - fixes
8230   test failures with redhat/x86.
8231
8232 * quartz backend: now works on 64 bit platforms.
8233
8234 * test suite: try to spot mishandled exceptions and stop them causing bogus
8235   OMEXCEPT failures.
8236
8237 Xapian 0.5.1 (2002-10-02):
8238
8239 This release fixes features improved documentation and some build system
8240 portability fixes.
8241
8242 * PLATFORMS: updated with more test results.
8243
8244 * docs/: tidied up layout of HTML documentation; converted the notes about
8245   BM25 into HTML; updated stemmer docs to reflect intention to use Snowball
8246   instead; included HTML versions of quickstart*.cc.
8247
8248 * automake 1.6.3 and autoconf 2.54 are now required for those working
8249   from CVS to fix a problem with the generated Makefiles and Solaris
8250   make.
8251
8252 * net/Makefile.am: Fixed building of readquery.cc from readquery.ll.
8253
8254 * buildall script is now deprecated - use the new streamlined bootstrap script
8255   in preference.
8256
8257 Xapian 0.5.0 (2002-09-20):
8258
8259 The last release of the software that is now known as Xapian was OmSee 0.4.1 on
8260 November 24th 2000, not far from 2 years ago.
8261
8262 There's been a significant amount of development in this time, so we've
8263 summarised the most notable changes and improvements:
8264
8265   * The project is now called "Xapian". We've renamed the modules in the light
8266     of this change:
8267
8268       + "om" is now "xapian-core"
8269       + "om-examples" is now "xapian-examples", and now contains small,
8270         instructive examples which demonstrate how to use Xapian to implement
8271         particularly features.
8272       + Added "xapian-applications" which contains larger sample applications
8273
8274   * Much improved build system - should now build "out of the box" on many Unix
8275     platforms. Can now VPATH build with vendor tools on most platforms. Builds
8276     as cleanly as we can achieve with GCC 2.95.* (some bogus warnings due to
8277     compiler bugs). Should build without warnings on GCC 3.0, 3.1, and 3.2.
8278
8279   * If using GCC, om/om.h now contains a check that the compiler used to build
8280     Xapian and the compiler used to build the application have compatible C++
8281     ABIs. So you get a clear error message early from the first attempt to
8282     compile a file rather than a confusing error from the linker near the end
8283     of the build.
8284
8285   * RPM packages are now available. We intend to prepare Debian packages in the
8286     near future too.
8287
8288   * xapian-config no longer support "--uninst". It's hard to make this work
8289     reliably and portably, and the effort is better expended elsewhere.
8290     Configure with a prefix and install to a temporary directory instead.
8291
8292   * Xapian can now work with files > 2Gb on OSes which support them.
8293
8294   * Restructured and reworked documentation.
8295
8296   * Removed thread locks. We intend to be "thread-friendly" so different
8297     threads can access different objects without problems. In the rare event
8298     that you want to concurrently call methods on the same object from
8299     different threads you need to create a mutex and lock it. Thus the thread
8300     lock overhead is only incurred when it's necessary.
8301
8302   * Indexgraph removed from core library. It will reappear as an add-on library
8303     at some point.
8304
8305   * Omega's query parser has now been reworked as a separate library.
8306
8307   * Terminology change - "keys" are now known as "values" to avoid confusion,
8308     since they're not like keys in a relational database. The exception is when
8309     a value is used as a key in some operation, e.g. "match_collapse_key".
8310
8311   * Database backends:
8312
8313       + Auto backend: can now be used to create a new database.
8314       + Auto backend: added support for "stub" databases - a text file
8315         specifying the settings for the database to be opened (particularly
8316         useful for allowing easy access to specific remote databases).
8317       + Quartz backend: many fixes and improvements, and the code has been
8318         cleaned up a lot. Implemented deleting of items from postlists.
8319       + Remote backend: implemented term_exists() and get_termfreq();
8320       + Multi-backend: the document length is now fetched from the sub-postlist
8321         rather than the database, which provides a huge speed-up in some cases.
8322       + Sleepycat backend: this experimental backend has been removed.
8323       + Muscat 3.6 backends: now disabled by default.
8324
8325   * Tests:
8326
8327       + Test cases added for most bug fixes and new features.
8328       + stemtest: rewritten in C++ rather than part C++, part perl. Now 15%
8329         faster.
8330       + includetest: removed - it's no longer useful now the code has matured.
8331       + Removed problematic leak checking from testsuite. We plan to use
8332         valgrind instead soon.
8333
8334   * Matcher:
8335
8336       + Fixed several matcher bugs which could cause incorrect results in some
8337         situations.
8338       + Fix bug in expander due to nth_element being called on the wrong
8339         element.
8340       + Added sorting within relevance bands to the matcher.
8341       + Matcher now calculates percentages differently, such that 100%
8342         relevance is actually achievable.
8343       + Matcher now uses a min-heap rather than nth-element to maintain the
8344         proto-mset. This is cleaner and more efficient.
8345       + New operator OP_ELITE_SET replaces match_max_or_terms option.
8346       + Implemented multiple XOR queries.
8347       + Add a new query operator, OP_WEIGHT_CUTOFF, which returns only those
8348         documents from a query which have a weight greater than a specified
8349         cutoff value.
8350       + Removed OmBatchEnquire from system: it may return at a later date, but
8351         for now it is simply out of date and a maintenance liability, and
8352         gives no significant advantage.
8353       + Added experimental match bias functors.
8354
8355   * The API has been cleaned up in various places:
8356
8357       + OmDocumentContents and OmIndexDoc merged to become OmDocument
8358       + OmQuery interface cleaned up
8359       + OmData and OmKey removed - methods which used them now just pass a
8360         string instead
8361       + OmESetItem replaced by OmESetIterator; OmMSetItem by OmMSetIterator;
8362         om_termname_list by OmTermIterator
8363       + OmDocumentTerm and OmDocumentParams removed
8364       + OmMSet::mbound replaced by OmMSet::matches_
8365         {lower_bound,estimated,upper_bound}, giving more information
8366       + Xapian iterators now have default constructors
8367       + Most API classes now have reference counted internals, so assignment
8368         and copying are cheap
8369       + OmStem now has copy constructor and assignment operator
8370       + and more...