Massive SQLA::Test rewrite - make it handle ()s sanely, instead of pruning them at...
[dbsrgits/SQL-Abstract.git] / t / 10test.t
index f114d51..d099cbd 100644 (file)
@@ -97,6 +97,32 @@ my @sql_tests = (
           /,
         ]
       },
+      {
+        equal => 1,
+        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,
+        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) /,
+        ]
+      },
 
       # WHERE condition - different
       {
@@ -158,6 +184,22 @@ my @sql_tests = (
           q/SELECT foo FROM bar JOIN quux ON a = 1 WHERE a = 1 AND b = 1/,
         ]
       },
+      {
+        equal => 0,
+        statements => [
+          q/SELECT foo FROM bar WHERE a = 1 AND b = 1 OR c = 1/,
+          q/SELECT foo FROM bar WHERE (a = 1 AND b = 1) OR c = 1/,
+          q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 OR c = 1)/,
+        ]
+      },
+      {
+        equal => 0,
+        statements => [
+          q/SELECT foo FROM bar WHERE a = 1 OR b = 1 AND c = 1/,
+          q/SELECT foo FROM bar WHERE (a = 1 OR b = 1) AND c = 1/,
+          q/SELECT foo FROM bar WHERE a = 1 OR (b = 1 AND c = 1)/,
+        ]
+      },
 
       # JOIN condition - equal
       {
@@ -654,9 +696,12 @@ plan tests => 1 +
     map { $_ * ($_ - 1) / 2 }
       map { scalar @{$_->{bindvals}} }
         @bind_tests
-  );
+  ) +
+  3;
 
-use_ok('SQL::Abstract::Test', import => [qw(eq_sql eq_bind is_same_sql_bind)]);
+use_ok('SQL::Abstract::Test', import => [qw(
+  eq_sql_bind eq_sql eq_bind is_same_sql_bind
+)]);
 
 for my $test (@sql_tests) {
   my $statements = $test->{statements};
@@ -664,15 +709,19 @@ for my $test (@sql_tests) {
     my $sql1 = shift @$statements;
     foreach my $sql2 (@$statements) {
       my $equal = eq_sql($sql1, $sql2);
-      if ($test->{equal}) {
-        ok($equal, "equal SQL expressions considered equal");
-      } else {
-        ok(!$equal, "different SQL expressions considered not equal");
-      }
-
-      if ($equal ^ $test->{equal}) {
-        diag("sql1: $sql1");
-        diag("sql2: $sql2");
+      TODO: {
+        local $TODO = $test->{todo} if $test->{todo};
+
+        if ($test->{equal}) {
+          ok($equal, "equal SQL expressions should have been considered equal");
+        } else {
+          ok(!$equal, "different SQL expressions should have been considered not equal");
+        }
+
+        if ($equal ^ $test->{equal}) {
+          diag("sql1: $sql1");
+          diag("sql2: $sql2");
+        }
       }
     }
   }
@@ -697,3 +746,25 @@ for my $test (@bind_tests) {
     }
   }
 }
+
+ok(eq_sql_bind(
+    "SELECT * FROM foo WHERE id = ?", [42],
+    "SELECT * FROM foo WHERE (id = ?)", [42],
+  ),
+  "eq_sql_bind considers equal SQL expressions and bind values equal"
+);
+
+
+ok(!eq_sql_bind(
+    "SELECT * FROM foo WHERE id = ?", [42],
+    "SELECT * FROM foo WHERE (id = ?)", [0],
+  ),
+  "eq_sql_bind considers equal SQL expressions and different bind values different"
+);
+
+ok(!eq_sql_bind(
+    "SELECT * FROM foo WHERE id = ?", [42],
+    "SELECT * FROM bar WHERE (id = ?)", [42],
+  ),
+  "eq_sql_bind considers different SQL expressions and equal bind values different"
+);