DBIx :: Class - лучший способ добавить поддержку 'FOR UPDATE NOWAIT' - PullRequest
2 голосов
/ 29 июля 2011

Я хочу добавить поддержку «FOR UPDATE NOWAIT» для выбора операторов с ->select(..., { for => 'update_nowait' }) (для Oracle).

Я использую DBIx :: Class 0.08127

Я могу изменить DBIx / Class / SQLMaker / Oracle.pm, но мне было интересно, есть ли другой (предпочтительный) способ, особенно если он не предусматривает изменение файлов распространения.

1 Ответ

1 голос
/ 19 ноября 2011

Изменение DBix::Class::SQLMaker::Oracle - это способ, которым я это сделал.

Просто включите ваш измененный модуль в каталог, который находится перед каталогом, содержащим распределение класса DBIx в @INC.

* 1006.* Модификация DBIx / Class / SQLMaker / Oracle.pm заключается в добавлении этих строк:
my $for_syntax = {
  update => 'FOR UPDATE',
  shared => 'FOR SHARE',
  update_nowait => 'FOR UDPATE NOWAIT',
};

sub _lock_select {
  my ($self, $type) = @_;
  my $sql = $for_syntax->{$type} || croak "Unknown SELECT ... FOR type '$type' requested";
  return " $sql";
}

Теперь, если бы $for_syntax был вызовом метода вместо лексического, вам не пришлось бы повторять определение_lock_select.Что стоит учесть, если вы хотите отправить патч.

...