API:
* Database::check(): Fix checking of replication changesets. This reverts a
change incorrectly made in 1.3.7.
* Database::locked(): Return false instead of true for a closed inmemory DB.
* Database::commit(): If commit() failed with an exception while trying to add
pending changes (e.g. InvalidArgumentError due to a long term containing zero
bytes) then a subsequent commit() on the same object would throw the same
exception. Now we clear the pending changes in this situation (like we
already did for failure at other stages in the commit). This bug remains
unfixed for the chert backend as it's harder to fix there and the effort to
fix it and extra risk of breakage don't seem justified for a backend we
recommend people migrate away from.
* QueryParser::parse_query(): Optimise parsing of multi-word synonyms.
testsuite:
* Use 50-word synonym for qp_scale1 "large" case. 50 divides exactly into the
number of repetitions we do for the "small" case, which 60 (as used before)
doesn't. This makes the two cases a little more comparable and should help
make this testcase less flaky (see #764).
* Adjust testcase matches1 to work with remote shards where the matcher can
return slightly better bounds on the number of matches in some cases.
Resolves 2 XFAILs.
* The testharness get_remote_database() method is now supported for sharded
databases. This is needed for keepalive1 to run successfully under multi
test backends. Resolves 2 XFAILs of keepalive1.
* Improved test coverage:
+ Test locked() on a closed WritableDatabase, which already returns false (as
expected) in 1.4.x (but was broken on master).
+ Check multi databases in testsuite - this has been supported by
Database::check() since 1.4.12.
+ Also test OP_SYNONYM and OP_MAX in emptydb1.
+ Backport testcases boolorbug1, emptynot1, emptymaybe1 and
phraseweightcheckbug1 from git master - these are regression tests for
fixed bugs which only affected git master, but it's useful to confirm that
these bugs don't currently affect 1.4, and ensure they don't get introduced.
* perftest: Store memory sizes as long long since on Microsoft Windows long is
only 32 bits, which is less than common memory sizes.
matcher:
* Hoist positional check above OP_FILTER.
* Handle OP_FILTER with more than two subqueries correctly. Previously we'd
only check the first two subqueries in some situations.
remote backend:
* For a remote WritableDatabase, the client now keeps track of whether there
are pending changes, and if there aren't then we now do nothing for commit()
or cancel() calls. In particular this saves a message exchange when the
WritableDatabase destructor is called when changes have already been
committed with an explicit call to commit() (which is what we recommend
doing, since with an explicit call to commit() you get to see any exception
which gets thrown).
* When closing a remote prog WritableDatabase, previously an exception could
leave the remote connection open with the remote server running, and we'd
then wait for the specified timeout before closing the connection. Now we
close the connection before letting the exception propagate.
* Don't swallow exceptions from Database::close() on a remote database. If
we aren't in a transaction and so try to commit() and that fails then
previously the caller would have no indication of the failure.
* Fix handling the reported term weight when remote shards are searched.
Fixes 5 XFAILs in the testsuite.
* Add missing space to mismatching protocol versions error message.
build system:
* Fix to build when configured with --disable-backend-remote, broken by changes
in 1.4.14. Fixes#797, reported by Дилян Палаузов.
* The clang and icc compilers both define __GNUC__, which led our ABI mismatch
message to report them as "g++" with a bogus version (the version of GCC that
these compilers advertise themselves as, which for clang is always 4.2.0) -
now we report clang++ or icc along with the actual version of that compiler.
documentation:
* AUTHORS: Apply missed update to the thankyou list for 1.4.14.
* INSTALL: Note that MSVC 2019 works.
* INSTALL: Note that Xapian can use the system uuid.h on AIX and OpenBSD.
portability:
* Simplify probes for snprintf. The broken snprintf in libbsd in Linux libc4
is from ~25 years ago so way too ancient to matter now, and all callers
already handle the pre-ISO semantics of returning -1 for an undersize buffer
so we don't need to run a test program to probe for this at configure time,
which is more cross-compile friendly.
* Don't quote messages in #error - the quotes aren't required and appear in the
compiler output (at least with GCC and clang) making it less readable.
* Use a different approach for getting a 64-bit capable stat() for mingw32.
This means we now use the same stat variant for mingw32 and MSVC, which
seems a better plan.
* Work around unhelpful config.status behaviour. It comments out any #undef
lines in config.h, even those added via AH_TOP and AH_BOTTOM. Splitting
these lines means they don't match the regex hammer config.status uses.
* Avoid -Wdeprecated-copy warnings from clang 10.
* Avoid deprecation warning on recent Linux. We were including sys/sysctl.h if
it existed, which it does on Linux but we don't actually use it there.
Including it now warns that it is deprecated, so skip including it under
Linux. Reported on IRC by kumaran.
* Suppress GCC -Wduplicated-branches warning from our API headers in a
different way which avoids needing a compiler-specific #pragma.
* Workaround closefrom1 failure on macOS. It seems under macOS our fd tracking
can end up using fd 10 so start from 13 when testing closefrom() so we don't
close the fd which our fd tracking is using internally.
debug code:
* Log RemoteConnection::read_at_least() return value.