X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FAutoCast.pm;h=f099bc577133861be675938f58f07c2879d4c8a7;hb=8384a713d9046e08314e06bf17c2a878cd215819;hp=15218eb5f22d2464b12e5706a0eb71e4048293b8;hpb=ce012195f14f1e186f8c91cd0cbc2a11bc9088d7;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/AutoCast.pm b/lib/DBIx/Class/Storage/DBI/AutoCast.pm index 15218eb..f099bc5 100644 --- a/lib/DBIx/Class/Storage/DBI/AutoCast.pm +++ b/lib/DBIx/Class/Storage/DBI/AutoCast.pm @@ -10,7 +10,7 @@ __PACKAGE__->mk_group_accessors('simple' => 'auto_cast' ); =head1 NAME -DBIx::Class::Storage::DBI::AutoCast +DBIx::Class::Storage::DBI::AutoCast - Storage component for RDBMS requiring explicit placeholder typing =head1 SYNOPSIS @@ -23,12 +23,17 @@ 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 base RDBMS native type via L as +defined and 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 $mapped_type) +This option can also be enabled in +L as: + + on_connect_call => ['set_auto_cast'] + =cut sub _prep_for_execute { @@ -46,9 +51,9 @@ sub _prep_for_execute { foreach my $bound (@$bind) { my $col = $bound->[0]; - my $type = $self->_map_data_type($col_info->{$col}{data_type}); + my $type = $self->_native_data_type($col_info->{$col}{data_type}); - foreach my $data (@{$bound}[1..$#$bound]) { # <--- this will multiply the amount of ?'s no...? + foreach my $data (@{$bound}[1..$#$bound]) { $new_sql .= shift(@sql_part) . ($type ? "CAST(? AS $type)" : '?'); } @@ -60,8 +65,28 @@ sub _prep_for_execute { return ($sql, $bind); } +=head2 connect_call_set_auto_cast + +Executes: + + $schema->storage->auto_cast(1); + +on connection. + +Used as: + + on_connect_call => ['set_auto_cast'] + +in L. + +=cut + +sub connect_call_set_auto_cast { + my $self = shift; + $self->auto_cast(1); +} -=head1 AUTHORS +=head1 AUTHOR See L