X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FSybase%2FNoBindVars.pm;h=4ebb8cf5a624b6fe727e3f5350197f17659c1a8e;hb=17d750d79d6df0ba063f662aa732a1e7ec286a41;hp=1f5dfc48d82c20f2f6f67137a99c1d311c277209;hpb=b75051301e6da537ee0f4a0494f2a3ffad448481;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Storage/DBI/Sybase/NoBindVars.pm b/lib/DBIx/Class/Storage/DBI/Sybase/NoBindVars.pm index 1f5dfc4..4ebb8cf 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,6 +16,34 @@ sub _dbh_last_insert_id { return ($dbh->selectrow_array('select @@identity'))[0]; } +my $number = sub { Scalar::Util::looks_like_number($_[0]) }; + +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_data_type { + my $self = shift; + my ($type, $value) = @_; + + return $self->next::method(@_) if not defined $value; + + if (my $key = List::Util::first { $type =~ /$_/i } keys %noquote) { + return 0 if $noquote{$key}->($value); + } + + return $self->next::method(@_); +} + 1; =head1 NAME