Migrate -ident and -value from dbic, reorganize docs
[dbsrgits/SQL-Abstract.git] / t / 10test.t
index d83dd65..9c69343 100644 (file)
@@ -282,6 +282,17 @@ my @sql_tests = (
         ]
       },
 
+      # IS NULL (special LHS-only op)
+      {
+        equal => 1,
+        statements => [
+          q/WHERE a IS NOT NULL AND b IS NULL/,
+          q/WHERE (a IS NOT NULL) AND b IS NULL/,
+          q/WHERE a IS NOT NULL AND (b IS NULL)/,
+          q/WHERE (a IS NOT NULL) AND ((b IS NULL))/,
+        ],
+      },
+
       # JOIN condition - equal
       {
         equal => 1,
@@ -604,6 +615,20 @@ my @sql_tests = (
           'SELECT * FROM foo WHERE a IN (3,2,1)',
         ]
       },
+
+      # list consistency
+      {
+        equal => 0,
+        statements => [
+          'SELECT a,b FROM foo',
+          'SELECT a,,b FROM foo',
+          'SELECT a,b, FROM foo',
+          'SELECT ,a,b, FROM foo',
+          'SELECT ,a,,b, FROM foo',
+        ],
+      },
+
+      # misc func
       {
         equal => 0,
         statements => [
@@ -614,7 +639,6 @@ my @sql_tests = (
           'SELECT count(1) FROM foo',
         ]
       },
-      # func
       {
         equal => 1,
         statements => [
@@ -635,6 +659,31 @@ my @sql_tests = (
       {
         equal => 0,
         statements => [
+          'SELECT COUNT * FROM foo',
+          'SELECT COUNT( * ) FROM foo',
+        ]
+      },
+      # single ? of unknown funcs do not unroll unless
+      # explicitly allowed (e.g. Like)
+      {
+        equal => 0,
+        statements => [
+          'SELECT foo FROM bar WHERE bar > foo ?',
+          'SELECT foo FROM bar WHERE bar > foo( ? )',
+        ]
+      },
+      {
+        equal => 1,
+        statements => [
+          'SELECT foo FROM bar WHERE bar LIKE ?',
+          'SELECT foo FROM bar WHERE bar LiKe (?)',
+          'SELECT foo FROM bar WHERE bar lIkE( (?))',
+        ]
+      },
+      # test multival
+      {
+        equal => 0,
+        statements => [
           'SELECT foo FROM bar WHERE foo IN (?, ?)',
           'SELECT foo FROM bar WHERE foo IN ?, ?',
         ]
@@ -655,6 +704,14 @@ my @sql_tests = (
           'SELECT * FROM foo WHERE bar = (baz( buzz ))',
         ]
       },
+      # oddballs
+      {
+        equal => 1,
+        statements => [
+          'WHERE ( foo GLOB ? )',
+          'WHERE foo GLOB ?',
+        ],
+      }
 );
 
 my @bind_tests = (
@@ -860,7 +917,7 @@ plan tests => 1 +
       map { scalar @{$_->{bindvals}} }
         @bind_tests
   ) +
-  3;
+  9;
 
 use_ok('SQL::Abstract::Test', import => [qw(
   eq_sql_bind eq_sql eq_bind is_same_sql_bind
@@ -888,13 +945,13 @@ for my $test (@sql_tests) {
 
         if ($equal ^ $test->{equal}) {
           my ($ast1, $ast2) = map { SQL::Abstract::Test::parse ($_) } ($sql1, $sql2);
-
           $_ = Dumper $_ for ($ast1, $ast2);
 
-          diag("sql1: $sql1");
-          diag("sql2: $sql2");
-          note("ast1: $ast1");
-          note("ast2: $ast2");
+          diag "sql1: $sql1";
+          diag "sql2: $sql2";
+          note $SQL::Abstract::Test::sql_differ;
+          note "ast1: $ast1";
+          note "ast2: $ast2";
         }
       }
     }
@@ -942,3 +999,36 @@ ok(!eq_sql_bind(
   ),
   "eq_sql_bind considers different SQL expressions and equal bind values different"
 );
+
+# test diag string
+ok (! eq_sql (
+  'SELECT owner_name FROM books me WHERE ( source = ? )',
+  'SELECT owner_name FROM books me WHERE ( sUOrce = ? )',
+));
+like(
+  $SQL::Abstract::Test::sql_differ,
+  qr/\Q[ source ] != [ sUOrce ]/,
+  'expected debug of literal diff',
+);
+
+ok (! eq_sql (
+  'SELECT owner_name FROM books me ORDER BY owner_name',
+  'SELECT owner_name FROM books me GROUP BY owner_name',
+));
+like(
+  $SQL::Abstract::Test::sql_differ,
+  qr/\QOP [ORDER BY] != [GROUP BY]/,
+  'expected debug of op diff',
+);
+
+ok (! eq_sql (
+  'SELECT owner_name FROM books WHERE ( source = ? )',
+  'SELECT owner_name FROM books'
+));
+
+like(
+  $SQL::Abstract::Test::sql_differ,
+  qr|\Q[WHERE source = ?] != [N/A]|,
+  'expected debug of missing branch',
+);
+