X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract.pm;h=b3769094116d3de15f1657ebf30a95403bdec4a5;hb=de63ce570a396ba4b165b40191bfc1ba4dd45089;hp=b1017473258210e14bb22df4ccf6cc55dcd92a20;hpb=70c57fc3babeb2f14b0bedc588ae90fb54ceeabe;p=scpubgit%2FQ-Branch.git diff --git a/lib/SQL/Abstract.pm b/lib/SQL/Abstract.pm index b101747..b376909 100644 --- a/lib/SQL/Abstract.pm +++ b/lib/SQL/Abstract.pm @@ -382,6 +382,7 @@ sub _expand_update_set_values { $self->_expand_maybe_list_expr( [ map { my ($k, $set) = @$_; + $set = { -bind => $_ } unless defined $set; +{ -op => [ '=', { -ident => $k }, $set ] }; } map { @@ -432,6 +433,7 @@ sub select { sub _select_fields { my ($self, $fields) = @_; + return $fields unless ref($fields); return $self->_render_expr( $self->_expand_maybe_list_expr($fields, undef, '-ident') ); @@ -1050,20 +1052,21 @@ sub _order_by { my $expander = sub { my ($self, $dir, $expr) = @_; + my @to_expand = ref($expr) eq 'ARRAY' ? @$expr : $expr; + foreach my $arg (@to_expand) { + if ( + ref($arg) eq 'HASH' + and keys %$arg > 1 + and grep /^-(asc|desc)$/, keys %$arg + ) { + puke "ordering direction hash passed to order by must have exactly one key (-asc or -desc)"; + } + } my @exp = map +(defined($dir) ? { -op => [ $dir => $_ ] } : $_), - map $self->_expand_expr($_, undef, -ident), - ref($expr) eq 'ARRAY' ? @$expr : $expr; + map $self->_expand_expr($_, undef, -ident), @to_expand; return (@exp > 1 ? { -op => [ ',', @exp ] } : $exp[0]); }; - if ( - ref($arg) eq 'HASH' - and keys %$arg > 1 - and grep /^-(asc|desc)$/, keys %$arg - ) { - puke "ordering direction hash passed to order by must have exactly one key (-asc or -desc)"; - } - local @{$self->{expand_unary}}{qw(-asc -desc)} = ( sub { shift->$expander(asc => @_) }, sub { shift->$expander(desc => @_) },