X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract.pm;h=a778174e8ffb1395192f601c4e5607156f2efab5;hb=7c840ffde1b169f76dbe4cf8c01af235eee5a787;hp=21ff12705c919b8d8c6653237257281522055eac;hpb=1803b936fc5538695982e6b10b911cba1678a09b;p=dbsrgits%2FSQL-Abstract.git diff --git a/lib/SQL/Abstract.pm b/lib/SQL/Abstract.pm index 21ff127..a778174 100644 --- a/lib/SQL/Abstract.pm +++ b/lib/SQL/Abstract.pm @@ -38,7 +38,6 @@ our $AUTOLOAD; # 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" }}, ); @@ -171,7 +170,7 @@ sub new { 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; } @@ -556,6 +555,8 @@ sub where { 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; @@ -687,10 +688,7 @@ sub _expand_expr_hashpair_ident { 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 { @@ -704,13 +702,12 @@ 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 }) @@ -720,6 +717,8 @@ sub _expand_expr_hashpair_op { { # Old SQLA compat + my $op = join(' ', split '_', $op); + # the old special op system requires illegality for top-level use if (