$placeholder = $self->_convert('?');
$op = $self->_sqlcase($op);
+ my $invalid_args = "Operator '$op' requires either an arrayref with two defined values or expressions, or a single literal scalarref/arrayref-ref";
+
my ($clause, @bind) = $self->_SWITCH_refkind($vals, {
ARRAYREFREF => sub {
my ($s, @b) = @$$vals;
return $$vals;
},
ARRAYREF => sub {
- puke "special op 'between' accepts an arrayref with exactly two values"
- if @$vals != 2;
+ puke $invalid_args if @$vals != 2;
my (@all_sql, @all_bind);
foreach my $val (@$vals) {
if (@rest or $func !~ /^ \- (.+)/x);
local $self->{_nested_func_lhs} = $k;
$self->_where_unary_op ($1 => $arg);
- }
+ },
+ FALLBACK => sub {
+ puke $invalid_args,
+ },
});
push @all_sql, $sql;
push @all_bind, @bind;
);
},
FALLBACK => sub {
- puke "special op 'between' accepts an arrayref with two values, or a single literal scalarref/arrayref-ref";
+ puke $invalid_args,
},
});
bind => [],
test => '-between with literal sql with a literal (\"\'this\' AND \'that\'")',
},
+
+ # generate a set of invalid -between tests
+ ( map { {
+ where => { x => { -between => $_ } },
+ test => 'invalid -between args',
+ exception => qr|Operator 'BETWEEN' requires either an arrayref with two defined values or expressions, or a single literal scalarref/arrayref-ref|,
+ } } (
+ [ 1, 2, 3 ],
+ [ 1, undef, 3 ],
+ [ undef, 2, 3 ],
+ [ 1, 2, undef ],
+ [ 1, undef ],
+ [ undef, 2 ],
+ [ undef, undef ],
+ [ 1 ],
+ [ undef ],
+ [],
+ 1,
+ undef,
+ )),
{
where => {
start0 => { -between => [ 1, { -upper => 2 } ] },