Document and test non-reference { -in => ... }
Dagfinn Ilmari Mannsåker [Wed, 4 Dec 2013 15:16:13 +0000 (15:16 +0000)]
Also test the documented but untested { -in => [] } optimisation.

lib/SQL/Abstract.pm
t/01generate.t

index 4609e5d..de10fcd 100644 (file)
@@ -2231,7 +2231,8 @@ would generate:
     )";
     @bind = ('2000');
 
-
+Finally, if the argument to C<-in> is not a reference, it will be
+treated as a single-element array.
 
 Another pair of operators is C<-between> and C<-not_between>,
 used with an arrayref of two values:
index 60dea0d..f015d27 100644 (file)
@@ -538,6 +538,14 @@ my @tests = (
               stmt_q => 'SELECT * FROM `test` WHERE ( `Y` = ( MAX( LENGTH( MIN ? ) ) ) )',
               bind   => [[Y => 'x']],
       },
+      {
+              func => 'select',
+              args => ['test', '*', { a => { -in => [] }, b => { -not_in => [] }, c => { -in => 42 } }],
+              stmt => 'SELECT * FROM test WHERE ( 0=1 AND 1=1 AND c IN ( ? ))',
+              stmt_q => 'SELECT * FROM `test` WHERE ( 0=1 AND 1=1 AND `c` IN ( ? ))',
+              bind => [ 42 ],
+      },
+
 );
 
 for my $t (@tests) {