[SP-pm] DBIx::Class + executando funções no SELECT

Andre Carneiro andregarciacarneiro at gmail.com
Fri Jun 27 11:51:50 PDT 2014


Valeu Renato!

Infelizmente, a maneira como você passa o bind também não funcionou. Mas a
boa notícia é que encontrei a solução, de qualquer forma. Ficou algo assim:


my $row = $c->model('DB::Tabela')->search(
    undef,
    {
        '+select' => [
            \['randseq((?)::integer)', 123 ],
        ] ,
        '+as' => ['randseq']
    },
);

O problema depois foi descobrir que o número que estava entrando no
parâmetro do randseq estourava o tamanho do integer... Aí descobri que o
método last_insert_id já retornava o valor sem eu precisar executar o
randseq, diferentemente do DBI 'puro'.

Mas ajudou bastante! Obrigado!





2014-06-27 12:59 GMT-03:00 Renato Santos <renato.cron at gmail.com>:

> Faça o bind local:
>
>
> my $row = $c->model('DB::Tabela')->search(
>     undef,
>     {
>         '+select' => [
>             \['randseq((?)::integer)', { randseq_param => 123 }],
>         ] ,
>         '+as' => ['randseq']
>     },
> )->next;
>
> # $row->get_column('randseq');
>
>
> http://search.cpan.org/~ribasushi/SQL-Abstract-1.78/lib/SQL/Abstract.pm#Literal_SQL_with_placeholders_and_bind_values_(subqueries)
>
>
>
>
> 2014-06-27 12:47 GMT-03:00 Andre Carneiro <andregarciacarneiro at gmail.com>:
>
>> Opa, já descobri! Foi mal!
>>
>> Era só passar 'bind', assim:
>>
>>  $c->model('DB::Tabela)->search(undef, {
>>                                                         select =>
>> ['randseq((?)::integer)  ', ] ,
>>                                                         as =>
>> [qw/randseq/],
>>                                                         bind => [12345],
>>                                                     }, );
>>
>> O problema agora é que o DBIx::Class me solta o seguinte erro:
>>
>> schema "me" does not exist [for Statement "SELECT
>> me.randseq((?)::integer)  FROM Tabela me" with ParamValues: 1='12345']
>>
>>
>> Aparentemente, DBIx::Class não reconhece o apelido que ele mesmo deu pra
>> tabela... :-p
>>
>>
>> Alguma idéia?
>>
>>
>> 2014-06-27 12:38 GMT-03:00 Andre Carneiro <andregarciacarneiro at gmail.com>
>> :
>>
>> Boa tarde!
>>>
>>> Alguém pode me dizer como eu envio as bind variables para uma
>>> equivalente a query abaixo no DBIx::Class, por gentileza?
>>>
>>>
>>> SELECT randseq((?)::integer) as randseq FROM Tabela;
>>>
>>>
>>> Minha tentativa no DBIx::Class
>>>
>>>
>>> $c->model('DB::Tabela)->search(undef, {
>>>                                                         select =>
>>> ['randseq((?)::integer) as randseq ', ] ,
>>>                                                     }, );
>>>
>>>
>>> Não consegui descobrir em que lugar da estrutura eu preciso passar as
>>> 'bind variables' para o DBIx::Class. Alguém poderia me ajudar, por
>>> gentileza?
>>>
>>>
>>>
>>> Obrigado!
>>>
>>> --
>>> André Garcia Carneiro
>>> Software Engineer
>>> (11)982907780
>>>
>>
>>
>>
>> --
>> André Garcia Carneiro
>> Software Engineer
>> (11)982907780
>>
>> =begin disclaimer
>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>>
>
>
> --
> Saravá,
> Renato CRON
> http://www.renatocron.com/blog/
> @renato_cron <http://twitter.com/#!/renato_cron>
>
> =begin disclaimer
>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>


-- 
André Garcia Carneiro
Software Engineer
(11)982907780
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20140627/c1752e8c/attachment-0001.html>


More information about the SaoPaulo-pm mailing list