X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=xt%2Fextra%2Finternals%2Fsqla_condition_parsers.t;h=98a76b0881698ba2e9447055bfa4fa044f19637d;hb=d6c13bfdf6656317fedbf7e9deeb450cf42efb5b;hp=5c94edc659b72ae4d4ba543ab16757cfe6141989;hpb=497d0451bd98892c7bc2228c5ca82ca8592a5558;p=dbsrgits%2FDBIx-Class.git diff --git a/xt/extra/internals/sqla_condition_parsers.t b/xt/extra/internals/sqla_condition_parsers.t index 5c94edc..98a76b0 100644 --- a/xt/extra/internals/sqla_condition_parsers.t +++ b/xt/extra/internals/sqla_condition_parsers.t @@ -34,6 +34,9 @@ my $num = bless( \do { my $foo = 69 }, 'DBICTest::SillyInt' ); is($num, 69, 'test overloaded object is "sane"'); is("$num", 69, 'test overloaded object is "sane"'); +my $AttUQoLtUaE = 42; +my $PVIVmaker = $AttUQoLtUaE . ''; + my @tests = ( { where => { artistid => 1, charfield => undef }, @@ -89,9 +92,9 @@ my @tests = ( }, { where => { -and => [ \'foo=bar', [ { artistid => { '=', $num } } ], { name => 'Caterwauler McCrae'}, \'buzz=bozz' ] }, - normalized => { -and => [ \'foo=bar', \'buzz=bozz' ], name => 'Caterwauler McCrae', artistid => $num }, + normalized => { -and => [ \'buzz=bozz', \'foo=bar' ], name => 'Caterwauler McCrae', artistid => $num }, sql => 'WHERE foo=bar AND artistid = ? AND name = ? AND buzz=bozz', - normalized_sql => 'WHERE foo=bar AND buzz=bozz AND artistid = ? AND name = ?', + normalized_sql => 'WHERE buzz=bozz AND foo=bar AND artistid = ? AND name = ?', equality_extract => { name => 'Caterwauler McCrae', artistid => $num }, }, { @@ -110,9 +113,8 @@ my @tests = ( }, { where => { artistid => { '=' => [ 1 ], }, charfield => { '=' => [ -AND => \'1', \['?',2] ] }, rank => { '=' => [ -OR => $num, $num ] } }, - normalized => { artistid => 1, charfield => [-and => { '=' => \['?',2] }, { '=' => \'1' } ], rank => { '=' => [$num, $num] } }, + normalized => { artistid => 1, charfield => [-and => { '=' => \'1' }, { '=' => \['?',2] } ], rank => { '=' => [$num, $num] } }, sql => 'WHERE artistid = ? AND charfield = 1 AND charfield = ? AND ( rank = ? OR rank = ? )', - normalized_sql => 'WHERE artistid = ? AND charfield = ? AND charfield = 1 AND ( rank = ? OR rank = ? )', equality_extract => { artistid => 1, charfield => UNRESOLVABLE_CONDITION }, }, { @@ -135,10 +137,10 @@ my @tests = ( (map { { where => $_, sql => 'WHERE (rank = 13 OR charfield IS NULL OR artistid = ?) AND (artistid = ? OR charfield IS NULL OR rank != 42)', - normalized_sql => 'WHERE (artistid = ? OR charfield IS NULL OR rank = 13) AND (artistid = ? OR charfield IS NULL OR rank != 42)', + normalized_sql => 'WHERE (artistid = ? OR charfield IS NULL OR rank != 42) AND (artistid = ? OR charfield IS NULL OR rank = 13)', normalized => { -and => [ - { -or => [ artistid => 1, charfield => undef, rank => { '=' => \13 } ] }, { -or => [ artistid => 1, charfield => undef, rank => { '!=' => \42 } ] }, + { -or => [ artistid => 1, charfield => undef, rank => { '=' => \13 } ] }, ] }, equality_extract => {}, equality_considering_nulls_extract => {}, @@ -146,7 +148,7 @@ my @tests = ( { -and => [ -or => [ rank => { '=' => \13 }, charfield => { '=' => undef }, artistid => 1 ], - -or => { artistid => { '=' => 1 }, charfield => undef, rank => { '!=' => \42 } }, + -or => { artistid => { '=' => 1 }, charfield => undef, rank => { '!=' => \$AttUQoLtUaE } }, ] }, { @@ -182,20 +184,34 @@ my @tests = ( }, { where => { -and => [ - -or => [ rank => { '=' => \13 }, charfield => { '=' => undef }, artistid => 1 ], - -or => { artistid => { '=' => 1 }, charfield => undef, rank => { '=' => \13 } }, - ] }, - normalized => { -and => [ - { -or => [ artistid => 1, charfield => undef, rank => { '=' => \13 } ] }, - { -or => [ artistid => 1, charfield => undef, rank => { '=' => \13 } ] }, + -or => [ rank => { '=' => \$AttUQoLtUaE }, charfield => { '=' => undef }, artistid => 1 ], + -or => { artistid => { '=' => 1 }, charfield => undef, rank => { '=' => \42 } }, ] }, - sql => 'WHERE (rank = 13 OR charfield IS NULL OR artistid = ?) AND (artistid = ? OR charfield IS NULL OR rank = 13)', - normalized_sql => 'WHERE (artistid = ? OR charfield IS NULL OR rank = 13) AND (artistid = ? OR charfield IS NULL OR rank = 13)', + normalized => { + -or => [ artistid => 1, charfield => undef, rank => { '=' => \42 } ], + }, + sql => 'WHERE (rank = 42 OR charfield IS NULL OR artistid = ?) AND (artistid = ? OR charfield IS NULL OR rank = 42)', + normalized_sql => 'WHERE artistid = ? OR charfield IS NULL OR rank = 42', equality_extract => {}, equality_considering_nulls_extract => {}, }, { where => { -and => [ + { -or => [ \42 ] }, + { -and => [ + { -or => [ \$AttUQoLtUaE ] }, + { -or => [ \13 ] }, + ] }, + ] }, + normalized => { + -and => [ \13, \42 ], + }, + sql => 'WHERE 42 AND 42 AND 13', + normalized_sql => 'WHERE 13 AND 42', + equality_extract => {}, + }, + { + where => { -and => [ -or => [ rank => { '=' => \13 }, charfield => { '=' => undef }, artistid => 1 ], -or => { artistid => { '=' => 1 }, charfield => undef, rank => { '!=' => \42 } }, -and => [ foo => { '=' => \1 }, bar => 2 ], @@ -218,12 +234,12 @@ my @tests = ( AND NOT foo = ? ', normalized_sql => 'WHERE - ( artistid = ? OR charfield IS NULL OR rank = 13 ) - AND ( artistid = ? OR charfield IS NULL OR rank != 42 ) - AND (EXISTS (SELECT 1)) + (EXISTS (SELECT 1)) AND (EXISTS (SELECT 2)) AND NOT foo = ? AND NOT foo = ? + AND ( artistid = ? OR charfield IS NULL OR rank != 42 ) + AND ( artistid = ? OR charfield IS NULL OR rank = 13 ) AND bar = 4 AND bar = ? AND foo = 1 @@ -231,12 +247,12 @@ my @tests = ( ', normalized => { -and => [ - { -or => [ artistid => 1, charfield => undef, rank => { '=' => \13 } ] }, - { -or => [ artistid => 1, charfield => undef, rank => { '!=' => \42 } ] }, { -exists => \'(SELECT 1)' }, { -exists => \'(SELECT 2)' }, - { -not => { foo => 69 } }, { -not => { foo => 42 } }, + { -not => { foo => 69 } }, + { -or => [ artistid => 1, charfield => undef, rank => { '!=' => \42 } ] }, + { -or => [ artistid => 1, charfield => undef, rank => { '=' => \13 } ] }, ], foo => [ -and => { '=' => \1 }, 3 ], bar => [ -and => { '=' => \4 }, 2 ], @@ -273,14 +289,17 @@ my @tests = ( charfield => { -ident => 'foo' }, name => { '=' => { -value => undef } }, rank => { '=' => { -ident => 'bar' } }, + arrayfield => { '>' => { -value => [3,1] } }, ] }, - sql => 'WHERE artistid = ? AND charfield = foo AND name IS NULL AND rank = bar', normalized => { artistid => { -value => [1] }, name => undef, charfield => { '=', { -ident => 'foo' } }, rank => { '=' => { -ident => 'bar' } }, + arrayfield => { '>' => { -value => [3,1] } }, }, + sql => 'WHERE artistid = ? AND charfield = foo AND name IS NULL AND rank = bar AND arrayfield > ?', + normalized_sql => 'WHERE arrayfield > ? AND artistid = ? AND charfield = foo AND name IS NULL AND rank = bar', equality_extract => { artistid => [1], charfield => { -ident => 'foo' }, @@ -415,13 +434,14 @@ my @tests = ( \'baz = ber', ], }, - sql => 'WHERE foo = bar AND baz = ber', normalized => { -and => [ - \'foo = bar', \'baz = ber', + \'foo = bar', ], }, + sql => 'WHERE foo = bar AND baz = ber', + normalized_sql => 'WHERE baz = ber AND foo = bar', equality_extract => {}, }, { @@ -432,14 +452,15 @@ my @tests = ( x => { -ident => 'y' }, ], }, - sql => 'WHERE foo = bar AND baz = ber AND x = y', normalized => { -and => [ - \'foo = bar', \'baz = ber', + \'foo = bar', ], x => { '=' => { -ident => 'y' } } }, + sql => 'WHERE foo = bar AND baz = ber AND x = y', + normalized_sql => 'WHERE baz = ber AND foo = bar AND x = y', equality_extract => { x => { -ident => 'y' } }, }, ); @@ -682,4 +703,10 @@ for my $t (@tests) { } } +# test separately +is_deeply( + normalize_sqla_condition( UNRESOLVABLE_CONDITION ), + { -and => [ UNRESOLVABLE_CONDITION ] }, +); + done_testing;