use mro 'c3';
use DBIx::Class::Carp;
use Scalar::Util qw/blessed weaken/;
-use Sub::Name();
-use Try::Tiny;
use Context::Preserve 'preserve_context';
-use DBIx::Class::_Util qw( sigwarn_silencer dbic_internal_try dump_value scope_guard );
+use DBIx::Class::_Util qw(
+ sigwarn_silencer dbic_internal_try dbic_internal_catch
+ dump_value scope_guard set_subname
+);
use namespace::clean;
__PACKAGE__->sql_limit_dialect ('GenericSubQ');
my $replaced = __PACKAGE__->can($method);
- *{$method} = Sub::Name::subname $method => sub {
+ *{$method} = set_subname $method => sub {
my $self = shift;
$self->_writer_storage->$replaced(@_) if $self->_writer_storage;
$self->_bulk_storage->$replaced(@_) if $self->_bulk_storage;
sub _is_lob_column {
my ($self, $source, $column) = @_;
- return $self->_is_lob_type($source->column_info($column)->{data_type});
+ return $self->_is_lob_type(
+ $source->columns_info([$column])->{$column}{data_type}
+ );
}
sub _prep_for_execute {
# try to insert explicit 'DEFAULT's instead (except for identity, timestamp
# and computed columns)
if (not %$to_insert) {
+
+ my $ci;
+ # same order as add_columns
for my $col ($source->columns) {
next if $col eq $identity_col;
- my $info = $source->column_info($col);
-
- next if ref $info->{default_value} eq 'SCALAR'
- || (exists $info->{data_type} && (not defined $info->{data_type}));
-
- next if $info->{data_type} && $info->{data_type} =~ /^timestamp\z/i;
+ my $info = ( $ci ||= $source->columns_info )->{$col};
+
+ next if (
+ ref $info->{default_value} eq 'SCALAR'
+ or
+ (
+ exists $info->{data_type}
+ and
+ ! defined $info->{data_type}
+ )
+ or
+ (
+ ( $info->{data_type} || '' )
+ =~ /^timestamp\z/i
+ )
+ );
$to_insert->{$col} = \'DEFAULT';
}
# This ignores any data conversion errors detected by the client side libs, as
# they are usually harmless.
my $orig_cslib_cb = DBD::Sybase::set_cslib_cb(
- Sub::Name::subname _insert_bulk_cslib_errhandler => sub {
+ set_subname _insert_bulk_cslib_errhandler => sub {
my ($layer, $origin, $severity, $errno, $errmsg, $osmsg, $blkmsg) = @_;
return 1 if $errno == 36;
$guard->commit;
$bulk->_query_end($sql);
- } catch {
- $exception = shift;
+ }
+ dbic_internal_catch {
+ $exception = $_;
};
DBD::Sybase::set_cslib_cb($orig_cslib_cb);
sub _update_blobs {
my ($self, $source, $blob_cols, $where) = @_;
- my @primary_cols = dbic_internal_try
- { $source->_pri_cols_or_die }
- catch {
+ my @primary_cols =
+ dbic_internal_try {
+ $source->_pri_cols_or_die
+ }
+ dbic_internal_catch {
$self->throw_exception("Cannot update TEXT/IMAGE column(s): $_")
- };
+ }
+ ;
my @pks_to_update;
if (
my @primary_cols = dbic_internal_try
{ $source->_pri_cols_or_die }
- catch {
+ dbic_internal_catch {
$self->throw_exception("Cannot update TEXT/IMAGE column(s): $_")
};
$sth->func('ct_finish_send') or die $sth->errstr;
}
- catch {
+ dbic_internal_catch {
if ($self->_using_freetds) {
$self->throw_exception (
"TEXT/IMAGE operation failed, probably because you are using FreeTDS: $_"