X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FSybase%2FNoBindVars.pm;h=8c63d8c262fffd9e79c8d9a6ee1145b3ba25a7da;hb=210245ed3deea1e69b39cab5b6c0f90b9db6cff9;hp=ed6f75ce01eee993443be29cad25fa9436fdd453;hpb=0c1bedfc47ada0daa0b3d98ee5dc4586c2196e6f;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Sybase/NoBindVars.pm b/lib/DBIx/Class/Storage/DBI/Sybase/NoBindVars.pm index ed6f75c..8c63d8c 100644 --- a/lib/DBIx/Class/Storage/DBI/Sybase/NoBindVars.pm +++ b/lib/DBIx/Class/Storage/DBI/Sybase/NoBindVars.pm @@ -5,6 +5,8 @@ use base qw/ DBIx::Class::Storage::DBI::NoBindVars DBIx::Class::Storage::DBI::Sybase /; +use List::Util (); +use Scalar::Util (); sub _dbh_last_insert_id { my ($self, $dbh, $source, $col) = @_; @@ -14,26 +16,39 @@ sub _dbh_last_insert_id { return ($dbh->selectrow_array('select @@identity'))[0]; } -my $noquote = { - int => qr/^ \-? \d+ $/x, - integer => qr/^ \-? \d+ $/x, - # TODO maybe need to add float/real/etc -}; +my $number = sub { Scalar::Util::looks_like_number($_[0]) }; -sub should_quote_data_type { +my $decimal = sub { $_[0] =~ /^ [-+]? \d+ (?:\.\d*)? \z/x }; + +my %noquote = ( + int => sub { $_[0] =~ /^ [-+]? \d+ \z/x }, + bit => => sub { $_[0] =~ /^[01]\z/ }, + money => sub { $_[0] =~ /^\$ \d+ (?:\.\d*)? \z/x }, + float => $number, + real => $number, + double => $number, + decimal => $decimal, + numeric => $decimal, +); + +sub should_quote_value { my $self = shift; my ($type, $value) = @_; - return $self->next::method(@_) if not defined $value; + return $self->next::method(@_) if not defined $value or not defined $type; - if (my $re = $noquote->{$type}) { - return 0 if $value =~ $re; + if (my $key = List::Util::first { $type =~ /$_/i } keys %noquote) { + return 0 if $noquote{$key}->($value); } +## try to guess based on value +# elsif (not $type) { +# return 0 if $number->($value) || $noquote->{money}->($value); +# } + return $self->next::method(@_); } - 1; =head1 NAME