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) /,
141 q/SELECT foo FROM bar WHERE (a) AND (b = 2)/,
142 q/SELECT foo FROM bar WHERE (a AND b = 2)/,
143 q/SELECT foo FROM bar WHERE (a AND (b = 2))/,
144 q/SELECT foo FROM bar WHERE a AND (b = 2)/,
150 q/SELECT foo FROM bar WHERE ((NOT a) AND b = 2)/,
151 q/SELECT foo FROM bar WHERE (NOT a) AND (b = 2)/,
152 q/SELECT foo FROM bar WHERE (NOT (a)) AND b = 2/,
158 q/SELECT foo FROM bar WHERE NOT a AND (b = 2)/,
159 q/SELECT foo FROM bar WHERE (NOT a) AND (b = 2)/,
164 parenthesis_significant => 1,
166 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 AND c = 1/,
167 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1 AND c = 1)/,
168 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1) AND c = 1/,
169 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 AND c = 1)/,
170 q/SELECT foo FROM bar WHERE ((((a = 1))) AND (b = 1 AND c = 1))/,
175 parenthesis_significant => 1,
177 q/SELECT foo FROM bar WHERE a = 1 OR b = 1 OR c = 1/,
178 q/SELECT foo FROM bar WHERE (a = 1 OR b = 1) OR c = 1/,
179 q/SELECT foo FROM bar WHERE a = 1 OR (b = 1 OR c = 1)/,
180 q/SELECT foo FROM bar WHERE a = 1 OR ((b = 1 OR (c = 1)))/,
185 parenthesis_significant => 1,
187 q/SELECT foo FROM bar WHERE (a = 1) AND (b = 1 OR c = 1 OR d = 1) AND (e = 1 AND f = 1)/,
188 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 OR c = 1 OR d = 1) AND e = 1 AND (f = 1)/,
189 q/SELECT foo FROM bar WHERE ( ((a = 1) AND ( b = 1 OR (c = 1 OR d = 1) )) AND ((e = 1)) AND f = 1) /,
193 # WHERE condition - different
197 q/SELECT foo FROM bar WHERE a = 1/,
198 q/SELECT quux FROM bar WHERE a = 1/,
199 q/SELECT foo FROM quux WHERE a = 1/,
200 q/FOOBAR foo FROM bar WHERE a = 1/,
202 q/SELECT foo FROM bar WHERE a = 2/,
203 q/SELECT foo FROM bar WHERE a < 1/,
204 q/SELECT foo FROM bar WHERE b = 1/,
205 q/SELECT foo FROM bar WHERE (c = 1)/,
206 q/SELECT foo FROM bar WHERE (d = 1)/,
208 q/SELECT foo FROM bar WHERE a = 1 AND quux/,
209 q/SELECT foo FROM bar WHERE a = 1 GROUP BY foo/,
210 q/SELECT foo FROM bar WHERE a = 1 ORDER BY foo/,
211 q/SELECT foo FROM bar WHERE a = 1 LIMIT 1/,
212 q/SELECT foo FROM bar WHERE a = 1 OFFSET 1/,
213 q/SELECT foo FROM bar JOIN quux WHERE a = 1/,
214 q/SELECT foo FROM bar JOIN quux ON a = 1 WHERE a = 1/,
220 q/SELECT foo FROM bar WHERE a = 1 AND b = 1/,
221 q/SELECT quux FROM bar WHERE a = 1 AND b = 1/,
222 q/SELECT foo FROM quux WHERE a = 1 AND b = 1/,
223 q/FOOBAR foo FROM bar WHERE a = 1 AND b = 1/,
225 q/SELECT foo FROM bar WHERE a = 2 AND b = 1/,
226 q/SELECT foo FROM bar WHERE a = 3 AND (b = 1)/,
227 q/SELECT foo FROM bar WHERE (a = 4) AND b = 1/,
228 q/SELECT foo FROM bar WHERE (a = 5) AND (b = 1)/,
229 q/SELECT foo FROM bar WHERE ((a = 6) AND (b = 1))/,
230 q/SELECT foo FROM bar WHERE ((a = 7) AND (b = 1))/,
232 q/SELECT foo FROM bar WHERE a = 1 AND b = 2/,
233 q/SELECT foo FROM bar WHERE a = 1 AND (b = 3)/,
234 q/SELECT foo FROM bar WHERE (a = 1) AND b = 4/,
235 q/SELECT foo FROM bar WHERE (a = 1) AND (b = 5)/,
236 q/SELECT foo FROM bar WHERE ((a = 1) AND (b = 6))/,
237 q/SELECT foo FROM bar WHERE ((a = 1) AND (b = 7))/,
239 q/SELECT foo FROM bar WHERE a < 1 AND b = 1/,
240 q/SELECT foo FROM bar WHERE b = 1 AND b = 1/,
241 q/SELECT foo FROM bar WHERE (c = 1) AND b = 1/,
242 q/SELECT foo FROM bar WHERE (d = 1) AND b = 1/,
244 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 AND quux/,
245 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 GROUP BY foo/,
246 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 ORDER BY foo/,
247 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 LIMIT 1/,
248 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 OFFSET 1/,
249 q/SELECT foo FROM bar JOIN quux WHERE a = 1 AND b = 1/,
250 q/SELECT foo FROM bar JOIN quux ON a = 1 WHERE a = 1 AND b = 1/,
256 q/SELECT foo FROM bar WHERE a = 1 AND b = 1 OR c = 1/,
257 q/SELECT foo FROM bar WHERE (a = 1 AND b = 1) OR c = 1/,
258 q/SELECT foo FROM bar WHERE a = 1 AND (b = 1 OR c = 1)/,
264 q/SELECT foo FROM bar WHERE a = 1 OR b = 1 AND c = 1/,
265 q/SELECT foo FROM bar WHERE (a = 1 OR b = 1) AND c = 1/,
266 q/SELECT foo FROM bar WHERE a = 1 OR (b = 1 AND c = 1)/,
271 parenthesis_significant => 1,
273 q/SELECT foo FROM bar WHERE a IN (1,2,3)/,
274 q/SELECT foo FROM bar WHERE a IN (1,3,2)/,
275 q/SELECT foo FROM bar WHERE a IN ((1,2,3))/,
281 # BETWEEN with/without parenthesis around itself/RHS is a sticky business
282 # if I made a mistake here, simply rewrite the special BETWEEN handling in
286 q/SELECT foo FROM bar WHERE ( completion_date BETWEEN ? AND ? AND status = ? )/,
287 q/SELECT foo FROM bar WHERE completion_date BETWEEN (? AND ?) AND status = ?/,
288 q/SELECT foo FROM bar WHERE ( (completion_date BETWEEN (? AND ?) ) AND status = ? )/,
289 q/SELECT foo FROM bar WHERE ( (completion_date BETWEEN (? AND ? AND status = ?) ) )/,
293 # JOIN condition - equal
297 q/SELECT foo FROM bar JOIN baz ON a = 1 WHERE x = 1/,
298 q/SELECT foo FROM bar JOIN baz ON a=1 WHERE x = 1/,
299 q/SELECT foo FROM bar JOIN baz ON (a = 1) WHERE x = 1/,
300 q/SELECT foo FROM bar JOIN baz ON (a=1) WHERE x = 1/,
301 q/SELECT foo FROM bar JOIN baz ON ( a = 1 ) WHERE x = 1/,
338 q/SELECT foo FROM bar JOIN baz ON ((a = 1)) WHERE x = 1/,
339 q/SELECT foo FROM bar JOIN baz ON ( (a = 1) ) WHERE x = 1/,
340 q/SELECT foo FROM bar JOIN baz ON ( ( a = 1 ) ) WHERE x = 1/,
346 q/SELECT foo FROM bar JOIN baz ON a = 1 AND b = 1 WHERE x = 1/,
347 q/SELECT foo FROM bar JOIN baz ON (a = 1) AND (b = 1) WHERE x = 1/,
348 q/SELECT foo FROM bar JOIN baz ON ((a = 1) AND (b = 1)) WHERE x = 1/,
349 q/SELECT foo FROM bar JOIN baz ON (a = 1 AND b = 1) WHERE x = 1/,
350 q/SELECT foo FROM bar JOIN baz ON ((a = 1 AND b = 1)) WHERE x = 1/,
351 q/SELECT foo FROM bar JOIN baz ON (((a = 1) AND (b = 1))) WHERE x = 1/,
411 # JOIN condition - different
415 q/SELECT foo FROM bar JOIN quux ON a = 1 WHERE quuux/,
416 q/SELECT quux FROM bar JOIN quux ON a = 1 WHERE quuux/,
417 q/SELECT foo FROM quux JOIN quux ON a = 1 WHERE quuux/,
418 q/FOOBAR foo FROM bar JOIN quux ON a = 1 WHERE quuux/,
420 q/SELECT foo FROM bar JOIN quux ON a = 2 WHERE quuux/,
421 q/SELECT foo FROM bar JOIN quux ON a < 1 WHERE quuux/,
422 q/SELECT foo FROM bar JOIN quux ON b = 1 WHERE quuux/,
423 q/SELECT foo FROM bar JOIN quux ON (c = 1) WHERE quuux/,
424 q/SELECT foo FROM bar JOIN quux ON (d = 1) WHERE quuux/,
426 q/SELECT foo FROM bar JOIN quux ON a = 1 AND quuux/,
427 q/SELECT foo FROM bar JOIN quux ON a = 1 GROUP BY foo/,
428 q/SELECT foo FROM bar JOIN quux ON a = 1 ORDER BY foo/,
429 q/SELECT foo FROM bar JOIN quux ON a = 1 LIMIT 1/,
430 q/SELECT foo FROM bar JOIN quux ON a = 1 OFFSET 1/,
431 q/SELECT foo FROM bar JOIN quux ON a = 1 JOIN quuux/,
432 q/SELECT foo FROM bar JOIN quux ON a = 1 JOIN quuux ON a = 1/,
438 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 WHERE quuux/,
439 q/SELECT quux FROM bar JOIN quux ON a = 1 AND b = 1 WHERE quuux/,
440 q/SELECT foo FROM quux JOIN quux ON a = 1 AND b = 1 WHERE quuux/,
441 q/FOOBAR foo FROM bar JOIN quux ON a = 1 AND b = 1 WHERE quuux/,
443 q/SELECT foo FROM bar JOIN quux ON a = 2 AND b = 1 WHERE quuux/,
444 q/SELECT foo FROM bar JOIN quux ON a = 3 AND (b = 1) WHERE quuux/,
445 q/SELECT foo FROM bar JOIN quux ON (a = 4) AND b = 1 WHERE quuux/,
446 q/SELECT foo FROM bar JOIN quux ON (a = 5) AND (b = 1) WHERE quuux/,
447 q/SELECT foo FROM bar JOIN quux ON ((a = 6) AND (b = 1)) WHERE quuux/,
448 q/SELECT foo FROM bar JOIN quux ON ((a = 7) AND (b = 1)) WHERE quuux/,
450 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 2 WHERE quuux/,
451 q/SELECT foo FROM bar JOIN quux ON a = 1 AND (b = 3) WHERE quuux/,
452 q/SELECT foo FROM bar JOIN quux ON (a = 1) AND b = 4 WHERE quuux/,
453 q/SELECT foo FROM bar JOIN quux ON (a = 1) AND (b = 5) WHERE quuux/,
454 q/SELECT foo FROM bar JOIN quux ON ((a = 1) AND (b = 6)) WHERE quuux/,
455 q/SELECT foo FROM bar JOIN quux ON ((a = 1) AND (b = 7)) WHERE quuux/,
457 q/SELECT foo FROM bar JOIN quux ON a < 1 AND b = 1 WHERE quuux/,
458 q/SELECT foo FROM bar JOIN quux ON b = 1 AND b = 1 WHERE quuux/,
459 q/SELECT foo FROM bar JOIN quux ON (c = 1) AND b = 1 WHERE quuux/,
460 q/SELECT foo FROM bar JOIN quux ON (d = 1) AND b = 1 WHERE quuux/,
462 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 AND quuux/,
463 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 GROUP BY foo/,
464 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 ORDER BY foo/,
465 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 LIMIT 1/,
466 q/SELECT foo FROM bar JOIN quux ON a = 1 AND b = 1 OFFSET 1/,
467 q/SELECT foo FROM bar JOIN quux JOIN quuux ON a = 1 AND b = 1/,
468 q/SELECT foo FROM bar JOIN quux ON a = 1 JOIN quuux ON a = 1 AND b = 1/,
472 # DISTINCT ON (...) not confused with JOIN ON (...)
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/,
478 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE (a = 1)/,
479 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE (a=1)/,
480 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE ( a = 1 )/,
482 SELECT DISTINCT ON (foo, quux)
491 SELECT DISTINCT ON (foo, quux)
500 SELECT DISTINCT ON (foo, quux)
508 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE ((a = 1))/,
509 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE ( (a = 1) )/,
510 q/SELECT DISTINCT ON (foo, quux) foo, quux FROM bar WHERE ( ( a = 1 ) )/,
518 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE a = 1/,
519 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE (a = 1)/,
520 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1)) AS foo WHERE a = 1/,
521 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1)) AS foo WHERE (a = 1)/,
527 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 1) AS foo WHERE a = 1/,
528 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 1)) AS foo WHERE a = 1/,
529 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 1) AS foo WHERE a = 1/,
530 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 1)) AS foo WHERE a = 1/,
531 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 1))) AS foo WHERE a = 1/,
533 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 1) AS foo WHERE (a = 1)/,
534 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 1)) AS foo WHERE (a = 1)/,
535 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 1) AS foo WHERE (a = 1)/,
536 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 1)) AS foo WHERE (a = 1)/,
537 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 1))) AS foo WHERE (a = 1)/,
541 # subselects - different
545 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE a = 1/,
546 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE a = 2/,
547 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1) AS foo WHERE (a = 3)/,
548 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1)) AS foo WHERE a = 4/,
549 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1)) AS foo WHERE (a = 5)/,
550 q/SELECT * FROM (SELECT * FROM bar WHERE b = 2) AS foo WHERE a = 1/,
551 q/SELECT * FROM (SELECT * FROM bar WHERE b = 3) AS foo WHERE (a = 1)/,
552 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 4)) AS foo WHERE a = 1/,
553 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 5)) AS foo WHERE (a = 1)/,
559 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 1) AS foo WHERE a = 1/,
560 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 2) AS foo WHERE a = 1/,
561 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 3)) AS foo WHERE a = 1/,
562 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 4)) AS foo WHERE a = 1/,
563 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 5))) AS foo WHERE a = 1/,
565 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 6) AS foo WHERE (a = 1)/,
566 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 7) AS foo WHERE (a = 1)/,
567 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 8)) AS foo WHERE (a = 1)/,
568 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 9)) AS foo WHERE (a = 1)/,
569 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 10))) AS foo WHERE (a = 1)/,
571 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 1) AS foo WHERE a = 2/,
572 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 2) AS foo WHERE a = 2/,
573 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 3)) AS foo WHERE a = 2/,
574 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 4)) AS foo WHERE a = 2/,
575 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 5))) AS foo WHERE a = 2/,
577 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND c = 6) AS foo WHERE (a = 2)/,
578 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND c = 7) AS foo WHERE (a = 2)/,
579 q/SELECT * FROM (SELECT * FROM bar WHERE b = 1 AND (c = 8)) AS foo WHERE (a = 2)/,
580 q/SELECT * FROM (SELECT * FROM bar WHERE (b = 1) AND (c = 9)) AS foo WHERE (a = 2)/,
581 q/SELECT * FROM (SELECT * FROM bar WHERE ((b = 1) AND (c = 10))) AS foo WHERE (a = 2)/,
587 'SELECT a,b,c FROM foo',
588 'SELECT a,c,b FROM foo',
589 'SELECT b,a,c FROM foo',
590 'SELECT b,c,a FROM foo',
591 'SELECT c,a,b FROM foo',
592 'SELECT c,b,a FROM foo',
598 'SELECT * FROM foo WHERE a IN (1,2,3)',
599 'SELECT * FROM foo WHERE a IN (1,3,2)',
600 'SELECT * FROM foo WHERE a IN (2,1,3)',
601 'SELECT * FROM foo WHERE a IN (2,3,1)',
602 'SELECT * FROM foo WHERE a IN (3,1,2)',
603 'SELECT * FROM foo WHERE a IN (3,2,1)',
609 'SELECT count(*) FROM foo',
610 'SELECT count(*) AS bar FROM foo',
611 'SELECT count(*) AS "bar" FROM foo',
612 'SELECT count(a) FROM foo',
613 'SELECT count(1) FROM foo',
699 { foo => 42, bar => 1 },
700 { foo => 42, bar => 1 },
701 { foo => '42', bar => 1 },
705 # blessed object - equal
709 bless(\(local $_ = 42), 'Life::Universe::Everything'),
710 bless(\(local $_ = 42), 'Life::Universe::Everything'),
716 bless([42], 'Life::Universe::Everything'),
717 bless([42], 'Life::Universe::Everything'),
723 bless({ answer => 42 }, 'Life::Universe::Everything'),
724 bless({ answer => 42 }, 'Life::Universe::Everything'),
728 # complex data structure - equal
732 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
733 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
748 # scalarref - different
758 # arrayref - different
768 # hashref - different
789 # complex data structure - different
793 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
794 [43, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
795 [42, { foo => 'baz', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
796 [42, { bar => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
797 [42, { foo => 'bar', quuux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ],
798 [42, { foo => 'bar', quux => [0, 1, 2, \3, { quux => [4, 5] } ] }, 8 ],
799 [42, { foo => 'bar', quux => [1, 2, 3, { quux => [4, 5] } ] }, 8 ],
800 [42, { foo => 'bar', quux => [1, 2, \4, { quux => [4, 5] } ] }, 8 ],
801 [42, { foo => 'bar', quux => [1, 2, \3, { quuux => [4, 5] } ] }, 8 ],
802 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5, 6] } ] }, 8 ],
803 [42, { foo => 'bar', quux => [1, 2, \3, { quux => 4 } ] }, 8 ],
804 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5], quuux => 1 } ] }, 8 ],
805 [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8, 9 ],
812 map { $_ * ($_ - 1) / 2 }
813 map { scalar @{$_->{statements}} }
817 map { $_ * ($_ - 1) / 2 }
818 map { scalar @{$_->{bindvals}} }
823 use_ok('SQL::Abstract::Test', import => [qw(
824 eq_sql_bind eq_sql eq_bind is_same_sql_bind
827 for my $test (@sql_tests) {
828 my $statements = $test->{statements};
829 while (@$statements) {
830 my $sql1 = shift @$statements;
831 foreach my $sql2 (@$statements) {
833 no warnings qw/once/; # perl 5.10 is dumb
834 local $SQL::Abstract::Test::parenthesis_significant = $test->{parenthesis_significant}
835 if $test->{parenthesis_significant};
836 my $equal = eq_sql($sql1, $sql2);
839 local $TODO = $test->{todo} if $test->{todo};
841 if ($test->{equal}) {
842 ok($equal, "equal SQL expressions should have been considered equal");
844 ok(!$equal, "different SQL expressions should have been considered not equal");
847 if ($equal ^ $test->{equal}) {
856 for my $test (@bind_tests) {
857 my $bindvals = $test->{bindvals};
859 my $bind1 = shift @$bindvals;
860 foreach my $bind2 (@$bindvals) {
861 my $equal = eq_bind($bind1, $bind2);
862 if ($test->{equal}) {
863 ok($equal, "equal bind values considered equal");
865 ok(!$equal, "different bind values considered not equal");
868 if ($equal ^ $test->{equal}) {
869 diag("bind1: " . Dumper($bind1));
870 diag("bind2: " . Dumper($bind2));
877 "SELECT * FROM foo WHERE id = ?", [42],
878 "SELECT * FROM foo WHERE (id = ?)", [42],
880 "eq_sql_bind considers equal SQL expressions and bind values equal"
885 "SELECT * FROM foo WHERE id = ?", [42],
886 "SELECT * FROM foo WHERE (id = ?)", [0],
888 "eq_sql_bind considers equal SQL expressions and different bind values different"
892 "SELECT * FROM foo WHERE id = ?", [42],
893 "SELECT * FROM bar WHERE (id = ?)", [42],
895 "eq_sql_bind considers different SQL expressions and equal bind values different"