5 use List::Util qw(sum);
9 # equivalent to $Module::Install::AUTHOR
13 ( -e ($^O eq 'VMS' ? './inc/_author' : './inc/.author') )
16 if (not $author and not $ENV{SQLATEST_TESTER} and not $ENV{AUTOMATED_TESTING}) {
17 plan skip_all => 'Skipping resource intensive self-tests, use SQLATEST_TESTER=1 to run';
22 # WHERE condition - equal
26 q/SELECT foo FROM bar WHERE a = 1/,
27 q/SELECT foo FROM bar WHERE a=1/,
28 q/SELECT foo FROM bar WHERE (a = 1)/,
29 q/SELECT foo FROM bar WHERE (a=1)/,
30 q/SELECT foo FROM bar WHERE ( a = 1 )/,
55 q/SELECT foo FROM bar WHERE ((a = 1))/,
56 q/SELECT foo FROM bar WHERE ( (a = 1) )/,
57 q/SELECT foo FROM bar WHERE ( ( a = 1 ) )/,
63 q/SELECT foo FROM bar WHERE a = 1 AND b = 1/,
64 q/SELECT foo FROM bar WHERE (a = 1) AND (b = 1)/,
65 q/SELECT foo FROM bar WHERE ((a = 1) AND (b = 1))/,
66 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1)/,
67 q/SELECT foo FROM bar WHERE ((a = 1 AND b = 1))/,
68 q/SELECT foo FROM bar WHERE (((a = 1) AND (b = 1)))/,
114 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 AND c = 1/,
115 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1 AND c = 1)/,
116 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1) AND c = 1/,
117 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 AND c = 1)/,
118 q/SELECT foo FROM bar WHERE ((((a = 1))) AND (b = 1 AND c = 1))/,
124 q/SELECT foo FROM bar WHERE a = 1 OR b = 1 OR c = 1/,
125 q/SELECT foo FROM bar WHERE (a = 1 OR b = 1) OR c = 1/,
126 q/SELECT foo FROM bar WHERE a = 1 OR (b = 1 OR c = 1)/,
127 q/SELECT foo FROM bar WHERE a = 1 OR ((b = 1 OR (c = 1)))/,
133 q/SELECT foo FROM bar WHERE (a = 1) AND (b = 1 OR c = 1 OR d = 1) AND (e = 1 AND f = 1)/,
134 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 OR c = 1 OR d = 1) AND e = 1 AND (f = 1)/,
135 q/SELECT foo FROM bar WHERE ( ((a = 1) AND ( b = 1 OR (c = 1 OR d = 1) )) AND ((e = 1)) AND f = 1) /,
140 parenthesis_significant => 1,
142 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 AND c = 1/,
143 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1 AND c = 1)/,
144 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1) AND c = 1/,
145 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 AND c = 1)/,
146 q/SELECT foo FROM bar WHERE ((((a = 1))) AND (b = 1 AND c = 1))/,
151 parenthesis_significant => 1,
153 q/SELECT foo FROM bar WHERE a = 1 OR b = 1 OR c = 1/,
154 q/SELECT foo FROM bar WHERE (a = 1 OR b = 1) OR c = 1/,
155 q/SELECT foo FROM bar WHERE a = 1 OR (b = 1 OR c = 1)/,
156 q/SELECT foo FROM bar WHERE a = 1 OR ((b = 1 OR (c = 1)))/,
161 parenthesis_significant => 1,
163 q/SELECT foo FROM bar WHERE (a = 1) AND (b = 1 OR c = 1 OR d = 1) AND (e = 1 AND f = 1)/,
164 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 OR c = 1 OR d = 1) AND e = 1 AND (f = 1)/,
165 q/SELECT foo FROM bar WHERE ( ((a = 1) AND ( b = 1 OR (c = 1 OR d = 1) )) AND ((e = 1)) AND f = 1) /,
169 # WHERE condition - different
173 q/SELECT foo FROM bar WHERE a = 1/,
174 q/SELECT quux FROM bar WHERE a = 1/,
175 q/SELECT foo FROM quux WHERE a = 1/,
176 q/FOOBAR foo FROM bar WHERE a = 1/,
178 q/SELECT foo FROM bar WHERE a = 2/,
179 q/SELECT foo FROM bar WHERE a < 1/,
180 q/SELECT foo FROM bar WHERE b = 1/,
181 q/SELECT foo FROM bar WHERE (c = 1)/,
182 q/SELECT foo FROM bar WHERE (d = 1)/,
184 q/SELECT foo FROM bar WHERE a = 1 AND quux/,
185 q/SELECT foo FROM bar WHERE a = 1 GROUP BY foo/,
186 q/SELECT foo FROM bar WHERE a = 1 ORDER BY foo/,
187 q/SELECT foo FROM bar WHERE a = 1 LIMIT 1/,
188 q/SELECT foo FROM bar WHERE a = 1 OFFSET 1/,
189 q/SELECT foo FROM bar JOIN quux WHERE a = 1/,
190 q/SELECT foo FROM bar JOIN quux ON a = 1 WHERE a = 1/,
196 q/SELECT foo FROM bar WHERE a = 1 AND b = 1/,
197 q/SELECT quux FROM bar WHERE a = 1 AND b = 1/,
198 q/SELECT foo FROM quux WHERE a = 1 AND b = 1/,
199 q/FOOBAR foo FROM bar WHERE a = 1 AND b = 1/,
201 q/SELECT foo FROM bar WHERE a = 2 AND b = 1/,
202 q/SELECT foo FROM bar WHERE a = 3 AND (b = 1)/,
203 q/SELECT foo FROM bar WHERE (a = 4) AND b = 1/,
204 q/SELECT foo FROM bar WHERE (a = 5) AND (b = 1)/,
205 q/SELECT foo FROM bar WHERE ((a = 6) AND (b = 1))/,
206 q/SELECT foo FROM bar WHERE ((a = 7) AND (b = 1))/,
208 q/SELECT foo FROM bar WHERE a = 1 AND b = 2/,
209 q/SELECT foo FROM bar WHERE a = 1 AND (b = 3)/,
210 q/SELECT foo FROM bar WHERE (a = 1) AND b = 4/,
211 q/SELECT foo FROM bar WHERE (a = 1) AND (b = 5)/,
212 q/SELECT foo FROM bar WHERE ((a = 1) AND (b = 6))/,
213 q/SELECT foo FROM bar WHERE ((a = 1) AND (b = 7))/,
215 q/SELECT foo FROM bar WHERE a < 1 AND b = 1/,
216 q/SELECT foo FROM bar WHERE b = 1 AND b = 1/,
217 q/SELECT foo FROM bar WHERE (c = 1) AND b = 1/,
218 q/SELECT foo FROM bar WHERE (d = 1) AND b = 1/,
220 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 AND quux/,
221 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 GROUP BY foo/,
222 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 ORDER BY foo/,
223 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 LIMIT 1/,
224 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 OFFSET 1/,
225 q/SELECT foo FROM bar JOIN quux WHERE a = 1 AND b = 1/,
226 q/SELECT foo FROM bar JOIN quux ON a = 1 WHERE a = 1 AND b = 1/,
232 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 OR c = 1/,
233 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1) OR c = 1/,
234 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 OR c = 1)/,
240 q/SELECT foo FROM bar WHERE a = 1 OR b = 1 AND c = 1/,
241 q/SELECT foo FROM bar WHERE (a = 1 OR b = 1) AND c = 1/,
242 q/SELECT foo FROM bar WHERE a = 1 OR (b = 1 AND c = 1)/,
248 # BETWEEN with/without parenthesis around itself/RHS is a sticky business
249 # if I made a mistake here, simply rewrite the special BETWEEN handling in
253 q/SELECT foo FROM bar WHERE ( completion_date BETWEEN ? AND ? AND status = ? )/,
254 q/SELECT foo FROM bar WHERE completion_date BETWEEN (? AND ?) AND status = ?/,
255 q/SELECT foo FROM bar WHERE ( (completion_date BETWEEN (? AND ?) ) AND status = ? )/,
256 q/SELECT foo FROM bar WHERE ( (completion_date BETWEEN (? AND ? AND status = ?) ) )/,
260 # JOIN condition - equal
264 q/SELECT foo FROM bar JOIN baz ON a = 1 WHERE x = 1/,
265 q/SELECT foo FROM bar JOIN baz ON a=1 WHERE x = 1/,
266 q/SELECT foo FROM bar JOIN baz ON (a = 1) WHERE x = 1/,
267 q/SELECT foo FROM bar JOIN baz ON (a=1) WHERE x = 1/,
268 q/SELECT foo FROM bar JOIN baz ON ( a = 1 ) WHERE x = 1/,
305 q/SELECT foo FROM bar JOIN baz ON ((a = 1)) WHERE x = 1/,
306 q/SELECT foo FROM bar JOIN baz ON ( (a = 1) ) WHERE x = 1/,
307 q/SELECT foo FROM bar JOIN baz ON ( ( a = 1 ) ) WHERE x = 1/,
313 q/SELECT foo FROM bar JOIN baz ON a = 1 AND b = 1 WHERE x = 1/,
314 q/SELECT foo FROM bar JOIN baz ON (a = 1) AND (b = 1) WHERE x = 1/,
315 q/SELECT foo FROM bar JOIN baz ON ((a = 1) AND (b = 1)) WHERE x = 1/,
316 q/SELECT foo FROM bar JOIN baz ON (a = 1 AND b = 1) WHERE x = 1/,
317 q/SELECT foo FROM bar JOIN baz ON ((a = 1 AND b = 1)) WHERE x = 1/,
318 q/SELECT foo FROM bar JOIN baz ON (((a = 1) AND (b = 1))) WHERE x = 1/,
378 # JOIN condition - different
382 q/SELECT foo FROM bar JOIN quux ON a = 1 WHERE quuux/,
383 q/SELECT quux FROM bar JOIN quux ON a = 1 WHERE quuux/,
384 q/SELECT foo FROM quux JOIN quux ON a = 1 WHERE quuux/,
385 q/FOOBAR foo FROM bar JOIN quux ON a = 1 WHERE quuux/,
387 q/SELECT foo FROM bar JOIN quux ON a = 2 WHERE quuux/,
388 q/SELECT foo FROM bar JOIN quux ON a < 1 WHERE quuux/,
389 q/SELECT foo FROM bar JOIN quux ON b = 1 WHERE quuux/,
390 q/SELECT foo FROM bar JOIN quux ON (c = 1) WHERE quuux/,
391 q/SELECT foo FROM bar JOIN quux ON (d = 1) WHERE quuux/,
393 q/SELECT foo FROM bar JOIN quux ON a = 1 AND quuux/,
394 q/SELECT foo FROM bar JOIN quux ON a = 1 GROUP BY foo/,
395 q/SELECT foo FROM bar JOIN quux ON a = 1 ORDER BY foo/,
396 q/SELECT foo FROM bar JOIN quux ON a = 1 LIMIT 1/,
397 q/SELECT foo FROM bar JOIN quux ON a = 1 OFFSET 1/,
398 q/SELECT foo FROM bar JOIN quux ON a = 1 JOIN quuux/,
399 q/SELECT foo FROM bar JOIN quux ON a = 1 JOIN quuux ON a = 1/,
405 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 WHERE quuux/,
406 q/SELECT quux FROM bar JOIN quux ON a = 1 AND b = 1 WHERE quuux/,
407 q/SELECT foo FROM quux JOIN quux ON a = 1 AND b = 1 WHERE quuux/,
408 q/FOOBAR foo FROM bar JOIN quux ON a = 1 AND b = 1 WHERE quuux/,
410 q/SELECT foo FROM bar JOIN quux ON a = 2 AND b = 1 WHERE quuux/,
411 q/SELECT foo FROM bar JOIN quux ON a = 3 AND (b = 1) WHERE quuux/,
412 q/SELECT foo FROM bar JOIN quux ON (a = 4) AND b = 1 WHERE quuux/,
413 q/SELECT foo FROM bar JOIN quux ON (a = 5) AND (b = 1) WHERE quuux/,
414 q/SELECT foo FROM bar JOIN quux ON ((a = 6) AND (b = 1)) WHERE quuux/,
415 q/SELECT foo FROM bar JOIN quux ON ((a = 7) AND (b = 1)) WHERE quuux/,
417 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 2 WHERE quuux/,
418 q/SELECT foo FROM bar JOIN quux ON a = 1 AND (b = 3) WHERE quuux/,
419 q/SELECT foo FROM bar JOIN quux ON (a = 1) AND b = 4 WHERE quuux/,
420 q/SELECT foo FROM bar JOIN quux ON (a = 1) AND (b = 5) WHERE quuux/,
421 q/SELECT foo FROM bar JOIN quux ON ((a = 1) AND (b = 6)) WHERE quuux/,
422 q/SELECT foo FROM bar JOIN quux ON ((a = 1) AND (b = 7)) WHERE quuux/,
424 q/SELECT foo FROM bar JOIN quux ON a < 1 AND b = 1 WHERE quuux/,
425 q/SELECT foo FROM bar JOIN quux ON b = 1 AND b = 1 WHERE quuux/,
426 q/SELECT foo FROM bar JOIN quux ON (c = 1) AND b = 1 WHERE quuux/,
427 q/SELECT foo FROM bar JOIN quux ON (d = 1) AND b = 1 WHERE quuux/,
429 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 AND quuux/,
430 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 GROUP BY foo/,
431 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 ORDER BY foo/,
432 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 LIMIT 1/,
433 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 OFFSET 1/,
434 q/SELECT foo FROM bar JOIN quux JOIN quuux ON a = 1 AND b = 1/,
435 q/SELECT foo FROM bar JOIN quux ON a = 1 JOIN quuux ON a = 1 AND b = 1/,
439 # DISTINCT ON (...) not confused with JOIN ON (...)
443 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE a = 1/,
444 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE a=1/,
445 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE (a = 1)/,
446 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE (a=1)/,
447 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE ( a = 1 )/,
449 SELECT DISTINCT ON (foo, quux)
458 SELECT DISTINCT ON (foo, quux)
467 SELECT DISTINCT ON (foo, quux)
475 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE ((a = 1))/,
476 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE ( (a = 1) )/,
477 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE ( ( a = 1 ) )/,
485 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE a = 1/,
486 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE (a = 1)/,
487 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1)) AS foo WHERE a = 1/,
488 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1)) AS foo WHERE (a = 1)/,
494 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 1) AS foo WHERE a = 1/,
495 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 1)) AS foo WHERE a = 1/,
496 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 1) AS foo WHERE a = 1/,
497 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 1)) AS foo WHERE a = 1/,
498 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 1))) AS foo WHERE a = 1/,
500 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 1) AS foo WHERE (a = 1)/,
501 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 1)) AS foo WHERE (a = 1)/,
502 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 1) AS foo WHERE (a = 1)/,
503 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 1)) AS foo WHERE (a = 1)/,
504 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 1))) AS foo WHERE (a = 1)/,
508 # subselects - different
512 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE a = 1/,
513 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE a = 2/,
514 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE (a = 3)/,
515 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1)) AS foo WHERE a = 4/,
516 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1)) AS foo WHERE (a = 5)/,
517 q/SELECT * FROM (SELECT * FROM bar WHERE b = 2) AS foo WHERE a = 1/,
518 q/SELECT * FROM (SELECT * FROM bar WHERE b = 3) AS foo WHERE (a = 1)/,
519 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 4)) AS foo WHERE a = 1/,
520 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 5)) AS foo WHERE (a = 1)/,
526 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 1) AS foo WHERE a = 1/,
527 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 2) AS foo WHERE a = 1/,
528 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 3)) AS foo WHERE a = 1/,
529 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 4)) AS foo WHERE a = 1/,
530 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 5))) AS foo WHERE a = 1/,
532 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 6) AS foo WHERE (a = 1)/,
533 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 7) AS foo WHERE (a = 1)/,
534 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 8)) AS foo WHERE (a = 1)/,
535 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 9)) AS foo WHERE (a = 1)/,
536 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 10))) AS foo WHERE (a = 1)/,
538 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 1) AS foo WHERE a = 2/,
539 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 2) AS foo WHERE a = 2/,
540 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 3)) AS foo WHERE a = 2/,
541 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 4)) AS foo WHERE a = 2/,
542 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 5))) AS foo WHERE a = 2/,
544 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 6) AS foo WHERE (a = 2)/,
545 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 7) AS foo WHERE (a = 2)/,
546 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 8)) AS foo WHERE (a = 2)/,
547 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 9)) AS foo WHERE (a = 2)/,
548 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 10))) AS foo WHERE (a = 2)/,
634 { foo => 42, bar => 1 },
635 { foo => 42, bar => 1 },
636 { foo => '42', bar => 1 },
640 # blessed object - equal
644 bless(\(local $_ = 42), 'Life::Universe::Everything'),
645 bless(\(local $_ = 42), 'Life::Universe::Everything'),
651 bless([42], 'Life::Universe::Everything'),
652 bless([42], 'Life::Universe::Everything'),
658 bless({ answer => 42 }, 'Life::Universe::Everything'),
659 bless({ answer => 42 }, 'Life::Universe::Everything'),
663 # complex data structure - equal
667 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
668 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
683 # scalarref - different
693 # arrayref - different
703 # hashref - different
724 # complex data structure - different
728 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
729 [43, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
730 [42, { foo => 'baz', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
731 [42, { bar => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
732 [42, { foo => 'bar', quuux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
733 [42, { foo => 'bar', quux => [0, 1, 2, \3, { quux => [4, 5] } ] }, 8 ],
734 [42, { foo => 'bar', quux => [1, 2, 3, { quux => [4, 5] } ] }, 8 ],
735 [42, { foo => 'bar', quux => [1, 2, \4, { quux => [4, 5] } ] }, 8 ],
736 [42, { foo => 'bar', quux => [1, 2, \3, { quuux => [4, 5] } ] }, 8 ],
737 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5, 6] } ] }, 8 ],
738 [42, { foo => 'bar', quux => [1, 2, \3, { quux => 4 } ] }, 8 ],
739 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5], quuux => 1 } ] }, 8 ],
740 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8, 9 ],
747 map { $_ * ($_ - 1) / 2 }
748 map { scalar @{$_->{statements}} }
752 map { $_ * ($_ - 1) / 2 }
753 map { scalar @{$_->{bindvals}} }
758 use_ok('SQL::Abstract::Test', import => [qw(
759 eq_sql_bind eq_sql eq_bind is_same_sql_bind
762 for my $test (@sql_tests) {
763 my $statements = $test->{statements};
764 while (@$statements) {
765 my $sql1 = shift @$statements;
766 foreach my $sql2 (@$statements) {
768 no warnings qw/once/; # perl 5.10 is dumb
769 local $SQL::Abstract::Test::parenthesis_significant = $test->{parenthesis_significant}
770 if $test->{parenthesis_significant};
771 my $equal = eq_sql($sql1, $sql2);
774 local $TODO = $test->{todo} if $test->{todo};
776 if ($test->{equal}) {
777 ok($equal, "equal SQL expressions should have been considered equal");
779 ok(!$equal, "different SQL expressions should have been considered not equal");
782 if ($equal ^ $test->{equal}) {
791 for my $test (@bind_tests) {
792 my $bindvals = $test->{bindvals};
794 my $bind1 = shift @$bindvals;
795 foreach my $bind2 (@$bindvals) {
796 my $equal = eq_bind($bind1, $bind2);
797 if ($test->{equal}) {
798 ok($equal, "equal bind values considered equal");
800 ok(!$equal, "different bind values considered not equal");
803 if ($equal ^ $test->{equal}) {
804 diag("bind1: " . Dumper($bind1));
805 diag("bind2: " . Dumper($bind2));
812 "SELECT * FROM foo WHERE id = ?", [42],
813 "SELECT * FROM foo WHERE (id = ?)", [42],
815 "eq_sql_bind considers equal SQL expressions and bind values equal"
820 "SELECT * FROM foo WHERE id = ?", [42],
821 "SELECT * FROM foo WHERE (id = ?)", [0],
823 "eq_sql_bind considers equal SQL expressions and different bind values different"
827 "SELECT * FROM foo WHERE id = ?", [42],
828 "SELECT * FROM bar WHERE (id = ?)", [42],
830 "eq_sql_bind considers different SQL expressions and equal bind values different"