X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI.pm;h=b9d74897809f624c74175e952cf6fb16fe7f540e;hb=8273e845426f0187b4ad6c4a1b42286fa09a648f;hp=6c6efcc1756e22d71e39434d754cd551ab7f6783;hpb=5e782048be95b2349b555179fdfae0bcf1e8fc0e;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index 6c6efcc..b9d7489 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -92,6 +92,7 @@ my @rdbms_specific_methods = qw/ delete select select_single + with_deferred_fk_checks get_use_dbms_capability get_dbms_capability @@ -1359,7 +1360,7 @@ sub txn_commit { # as a new txn is started immediately on commit $self->transaction_depth(1) if ( !$self->transaction_depth - and + and defined $self->_dbh_autocommit and ! $self->_dbh_autocommit @@ -1390,7 +1391,7 @@ sub txn_rollback { # as a new txn is started immediately on commit $self->transaction_depth(1) if ( !$self->transaction_depth - and + and defined $self->_dbh_autocommit and ! $self->_dbh_autocommit @@ -1528,7 +1529,13 @@ sub _dbi_attrs_for_bind { $_->{dbd_attrs} } elsif($_->{sqlt_datatype}) { - $self->bind_attribute_by_data_type($_->{sqlt_datatype}) || undef; + # cache the result in the dbh_details hash, as it can not change unless + # we connect to something else + my $cache = $self->_dbh_details->{_datatype_map_cache} ||= {}; + if (not exists $cache->{$_->{sqlt_datatype}}) { + $cache->{$_->{sqlt_datatype}} = $self->bind_attribute_by_data_type($_->{sqlt_datatype}) || undef; + } + $cache->{$_->{sqlt_datatype}}; } elsif ($sba_attrs and $_->{dbic_colname}) { $sba_attrs->{$_->{dbic_colname}} || undef; @@ -2872,7 +2879,7 @@ sub _max_column_bytesize { if ($data_type =~ /^(?: l? (?:var)? char(?:acter)? (?:\s*varying)? | - (?:var)? binary (?:\s*varying)? + (?:var)? binary (?:\s*varying)? | raw )\b/x