Add IN generator
Ash Berlin [Tue, 3 Mar 2009 09:30:08 +0000 (09:30 +0000)]
lib/SQL/Abstract.pm
t/001_basic.t

index d1dc021..5026129 100644 (file)
@@ -183,6 +183,15 @@ class SQL::Abstract {
     );
   }
 
+  method _in($ast) {
+    my (undef, $field, @values) = @$ast;
+
+    return $self->generate($field) .
+           " IN (" .
+           join(", ", map { $self->generate($_) } @values ) .
+           ")";
+  }
+
   method _generic_func(ArrayRef $ast) {
   }
 
index 224c81b..bd6220f 100644 (file)
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 14;
+use Test::More tests => 15;
 use Test::Differences;
 
 use_ok('SQL::Abstract') or BAIL_OUT( "$@" );
@@ -109,3 +109,21 @@ is $sqla->generate(
       ]
   ]
 ), "WHERE me.id = ? AND (me.name > ? OR me.name < ?)", "where clause";
+
+eq_or_diff(
+  [SQL::Abstract->generate(
+    [ -where => 
+      [ -in => 
+        [-name => qw/me id/],
+        [-value => '100' ],
+        [-value => '200' ],
+        [-value => '300' ],
+      ]
+    ]
+  ) ],
+
+  [ "WHERE me.id IN (?, ?, ?)", 
+    [ qw/100 200 300/]
+  ],
+  
+  "where IN clause");