},
{
equal => 0,
- parenthesis_significant => 1,
+ opts => { parenthesis_significant => 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)/,
},
{
equal => 0,
- parenthesis_significant => 1,
+ opts => { parenthesis_significant => 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/,
},
{
equal => 0,
- parenthesis_significant => 1,
+ opts => { parenthesis_significant => 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)/,
},
{
equal => 0,
- parenthesis_significant => 1,
+ 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)/,
'SELECT * FROM foo WHERE bar = (baz( buzz ))',
]
},
+ # oddballs
+ {
+ equal => 1,
+ statements => [
+ 'WHERE ( foo GLOB ? )',
+ 'WHERE foo GLOB ?',
+ ],
+ },
+ {
+ equal => 1,
+ statements => [
+ 'SELECT FIRST ? SKIP ? [me].[id], [me].[owner]
+ FROM [books] [me]
+ WHERE ( ( (EXISTS (
+ SELECT FIRST ? SKIP ? [owner].[id]
+ FROM [owners] [owner]
+ WHERE ( [books].[owner] = [owner].[id] )
+ )) AND [source] = ? ) )',
+ 'SELECT FIRST ? SKIP ? [me].[id], [me].[owner]
+ FROM [books] [me]
+ WHERE ( ( EXISTS (
+ SELECT FIRST ? SKIP ? [owner].[id]
+ FROM [owners] [owner]
+ WHERE ( [books].[owner] = [owner].[id] )
+ ) AND [source] = ? ) )',
+ ],
+ },
);
my @bind_tests = (
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
)]);
for my $test (@sql_tests) {
+
+ # this does not work on 5.8.8 and earlier :(
+ #local @{*SQL::Abstract::Test::}{keys %{$test->{opts}}} = map { \$_ } values %{$test->{opts}}
+ # if $test->{opts};
+
+ my %restore_globals;
+
+ for (keys %{$test->{opts} || {} }) {
+ $restore_globals{$_} = ${${*SQL::Abstract::Test::}{$_}};
+ ${*SQL::Abstract::Test::}{$_} = \ do { my $cp = $test->{opts}{$_} };
+ }
+
my $statements = $test->{statements};
while (@$statements) {
my $sql1 = shift @$statements;
foreach my $sql2 (@$statements) {
- no warnings qw/once/; # perl 5.10 is dumb
- local $SQL::Abstract::Test::parenthesis_significant = $test->{parenthesis_significant}
- if $test->{parenthesis_significant};
my $equal = eq_sql($sql1, $sql2);
TODO: {
}
}
}
+
+ ${*SQL::Abstract::Test::}{$_} = \$restore_globals{$_}
+ for keys %restore_globals;
}
for my $test (@bind_tests) {
),
"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',
+);
+