Re: [PATCH v3 6/9] lib: add date range query support

2012-09-25 Thread Michal Sojka
On Thu, Sep 13 2012, Michal Nazarewicz wrote:
 On Wed, Sep 12 2012, Jani Nikula wrote:
 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.

 IMO this is totally unintuitive and not how the range should work.
 date:foo..bar should return messages whose date = foo and  bar.  So
 for instance date:november..yesterday should return messages whose date
 is  2012/11/01 00:00:00 and  2012/09/12 00:00:00.  So to get
 yesterdays messages one would do: date:yesterday..today.

For me, date:monday..wednesday means all messages received on monday,
tuseday or wednesday. If I say Wednesday, I'm really interested in
Wednesday and not the day before Wednesday.

I'd also like to allow syntax like date:yesterday with the meaning all
messages sent yesterday. My idea how to implement this was described in
id:87bovryqp0@steelpick.2x.cz. Unfortunately, I have no time to
implement it myself.

-Michal
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH v3 6/9] lib: add date range query support

2012-09-17 Thread Michal Nazarewicz
 Michal Nazarewicz min...@mina86.com writes:
 IMO this is totally unintuitive and not how the range should work.
 date:foo..bar should return messages whose date = foo and  bar.  So
 for instance date:november..yesterday should return messages whose date
 is  2012/11/01 00:00:00 and  2012/09/12 00:00:00.  So to get
 yesterdays messages one would do: date:yesterday..today.

On Thu, Sep 13 2012, David Bremner wrote:
 I don't find ranges being half-open by default to be very
 intuitive. Perhaps I don't program in python enough.

Perhaps C than: “for (i = 0; i  10; ++i)” is the standard idiom and the
end range is open.

Let's take a look at:

date:2012/01/01..2012/01/01 + 1 day

in my opinion, that should give results from the first of January only,
since “+ 1 day” indicates in a way how long user want the period to be.

I think it's also easier to pragmatically create ranges.  For instance,
let's say you want to create ranges for each week, you'd end up with:

date:2012/01/02..2012/01/09 ## 2012w01
date:2012/01/09..2012/01/16 ## 2012w02
date:2012/01/16..2012/01/23 ## 2012w03

Notice how the opening date of a range matches the closing date of
the previous date.

-- 
Best regards, _ _
.o. | Liege of Serenely Enlightened Majesty of  o' \,=./ `o
..o | Computer Science,  Michał “mina86” Nazarewicz(o o)
ooo +email/xmpp: m...@google.com--ooO--(_)--Ooo--

pgpT8vbANXDEM.pgp
Description: PGP signature
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH v3 6/9] lib: add date range query support

2012-09-17 Thread Michal Nazarewicz
On Thu, Sep 13 2012, Jani Nikula wrote:
 I find since rounding towards past and until rounding towards future
 a very simple rule. But YMMV.

To implement rounding, each date needs to have a period of time to align
to.  I call that a duration.  But if you have such a duration than
I propose a solution where you don't need any kind of rounding.

If “yesterday” has a duration of one day, than “date:yesterday” would be
equivalent to “date:yesterday..yesterday + 1 day” and this works
perfectly well with ranges open on the right side.  So to implement date
specifications with a single date, no additional code is really
required.

-- 
Best regards, _ _
.o. | Liege of Serenely Enlightened Majesty of  o' \,=./ `o
..o | Computer Science,  Michał “mina86” Nazarewicz(o o)
ooo +email/xmpp: m...@google.com--ooO--(_)--Ooo--

pgpZJqNBZKt06.pgp
Description: PGP signature
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH v3 6/9] lib: add date range query support

2012-09-13 Thread Michal Nazarewicz
On Wed, Sep 12 2012, Jani Nikula wrote:
 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.

IMO this is totally unintuitive and not how the range should work.
date:foo..bar should return messages whose date = foo and  bar.  So
for instance date:november..yesterday should return messages whose date
is  2012/11/01 00:00:00 and  2012/09/12 00:00:00.  So to get
yesterdays messages one would do: date:yesterday..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.

