diff options
-rw-r--r-- | data/docs/11 | 18 | ||||
-rw-r--r-- | lib/Multi/API.pm | 12 |
2 files changed, 27 insertions, 3 deletions
diff --git a/data/docs/11 b/data/docs/11 index 5a222372..58b86d4c 100644 --- a/data/docs/11 +++ b/data/docs/11 @@ -52,6 +52,7 @@ server resources and prevent abuse of this service.</p> <ul> <li>5 connections per IP. All connections that are opened after reaching this limit will be immediately closed.</li> <li>3 connections per user. The login command will reply with a 'sesslimit' error when reaching this limit.</li> + <li>Each command currently returns at most 10 results. <i>TODO: make configurable?</i></li> <li><i>more to come...</i></li> </ul> @@ -317,7 +318,10 @@ however still required.<br /> <td>id</td> <td>integer<br />array of integers</td> <td>= != > >= < <=<br />= !=</td> - <td> </td> + <td> + When you need to fetch info about multiple VNs, it is recommended to do so + in one command using an array of integers as value. e.g. (id = [7,11,17]). + </td> </tr> <tr> <td>title</td> @@ -332,18 +336,26 @@ however still required.<br /> <td> </td> </tr> <tr> + <td>released</td> + <td>null<br />date (string)</td> + <td>= !=<br />= != > >= < <=</td> + <td> + Note that matching on partial dates (released = "2009") doesn't do what + you want, use ranges instead, e.g. (released > "2008" and released <= "2009"). + </td> + <tr class="odd"> <td>platforms</td> <td>null<br />string<br />array of strings</td> <td><br />= !=</td> <td> </td> </tr> - <tr class="odd"> + <tr> <td>languages</td> <td>null<br />string<br />array of strings</td> <td><br />= !=</td> <td> </td> </tr> - <tr> + <tr class="odd"> <td>search</td> <td>string</td> <td>~</td> diff --git a/lib/Multi/API.pm b/lib/Multi/API.pm index ddd907f1..f734da7c 100644 --- a/lib/Multi/API.pm +++ b/lib/Multi/API.pm @@ -63,6 +63,14 @@ sub formatdate { } +sub parsedate { + return 0 if !defined $_[0]; + return \'Invalid date value' if $_[0] !~ /^(?:tba|\d{4}(?:-\d{2}(?:-\d{2})?)?)$/; + my @v = split /-/, $_[0]; + return $v[0] eq 'tba' ? 99999999 : @v==1 ? "$v[0]9999" : @v==2 ? "$v[0]$v[1]99" : $v[0].$v[1].$v[2]; +} + + # see the notes after __END__ for an explanation of what this function does sub filtertosql { my($c, $p, $t, $field, $op, $value) = ($_[1], $_[2], $_[3], @{$_[0]}); @@ -107,6 +115,7 @@ sub filtertosql { $_ = sprintf $o{process}, $_; } elsif(ref($o{process}) eq 'CODE') { $_ = $o{process}->($_); + return cerr $c, filter => $$_, %e if ref($_) eq 'SCALAR'; } elsif(${$o{process}} eq 'like') { y/%//; $_ = "%$_%"; @@ -312,6 +321,9 @@ sub get_vn { [ undef, "vr.original :op: ''", {qw|= = != <>|} ], [ str => 'vr.original :op: :value:', {qw|= = != <>|} ], [ str => 'vr.original ILIKE :value:', {'~',1}, process => \'like' ] + ], [ 'released', + [ undef, 'v.c_released :op: 0', {qw|= = != <>|} ], + [ str => 'v.c_released :op: :value:', {qw|= = != <> > > < < <= <= >= >=|}, process => \&parsedate ], ], [ 'platforms', [ undef, "v.c_platforms :op: ''", {qw|= = != <>|} ], [ str => 'v.c_platforms :op: :value:', {'=' => 'LIKE', '!=' => 'NOT LIKE'}, process => \'like' ], |