我想添加对“FOR UPDATE NOWAIT”的支持来选择带有->select(..., { for => 'update_nowait' })
(对于 Oracle)的语句。
我正在使用DBIx::Class 0.08127
我可以修改 DBIx/Class/SQLMaker/Oracle.pm,但我想知道是否有另一种(首选)方式,特别是如果它不涉及修改分发文件。
我想添加对“FOR UPDATE NOWAIT”的支持来选择带有->select(..., { for => 'update_nowait' })
(对于 Oracle)的语句。
我正在使用DBIx::Class 0.08127
我可以修改 DBIx/Class/SQLMaker/Oracle.pm,但我想知道是否有另一种(首选)方式,特别是如果它不涉及修改分发文件。
修改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
. 如果您想提交补丁,需要考虑一些事情。