A yet more-smarter parser for SQLA::Test - any smarter than that and we go skynet
[dbsrgits/SQL-Abstract.git] / t / 10test.t
index 8f1ceae..c1057c6 100644 (file)
@@ -99,20 +99,28 @@ my @sql_tests = (
       },
       {
         equal => 1,
-        todo => '( (x AND y) AND z ) should be reducable to ( x AND y AND z )',
         statements => [
           q/SELECT foo FROM bar WHERE a = 1 AND b = 1 AND c = 1/,
           q/SELECT foo FROM bar WHERE (a = 1 AND b = 1) AND c = 1/,
           q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 AND c = 1)/,
+          q/SELECT foo FROM bar WHERE ((((a = 1))) AND (b = 1 AND c = 1))/,
         ]
       },
       {
         equal => 1,
-        todo => '( (x OR y) OR z ) should be reducable to ( x OR y OR z )',
         statements => [
           q/SELECT foo FROM bar WHERE a = 1 OR b = 1 OR c = 1/,
           q/SELECT foo FROM bar WHERE (a = 1 OR b = 1) OR c = 1/,
           q/SELECT foo FROM bar WHERE a = 1 OR (b = 1 OR c = 1)/,
+          q/SELECT foo FROM bar WHERE a = 1 OR ((b = 1 OR (c = 1)))/,
+        ]
+      },
+      {
+        equal => 1,
+        statements => [
+          q/SELECT foo FROM bar WHERE (a = 1) AND (b = 1 OR c = 1 OR d = 1) AND (e = 1 AND f = 1)/,
+          q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 OR c = 1 OR d = 1) AND e = 1 AND (f = 1)/,
+          q/SELECT foo FROM bar WHERE ( ((a = 1) AND ( b = 1 OR (c = 1 OR d = 1) )) AND ((e = 1)) AND f = 1) /,
         ]
       },
 
@@ -192,6 +200,20 @@ my @sql_tests = (
           q/SELECT foo FROM bar WHERE a = 1 OR (b = 1 AND c = 1)/,
         ]
       },
+      {
+        equal => 0,
+        statements => [
+          # BETWEEN with/without parenthesis around itself/RHS is a sticky business
+          # if I made a mistake here, simply rewrite the special BETWEEN handling in
+          # _recurse_parse()
+          #
+          # by RIBASUSHI
+          q/SELECT foo FROM bar WHERE ( completion_date BETWEEN ? AND ? AND status = ? )/,
+          q/SELECT foo FROM bar WHERE completion_date BETWEEN (? AND ?) AND status = ?/,
+          q/SELECT foo FROM bar WHERE ( (completion_date BETWEEN (? AND ?) ) AND status = ? )/,
+          q/SELECT foo FROM bar WHERE ( (completion_date BETWEEN (? AND ? AND status = ?) ) )/,
+        ]
+      },
 
       # JOIN condition - equal
       {