From: Rafael Kitover Date: Sat, 29 Aug 2009 05:42:29 +0000 (+0000) Subject: rename method and add docs X-Git-Tag: v0.08111~50^2~2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ce012195f14f1e186f8c91cd0cbc2a11bc9088d7;p=dbsrgits%2FDBIx-Class.git rename method and add docs --- diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index d461a0f..b9e95c7 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -2078,12 +2078,36 @@ sub last_insert_id { $self->dbh_do('_dbh_last_insert_id', @_); } -# By default there is no resolution of DBIC data types to DBI data types -# In essence this makes e.g. AutoCast a noop -sub _dbi_data_type { +=head2 _map_data_type + +=over 4 + +=item Arguments: $type_name + +=back + +This API is B, will almost definitely change in the future, and +currently only used by L<::AutoCast|DBIx::Class::Storage::DBI::AutoCast> and +L<::Sybase|DBIx::Class::Storage::DBI::Sybase>. + +The default implementation returns C, implement in your Storage driver if +you need this functionality. + +Should map types from other databases to the native RDBMS type, for example +C to C. + +Types with modifiers should map to the underlying data type. For example, +C should become C. + +Composite types should map to the container type, for example +C becomes C. + +=cut + +sub _map_data_type { #my ($self, $data_type) = @_; return undef -}; +} =head2 sqlt_type diff --git a/lib/DBIx/Class/Storage/DBI/AutoCast.pm b/lib/DBIx/Class/Storage/DBI/AutoCast.pm index e405d02..15218eb 100644 --- a/lib/DBIx/Class/Storage/DBI/AutoCast.pm +++ b/lib/DBIx/Class/Storage/DBI/AutoCast.pm @@ -18,16 +18,16 @@ DBIx::Class::Storage::DBI::AutoCast =head1 DESCRIPTION -Some combinations of RDBMS and DBD drivers (e.g. FreeTDS and Sybase) -statements with values bound to columns or conditions that are not strings -will throw implicit type conversion errors. +In some combinations of RDBMS and DBD drivers (e.g. FreeTDS and Sybase) +statements with values bound to columns or conditions that are not strings will +throw implicit type conversion errors. As long as a column L is -defined, and it resolves to a L C<$dbi_type> via C<_dbi_data_type()> -as defined in your Storage driver, the placeholder for this column will -be converted to: +defined, and it resolves to a base RDBMS native type via L as +defined in your Storage driver, the placeholder for this column will be +converted to: - CAST(? as $dbi_type) + CAST(? as $mapped_type) =cut @@ -46,11 +46,11 @@ sub _prep_for_execute { foreach my $bound (@$bind) { my $col = $bound->[0]; - my $dbi_type = $self->_dbi_data_type($col_info->{$col}{data_type}); + my $type = $self->_map_data_type($col_info->{$col}{data_type}); foreach my $data (@{$bound}[1..$#$bound]) { # <--- this will multiply the amount of ?'s no...? $new_sql .= shift(@sql_part) . - ($dbi_type ? "CAST(? AS $dbi_type)" : '?'); + ($type ? "CAST(? AS $type)" : '?'); } } $new_sql .= join '', @sql_part; diff --git a/t/93autocast.t b/t/93autocast.t index bbedcab..a8375be 100644 --- a/t/93autocast.t +++ b/t/93autocast.t @@ -20,7 +20,7 @@ use DBIC::SqlMakerTest; int => undef, # no conversion }; - sub _dbi_data_type { + sub _map_data_type { return $type_map->{$_[1]}; } }