5 use List::Util qw(sum);
11 # WHERE condition - equal
15 q/SELECT foo FROM bar WHERE a = 1/,
16 q/SELECT foo FROM bar WHERE a=1/,
17 q/SELECT foo FROM bar WHERE (a = 1)/,
18 q/SELECT foo FROM bar WHERE (a=1)/,
19 q/SELECT foo FROM bar WHERE ( a = 1 )/,
44 q/SELECT foo FROM bar WHERE ((a = 1))/,
45 q/SELECT foo FROM bar WHERE ( (a = 1) )/,
46 q/SELECT foo FROM bar WHERE ( ( a = 1 ) )/,
52 q/SELECT foo FROM bar WHERE a = 1 AND b = 1/,
53 q/SELECT foo FROM bar WHERE (a = 1) AND (b = 1)/,
54 q/SELECT foo FROM bar WHERE ((a = 1) AND (b = 1))/,
55 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1)/,
56 q/SELECT foo FROM bar WHERE ((a = 1 AND b = 1))/,
57 q/SELECT foo FROM bar WHERE (((a = 1) AND (b = 1)))/,
103 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 AND c = 1/,
104 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1 AND c = 1)/,
105 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1) AND c = 1/,
106 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 AND c = 1)/,
107 q/SELECT foo FROM bar WHERE ((((a = 1))) AND (b = 1 AND c = 1))/,
113 q/SELECT foo FROM bar WHERE a = 1 OR b = 1 OR c = 1/,
114 q/SELECT foo FROM bar WHERE (a = 1 OR b = 1) OR c = 1/,
115 q/SELECT foo FROM bar WHERE a = 1 OR (b = 1 OR c = 1)/,
116 q/SELECT foo FROM bar WHERE a = 1 OR ((b = 1 OR (c = 1)))/,
122 q/SELECT foo FROM bar WHERE (a = 1) AND (b = 1 OR c = 1 OR d = 1) AND (e = 1 AND f = 1)/,
123 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 OR c = 1 OR d = 1) AND e = 1 AND (f = 1)/,
124 q/SELECT foo FROM bar WHERE ( ((a = 1) AND ( b = 1 OR (c = 1 OR d = 1) )) AND ((e = 1)) AND f = 1) /,
129 parenthesis_significant => 1,
131 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 AND c = 1/,
132 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1 AND c = 1)/,
133 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1) AND c = 1/,
134 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 AND c = 1)/,
135 q/SELECT foo FROM bar WHERE ((((a = 1))) AND (b = 1 AND c = 1))/,
140 parenthesis_significant => 1,
142 q/SELECT foo FROM bar WHERE a = 1 OR b = 1 OR c = 1/,
143 q/SELECT foo FROM bar WHERE (a = 1 OR b = 1) OR c = 1/,
144 q/SELECT foo FROM bar WHERE a = 1 OR (b = 1 OR c = 1)/,
145 q/SELECT foo FROM bar WHERE a = 1 OR ((b = 1 OR (c = 1)))/,
150 parenthesis_significant => 1,
152 q/SELECT foo FROM bar WHERE (a = 1) AND (b = 1 OR c = 1 OR d = 1) AND (e = 1 AND f = 1)/,
153 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 OR c = 1 OR d = 1) AND e = 1 AND (f = 1)/,
154 q/SELECT foo FROM bar WHERE ( ((a = 1) AND ( b = 1 OR (c = 1 OR d = 1) )) AND ((e = 1)) AND f = 1) /,
158 # WHERE condition - different
162 q/SELECT foo FROM bar WHERE a = 1/,
163 q/SELECT quux FROM bar WHERE a = 1/,
164 q/SELECT foo FROM quux WHERE a = 1/,
165 q/FOOBAR foo FROM bar WHERE a = 1/,
167 q/SELECT foo FROM bar WHERE a = 2/,
168 q/SELECT foo FROM bar WHERE a < 1/,
169 q/SELECT foo FROM bar WHERE b = 1/,
170 q/SELECT foo FROM bar WHERE (c = 1)/,
171 q/SELECT foo FROM bar WHERE (d = 1)/,
173 q/SELECT foo FROM bar WHERE a = 1 AND quux/,
174 q/SELECT foo FROM bar WHERE a = 1 GROUP BY foo/,
175 q/SELECT foo FROM bar WHERE a = 1 ORDER BY foo/,
176 q/SELECT foo FROM bar WHERE a = 1 LIMIT 1/,
177 q/SELECT foo FROM bar WHERE a = 1 OFFSET 1/,
178 q/SELECT foo FROM bar JOIN quux WHERE a = 1/,
179 q/SELECT foo FROM bar JOIN quux ON a = 1 WHERE a = 1/,
185 q/SELECT foo FROM bar WHERE a = 1 AND b = 1/,
186 q/SELECT quux FROM bar WHERE a = 1 AND b = 1/,
187 q/SELECT foo FROM quux WHERE a = 1 AND b = 1/,
188 q/FOOBAR foo FROM bar WHERE a = 1 AND b = 1/,
190 q/SELECT foo FROM bar WHERE a = 2 AND b = 1/,
191 q/SELECT foo FROM bar WHERE a = 3 AND (b = 1)/,
192 q/SELECT foo FROM bar WHERE (a = 4) AND b = 1/,
193 q/SELECT foo FROM bar WHERE (a = 5) AND (b = 1)/,
194 q/SELECT foo FROM bar WHERE ((a = 6) AND (b = 1))/,
195 q/SELECT foo FROM bar WHERE ((a = 7) AND (b = 1))/,
197 q/SELECT foo FROM bar WHERE a = 1 AND b = 2/,
198 q/SELECT foo FROM bar WHERE a = 1 AND (b = 3)/,
199 q/SELECT foo FROM bar WHERE (a = 1) AND b = 4/,
200 q/SELECT foo FROM bar WHERE (a = 1) AND (b = 5)/,
201 q/SELECT foo FROM bar WHERE ((a = 1) AND (b = 6))/,
202 q/SELECT foo FROM bar WHERE ((a = 1) AND (b = 7))/,
204 q/SELECT foo FROM bar WHERE a < 1 AND b = 1/,
205 q/SELECT foo FROM bar WHERE b = 1 AND b = 1/,
206 q/SELECT foo FROM bar WHERE (c = 1) AND b = 1/,
207 q/SELECT foo FROM bar WHERE (d = 1) AND b = 1/,
209 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 AND quux/,
210 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 GROUP BY foo/,
211 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 ORDER BY foo/,
212 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 LIMIT 1/,
213 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 OFFSET 1/,
214 q/SELECT foo FROM bar JOIN quux WHERE a = 1 AND b = 1/,
215 q/SELECT foo FROM bar JOIN quux ON a = 1 WHERE a = 1 AND b = 1/,
221 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 OR c = 1/,
222 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1) OR c = 1/,
223 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 OR c = 1)/,
229 q/SELECT foo FROM bar WHERE a = 1 OR b = 1 AND c = 1/,
230 q/SELECT foo FROM bar WHERE (a = 1 OR b = 1) AND c = 1/,
231 q/SELECT foo FROM bar WHERE a = 1 OR (b = 1 AND c = 1)/,
237 # BETWEEN with/without parenthesis around itself/RHS is a sticky business
238 # if I made a mistake here, simply rewrite the special BETWEEN handling in
242 q/SELECT foo FROM bar WHERE ( completion_date BETWEEN ? AND ? AND status = ? )/,
243 q/SELECT foo FROM bar WHERE completion_date BETWEEN (? AND ?) AND status = ?/,
244 q/SELECT foo FROM bar WHERE ( (completion_date BETWEEN (? AND ?) ) AND status = ? )/,
245 q/SELECT foo FROM bar WHERE ( (completion_date BETWEEN (? AND ? AND status = ?) ) )/,
249 # JOIN condition - equal
253 q/SELECT foo FROM bar JOIN baz ON a = 1 WHERE x = 1/,
254 q/SELECT foo FROM bar JOIN baz ON a=1 WHERE x = 1/,
255 q/SELECT foo FROM bar JOIN baz ON (a = 1) WHERE x = 1/,
256 q/SELECT foo FROM bar JOIN baz ON (a=1) WHERE x = 1/,
257 q/SELECT foo FROM bar JOIN baz ON ( a = 1 ) WHERE x = 1/,
294 q/SELECT foo FROM bar JOIN baz ON ((a = 1)) WHERE x = 1/,
295 q/SELECT foo FROM bar JOIN baz ON ( (a = 1) ) WHERE x = 1/,
296 q/SELECT foo FROM bar JOIN baz ON ( ( a = 1 ) ) WHERE x = 1/,
302 q/SELECT foo FROM bar JOIN baz ON a = 1 AND b = 1 WHERE x = 1/,
303 q/SELECT foo FROM bar JOIN baz ON (a = 1) AND (b = 1) WHERE x = 1/,
304 q/SELECT foo FROM bar JOIN baz ON ((a = 1) AND (b = 1)) WHERE x = 1/,
305 q/SELECT foo FROM bar JOIN baz ON (a = 1 AND b = 1) WHERE x = 1/,
306 q/SELECT foo FROM bar JOIN baz ON ((a = 1 AND b = 1)) WHERE x = 1/,
307 q/SELECT foo FROM bar JOIN baz ON (((a = 1) AND (b = 1))) WHERE x = 1/,
367 # JOIN condition - different
371 q/SELECT foo FROM bar JOIN quux ON a = 1 WHERE quuux/,
372 q/SELECT quux FROM bar JOIN quux ON a = 1 WHERE quuux/,
373 q/SELECT foo FROM quux JOIN quux ON a = 1 WHERE quuux/,
374 q/FOOBAR foo FROM bar JOIN quux ON a = 1 WHERE quuux/,
376 q/SELECT foo FROM bar JOIN quux ON a = 2 WHERE quuux/,
377 q/SELECT foo FROM bar JOIN quux ON a < 1 WHERE quuux/,
378 q/SELECT foo FROM bar JOIN quux ON b = 1 WHERE quuux/,
379 q/SELECT foo FROM bar JOIN quux ON (c = 1) WHERE quuux/,
380 q/SELECT foo FROM bar JOIN quux ON (d = 1) WHERE quuux/,
382 q/SELECT foo FROM bar JOIN quux ON a = 1 AND quuux/,
383 q/SELECT foo FROM bar JOIN quux ON a = 1 GROUP BY foo/,
384 q/SELECT foo FROM bar JOIN quux ON a = 1 ORDER BY foo/,
385 q/SELECT foo FROM bar JOIN quux ON a = 1 LIMIT 1/,
386 q/SELECT foo FROM bar JOIN quux ON a = 1 OFFSET 1/,
387 q/SELECT foo FROM bar JOIN quux ON a = 1 JOIN quuux/,
388 q/SELECT foo FROM bar JOIN quux ON a = 1 JOIN quuux ON a = 1/,
394 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 WHERE quuux/,
395 q/SELECT quux FROM bar JOIN quux ON a = 1 AND b = 1 WHERE quuux/,
396 q/SELECT foo FROM quux JOIN quux ON a = 1 AND b = 1 WHERE quuux/,
397 q/FOOBAR foo FROM bar JOIN quux ON a = 1 AND b = 1 WHERE quuux/,
399 q/SELECT foo FROM bar JOIN quux ON a = 2 AND b = 1 WHERE quuux/,
400 q/SELECT foo FROM bar JOIN quux ON a = 3 AND (b = 1) WHERE quuux/,
401 q/SELECT foo FROM bar JOIN quux ON (a = 4) AND b = 1 WHERE quuux/,
402 q/SELECT foo FROM bar JOIN quux ON (a = 5) AND (b = 1) WHERE quuux/,
403 q/SELECT foo FROM bar JOIN quux ON ((a = 6) AND (b = 1)) WHERE quuux/,
404 q/SELECT foo FROM bar JOIN quux ON ((a = 7) AND (b = 1)) WHERE quuux/,
406 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 2 WHERE quuux/,
407 q/SELECT foo FROM bar JOIN quux ON a = 1 AND (b = 3) WHERE quuux/,
408 q/SELECT foo FROM bar JOIN quux ON (a = 1) AND b = 4 WHERE quuux/,
409 q/SELECT foo FROM bar JOIN quux ON (a = 1) AND (b = 5) WHERE quuux/,
410 q/SELECT foo FROM bar JOIN quux ON ((a = 1) AND (b = 6)) WHERE quuux/,
411 q/SELECT foo FROM bar JOIN quux ON ((a = 1) AND (b = 7)) WHERE quuux/,
413 q/SELECT foo FROM bar JOIN quux ON a < 1 AND b = 1 WHERE quuux/,
414 q/SELECT foo FROM bar JOIN quux ON b = 1 AND b = 1 WHERE quuux/,
415 q/SELECT foo FROM bar JOIN quux ON (c = 1) AND b = 1 WHERE quuux/,
416 q/SELECT foo FROM bar JOIN quux ON (d = 1) AND b = 1 WHERE quuux/,
418 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 AND quuux/,
419 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 GROUP BY foo/,
420 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 ORDER BY foo/,
421 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 LIMIT 1/,
422 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 OFFSET 1/,
423 q/SELECT foo FROM bar JOIN quux JOIN quuux ON a = 1 AND b = 1/,
424 q/SELECT foo FROM bar JOIN quux ON a = 1 JOIN quuux ON a = 1 AND b = 1/,
428 # DISTINCT ON (...) not confused with JOIN ON (...)
432 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE a = 1/,
433 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE a=1/,
434 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE (a = 1)/,
435 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE (a=1)/,
436 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE ( a = 1 )/,
438 SELECT DISTINCT ON (foo, quux)
447 SELECT DISTINCT ON (foo, quux)
456 SELECT DISTINCT ON (foo, quux)
464 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE ((a = 1))/,
465 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE ( (a = 1) )/,
466 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE ( ( a = 1 ) )/,
474 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE a = 1/,
475 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE (a = 1)/,
476 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1)) AS foo WHERE a = 1/,
477 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1)) AS foo WHERE (a = 1)/,
483 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 1) AS foo WHERE a = 1/,
484 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 1)) AS foo WHERE a = 1/,
485 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 1) AS foo WHERE a = 1/,
486 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 1)) AS foo WHERE a = 1/,
487 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 1))) AS foo WHERE a = 1/,
489 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 1) AS foo WHERE (a = 1)/,
490 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 1)) AS foo WHERE (a = 1)/,
491 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 1) AS foo WHERE (a = 1)/,
492 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 1)) AS foo WHERE (a = 1)/,
493 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 1))) AS foo WHERE (a = 1)/,
497 # subselects - different
501 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE a = 1/,
502 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE a = 2/,
503 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE (a = 3)/,
504 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1)) AS foo WHERE a = 4/,
505 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1)) AS foo WHERE (a = 5)/,
506 q/SELECT * FROM (SELECT * FROM bar WHERE b = 2) AS foo WHERE a = 1/,
507 q/SELECT * FROM (SELECT * FROM bar WHERE b = 3) AS foo WHERE (a = 1)/,
508 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 4)) AS foo WHERE a = 1/,
509 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 5)) AS foo WHERE (a = 1)/,
515 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 1) AS foo WHERE a = 1/,
516 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 2) AS foo WHERE a = 1/,
517 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 3)) AS foo WHERE a = 1/,
518 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 4)) AS foo WHERE a = 1/,
519 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 5))) AS foo WHERE a = 1/,
521 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 6) AS foo WHERE (a = 1)/,
522 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 7) AS foo WHERE (a = 1)/,
523 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 8)) AS foo WHERE (a = 1)/,
524 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 9)) AS foo WHERE (a = 1)/,
525 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 10))) AS foo WHERE (a = 1)/,
527 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 1) AS foo WHERE a = 2/,
528 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 2) AS foo WHERE a = 2/,
529 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 3)) AS foo WHERE a = 2/,
530 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 4)) AS foo WHERE a = 2/,
531 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 5))) AS foo WHERE a = 2/,
533 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 6) AS foo WHERE (a = 2)/,
534 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 7) AS foo WHERE (a = 2)/,
535 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 8)) AS foo WHERE (a = 2)/,
536 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 9)) AS foo WHERE (a = 2)/,
537 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 10))) AS foo WHERE (a = 2)/,
623 { foo => 42, bar => 1 },
624 { foo => 42, bar => 1 },
625 { foo => '42', bar => 1 },
629 # blessed object - equal
633 bless(\(local $_ = 42), 'Life::Universe::Everything'),
634 bless(\(local $_ = 42), 'Life::Universe::Everything'),
640 bless([42], 'Life::Universe::Everything'),
641 bless([42], 'Life::Universe::Everything'),
647 bless({ answer => 42 }, 'Life::Universe::Everything'),
648 bless({ answer => 42 }, 'Life::Universe::Everything'),
652 # complex data structure - equal
656 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
657 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
672 # scalarref - different
682 # arrayref - different
692 # hashref - different
713 # complex data structure - different
717 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
718 [43, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
719 [42, { foo => 'baz', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
720 [42, { bar => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
721 [42, { foo => 'bar', quuux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
722 [42, { foo => 'bar', quux => [0, 1, 2, \3, { quux => [4, 5] } ] }, 8 ],
723 [42, { foo => 'bar', quux => [1, 2, 3, { quux => [4, 5] } ] }, 8 ],
724 [42, { foo => 'bar', quux => [1, 2, \4, { quux => [4, 5] } ] }, 8 ],
725 [42, { foo => 'bar', quux => [1, 2, \3, { quuux => [4, 5] } ] }, 8 ],
726 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5, 6] } ] }, 8 ],
727 [42, { foo => 'bar', quux => [1, 2, \3, { quux => 4 } ] }, 8 ],
728 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5], quuux => 1 } ] }, 8 ],
729 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8, 9 ],
736 map { $_ * ($_ - 1) / 2 }
737 map { scalar @{$_->{statements}} }
741 map { $_ * ($_ - 1) / 2 }
742 map { scalar @{$_->{bindvals}} }
747 use_ok('SQL::Abstract::Test', import => [qw(
748 eq_sql_bind eq_sql eq_bind is_same_sql_bind
751 for my $test (@sql_tests) {
752 my $statements = $test->{statements};
753 while (@$statements) {
754 my $sql1 = shift @$statements;
755 foreach my $sql2 (@$statements) {
757 no warnings qw/once/; # perl 5.10 is dumb
758 local $SQL::Abstract::Test::parenthesis_significant = $test->{parenthesis_significant}
759 if $test->{parenthesis_significant};
760 my $equal = eq_sql($sql1, $sql2);
763 local $TODO = $test->{todo} if $test->{todo};
765 if ($test->{equal}) {
766 ok($equal, "equal SQL expressions should have been considered equal");
768 ok(!$equal, "different SQL expressions should have been considered not equal");
771 if ($equal ^ $test->{equal}) {
780 for my $test (@bind_tests) {
781 my $bindvals = $test->{bindvals};
783 my $bind1 = shift @$bindvals;
784 foreach my $bind2 (@$bindvals) {
785 my $equal = eq_bind($bind1, $bind2);
786 if ($test->{equal}) {
787 ok($equal, "equal bind values considered equal");
789 ok(!$equal, "different bind values considered not equal");
792 if ($equal ^ $test->{equal}) {
793 diag("bind1: " . Dumper($bind1));
794 diag("bind2: " . Dumper($bind2));
801 "SELECT * FROM foo WHERE id = ?", [42],
802 "SELECT * FROM foo WHERE (id = ?)", [42],
804 "eq_sql_bind considers equal SQL expressions and bind values equal"
809 "SELECT * FROM foo WHERE id = ?", [42],
810 "SELECT * FROM foo WHERE (id = ?)", [0],
812 "eq_sql_bind considers equal SQL expressions and different bind values different"
816 "SELECT * FROM foo WHERE id = ?", [42],
817 "SELECT * FROM bar WHERE (id = ?)", [42],
819 "eq_sql_bind considers different SQL expressions and equal bind values different"