X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract.pm;h=0ac8fdde3e2e9852b7c001d8701c1ef644110eb1;hb=7642d9ff9bcdacc503079a78cb85c4d44f0b2016;hp=a8cb5fc0431b345a215b6d60b7cc019210c407cb;hpb=18dc7c1244536a5d0cafba1f5e8832fa38be5e9a;p=dbsrgits%2FSQL-Abstract.git diff --git a/lib/SQL/Abstract.pm b/lib/SQL/Abstract.pm index a8cb5fc..0ac8fdd 100644 --- a/lib/SQL/Abstract.pm +++ b/lib/SQL/Abstract.pm @@ -193,7 +193,9 @@ sub new { $opt{expand} = { -ident => '_expand_ident', - -value => sub { +{ -bind => [ our $Cur_Col_Meta, $_[2] ] } }, + -value => '_expand_value', + -not => '_expand_not', + -bool => '_expand_bool', }; return bless \%opt, $class; @@ -627,16 +629,6 @@ sub _expand_expr_hashpair { } return $self->_expand_expr($v); } - if ($k eq '-bool') { - if (ref($v)) { - return $self->_expand_expr($v); - } - puke "-bool => undef not supported" unless defined($v); - return $self->_expand_ident(-ident => $v); - } - if ($k eq '-not') { - return { -op => [ 'not', $self->_expand_expr($v) ] }; - } if (my ($rest) = $k =~/^-not[_ ](.*)$/) { return +{ -op => [ 'not', @@ -918,6 +910,23 @@ sub _expand_ident { return +{ -ident => \@parts }; } +sub _expand_value { + +{ -bind => [ our $Cur_Col_Meta, $_[2] ] }; +} + +sub _expand_not { + +{ -op => [ 'not', $_[0]->_expand_expr($_[2]) ] }; +} + +sub _expand_bool { + my ($self, undef, $v) = @_; + if (ref($v)) { + return $self->_expand_expr($v); + } + puke "-bool => undef not supported" unless defined($v); + return $self->_expand_ident(-ident => $v); +} + sub _recurse_where { my ($self, $where, $logic) = @_;