[Moscow.pm] DBIx::SearchBuilder

Алексей Мышкин parserpro на gmail.com
Вт Фев 24 10:46:15 PST 2015


Мой вопрос решился немного проще, с использованием 'QUOTEVALUE' => 1 в
запросе. Так вместо значения я смог подставить имя второй колонки для
сравнения.


2015-02-22 3:32 GMT+03:00 Nikolay Mishin <mi на ya.ru>:

> Я бы дописал этот оператор в модуле:
>
> https://metacpan.org/source/ALEXMV/DBIx-SearchBuilder-1.66/lib/DBIx/SearchBuilder.pm
>
>     if ( $args{'OPERATOR'} ) {
>         #If it's a like, we supply the %s around the search term
>         if ( $args{'OPERATOR'} =~ /LIKE/i ) {
>             $args{'VALUE'} = "%" . $args{'VALUE'} . "%";
>         }
>         elsif ( $args{'OPERATOR'} =~ /STARTSWITH/i ) {
>             $args{'VALUE'}    = $args{'VALUE'} . "%";
>         }
>         elsif ( $args{'OPERATOR'} =~ /ENDSWITH/i ) {
>             $args{'VALUE'}    = "%" . $args{'VALUE'};
>         }
>         elsif ( $args{'OPERATOR'} =~ /\bIN$/i ) {
>             if ( blessed $args{'VALUE'} &&
> $args{'VALUE'}->isa(__PACKAGE__) ) {
>                 # if no columns selected then select id
>                 local $args{'VALUE'}{'columns'} =
> $args{'VALUE'}{'columns'};
>                 unless ( $args{'VALUE'}{'columns'} ) {
>                     $args{'VALUE'}->Column( FIELD => 'id' );
>                 } elsif ( @{ $args{'VALUE'}{'columns'} } > 1 ) {
>                     warn "Collection in '$args{OPERATOR}' with more than
> one column selected, using first";
>                     splice @{ $args{'VALUE'}{'columns'} }, 1;
>                 }
>                 $args{'VALUE'} = '('. $args{'VALUE'}->BuildSelectQuery
> .')';
>                 $args{'QUOTEVALUE'} = 0;
>             }
>             elsif ( ref $args{'VALUE'} ) {
>                 if ( $args{'QUOTEVALUE'} ) {
>                     my $dbh = $self->_Handle->dbh;
>                     $args{'VALUE'} = join ', ', map $dbh->quote( $_ ), @{
> $args{'VALUE'} };
>                 } else {
>                     $args{'VALUE'} = join ', ', @{ $args{'VALUE'} };
>                 }
>                 $args{'VALUE'} = "($args{VALUE})";
>                 $args{'QUOTEVALUE'} = 0;
>             }
>             else {
>                 # otherwise behave in backwards compatible way
>             }
>         }
>         $args{'OPERATOR'} =~ s/(?:MATCHES|ENDSWITH|STARTSWITH)/LIKE/i;
>
>         if ( $args{'OPERATOR'} =~ /IS/i ) {
>             $args{'VALUE'} = 'NULL';
>             $args{'QUOTEVALUE'} = 0;
>         }
>     }
> Добавить  a > b
>
> 18.02.2015, 18:18, "Алексей Мышкин" <parserpro на gmail.com>:
> > Привет всем!
> >
> > Возник довольно срочный вопрос - как в DBIx::SearchBuilder сделать такое
> (если хоть кто-то в курсе):
> >
> > SELECT a, b
> > FROM t
> > WHERE a > b
> >
> > Используется этот модуль в Request Tracker'e
> >
> > --
> > С уважением,
> > Мышкин Алексей.
> >
> > ,
> >
> > --
> > Moscow.pm mailing list
> > moscow-pm на pm.org | http://moscow.pm.org
>
> --
> С уважением
> Николай Мишин
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
С уважением,
Мышкин Алексей.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20150224/405f073c/attachment.html>


Подробная информация о списке рассылки Moscow-pm