The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"перегрузка функций, DBI модуль, Oracle, timeout"
Отправлено jr, 21-Сен-07 15:48 
>[оверквотинг удален]
>    undef($@);
>    eval {
>      local $SIG{ALRM} = sub { &$timeoutaction_ref(@$$timeout_param_ref);
>};
>      print "set timeout: $timeout sec .\n";
>
>      alarm($timeout); #implement N second time out
>
>      $result_ref = $obj->$action_symref( @$$param_ref);
>....

у меня немного другая задумка была - так примерно:

в DBI есть, например, функции do, prepare и execute
есть так же функция errstr, в которая возвращает текст возникающих ошибок

т.е. я создаю класс и делаю запрос:

####### подключаюсь к серверу
my $db = DBI->new( 'DBI:mysql:database=base;host=host', $user, $psaaword );

####### пусть тут у меня неожиднно пропадает коннект к базе
####### где-то маршрутизатор сломался, например
sleep 5;

####### вот эта функция не выполнится о-о-очень долго из-за потери связи
####### она должна быть "обернута в таймаут уловитель"
my $res = $db->do( 'SELECT * FROM duel' );

unless( $res ) {
  print $db->errstr;
}

вот как бы сделать так, чтобы я по прежнему мог использовать do функцию DBI модуля без всяческих ухищрений, а если будет ошибка по таймауту, то эта ошибка так же будет в доступна через errstr?
т.е. я так понимаю, что нужно унаследовать DBI класс и перегрузить все функции - do, prepare и execute - так, что бы они работали через "таймаут уловитель", т.е. что то типа этого:

package MyDBI;
use DBI;
### тут перегрузить все функци, что мне нужны
sub do {
   ## оборачиваю родительскую функцию в "таймаут уловитель"
}

sub errstr {
   ## если будет таймаут, то эта функция будет возвращать текст ошибки таймаута
}

package main;

# использую MyDBI вместо DBI
my $db = MyDBI->new( 'DBI:mysql:database=base;host=host', $user, $psaaword );
sleep 5;
my $res = $db->do( 'SELECT * FROM duel' );
unless( $res ) {
  print $db->errstr;
}

не хватает знаний по классам, что бы такую штуку сделать...

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру