DBIx :: Class - 添加对'FOR UPDATE NOWAIT'的支持的最佳方式

时间:2011-07-29 18:30:41

标签: perl oracle dbix-class

我想添加对“FOR UPDATE NOWAIT”的支持,以选择->select(..., { for => 'update_nowait' })语句(对于Oracle)。

我正在使用DBIx::Class 0.08127

我可以修改DBIx / Class / SQLMaker / Oracle.pm,但我想知道是否还有其他(首选)方式,特别是如果它不涉及修改分发文件。

1 个答案:

答案 0 :(得分:1)

修改DBix::Class::SQLMaker::Oracle是我完成的方式。

只需将修改后的模块包含在@INC中包含DBIx类分发的目录之前的目录中。

对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的定义。如果您想提交补丁,需要考虑一些事项。