URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 7262
[ Назад ]

Исходное сообщение
"DBIX::Class выполнение procedure из MySQL"

Отправлено Azudim , 10-Июн-11 18:07 
Подскажите пожалуйста - как справиться с получением результата хранимой в MySQL процедуры
силами DBIX::Class

я описываю ее как виртуальную таблицу схемы:
__PACKAGE__->table('subtreenodes');
__PACKAGE__->result_source_instance->is_virtual(1);
__PACKAGE__->result_source_instance->view_definition(q[
        CALL fetch_subtree_ids(?, ?, ?, ?, ?, ?)
    ]);

потом можно вызывать в каталисте ResultSet передавая параметры через bind:

my @rs = $c->model('DB::Subtreenodes')->search({},
{  
   bind => ['task_types','code','parent_code',1,10,true]
  });

это пример из кук-бука, но сдается мне в MySQL вообще нельзя результаты выполнения процедуры использовать как подзапрос, а DBIX class как раз и генерирует что то типа
SELECT me.code FROM (
                CALL fetch_subtree_ids(?, ?, ?, ?, ?, ?)
        ) me: 'types', 'code', 'parent_code', '1', '10', '0'

сама процедура может возвращать или resultset или писать результат в переменную.


Содержание

Сообщения в этом обсуждении
"DBIX::Class выполнение procedure из MySQL"
Отправлено Феликс Жопорезку , 10-Июн-11 22:36 
Чё за кукбук ? Я тоже хочу! Где взять ?

"DBIX::Class выполнение procedure из MySQL"
Отправлено Феликс Жопорезку , 10-Июн-11 22:39 
Catalyst::Manual::Cookbook ? или кто-то книжку написал ?



"DBIX::Class выполнение procedure из MySQL"
Отправлено Azudim , 11-Июн-11 17:00 
> Catalyst::Manual::Cookbook ? или кто-то книжку написал ?

  да вроде тот самый =)



"DBIX::Class выполнение procedure из MySQL"
Отправлено ACCA , 11-Июн-11 15:28 
>  Подскажите пожалуйста - как справиться с получением результата хранимой в MySQL
> процедуры
>  силами DBIX::Class

Есть забавная штука DBIx::ProcedureCall

IMHO ты не туда полез. Рвать гланды ORM через жопу конкретного DBD - это конкретный экстрим. Переформулируй задачу, чтобы отпала надобность в stored procedure. Современный тренд - утаскивать нагрузку с сервера базы данных, а в пределе вообще уходить на NoSQL.


"DBIX::Class выполнение procedure из MySQL"
Отправлено Azudim , 11-Июн-11 16:58 
>>  Подскажите пожалуйста - как справиться с получением результата хранимой в MySQL
>> процедуры
>>  силами DBIX::Class
> Есть забавная штука DBIx::ProcedureCall
> IMHO ты не туда полез. Рвать гланды ORM через жопу конкретного DBD
> - это конкретный экстрим. Переформулируй задачу, чтобы отпала надобность в stored
> procedure. Современный тренд - утаскивать нагрузку с сервера базы данных, а
> в пределе вообще уходить на NoSQL.

Я еще с динамическим программированием не доразобрался, как тут за трендами угнаться =)

По существу: есть готовые процедуры для выборки потомков и предков для вывода дерева из таблицы (code, parent_code). Я понимаю что не везде уместно средствами ORMа решать бытовые задачи, просто не знал всех не/возможностей DBIX::Class  


"DBIX::Class выполнение procedure из MySQL"
Отправлено Azudim , 13-Июн-11 16:17 
>>  Подскажите пожалуйста - как справиться с получением результата хранимой в MySQL
>> процедуры  
> Есть забавная штука DBIx::ProcedureCall

DBIx::ProcedureCall - нет драйвера для MySQL =(

'While this module's interface is database-independent, only Oracle and PostgreSQL are currently supported.'



"DBIX::Class выполнение procedure из MySQL"
Отправлено ACCA , 16-Июн-11 18:58 
>>>  Подскажите пожалуйста - как справиться с получением результата хранимой в MySQL
>>> процедуры
>> Есть забавная штука DBIx::ProcedureCall
>  DBIx::ProcedureCall - нет драйвера для MySQL =(

Возьми за образец DBIx::ProcedureCall::PostgreSQL и напиши свой DBIx::ProcedureCall::MySQL. Возможно, что там достаточно сделать s/PostgreSQL/MySQL/g

Напиши тесты, оттестируй и выложи на CPAN.