summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/docs/1118
-rw-r--r--lib/Multi/API.pm12
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>= != &gt; &gt;= &lt; &lt;=<br />= !=</td>
- <td>&nbsp;</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>&nbsp;</td>
</tr>
<tr>
+ <td>released</td>
+ <td>null<br />date (string)</td>
+ <td>= !=<br />= != &gt; &gt;= &lt; &lt;=</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>&nbsp;</td>
</tr>
- <tr class="odd">
+ <tr>
<td>languages</td>
<td>null<br />string<br />array of strings</td>
<td><br />= !=</td>
<td>&nbsp;</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' ],