my ($type, $op) = $key =~ m{:(.+)::(.+)};
my $is_multi = $key =~ s/:multi//;
- my @value_tokens = $is_multi ? parse_line('\s+', 0, $value) : ($value);
+ my $is_any = $key =~ s/:any//;
+ my @value_tokens = $is_multi || $is_any ? parse_line('\s+', 0, $value) : ($value);
($key, $method) = split m{::}, $key, 2;
($key, @filters) = split m{:}, $key;
next unless defined $key;
- push @result, $is_multi ? (and => [ @args ]) : @args;
+ push @result, $is_multi ? (and => [ @args ]) : $is_any ? (or => [ @args ]) : @args;
}
return \@result;
}
__END__
+=pod
+
+=encoding utf8
+
=head1 NAME
SL::Controller::Helper::ParseFilter - Convert a form filter spec into a RDBO get_all filter
=head1 SYNOPSIS
use SL::Controller::Helper::ParseFilter;
- SL::DB::Object->get_all(parse_filter($::form->{filter}));
+ SL::DB::Manager::Object->get_all(parse_filter($::form->{filter}));
# or more complex
- SL::DB::Object->get_all(parse_filter($::form->{filter},
+ SL::DB::Manager::Object->get_all(parse_filter($::form->{filter},
with_objects => [ qw(part customer) ]));
=head1 DESCRIPTION
query => [
'customer.name' => 'John Doe',
- 'department.description' => [ ilike => '%Sales%' ],
- 'orddate' => [ lt => DateTime->today ],
+ 'department.description' => { ilike => '%Sales%' },
+ 'orddate' => { lt => DateTime->today },
]
Unfortunately, if you specify them in your form as these strings, the form
All these are recognized like the L<Rose::DB::Object> methods.
-=item lazu_bool_eq
+=item lazy_bool_eq
If the value is undefined or an empty string then this parameter will
be completely removed from the query. Otherwise a falsish filter value