Fix SQLA::Test problem
[scpubgit/Q-Branch.git] / t / 10test.t
index 59b8454..2a75d32 100644 (file)
@@ -6,6 +6,10 @@ use List::Util qw(sum);
 
 use Test::More;
 
+use Data::Dumper;
+$Data::Dumper::Terse = 1;
+$Data::Dumper::Sortkeys = 1;
+
 # equivalent to $Module::Install::AUTHOR
 my $author = (
   ( not -d './inc' )
@@ -19,7 +23,7 @@ if (not $author and not $ENV{SQLATEST_TESTER} and not $ENV{AUTOMATED_TESTING}) {
 
 
 my @sql_tests = (
-      # WHERE condition - equal
+      # WHERE condition - equal      
       {
         equal => 1,
         statements => [
@@ -136,6 +140,30 @@ my @sql_tests = (
         ]
       },
       {
+        equal => 1,
+        statements => [
+          q/SELECT foo FROM bar WHERE (a) AND (b = 2)/,
+          q/SELECT foo FROM bar WHERE (a AND b = 2)/,
+          q/SELECT foo FROM bar WHERE (a AND (b = 2))/,
+          q/SELECT foo FROM bar WHERE a AND (b = 2)/,
+        ]
+      },
+      {
+        equal => 1,
+        statements => [
+          q/SELECT foo FROM bar WHERE ((NOT a) AND b = 2)/,
+          q/SELECT foo FROM bar WHERE (NOT a) AND (b = 2)/,
+          q/SELECT foo FROM bar WHERE (NOT (a)) AND b = 2/,
+        ],
+      },
+      {
+        equal => 0,
+        statements => [
+          q/SELECT foo FROM bar WHERE NOT a AND (b = 2)/,
+          q/SELECT foo FROM bar WHERE (NOT a) AND (b = 2)/,
+        ]
+      },
+      {
         equal => 0,
         parenthesis_significant => 1,
         statements => [
@@ -244,6 +272,15 @@ my @sql_tests = (
       },
       {
         equal => 0,
+        parenthesis_significant => 1,
+        statements => [
+          q/SELECT foo FROM bar WHERE a IN (1,2,3)/,
+          q/SELECT foo FROM bar WHERE a IN (1,3,2)/,
+          q/SELECT foo FROM bar WHERE a IN ((1,2,3))/,
+        ]
+      },
+      {
+        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
@@ -509,6 +546,13 @@ my @sql_tests = (
       {
         equal => 0,
         statements => [
+          q/DELETE FROM cd WHERE ( cdid IN ( SELECT me.cdid FROM (SELECT * FROM cd me WHERE ( year != ? ) GROUP BY me.cdid) me WHERE ( year != ? ) ) )/,
+          q/DELETE FROM cd WHERE ( cdid IN ( SELECT me.cdid FROM cd me WHERE ( year != ? ) GROUP BY me.cdid ) )/,
+        ],
+      },
+      {
+        equal => 0,
+        statements => [
           q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE a = 1/,
           q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE a = 2/,
           q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE (a = 3)/,
@@ -549,26 +593,36 @@ my @sql_tests = (
         ]
       },
       {
-        equal => 0,
-        statements => [
-           'SELECT a,b,c FROM foo',
-           'SELECT a,c,b FROM foo',
-           'SELECT b,a,c FROM foo',
-           'SELECT b,c,a FROM foo',
-           'SELECT c,a,b FROM foo',
-           'SELECT c,b,a FROM foo',
-        ]
+        equal => 0,
+        statements => [
+          'SELECT a,b,c FROM foo',
+          'SELECT a,c,b FROM foo',
+          'SELECT b,a,c FROM foo',
+          'SELECT b,c,a FROM foo',
+          'SELECT c,a,b FROM foo',
+          'SELECT c,b,a FROM foo',
+        ],
       },
       {
-        equal => 0,
-        statements => [
-           'SELECT * FROM foo WHERE a IN (1,2,3)',
-           'SELECT * FROM foo WHERE a IN (1,3,2)',
-           'SELECT * FROM foo WHERE a IN (2,1,3)',
-           'SELECT * FROM foo WHERE a IN (2,3,1)',
-           'SELECT * FROM foo WHERE a IN (3,1,2)',
-           'SELECT * FROM foo WHERE a IN (3,2,1)',
-        ]
+        equal => 0,
+        statements => [
+          'SELECT * FROM foo WHERE a IN (1,2,3)',
+          'SELECT * FROM foo WHERE a IN (1,3,2)',
+          'SELECT * FROM foo WHERE a IN (2,1,3)',
+          'SELECT * FROM foo WHERE a IN (2,3,1)',
+          'SELECT * FROM foo WHERE a IN (3,1,2)',
+          'SELECT * FROM foo WHERE a IN (3,2,1)',
+        ]
+      },
+      {
+        equal => 0,
+        statements => [
+          'SELECT count(*) FROM foo',
+          'SELECT count(*) AS bar FROM foo',
+          'SELECT count(*) AS "bar" FROM foo',
+          'SELECT count(a) FROM foo',
+          'SELECT count(1) FROM foo',
+        ]
       },
 );
 
@@ -804,6 +858,8 @@ for my $test (@sql_tests) {
         if ($equal ^ $test->{equal}) {
           diag("sql1: $sql1");
           diag("sql2: $sql2");
+          note('ast1: ' . Dumper SQL::Abstract::Test::parse ($sql1));
+          note('ast2: ' . Dumper SQL::Abstract::Test::parse ($sql2));
         }
       }
     }