X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F10test.t;h=2e1e55968d41aee396cc8defc9c3e1533f04dc92;hb=c7e9c808fa4346e2c2692f107852626c0ccde404;hp=19afd8f3956632f9674c06226939f8f112ba3003;hpb=3b9d807ed582eaefa2ec65ee33654b5dbb537f73;p=dbsrgits%2FSQL-Abstract.git diff --git a/t/10test.t b/t/10test.t index 19afd8f..2e1e559 100644 --- a/t/10test.t +++ b/t/10test.t @@ -1,14 +1,11 @@ -#!/usr/bin/perl - use strict; use warnings; -use List::Util qw(sum); use Test::More; -use Data::Dumper; -$Data::Dumper::Terse = 1; -$Data::Dumper::Sortkeys = 1; +use SQL::Abstract::Test import => [qw( + eq_sql_bind eq_sql eq_bind is_same_sql_bind dumper $sql_differ +)]; my @sql_tests = ( # WHERE condition - equal @@ -260,10 +257,10 @@ my @sql_tests = ( }, { equal => 0, - opts => { 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/, + q/SELECT foo FROM bar WHERE a IN (1,2,3)/, q/SELECT foo FROM bar WHERE a IN ((1,2,3))/, ] }, @@ -592,6 +589,48 @@ my @sql_tests = ( ] }, + # order by + { + equal => 1, + statements => [ + q/SELECT * FROM foo ORDER BY bar/, + q/SELECT * FROM foo ORDER BY bar ASC/, + q/SELECT * FROM foo ORDER BY bar asc/, + ], + }, + { + equal => 1, + statements => [ + q/SELECT * FROM foo ORDER BY bar, baz ASC/, + q/SELECT * FROM foo ORDER BY bar ASC, baz/, + q/SELECT * FROM foo ORDER BY bar asc, baz ASC/, + q/SELECT * FROM foo ORDER BY bar, baz/, + ], + }, + { + equal => 1, + statements => [ + q/ORDER BY colA, colB LIKE ? DESC, colC LIKE ?/, + q/ORDER BY colA ASC, colB LIKE ? DESC, colC LIKE ? ASC/, + ], + }, + { + equal => 1, + statements => [ + q/ORDER BY name + ?, [me].[id]/, + q/ORDER BY name + ? ASC, [me].[id]/, + ], + }, + { + equal => 0, + opts => { order_by_asc_significant => 1 }, + statements => [ + q/SELECT * FROM foo ORDER BY bar/, + q/SELECT * FROM foo ORDER BY bar ASC/, + q/SELECT * FROM foo ORDER BY bar desc/, + ], + }, + # list permutations { equal => 0, @@ -731,6 +770,14 @@ my @sql_tests = ( ) AND [source] = ? ) )', ], }, + { + equal => 1, + statements => [ + 'WHERE foo = ? FETCH FIRST 1 ROWS ONLY', + 'WHERE ( foo = ? ) FETCH FIRST 1 ROWS ONLY', + 'WHERE (( foo = ? )) FETCH FIRST 1 ROWS ONLY', + ], + }, ); my @bind_tests = ( @@ -925,23 +972,6 @@ my @bind_tests = ( }, ); -plan tests => 1 + - sum( - map { $_ * ($_ - 1) / 2 } - map { scalar @{$_->{statements}} } - @sql_tests - ) + - sum( - map { $_ * ($_ - 1) / 2 } - map { scalar @{$_->{bindvals}} } - @bind_tests - ) + - 9; - -use_ok('SQL::Abstract::Test', import => [qw( - eq_sql_bind eq_sql eq_bind is_same_sql_bind -)]); - for my $test (@sql_tests) { # this does not work on 5.8.8 and earlier :( @@ -973,11 +1003,11 @@ for my $test (@sql_tests) { if ($equal ^ $test->{equal}) { my ($ast1, $ast2) = map { SQL::Abstract::Test::parse ($_) } ($sql1, $sql2); - $_ = Dumper $_ for ($ast1, $ast2); + $_ = dumper($_) for ($ast1, $ast2); diag "sql1: $sql1"; diag "sql2: $sql2"; - note $SQL::Abstract::Test::sql_differ; + note $sql_differ || 'No differences found'; note "ast1: $ast1"; note "ast2: $ast2"; } @@ -1002,8 +1032,8 @@ for my $test (@bind_tests) { } if ($equal ^ $test->{equal}) { - diag("bind1: " . Dumper($bind1)); - diag("bind2: " . Dumper($bind2)); + diag("bind1: " . dumper($bind1)); + diag("bind2: " . dumper($bind2)); } } } @@ -1037,7 +1067,7 @@ ok (! eq_sql ( 'SELECT owner_name FROM books me WHERE ( sUOrce = ? )', )); like( - $SQL::Abstract::Test::sql_differ, + $sql_differ, qr/\Q[ source ] != [ sUOrce ]/, 'expected debug of literal diff', ); @@ -1047,7 +1077,7 @@ ok (! eq_sql ( 'SELECT owner_name FROM books me GROUP BY owner_name', )); like( - $SQL::Abstract::Test::sql_differ, + $sql_differ, qr/\QOP [ORDER BY] != [GROUP BY]/, 'expected debug of op diff', ); @@ -1058,8 +1088,22 @@ ok (! eq_sql ( )); like( - $SQL::Abstract::Test::sql_differ, + $sql_differ, qr|\Q[WHERE source = ?] != [N/A]|, 'expected debug of missing branch', ); + +ok (eq_sql_bind ( + \[ 'SELECT foo FROM bar WHERE baz = ? or buzz = ?', [ {} => 1 ], 2 ], + 'SELECT foo FROM bar WHERE (baz = ?) OR buzz = ?', + [ [ {} => 1 ], 2 ], +), 'arrayrefref unpacks correctly' ); + +is_same_sql_bind( + \[ 'SELECT foo FROM bar WHERE baz = ? or buzz = ?', [ {} => 1 ], 2 ], + \[ 'SELECT foo FROM bar WHERE (( baz = ? OR (buzz = ?) ))', [ {} => 1 ], 2 ], + 'double arrayrefref unpacks correctly' +); + +done_testing;