X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FIMAPsearchqp.pm;h=0c37220c9dcf3884d1ddd2b096cb03e1b784fc3e;hb=refs%2Fheads%2Fmaster;hp=78d9a20613726f1cb59df00176b24057f714c675;hpb=af0b0fb7a454470a32c452119d0392e0dedb3fe1;p=public-inbox.git diff --git a/lib/PublicInbox/IMAPsearchqp.pm b/lib/PublicInbox/IMAPsearchqp.pm index 78d9a206..0c37220c 100644 --- a/lib/PublicInbox/IMAPsearchqp.pm +++ b/lib/PublicInbox/IMAPsearchqp.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2020-2021 all contributors +# Copyright (C) all contributors # License: AGPL-3.0+ # IMAP search query parser. cf RFC 3501 @@ -124,7 +124,7 @@ sub ON { my ($self, $item) = @_; my $ts = yyyymmdd($item); my $end = $ts + 86399; # no leap day - push @{$self->{xap}}, "ts:$ts..$end"; + push @{$self->{xap}}, "rt:$ts..$end"; my $sql = $self->{sql} or return 1; $$sql .= " AND ts >= $ts AND ts <= $end"; } @@ -132,7 +132,7 @@ sub ON { sub BEFORE { my ($self, $item) = @_; my $ts = yyyymmdd($item); - push @{$self->{xap}}, "ts:..$ts"; + push @{$self->{xap}}, "rt:..$ts"; my $sql = $self->{sql} or return 1; $$sql .= " AND ts <= $ts"; } @@ -140,7 +140,7 @@ sub BEFORE { sub SINCE { my ($self, $item) = @_; my $ts = yyyymmdd($item); - push @{$self->{xap}}, "ts:$ts.."; + push @{$self->{xap}}, "rt:$ts.."; my $sql = $self->{sql} or return 1; $$sql .= " AND ts >= $ts"; } @@ -165,7 +165,7 @@ sub msn_set { # things that should not match sub impossible { my ($self) = @_; - push @{$self->{xap}}, 'bytes:..0'; + push @{$self->{xap}}, 'z:..0'; my $sql = $self->{sql} or return 1; $$sql .= ' AND num < 0'; } @@ -217,8 +217,8 @@ BEFORE_date : 'BEFORE' date { $q->BEFORE(\%item) } MSN_set : sequence_set { $q->msn_set($item{sequence_set}) } UID_set : "UID" sequence_set { $q->uid_set($item{sequence_set}) } -LARGER_number : "LARGER" number { $q->xap_only("bytes:$item{number}..") } -SMALLER_number : "SMALLER" number { $q->xap_only("bytes:..$item{number}") } +LARGER_number : "LARGER" number { $q->xap_only("z:$item{number}..") } +SMALLER_number : "SMALLER" number { $q->xap_only("z:..$item{number}") } DELETED : "DELETED" { $q->impossible } OLD : "OLD" { $q->impossible } @@ -279,6 +279,8 @@ sub parse { my $sql = ''; %$q = (sql => \$sql, imap => $imap); # imap = PublicInbox::IMAP obj # $::RD_TRACE = 1; + local $::RD_ERRORS = undef; + local $::RD_WARN = undef; my $res = eval { $prd->search_key(uc($query)) }; return $@ if $@ && $@ =~ /\A(?:BAD|NO) /; return 'BAD unexpected result' if !$res || $res != $q;