[Bast-commits] r7416 - in DBIx-Class/0.08/branches/autocast: lib/DBIx/Class/Storage lib/DBIx/Class/Storage/DBI t

caelum at dev.catalyst.perl.org caelum at dev.catalyst.perl.org
Sat Aug 29 05:42:29 GMT 2009


Author: caelum
Date: 2009-08-29 05:42:29 +0000 (Sat, 29 Aug 2009)
New Revision: 7416

Modified:
   DBIx-Class/0.08/branches/autocast/lib/DBIx/Class/Storage/DBI.pm
   DBIx-Class/0.08/branches/autocast/lib/DBIx/Class/Storage/DBI/AutoCast.pm
   DBIx-Class/0.08/branches/autocast/t/93autocast.t
Log:
rename method and add docs

Modified: DBIx-Class/0.08/branches/autocast/lib/DBIx/Class/Storage/DBI/AutoCast.pm
===================================================================
--- DBIx-Class/0.08/branches/autocast/lib/DBIx/Class/Storage/DBI/AutoCast.pm	2009-08-29 05:36:18 UTC (rev 7415)
+++ DBIx-Class/0.08/branches/autocast/lib/DBIx/Class/Storage/DBI/AutoCast.pm	2009-08-29 05:42:29 UTC (rev 7416)
@@ -18,16 +18,16 @@
 
 =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<data_type|DBIx::Class::ResultSource/add_columns> is
-defined, and it resolves to a L<DBI> 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</_map_data_type> 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 @@
 
     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;

Modified: DBIx-Class/0.08/branches/autocast/lib/DBIx/Class/Storage/DBI.pm
===================================================================
--- DBIx-Class/0.08/branches/autocast/lib/DBIx/Class/Storage/DBI.pm	2009-08-29 05:36:18 UTC (rev 7415)
+++ DBIx-Class/0.08/branches/autocast/lib/DBIx/Class/Storage/DBI.pm	2009-08-29 05:42:29 UTC (rev 7416)
@@ -2078,12 +2078,36 @@
   $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<EXPERIMENTAL>, 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<undef>, implement in your Storage driver if
+you need this functionality.
+
+Should map types from other databases to the native RDBMS type, for example
+C<VARCHAR2> to C<VARCHAR>.
+
+Types with modifiers should map to the underlying data type. For example,
+C<INTEGER AUTO_INCREMENT> should become C<INTEGER>.
+
+Composite types should map to the container type, for example
+C<ENUM(foo,bar,baz)> becomes C<ENUM>.
+
+=cut
+
+sub _map_data_type {
   #my ($self, $data_type) = @_;
   return undef
-};
+}
 
 =head2 sqlt_type
 

Modified: DBIx-Class/0.08/branches/autocast/t/93autocast.t
===================================================================
--- DBIx-Class/0.08/branches/autocast/t/93autocast.t	2009-08-29 05:36:18 UTC (rev 7415)
+++ DBIx-Class/0.08/branches/autocast/t/93autocast.t	2009-08-29 05:42:29 UTC (rev 7416)
@@ -20,7 +20,7 @@
       int => undef, # no conversion
     };
 
-    sub _dbi_data_type {
+    sub _map_data_type {
       return $type_map->{$_[1]};
     }
 }




More information about the Bast-commits mailing list