# See section WHERE: BUILTIN SPECIAL OPERATORS below for implementation
my @BUILTIN_SPECIAL_OPS = (
{regex => qr/^ (?: not \s )? between $/ix, handler => sub { die "NOPE" }},
- {regex => qr/^ (?: not \s )? in $/ix, handler => sub { die "NOPE" }},
{regex => qr/^ is (?: \s+ not )? $/ix, handler => sub { die "NOPE" }},
);
if ($class->isa('DBIx::Class::SQLMaker')) {
push @{$opt{special_ops}}, our $DBIC_Compat_Op ||= {
- regex => qr/^(?:ident|value)$/i, handler => sub { die "NOPE" }
+ regex => qr/^(?:ident|value|(?:not\s)?in)$/i, handler => sub { die "NOPE" }
};
$opt{is_dbic_sqlmaker} = 1;
}
return wantarray ? ($sql, @bind) : $sql;
}
+{ our $Default_Scalar_To = -value }
+
sub expand_expr {
my ($self, $expr, $default_scalar_to) = @_;
local our $Default_Scalar_To = $default_scalar_to if $default_scalar_to;
sub _expand_expr_scalar {
my ($self, $expr) = @_;
- if (my $d = our $Default_Scalar_To) {
- return $self->_expand_expr({ $d => $expr });
- }
- return $self->_expand_value(-value => $expr);
+ return $self->_expand_expr({ (our $Default_Scalar_To) => $expr });
}
sub _expand_expr_hashpair_scalar {
sub _expand_expr_hashpair_op {
my ($self, $k, $v) = @_;
- my $op = $k;
- $op =~ s/^-// if length($op) > 1;
+ s/^-(?=\w)//, s/ +/_/g for my $op = lc $k;
$self->_assert_pass_injection_guard($op);
# Ops prefixed with -not_ get converted
- if (my ($rest) = $op =~/^not[_ ](.*)$/) {
+ if (my ($rest) = $op =~/^not_(.*)$/) {
return +{ -op => [
'not',
$self->_expand_expr({ "-${rest}", $v })
{ # Old SQLA compat
+ my $op = join(' ', split '_', $op);
+
# the old special op system requires illegality for top-level use
if (