perl - SQL::Abstract::Limit failing at OR logic -
i'm trying create or logic query using class::dbi/class::dbi::abstractsearch. code looks this:
my $results = example::cdbi::quote->search_where( { field_1 => {'like', $search_string}, field_2 => {'like', $search_string}}, {logic => 'or'} ); according the documentation should work. says information passed sql::abstract::limit, shows taking logic parameter. unfortunately, mysql shows following in query log (edited brevity, , assuming search of "123"):
select * quote ((field_1 '123' , field_2 '123' )) i have trying changing 'or' 'or' (silly, worth shot) did not work. tried hunting down logic in sql::abstract::limit, operator being passed sql::abstract instead.
how sql::abstract::limit accept or logic class::dbi?
how class::dbi calls sql::abstract::limit
able determine how sql::abstract::limit being constructed. put values in instead of variable names easier read.
my $sql = sql::abstract::limit->new({'logic' => 'or'}); my($phrase, @bind) = $sql->where( {'field_1'=>{'like' => '123'},'field_2'=>{'like'=>'123'}}, undef, undef, undef);
you can apply or locally this:
use sql::abstract; $sql = sql::abstract->new; ($stmt, @bind) = $sql->where( { -or => [ { field_1 => { 'like', 'john' }}, { field_2 => { 'like', 'john' }}, ], }, []); gives in $stmt:
where ( ( field_1 ? or field_2 ? ) ) the logic property can set in sql::abstract constructor, don't have idea how propagate class::dbi.
edit: don't know if bug or feature, operators changed logic clause seems apply when define arrayrefs. hashrefs, and:
my $sql_and = sql::abstract::limit->new(logic => 'and'); $sql_or = sql::abstract::limit->new(logic => 'or'); $sql_and->where(['field_1'=>{'like' => '123'},'field_2'=>{'like'=>'123'}]); # ( ( field_1 ? , field_2 ? ) ) $sql_or->where (['field_1'=>{'like' => '123'},'field_2'=>{'like'=>'123'}]); # ( ( field_1 ? or field_2 ? ) ) or, work class::dbi:
my $results = example::cdbi::quote->search_where( [ field_1 => {'like', $search_string}, field_2 => {'like', $search_string}], {logic => 'or'} );
Comments
Post a Comment