X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract.pm;h=91d18986f4fde392faabebe6efacfa0c5db22d6d;hb=718ae49514e8c15bcd0497590e37f842298460fe;hp=12c2c0c63786028f52404d69cd6c4cd7f876f3f8;hpb=02f4113c60c873b237dac1a7c703e16f1d90ddde;p=dbsrgits%2FSQL-Abstract.git diff --git a/lib/SQL/Abstract.pm b/lib/SQL/Abstract.pm index 12c2c0c..91d1898 100644 --- a/lib/SQL/Abstract.pm +++ b/lib/SQL/Abstract.pm @@ -320,6 +320,31 @@ sub new { $self->_expand_ident(ident => $body); }); } + if ($class->isa('SQL::Abstract::More')) { + $opt{expand_op}{or} = sub { + my ($self, $logop, $v, $k) = @_; + if ($k and ref($v) eq 'ARRAY') { + my ($type, $val) = @$v; + my $op = $self->{cmp}; + if ( + ref($type) eq 'HASH' and ref($val) eq 'HASH' + and keys %$type == 1 and keys %$val == 1 + and (keys %$type)[0] eq (keys %$val)[0] + ) { + ($op) = keys %$type; + ($type) = values %$type; + ($val) = values %$val; + } + if ($self->is_bind_value_with_type(my $v = [ $type, $val ])) { + return $self->_expand_hashpair($k, { $op, { -bind => $v } }); + } + } + return $self->_expand_op_andor($logop, $v, $k); + }; + $opt{render}{bind} = sub { + return [ '?', map +(ref($_->[0]) ? $_ : $_->[1]), $_[2] ] + }; + } } if ($opt{lazy_join_sql_parts}) {