lib: add date range query support
authorJani Nikula <jani@nikula.org>
Tue, 30 Oct 2012 20:32:37 +0000 (22:32 +0200)
committerDavid Bremner <bremner@debian.org>
Wed, 31 Oct 2012 19:55:32 +0000 (16:55 -0300)
commit90cd1bac4eeb0d57fbe2740625aaa58d8d925ee5
tree13c81b12feb15fa6247476c94a75885354315df1
parentaf6b4b29f97b1f457bb7220491bf37536e1b9d7a
lib: add date range query support

Add a custom value range processor to enable date and time searches of
the form date:since..until, where "since" and "until" are expressions
understood by the previously added date/time parser, to restrict the
results to messages within a particular time range (based on the Date:
header).

If "since" or "until" describes date/time at an accuracy of days or
less, the values are rounded according to the accuracy, towards past
for "since" and towards future for "until". For example,
date:november..yesterday would match from the beginning of November
until the end of yesterday. Expressions such as date:today..today
means since the beginning of today until the end of today.

Open-ended ranges are supported (since Xapian 1.2.1), i.e. you can
specify date:..until or date:since.. to not limit the start or end
date, respectively.

CAVEATS:

Xapian does not support spaces in range expressions. You can replace
the spaces with '_', or (in most cases) '-', or (in some cases) leave
the spaces out altogether.

Entering date:expr without ".." (for example date:yesterday) will not
work as you might expect. You can achieve the expected result by
duplicating the expr both sides of ".." (for example
date:yesterday..yesterday).

Open-ended ranges won't work with pre-1.2.1 Xapian, but they don't
produce an error either.

Signed-off-by: Jani Nikula <jani@nikula.org>
lib/Makefile.local
lib/database-private.h
lib/database.cc
lib/parse-time-vrp.cc [new file with mode: 0644]
lib/parse-time-vrp.h [new file with mode: 0644]