X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Controller-DBIC-API.git;a=blobdiff_plain;f=lib%2FCatalyst%2FController%2FDBIC%2FAPI%2FRequestArguments.pm;h=bbc13b1ce5d644d13648d6e786fe7e33e6cfde03;hp=107dc80ffb35bc3abd3da1e2ef3018688555e297;hb=4cb8623abade7b9f100b3892df93ddcfb1168e01;hpb=d93988fd263249693b54659faf5fde139d2358aa diff --git a/lib/Catalyst/Controller/DBIC/API/RequestArguments.pm b/lib/Catalyst/Controller/DBIC/API/RequestArguments.pm index 107dc80..bbc13b1 100644 --- a/lib/Catalyst/Controller/DBIC/API/RequestArguments.pm +++ b/lib/Catalyst/Controller/DBIC/API/RequestArguments.pm @@ -443,16 +443,20 @@ JoinBuilder each layer of recursion. $base ||= 'me'; my $search_params = {}; + # return non-hashref params unaltered + return $param + unless ref $param eq 'HASH'; + # build up condition foreach my $column ( keys %$param ) { + my $value = $param->{$column}; if ( $source->has_relationship($column) ) { # check if the value isn't a hashref - unless ( ref( $param->{$column} ) - && reftype( $param->{$column} ) eq 'HASH' ) + unless ( ref $value eq 'HASH' ) { $search_params->{ join( '.', $base, $column ) } = - $param->{$column}; + $value; next; } @@ -460,7 +464,7 @@ JoinBuilder each layer of recursion. %$search_params, %{ $self->generate_column_parameters( $source->related_source($column), - $param->{$column}, + $value, Catalyst::Controller::DBIC::API::JoinBuilder->new( parent => $join, name => $column @@ -474,19 +478,41 @@ JoinBuilder each layer of recursion. $search_params->{ join( '.', $base, $column ) } = $param->{$column}; } + elsif ( $column eq '-or' || $column eq '-and' || $column eq '-not' ) { + # either an arrayref or hashref + if ( ref $value eq 'HASH' ) { + $search_params->{$column} = $self->generate_column_parameters( + $source, + $value, + $join, + $base, + ); + } + elsif ( ref $value eq 'ARRAY' ) { + push @{$search_params->{$column}}, + $self->generate_column_parameters( + $source, + $_, + $join, + $base, + ) + for @$value; + } + else { + die "unsupported value '$value' for column '$column'\n"; + } + } # might be a sql function instead of a column name # e.g. {colname => {like => '%foo%'}} else { # but only if it's not a hashref - unless ( ref( $param->{$column} ) - && reftype( $param->{$column} ) eq 'HASH' ) - { + unless ( ref $value eq 'HASH' ) { $search_params->{ join( '.', $base, $column ) } = $param->{$column}; } else { - die "$column is neither a relationship nor a column\n"; + die "unsupported value '$value' for column '$column'\n"; } } }