X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FData%2FQuery%2FExprHelpers.pm;h=809948e0e3cbf4ea5ca0601791e8d2be0952f28c;hb=912a19a259013e70538da5f2657c5998270d52e9;hp=674bacc4a7a3ac2019c15b504e4551692bcb4ab8;hpb=bb5b7a0d0c0850786c5c882694520314b3d2abd6;p=dbsrgits%2FData-Query.git diff --git a/lib/Data/Query/ExprHelpers.pm b/lib/Data/Query/ExprHelpers.pm index 674bacc..809948e 100644 --- a/lib/Data/Query/ExprHelpers.pm +++ b/lib/Data/Query/ExprHelpers.pm @@ -75,13 +75,21 @@ foreach my $name (values %Data::Query::Constants::CONST) { $dq->{type} and $dq->{type} eq $name }; push @EXPORT, $sub; - if ($map{$name}) { - my @map = @{$map{$name}}; + if (my @map = @{$map{$name}||[]}) { *$name = sub { my $dq = { type => $name }; - foreach (0..$#_) { + foreach (0..$#map) { $dq->{$map[$_]} = $_[$_] if defined $_[$_]; } + + if (my $optional = $_[$#map+1]) { + unless(ref $optional eq 'HASH') { + require Carp; + Carp::croak("Not a hashreference"); + } + @{$dq}{keys %$optional} = values %$optional; + } + return $dq; }; push @EXPORT, $name;