From: Dagfinn Ilmari Mannsåker Date: Thu, 26 Dec 2013 21:27:11 +0000 (+0100) Subject: Move simple IN/BETWEEN tests to t/05in_between.t X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=scpubgit%2FQ-Branch.git;a=commitdiff_plain;h=904c36212d6024755df9c19a5f32b3e8c290bcd4 Move simple IN/BETWEEN tests to t/05in_between.t No changes in the actual tests except splitting the empty array and scalar tests for IN into separate cases. --- diff --git a/t/01generate.t b/t/01generate.t index 7304235..e3737ff 100644 --- a/t/01generate.t +++ b/t/01generate.t @@ -69,20 +69,6 @@ my @tests = ( }, { func => 'select', - args => [[qw/test1 test2/], '*', { 'test1.a' => { 'In', ['boom', 'bang'] } }], - stmt => 'SELECT * FROM test1, test2 WHERE ( test1.a IN ( ?, ? ) )', - stmt_q => 'SELECT * FROM `test1`, `test2` WHERE ( `test1`.`a` IN ( ?, ? ) )', - bind => ['boom', 'bang'] - }, - { - func => 'select', - args => ['test', '*', { a => { 'between', ['boom', 'bang'] } }], - stmt => 'SELECT * FROM test WHERE ( a BETWEEN ? AND ? )', - stmt_q => 'SELECT * FROM `test` WHERE ( `a` BETWEEN ? AND ? )', - bind => ['boom', 'bang'] - }, - { - func => 'select', args => ['test', '*', { a => { '!=', 'boom' } }], stmt => 'SELECT * FROM test WHERE ( a != ? )', stmt_q => 'SELECT * FROM `test` WHERE ( `a` != ? )', @@ -536,53 +522,6 @@ my @tests = ( }, { func => 'select', - args => ['test', '*', { a => { -in => [] }, b => { -not_in => [] }, c => { -in => 42 } }], - stmt => 'SELECT * FROM test WHERE ( 0=1 AND 1=1 AND c IN ( ? ))', - stmt_q => 'SELECT * FROM `test` WHERE ( 0=1 AND 1=1 AND `c` IN ( ? ))', - bind => [ 42 ], - }, - { - func => 'select', - args => ['test', '*', { a => { -in => [] }, b => { -not_in => [] } }], - stmt => 'SELECT * FROM test WHERE ( 0=1 AND 1=1 )', - stmt_q => 'SELECT * FROM `test` WHERE ( 0=1 AND 1=1 )', - bind => [], - }, - { - 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, - func => 'select', - args => ['test', '*', { a => { -in => [42, undef] }, b => { -not_in => [42, undef] } } ], - stmt => 'SELECT * FROM test WHERE ( ( a IN ( ? ) OR a IS NULL ) AND b NOT IN ( ? ) AND b IS NOT NULL )', - stmt_q => 'SELECT * FROM `test` WHERE ( ( `a` IN ( ? ) OR `a` IS NULL ) AND `b` NOT IN ( ? ) AND `b` IS NOT NULL )', - bind => [ 42, 42 ], - }, - { - 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, - func => 'select', - args => ['test', '*', { a => { -in => [undef] }, b => { -not_in => [undef] } } ], - stmt => 'SELECT * FROM test WHERE ( a IS NULL AND b IS NOT NULL )', - stmt_q => 'SELECT * FROM `test` WHERE ( `a` IS NULL AND `b` IS NOT NULL )', - bind => [], - }, - { - func => 'select', - args => ['test', '*', { a => { -in => undef } }], - throws => qr/Argument passed to the 'IN' operator can not be undefined/, - }, - { - func => 'select', args => ['test', '*', { a => { '=' => undef }, b => { -is => undef }, c => { -like => undef } }], stmt => 'SELECT * FROM test WHERE ( a IS NULL AND b IS NULL AND c IS NULL )', stmt_q => 'SELECT * FROM `test` WHERE ( `a` IS NULL AND `b` IS NULL AND `c` IS NULL )', diff --git a/t/05in_between.t b/t/05in_between.t index 8c68281..2fa8f2b 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, @@ -218,6 +230,49 @@ my @in_between_tests = ( bind => [ 1, 2, 3 ], test => '-in with multiple undef elements', }, + { + 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, + 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) {