2

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

我正在使用DBIx::Class 0.08127

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

4

1 回答 1

1

修改DBix::Class::SQLMaker::Oracle是我所做的方式。

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

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

于 2011-11-19T17:56:45.607 回答