Require -ast_version to generate (and un-dual life it. Now is class method only)
[dbsrgits/SQL-Abstract-2.0-ish.git] / t / 001_basic.t
index 0ad697f..a482a6d 100644 (file)
@@ -1,15 +1,16 @@
 use strict;
 use warnings;
 
-use Test::More tests => 9;
+use Test::More tests => 15;
+use Test::Differences;
 
 use_ok('SQL::Abstract') or BAIL_OUT( "$@" );
 
-    $DB::single = 1;
-is SQL::Abstract->generate( [ -name => qw/me id/]), "me.id",
+my $sqla = SQL::Abstract->new(ast_version => 1);
+is $sqla->dispatch( [ -name => qw/me id/]), "me.id",
   "Simple name generator";
 
-is SQL::Abstract->generate(
+is $sqla->dispatch(
   [ -list => 
     [ -name => qw/me id/],
     [ -name => qw/me foo bar/],
@@ -18,50 +19,113 @@ is SQL::Abstract->generate(
 ), "me.id, me.foo.bar, bar",
   "List generator";
 
-is SQL::Abstract->generate(
+is $sqla->dispatch(
   [ -alias => [ -name => qw/me id/], "foobar", ] 
 ), "me.id AS foobar",
   "Alias generator";
 
-is SQL::Abstract->generate(
-  [ -where =>
-      [ '>', [-name => qw/me.id/], [-value => 500 ] ]
+is $sqla->dispatch(
+  [ -order_by => [ -name => qw/me date/ ] ]
+), "ORDER BY me.date";
+
+is $sqla->dispatch(
+  [ -order_by => 
+    [ -name => qw/me date/ ],
+    [ -name => qw/me foobar/ ],
   ]
-), "WHERE me.id > ?", "where clause";
+), "ORDER BY me.date, me.foobar";
 
+is $sqla->dispatch(
+  [ -order_by => [ -desc => [ -name => qw/me date/ ] ] ]
+), "ORDER BY me.date DESC";
 
-is SQL::Abstract->generate(
+
+is $sqla->dispatch(
   [ -where =>
-      [ '>', [-name => qw/me.id/], [-value => 500 ] ],
-      [ '==', [-name => qw/me.name/], [-value => '200' ] ]
+      [ '>', [-name => qw/me id/], [-value => 500 ] ]
   ]
-), "WHERE me.id > ? AND me.name = ?", "where clause";
+), "WHERE me.id > ?", "where clause";
 
+eq_or_diff( [ SQL::Abstract->generate(
+    [ -ast_version => 1,
+      -where =>
+        [ '>', [-name => qw/me id/], [-value => 500 ] ],
+        [ '==', [-name => qw/me name/], [-value => '200' ] ]
+    ]
+  ) ], 
+  [ "WHERE me.id > ? AND me.name = ?",
+    [ 500,
+      '200'
+    ]
+  ],
+  "Where with binds"
+);
 
-is SQL::Abstract->generate(
+
+is $sqla->dispatch(
   [ -where =>  -or =>
-      [ '>', [-name => qw/me.id/], [-value => 500 ] ],
-      [ '==', [-name => qw/me.name/], [-value => '200' ] ],
+      [ '>', [-name => qw/me id/], [-value => 500 ] ],
+      [ '==', [-name => qw/me name/], [-value => '200' ] ],
   ]
 ), "WHERE me.id > ? OR me.name = ?", "where clause";
 
 
-is SQL::Abstract->generate(
+is $sqla->dispatch(
   [ -where =>  -or =>
-      [ '>', [-name => qw/me.id/], [-value => 500 ] ],
+      [ '>', [-name => qw/me id/], [-value => 500 ] ],
       [ -or => 
-        [ '==', [-name => qw/me.name/], [-value => '200' ] ],
-        [ '==', [-name => qw/me.name/], [-value => '100' ] ]
+        [ '==', [-name => qw/me name/], [-value => '200' ] ],
+        [ '==', [-name => qw/me name/], [-value => '100' ] ]
       ]
   ]
 ), "WHERE me.id > ? OR me.name = ? OR me.name = ?", "where clause";
 
-is SQL::Abstract->generate(
+is $sqla->dispatch(
   [ -where =>  -or =>
-      [ '==', [-name => qw/me.id/], [-value => 500 ] ],
+      [ '==', [-name => qw/me id/], [-value => 500 ] ],
+      [ -and => 
+        [ '>', [-name => qw/me name/], [-value => '200' ] ],
+        [ '<', [-name => qw/me name/], [-value => '100' ] ]
+      ]
+  ]
+), "WHERE me.id = ? OR me.name > ? AND me.name < ?", "where clause";
+
+is $sqla->dispatch(
+  [ -where =>  -and =>
+      [ '==', [-name => qw/me id/], [-value => 500 ] ],
       [ -and => 
-        [ '>', [-name => qw/me.name/], [-value => '200' ] ],
-        [ '<', [-name => qw/me.name/], [-value => '100' ] ]
+        [ '>', [-name => qw/me name/], [-value => '200' ] ],
+        [ '<', [-name => qw/me name/], [-value => '100' ] ]
       ]
   ]
-), "WHERE me.id = ? OR (me.name > ? AND me.name < ?)", "where clause";
+), "WHERE me.id = ? AND me.name > ? AND me.name < ?", "where clause";
+
+
+is $sqla->dispatch(
+  [ -where =>  -and =>
+      [ '==', [-name => qw/me id/], [-value => 500 ] ],
+      [ -or => 
+        [ '>', [-name => qw/me name/], [-value => '200' ] ],
+        [ '<', [-name => qw/me name/], [-value => '100' ] ]
+      ]
+  ]
+), "WHERE me.id = ? AND (me.name > ? OR me.name < ?)", "where clause";
+
+eq_or_diff(
+  [SQL::Abstract->generate(
+    [ -ast_version => 1,
+      -where =>
+      [ -in => 
+        [-name => qw/me id/],
+        [-value => '100' ],
+        [-value => '200' ],
+        [-value => '300' ],
+      ]
+    ]
+  ) ],
+
+  [ "WHERE me.id IN (?, ?, ?)", 
+    [ qw/100 200 300/]
+  ],
+  
+  "where IN clause");