-- 
Best regards, _ _
.o. | Liege of Serenely Enlightened Majesty of  o' \,=./ `o
..o | Computer Science,  Michał “mina86” Nazarewicz(o o)
ooo +email/xmpp: m...@google.com--ooO--(_)--Ooo--

pgpDvsWRcl4Af.pgp
Description: PGP signature
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH v3 6/9] lib: add date range query support

2012-09-13 Thread Tomi Ollila
On Thu, Sep 13 2012, Michal Nazarewicz min...@mina86.com wrote:

 On Wed, Sep 12 2012, Jani Nikula wrote:
 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.

 IMO this is totally unintuitive and not how the range should work.
 date:foo..bar should return messages whose date = foo and  bar.  So
 for instance date:november..yesterday should return messages whose date
 is  2012/11/01 00:00:00 and  2012/09/12 00:00:00.  So to get
 yesterdays messages one would do: date:yesterday..today.


I find yesterday..yesterday to return whole yesterday's messages more
intuitive than that returning zero messages and requiring yesterday..today
to see messages sent yesterday. However, I've noticed that range
described as -1day..-1day (if that syntax is/were supported)
that would be a bit confusing (In yesterday's case I think the length
of 'yesterday' is 24h, but in '-1day' the lenght is one second
(or something))

Anyway, this just emphasizes that this is confusing matter; we need
a good idiom to comprehend this issue...

Tomi



 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.

 -- 
 Best regards, _ _
 .o. | Liege of Serenely Enlightened Majesty of  o' \,=./ `o
 ..o | Computer Science,  Michał “mina86” Nazarewicz(o o)
 ooo +email/xmpp: 
 m...@google.com--ooO--(_)--Ooo--___
 notmuch mailing list
 notmuch@notmuchmail.org
 http://notmuchmail.org/mailman/listinfo/notmuch
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH v3 6/9] lib: add date range query support

2012-09-13 Thread David Bremner
Michal Nazarewicz min...@mina86.com writes:

 IMO this is totally unintuitive and not how the range should work.
 date:foo..bar should return messages whose date = foo and  bar.  So
 for instance date:november..yesterday should return messages whose date
 is  2012/11/01 00:00:00 and  2012/09/12 00:00:00.  So to get
 yesterdays messages one would do: date:yesterday..today.

I don't find ranges being half-open by default to be very
intuitive. Perhaps I don't program in python enough.

d

___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH v3 6/9] lib: add date range query support

2012-09-13 Thread Jani Nikula
On Thu, 13 Sep 2012, Tomi Ollila tomi.oll...@iki.fi wrote:
 On Thu, Sep 13 2012, Michal Nazarewicz min...@mina86.com wrote:

 On Wed, Sep 12 2012, Jani Nikula wrote:
 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.

 IMO this is totally unintuitive and not how the range should work.
 date:foo..bar should return messages whose date = foo and  bar.  So
 for instance date:november..yesterday should return messages whose date
 is  2012/11/01 00:00:00 and  2012/09/12 00:00:00.  So to get
 yesterdays messages one would do: date:yesterday..today.


 I find yesterday..yesterday to return whole yesterday's messages more
 intuitive than that returning zero messages and requiring yesterday..today
 to see messages sent yesterday. However, I've noticed that range
 described as -1day..-1day (if that syntax is/were supported)
 that would be a bit confusing (In yesterday's case I think the length
 of 'yesterday' is 24h, but in '-1day' the lenght is one second
 (or something))

yesterday equals 1 day, so you can use date:yesterday..yesterday and
date:1d..1d interchangeably.

 Anyway, this just emphasizes that this is confusing matter; we need
 a good idiom to comprehend this issue...

I find since rounding towards past and until rounding towards future
a very simple rule. But YMMV.

One technical aspect is preparing for handling date:expr *without*
range, for example date:yesterday, in the future (this is currently not
supported by xapian). Intuitively that should mean all messages received
yesterday. Because the date parser does not see the range (or lack of
it) at all (and this is very much by design), the glue layer in notmuch
lib between the parser and xapian should handle it gracefully, with no
understanding of expr itself. The obvious and simple way to handle that
is to just duplicate expr on both sides of the range, and date:yesterday
would equal date:yesterday..yesterday, in a way that is very simple to
implement and explain to users.


BR,
Jani.
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch