X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F10test.t;h=2a75d3290d0a846c44fc4ef4300d2d4c3e78bd58;hb=1bb3956e85e58f2cbbd2d54545b99dd071ef9441;hp=59b8454cb36004d3c88df2c18180ea068aec31c8;hpb=9a5b64c96734c3488495306c70cde7a3541bd09f;p=dbsrgits%2FSQL-Abstract.git diff --git a/t/10test.t b/t/10test.t index 59b8454..2a75d32 100644 --- a/t/10test.t +++ b/t/10test.t @@ -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)); } } }