X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract.pm;h=dc7934930dd9f139fdd353ce03cb2750a57144cc;hb=96a8d74ae88910d8d8b291c5213b5463eb0f8b2b;hp=7327fe2138aef0078fe0ec092e1bc60e86f4ee95;hpb=ec19b7595e4c83050b2b00107882233d78047d3c;p=scpubgit%2FQ-Branch.git diff --git a/lib/SQL/Abstract.pm b/lib/SQL/Abstract.pm index 7327fe2..dc79349 100644 --- a/lib/SQL/Abstract.pm +++ b/lib/SQL/Abstract.pm @@ -599,6 +599,9 @@ sub _expand_expr_hashpair { # top level special ops are illegal in general puke "Illegal use of top-level '-$op'" if List::Util::first { $op =~ $_->{regex} } @{$self->{special_ops}}; + if (my $us = List::Util::first { $op =~ $_->{regex} } @{$self->{unary_ops}}) { + return { -op => [ $op, $v ] }; + } } if ($k eq '-value' and my $m = our $Cur_Col_Meta) { return +{ -bind => [ $m, $v ] }; @@ -744,6 +747,13 @@ sub _expand_expr_hashpair { if (my $us = List::Util::first { $vk =~ $_->{regex} } @{$self->{user_special_ops}}) { return { -op => [ $vk, { -ident => $k }, $vv ] }; } + if (my $us = List::Util::first { $vk =~ $_->{regex} } @{$self->{unary_ops}}) { + return { -op => [ + $self->{cmp}, + { -ident => $k }, + { -op => [ $vk, $vv ] } + ] }; + } if (ref($vv) eq 'ARRAY') { my ($logic, @values) = ( (defined($vv->[0]) and $vv->[0] =~ /^-(and|or)$/i) @@ -947,6 +957,9 @@ sub _render_op { unless my ($k) = map $_->{-ident}, grep ref($_) eq 'HASH', $args[0]; return $self->${\($us->{handler})}($k, $op, $args[1]); } + if (my $us = List::Util::first { $op =~ $_->{regex} } @{$self->{unary_ops}}) { + return $self->${\($us->{handler})}($op, $args[0]); + } my $final_op = $op =~ /^(?:is|not)_/ ? join(' ', split '_', $op) : $op; if (@args == 1 and $op !~ /^(and|or)$/) { my ($expr_sql, @bind) = $self->_render_expr($args[0]);