Make more stuff work with HashAST
[dbsrgits/SQL-Abstract-2.0-ish.git] / t / 100_where_basic.t
index d508ada..d8f6783 100644 (file)
@@ -9,31 +9,63 @@ use_ok('SQL::Abstract') or BAIL_OUT( "$@" );
 my $sqla = SQL::Abstract->create(1);
 
 is $sqla->dispatch(
-  [ -where =>
-      [ '>', [-name => qw/me id/], [-value => 500 ] ]
-  ]
-), "WHERE me.id > ?", 
+  { -type => 'expr',
+    op => '>',
+    args => [
+      {-type => name => args => [qw/me id/] }, 
+      { -type => 'value', value => 500 }
+    ]
+  }
+), "me.id > ?", 
    "simple where clause";
 
 is $sqla->dispatch(
-  [ -in => [  ] ]
+  { -type => 'expr', op => 'in', args => [  ] }
 ), "0 = 1", "emtpy -in";
 
 is $sqla->dispatch(
-  [ -where =>
-      [ '>', [-name => qw/me id/], [-value => 500 ] ]
-  ]
-), "WHERE me.id > ?", 
-   "simple where clause";
+  { -type => 'expr', 
+    op => 'in', 
+    args => [ { -type => 'name', args => ['foo'] } ],
+  }
+), "0 = 1", "emtpy -in";
 
-eq_or_diff( [ SQL::Abstract->generate(
-    [ -ast_version => 1,
-      -where =>
-        [ '>', [-name => qw/me id/], [-value => 500 ] ],
-        [ '==', [-name => qw/me name/], [-value => '200' ] ]
+is $sqla->dispatch(
+  { -type => 'expr',
+    op => '>',
+    args => [
+      {-type => 'name', args => [qw/me id/]}, 
+      {-type => 'value', value => 500 }
+    ]
+  }
+), "me.id > ?", 
+   "simple expr clause";
+
+my $cols = [
+  { -type => 'expr',
+    op => '>',
+    args => [
+      {-type => 'name', args => [qw/me id/]}, 
+      {-type => 'value', value => 500 }
     ]
+  },
+  { -type => 'expr',
+    op => '==',
+    args => [
+      {-type => 'name', args => [qw/me name/]}, 
+      {-type => 'value', value => '200' }
+    ]
+  },
+];
+
+eq_or_diff( [ SQL::Abstract->generate(
+    { -ast_version => 1,
+      -type => 'expr',
+      op => 'and',
+      args => $cols,
+    }
   ) ], 
-  [ "WHERE me.id > ? AND me.name = ?",
+  [ "me.id > ? AND me.name = ?",
     [ 500,
       '200'
     ]
@@ -43,36 +75,36 @@ eq_or_diff( [ SQL::Abstract->generate(
 
 
 is $sqla->dispatch(
-  [ -where =>  -or =>
-      [ '>', [-name => qw/me id/], [-value => 500 ] ],
-      [ '==', [-name => qw/me name/], [-value => '200' ] ],
-  ]
-), "WHERE me.id > ? OR me.name = ?", 
+  { -type => 'expr',  op => 'or', args => $cols }
+), "me.id > ? OR me.name = ?", 
    "where clause (simple or)";
 
 
 is $sqla->dispatch(
-  [ -where =>  -or =>
-      [ '>', [-name => qw/me id/], [-value => 500 ] ],
-      [ -or => 
-        [ '==', [-name => qw/me name/], [-value => '200' ] ],
-        [ '==', [-name => qw/me name/], [-value => '100' ] ]
-      ]
-  ]
-), "WHERE me.id > ? OR me.name = ? OR me.name = ?",
+  { -type => 'expr', op => 'or',
+    args => [
+      { -type => 'expr', op => '==', 
+        args => [ {-type => 'name', args => [qw/me name/] }, {-type => 'value', value => 500 } ]
+      },
+      { -type => 'expr', op => 'or', args => $cols }
+    ]
+  }
+), "me.name = ? OR me.id > ? OR me.name = ?",
    "where clause (nested or)";
 
 is $sqla->dispatch(
-  [ -where =>  -or =>
-      [ '==', [-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 < ?", 
+  { -type => 'expr', op => 'or',
+    args => [
+      { -type => 'expr', op => '==', 
+        args => [ {-type => 'name', args => [qw/me name/] }, {-type => 'value', value => 500 } ]
+      },
+      { -type => 'expr', op => 'and', args => $cols }
+    ]
+  }
+), "me.name = ? OR me.id > ? AND me.name = ?", 
    "where clause (inner and)";
 
+__END__
 is $sqla->dispatch(
   [ -where =>  -and =>
       [ '==', [-name => qw/me id/], [-value => 500 ] ],