bind => [],
test => '-in multi-line subquery test',
},
+
+ # check that the outer paren opener is not too agressive
+ # note: this syntax *is not legal* on SQLite (maybe others)
+ # see end of https://rt.cpan.org/Ticket/Display.html?id=99503
+ {
+ where => { foo => { -in => \ '(SELECT 1) UNION (SELECT 2)' } },
+ stmt => 'WHERE foo IN ( (SELECT 1) UNION (SELECT 2) )',
+ bind => [],
+ test => '-in paren-opening works on balanced pairs only',
+ },
+
{
where => {
customer => { -in => \[
throws => qr/Argument passed to the 'IN' operator can not be undefined/,
test => '-in with undef argument',
},
+
+ {
+ where => { -in => [42] },
+ throws => qr/Illegal use of top-level '-in'/,
+ test => 'Top level -in',
+ },
+ {
+ where => { -between => [42, 69] },
+ throws => qr/Illegal use of top-level '-between'/,
+ test => 'Top level -between',
+ },
);
for my $case (@in_between_tests) {
local $SQL::Abstract::Test::parenthesis_significant = $case->{parenthesis_significant};
my $label = $case->{test} || 'in-between test';
- my $sql = SQL::Abstract->new ($case->{args} || {});
+ my $sql = SQL::Abstract->new($case->{args} || {});
if (my $e = $case->{throws}) {
my $stmt;
$case->{stmt},
$case->{bind},
"$label generates correct SQL and bind",
- ) || diag_where ( $case->{where} );
+ ) || diag dumper ({ where => $case->{where}, exp => $sql->_expand_expr($case->{where}) });
}
}
}