X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F05in_between.t;h=5bcbe554fa5fc159799ad20c79315bc47999a2a0;hb=541af9148987e73b124229ee4f6b80d7c8d30e63;hp=44e40344ebefde0d12da3711e7897d8443e7a567;hpb=3445a1e75e7b24baf59387b11396b8e0ffe5edc5;p=scpubgit%2FQ-Branch.git diff --git a/t/05in_between.t b/t/05in_between.t index 44e4034..5bcbe55 100644 --- a/t/05in_between.t +++ b/t/05in_between.t @@ -284,11 +284,54 @@ my @in_between_tests = ( bind => [ 4, 2 ], test => 'Top level -in', }, +# This works but then SQL::Abstract::Tree breaks - something for a later commit +# { +# where => { -in => [ { -list => [ qw(x y) ] }, { -list => [ 1, 3 ] }, { -list => [ 2, 4 ] } ] }, +# stmt => ' WHERE ((x, y) IN ((?, ?), (?, ?))', +# bind => [ 1, 3, 2, 4 ], +# test => 'Top level -in with list args', +# }, { where => { -between => [42, 69] }, - throws => qr/Illegal use of top-level '-between'/, - test => 'Top level -between', + throws => qr/Fatal: Operator 'BETWEEN' requires/, + test => 'Top level -between with broken args', }, + { + where => { + -between => [ + { -op => [ '+', { -ident => 'foo' }, 2 ] }, + 3, 4 + ], + }, + stmt => ' WHERE (foo + ? BETWEEN ? AND ?)', + bind => [ 2, 3, 4 ], + test => 'Top level -between with useful LHS', + }, + { + where => { + -in => [ + { -row => [ 'x', 'y' ] }, + { -row => [ 1, 2 ] }, + { -row => [ 3, 4 ] }, + ], + }, + stmt => ' WHERE (x, y) IN ((?, ?), (?, ?))', + bind => [ 1..4 ], + test => 'Complex top-level -in', + }, + { + where => { -is => [ 'bob', undef ] }, + stmt => ' WHERE bob IS NULL', + bind => [], + test => 'Top level -is ok', + }, + { + where => { -op => [ in => x => 1, 2, 3 ] }, + stmt => ' WHERE x IN (?, ?, ?)', + bind => [ 1, 2, 3 ], + test => 'Raw -op passes through correctly' + }, + ); for my $case (@in_between_tests) { @@ -306,17 +349,19 @@ for my $case (@in_between_tests) { } else { my ($stmt, @bind); - warnings_are { - ($stmt, @bind) = $sql->where($case->{where}); - } [], "$label gives no warnings"; - - is_same_sql_bind( - $stmt, - \@bind, - $case->{stmt}, - $case->{bind}, - "$label generates correct SQL and bind", - ) || diag dumper ({ where => $case->{where}, exp => $sql->_expand_expr($case->{where}) }); + lives_ok { + warnings_are { + ($stmt, @bind) = $sql->where($case->{where}); + } [], "$label gives no warnings"; + + is_same_sql_bind( + $stmt, + \@bind, + $case->{stmt}, + $case->{bind}, + "$label generates correct SQL and bind", + ) || diag dumper ({ where => $case->{where}, exp => $sql->_expand_expr($case->{where}) }); + } || diag dumper ({ where => $case->{where}, exp => $sql->_expand_expr($case->{where}) }); } } }