Failing test
[scpubgit/Q-Branch.git] / t / 02where.t
old mode 100755 (executable)
new mode 100644 (file)
index 1bdb8cb..0790a64
@@ -117,6 +117,14 @@ my @handle_tests = (
 
     {
         where => {  
+            requestor => { '!=', ['-and', undef, ''] },
+        },
+        stmt => " WHERE ( requestor IS NOT NULL AND requestor != ? )",
+        bind => [''],
+    },
+
+    {
+        where => {  
             priority  => [ {'>', 3}, {'<', 1} ],
             requestor => { '!=', undef }, 
         },
@@ -170,10 +178,17 @@ my @handle_tests = (
 
     {
         where => {
-            id  => [],
             bar => {'!=' => []},
         },
-        stmt => " WHERE ( 1=1 AND 0=1 )",
+        stmt => " WHERE ( 1=1 )",
+        bind => [],
+    },
+
+    {
+        where => {
+            id  => [],
+        },
+        stmt => " WHERE ( 0=1 )",
         bind => [],
     },
 
@@ -209,86 +224,115 @@ my @handle_tests = (
        stmt => " WHERE (foo = ?)",
        bind => [ "bar" ],
    },
-);
 
-# add extra modifier tests, based on 2 outcomes
-my $mod_or_and = {
-  stmt => 'WHERE ( foo = ? OR bar = ? ) AND baz = ? ',
-  bind => [qw/1 2 3/],
-};
-my $mod_or_or = {
-  stmt => 'WHERE ( foo = ? OR bar = ? ) OR baz = ?',
-  bind => [qw/1 2 3/],
-};
-my $mod_and_or = {
-  stmt => 'WHERE ( foo = ? AND bar = ? ) OR baz = ?',
-  bind => [qw/1 2 3/],
-};
+   {
+       where => { -bool => \'function(x)' },
+       stmt => " WHERE function(x)",
+       bind => [],
+   },
 
-push @handle_tests, (
-   # test modifiers within hashrefs
    {
-      where => { -or => [
-        [ foo => 1, bar => 2 ],
-        baz => 3,
-      ]},
-      %$mod_or_or,
+       where => { -bool => 'foo' },
+       stmt => " WHERE foo",
+       bind => [],
    },
+
    {
-      where => { -and => [
-        [ foo => 1, bar => 2 ],
-        baz => 3,
-      ]},
-      %$mod_or_and,
+       where => { -and => [-bool => 'foo', -bool => 'bar'] },
+       stmt => " WHERE foo AND bar",
+       bind => [],
    },
 
-   # test modifiers within arrayrefs
    {
-      where => [ -or => [
-        [ foo => 1, bar => 2 ],
-        baz => 3,
-      ]],
-      %$mod_or_or,
+       where => { -or => [-bool => 'foo', -bool => 'bar'] },
+       stmt => " WHERE foo OR bar",
+       bind => [],
    },
+
    {
-      where => [ -and => [
-        [ foo => 1, bar => 2 ],
-        baz => 3,
-      ]],
-      %$mod_or_and,
+       where => { -not_bool => \'function(x)' },
+       stmt => " WHERE NOT function(x)",
+       bind => [],
    },
 
-   # test ambiguous modifiers within hashrefs (op extends to to immediate RHS only)
    {
-      where => { -and => [ -or =>
-        [ foo => 1, bar => 2 ],
-        baz => 3,
-      ]},
-      %$mod_or_and,
+       where => { -not_bool => 'foo' },
+       stmt => " WHERE NOT foo",
+       bind => [],
    },
+
    {
-      where => { -or => [ -and =>
-        [ foo => 1, bar => 2 ],
-        baz => 3,
-      ]},
-      %$mod_and_or,
+       where => { -and => [-not_bool => 'foo', -not_bool => 'bar'] },
+       stmt => " WHERE (NOT foo) AND (NOT bar)",
+       bind => [],
    },
 
-   # test ambiguous modifiers within arrayrefs (op extends to to immediate RHS only)
    {
-      where => [ -and => [ -or =>
-        [ foo => 1, bar => 2 ],
-        baz => 3,
-      ]],
-      %$mod_or_and,
+       where => { -or => [-not_bool => 'foo', -not_bool => 'bar'] },
+       stmt => " WHERE (NOT foo) OR (NOT bar)",
+       bind => [],
    },
+
    {
-      where => [ -or => [ -and =>
-        [ foo => 1, bar => 2 ],
-        baz => 3,
-      ]],
-      %$mod_and_or,
+       where => { -bool => \['function(?)', 20]  },
+       stmt => " WHERE function(?)",
+       bind => [20],
    },
+
+   {
+       where => { -not_bool => \['function(?)', 20]  },
+       stmt => " WHERE NOT function(?)",
+       bind => [20],
+   },
+
+   {
+       where => { -bool => { a => 1, b => 2}  },
+       stmt => " WHERE a = ? AND b = ?",
+       bind => [1, 2],
+   },
+
+   {
+       where => { -bool => [ a => 1, b => 2] },
+       stmt => " WHERE a = ? OR b = ?",
+       bind => [1, 2],
+   },
+
+   {
+       where => { -not_bool => { a => 1, b => 2}  },
+       stmt => " WHERE NOT (a = ? AND b = ?)",
+       bind => [1, 2],
+   },
+
+   {
+       where => { -not_bool => [ a => 1, b => 2] },
+       stmt => " WHERE NOT ( a = ? OR b = ? )",
+       bind => [1, 2],
+   },
+
+# Op against internal function
+   {
+       where => { bool1 => { '=' => { -not_bool => 'bool2' } } },
+       stmt => " WHERE ( bool1 = NOT(bool2) )",
+       bind => [],
+   },
+   {
+       where => { -not_bool => { -not_bool => { -not_bool => 'bool2' } } },
+       stmt => " WHERE ( NOT ( NOT ( NOT bool2 ) ) )",
+       bind => [],
+   },
+
+# Op against random functions (these two are oracle-specific)
+   {
+       where => { timestamp => { '!=' => { -trunk => \'sysdate' } } },
+       stmt => " WHERE ( timestamp != TRUNC(sysdate) )",
+       bind => [],
+   },
+   {
+       where => { timestamp => { '>=' => { -TO_DATE => '2009-12-21 00:00:00' } } },
+       stmt => " WHERE ( timestamp >= TO_DATE(?) )",
+       bind => ['2009-12-21 00:00:00'],
+   },
+
 );
 
 plan tests => ( @handle_tests * 2 ) + 1;