From: Rafael Kitover Date: Fri, 5 Jun 2009 14:55:41 +0000 (+0000) Subject: update sybase types which shouldn't be quoted X-Git-Tag: v0.08112~14^2~146 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=0c4499731cc668d60baede9e2c10424103610dd7;p=dbsrgits%2FDBIx-Class.git update sybase types which shouldn't be quoted --- diff --git a/lib/DBIx/Class/Storage/DBI/NoBindVars.pm b/lib/DBIx/Class/Storage/DBI/NoBindVars.pm index 8981f6a..7a48105 100644 --- a/lib/DBIx/Class/Storage/DBI/NoBindVars.pm +++ b/lib/DBIx/Class/Storage/DBI/NoBindVars.pm @@ -41,7 +41,7 @@ Manually subs in the values for the usual C placeholders. sub _prep_for_execute { my $self = shift; - my ($op, $extra_bind, $ident, $rsrc) = @_; + my ($op, $extra_bind, $ident, $args) = @_; my ($sql, $bind) = $self->next::method(@_); diff --git a/lib/DBIx/Class/Storage/DBI/Sybase/NoBindVars.pm b/lib/DBIx/Class/Storage/DBI/Sybase/NoBindVars.pm index 82d05dc..c815f67 100644 --- a/lib/DBIx/Class/Storage/DBI/Sybase/NoBindVars.pm +++ b/lib/DBIx/Class/Storage/DBI/Sybase/NoBindVars.pm @@ -6,6 +6,7 @@ use base qw/ DBIx::Class::Storage::DBI::Sybase /; use List::Util (); +use Scalar::Util (); sub _dbh_last_insert_id { my ($self, $dbh, $source, $col) = @_; @@ -15,9 +16,17 @@ sub _dbh_last_insert_id { return ($dbh->selectrow_array('select @@identity'))[0]; } +my $number = sub { Scalar::Util::looks_like_number($_[0]) }; + my %noquote = ( - int => sub { /^ -? \d+ \z/x }, - # TODO maybe need to add float/real/etc + 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 => $number, + numeric => $number, ); sub should_quote_data_type { @@ -26,9 +35,8 @@ sub should_quote_data_type { return $self->next::method(@_) if not defined $value; - if (my $key = List::Util::first { $type =~ /^$_/i } keys %noquote) { - local $_ = $value; - return 0 if $noquote{$key}->(); + if (my $key = List::Util::first { $type =~ /$_/i } keys %noquote) { + return 0 if $noquote{$key}->($value); } return $self->next::method(@_);