Подскажите пожалуйста - как справиться с получением результата хранимой в 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 или писать результат в переменную.
Чё за кукбук ? Я тоже хочу! Где взять ?
Catalyst::Manual::Cookbook ? или кто-то книжку написал ?
> Catalyst::Manual::Cookbook ? или кто-то книжку написал ?да вроде тот самый =)
> Подскажите пожалуйста - как справиться с получением результата хранимой в MySQL
> процедуры
> силами DBIX::ClassЕсть забавная штука DBIx::ProcedureCall
IMHO ты не туда полез. Рвать гланды ORM через жопу конкретного DBD - это конкретный экстрим. Переформулируй задачу, чтобы отпала надобность в stored procedure. Современный тренд - утаскивать нагрузку с сервера базы данных, а в пределе вообще уходить на NoSQL.
>> Подскажите пожалуйста - как справиться с получением результата хранимой в MySQL
>> процедуры
>> силами DBIX::Class
> Есть забавная штука DBIx::ProcedureCall
> IMHO ты не туда полез. Рвать гланды ORM через жопу конкретного DBD
> - это конкретный экстрим. Переформулируй задачу, чтобы отпала надобность в stored
> procedure. Современный тренд - утаскивать нагрузку с сервера базы данных, а
> в пределе вообще уходить на NoSQL.Я еще с динамическим программированием не доразобрался, как тут за трендами угнаться =)
По существу: есть готовые процедуры для выборки потомков и предков для вывода дерева из таблицы (code, parent_code). Я понимаю что не везде уместно средствами ORMа решать бытовые задачи, просто не знал всех не/возможностей DBIX::Class
>> Подскажите пожалуйста - как справиться с получением результата хранимой в MySQL
>> процедуры
> Есть забавная штука DBIx::ProcedureCallDBIx::ProcedureCall - нет драйвера для MySQL =(
'While this module's interface is database-independent, only Oracle and PostgreSQL are currently supported.'
>>> Подскажите пожалуйста - как справиться с получением результата хранимой в MySQL
>>> процедуры
>> Есть забавная штука DBIx::ProcedureCall
> DBIx::ProcedureCall - нет драйвера для MySQL =(Возьми за образец DBIx::ProcedureCall::PostgreSQL и напиши свой DBIx::ProcedureCall::MySQL. Возможно, что там достаточно сделать s/PostgreSQL/MySQL/g
Напиши тесты, оттестируй и выложи на CPAN.