alnk once again points out that mst is an idiot
[scpubgit/Q-Branch.git] / t / 05in_between.t
index 3163aa6..ae66b90 100644 (file)
@@ -93,6 +93,26 @@ my @in_between_tests = (
       ] },
     },
     stmt => "WHERE (
+          ( start0 BETWEEN ? AND UPPER(?)         )
+      AND ( start1 BETWEEN ? AND ?                )
+      AND ( start2 BETWEEN lower(x) AND upper(y)  )
+      AND ( start3 BETWEEN lower(x) AND upper(?)  )
+    )",
+    bind => [1, 2, 1, 2, 'stuff'],
+    test => '-between POD test',
+  },
+  {
+    args => { restore_old_unop_handling => 1 },
+    where => {
+      start0 => { -between => [ 1, { -upper => 2 } ] },
+      start1 => { -between => \["? AND ?", 1, 2] },
+      start2 => { -between => \"lower(x) AND upper(y)" },
+      start3 => { -between => [
+        \"lower(x)",
+        \["upper(?)", 'stuff' ],
+      ] },
+    },
+    stmt => "WHERE (
           ( start0 BETWEEN ? AND UPPER ?          )
       AND ( start1 BETWEEN ? AND ?                )
       AND ( start2 BETWEEN lower(x) AND upper(y)  )
@@ -113,6 +133,32 @@ my @in_between_tests = (
       ] },
     },
     stmt => "WHERE (
+          ( start0 BETWEEN ? AND UPPER(?)         )
+      AND ( start1 BETWEEN ? AND ?                )
+      AND ( start2 BETWEEN lower(x) AND upper(y)  )
+      AND ( start3 BETWEEN lower(x) AND upper(?)  )
+    )",
+    bind => [
+      [ start0 => 1 ],
+      [ start0 => 2 ],
+      [ start1 => 1 ],
+      [ start1 => 2 ],
+      [ start3 => 'stuff' ],
+    ],
+    test => '-between POD test',
+  },
+  {
+    args => { restore_old_unop_handling => 1, bindtype => 'columns' },
+    where => {
+      start0 => { -between => [ 1, { -upper => 2 } ] },
+      start1 => { -between => \["? AND ?", [ start1 => 1], [start1 => 2] ] },
+      start2 => { -between => \"lower(x) AND upper(y)" },
+      start3 => { -between => [
+        \"lower(x)",
+        \["upper(?)", [ start3 => 'stuff'] ],
+      ] },
+    },
+    stmt => "WHERE (
           ( start0 BETWEEN ? AND UPPER ?          )
       AND ( start1 BETWEEN ? AND ?                )
       AND ( start2 BETWEEN lower(x) AND upper(y)  )
@@ -204,6 +250,13 @@ my @in_between_tests = (
 
   {
     where => { x => { -in => [ \['LOWER(?)', 'A' ], \'LOWER(b)', { -lower => 'c' } ] } },
+    stmt => " WHERE ( x IN ( LOWER(?), LOWER(b), LOWER(?) ) )",
+    bind => [qw/A c/],
+    test => '-in with an array of function array refs with args',
+  },
+  {
+    args => { restore_old_unop_handling => 1 },
+    where => { x => { -in => [ \['LOWER(?)', 'A' ], \'LOWER(b)', { -lower => 'c' } ] } },
     stmt => " WHERE ( x IN ( LOWER(?), LOWER(b), LOWER ? ) )",
     bind => [qw/A c/],
     test => '-in with an array of function array refs with args',
@@ -307,6 +360,31 @@ my @in_between_tests = (
     bind => [ 2, 3, 4 ],
     test => 'Top level -between with useful LHS',
   },
+  {
+    where => {
+      -in => [
+        { -row => [ 'x', 'y' ] },
+        { -row => [ 1, 2 ] },
+        { -row => [ 3, 4 ] },
+      ],
+    },
+    stmt => ' WHERE (x, y) IN ((?, ?), (?, ?))',
+    bind => [ 1..4 ],
+    test => 'Complex top-level -in',
+  },
+  {
+    where => { -is => [ 'bob', undef ] },
+    stmt => ' WHERE bob IS NULL',
+    bind => [],
+    test => 'Top level -is ok',
+  },
+  {
+    where => { -op => [ in => x => 1, 2, 3 ] },
+    stmt => ' WHERE x IN (?, ?, ?)',
+    bind => [ 1, 2, 3 ],
+    test => 'Raw -op passes through correctly'
+  },
+
 );
 
 for my $case (@in_between_tests) {