use base qw/DBIx::Class::Storage::DBI::UniqueIdentifier/;
use mro 'c3';
use List::Util ();
+use Try::Tiny;
+use namespace::clean;
__PACKAGE__->mk_group_accessors(simple => qw/
_identity
my ($source, $to_insert) = @_;
my $identity_col = List::Util::first {
- $source->column_info($_)->{is_auto_increment}
+ $source->column_info($_)->{is_auto_increment}
} $source->columns;
# user might have an identity PK without is_auto_increment
my $table_name = $source->from;
$table_name = $$table_name if ref $table_name;
- my ($identity) = eval {
- local $@; $dbh->selectrow_array("SELECT GET_IDENTITY('$table_name')")
+ my ($identity) = try {
+ $dbh->selectrow_array("SELECT GET_IDENTITY('$table_name')")
};
if (defined $identity) {
my $self = shift;
my ($ident, $select) = @_;
- my ($alias2source, $rs_alias) = $self->_resolve_ident_sources($ident);
+ my $col_info = $self->_resolve_column_info($ident);
for my $select_idx (0..$#$select) {
my $selected = $select->[$select_idx];
next if ref $selected;
- my ($alias, $col) = split /\./, $selected;
- ($alias, $col) = ($rs_alias, $selected) if not defined $col;
+ my $data_type = $col_info->{$selected}{data_type};
- my $data_type = eval {
- $alias2source->{$alias}->column_info($col)->{data_type}
- };
-
- if ($data_type && $data_type =~ /^uniqueidentifier\z/i) {
+ if ($data_type && lc($data_type) eq 'uniqueidentifier') {
$select->[$select_idx] = { UUIDTOSTR => $selected };
}
}
sub build_datetime_parser {
my $self = shift;
my $type = "DateTime::Format::Strptime";
- eval "use ${type}";
- $self->throw_exception("Couldn't load ${type}: $@") if $@;
+ try {
+ eval "require ${type}"
+ }
+ catch {
+ $self->throw_exception("Couldn't load ${type}: $_");
+ };
+
return $type->new( pattern => '%Y-%m-%d %H:%M:%S.%6N' );
}