X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F05in_between.t;h=d3ede2f44335e189c855889c80d354f9a9499a9d;hb=1ba9d0f03ee2573587fdd72f7465926e978d6be1;hp=8c6828157eb8d228cce8c34418fc0af1429e3e7e;hpb=df7b1db3fac6b264486bde43d4ef250035126885;p=dbsrgits%2FSQL-Abstract.git diff --git a/t/05in_between.t b/t/05in_between.t index 8c68281..d3ede2f 100644 --- a/t/05in_between.t +++ b/t/05in_between.t @@ -127,6 +127,18 @@ my @in_between_tests = ( ], test => '-between POD test', }, + { + where => { 'test1.a' => { 'In', ['boom', 'bang'] } }, + stmt => ' WHERE ( test1.a IN ( ?, ? ) )', + bind => ['boom', 'bang'], + test => 'In (no dash, initial cap) with qualified column', + }, + { + where => { a => { 'between', ['boom', 'bang'] } }, + stmt => ' WHERE ( a BETWEEN ? AND ? )', + bind => ['boom', 'bang'], + test => 'between (no dash) with two placeholders', + }, { parenthesis_significant => 1, @@ -187,6 +199,7 @@ my @in_between_tests = ( }, { + parenthesis_significant => 1, where => { x => { -in => [ \['LOWER(?)', 'A' ], \'LOWER(b)', { -lower => 'c' } ] } }, stmt => " WHERE ( x IN ( LOWER(?), LOWER(b), LOWER ? ) )", bind => [qw/A c/], @@ -200,6 +213,7 @@ my @in_between_tests = ( \Qversion of SQL::Abstract will emit the logically correct SQL \E \Qinstead of raising this exception)\E /x, + parenthesis_significant => 1, where => { x => { -in => [ 1, undef ] } }, stmt => " WHERE ( x IN ( ? ) OR x IS NULL )", bind => [ 1 ], @@ -213,11 +227,57 @@ my @in_between_tests = ( \Qversion of SQL::Abstract will emit the logically correct SQL \E \Qinstead of raising this exception)\E /x, + parenthesis_significant => 1, where => { x => { -in => [ 1, undef, 2, 3, undef ] } }, stmt => " WHERE ( x IN ( ?, ?, ? ) OR x IS NULL )", bind => [ 1, 2, 3 ], test => '-in with multiple undef elements', }, + { + parenthesis_significant => 1, + where => { a => { -in => 42 }, b => { -not_in => 42 } }, + stmt => ' WHERE ( ( a IN ( ? ) AND b NOT IN ( ? ) ) )', + bind => [ 42, 42 ], + test => '-in, -not_in with scalar', + }, + { + where => { a => { -in => [] }, b => { -not_in => [] } }, + stmt => ' WHERE ( 0=1 AND 1=1 )', + bind => [], + test => '-in, -not_in with empty arrays', + }, + { + throws => qr/ + \QSQL::Abstract before v1.75 used to generate incorrect SQL \E + \Qwhen the -IN operator was given an undef-containing list: \E + \Q!!!AUDIT YOUR CODE AND DATA!!! (the upcoming Data::Query-based \E + \Qversion of SQL::Abstract will emit the logically correct SQL \E + \Qinstead of raising this exception)\E + /x, + parenthesis_significant => 1, + where => { a => { -in => [42, undef] }, b => { -not_in => [42, undef] } }, + stmt => ' WHERE ( ( a IN ( ? ) OR a IS NULL ) AND b NOT IN ( ? ) AND b IS NOT NULL )', + bind => [ 42, 42 ], + test => '-in, -not_in with undef among elements', + }, + { + throws => qr/ + \QSQL::Abstract before v1.75 used to generate incorrect SQL \E + \Qwhen the -IN operator was given an undef-containing list: \E + \Q!!!AUDIT YOUR CODE AND DATA!!! (the upcoming Data::Query-based \E + \Qversion of SQL::Abstract will emit the logically correct SQL \E + \Qinstead of raising this exception)\E + /x, + where => { a => { -in => [undef] }, b => { -not_in => [undef] } }, + stmt => ' WHERE ( a IS NULL AND b IS NOT NULL )', + bind => [], + test => '-in, -not_in with just undef element', + }, + { + where => { a => { -in => undef } }, + throws => qr/Argument passed to the 'IN' operator can not be undefined/, + test => '-in with undef argument', + }, ); for my $case (@in_between_tests) {