[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