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

Blabos de Blebe blabos at gmail.com
Fri Jun 27 13:55:22 PDT 2014


"DBIx::Class é pra quem joga de mono black devotion"


2014-06-27 17:24 GMT-03:00 Renato Santos <renato.cron em gmail.com>:

> ah!
>
> Funciona tambem se usar arrayref como bind, no lugar do hash.
>
> uso esse codigo aqui em produção, ai fiquei 'curioso'!
>           '+select' => [
>                 \[
>                     '(SELECT x.period_begin FROM f_extract_period_edge(?,
> me.valid_from) x)',
>                     [ plain_value => $options{group_by} ]
>                 ]
>             ],
>             '+as' => ['group_from']
>
>
>
> 2014-06-27 15:51 GMT-03:00 Andre Carneiro <andregarciacarneiro em gmail.com>:
>
> 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 em 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 em 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 em 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 em 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 em pm.org
>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>>> =end disclaimer
>>>
>>>
>>
>>
>> --
>> André Garcia Carneiro
>> Software Engineer
>> (11)982907780
>>
>> =begin disclaimer
>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>  SaoPaulo-pm mailing list: SaoPaulo-pm em 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 em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20140627/404667ef/attachment-0001.html>


More information about the SaoPaulo-pm mailing list