Saner check for non-integer values bound as integers in SQLite
Peter Rabbitson [Mon, 1 Apr 2013 09:05:05 +0000 (11:05 +0200)]
lib/DBIx/Class/Storage/DBI/SQLite.pm
t/752sqlite.t

index 14c07d2..c833f86 100644 (file)
@@ -7,7 +7,6 @@ use base qw/DBIx::Class::Storage::DBI/;
 use mro 'c3';
 
 use DBIx::Class::Carp;
-use Scalar::Util 'looks_like_number';
 use Try::Tiny;
 use namespace::clean;
 
@@ -217,10 +216,10 @@ sub _dbi_attrs_for_bind {
         and
       $bindattrs->[$_] eq DBI::SQL_INTEGER()
         and
-      ! looks_like_number ($bind->[$_][1])
+      $bind->[$_][1] !~ /^ [\+\-]? [0-9]+ (?: \. 0* )? $/x
     ) {
       carp_unique( sprintf (
-        "Non-numeric value supplied for column '%s' despite the numeric datatype",
+        "Non-integer value supplied for column '%s' despite the integer datatype",
         $bind->[$_][0]{dbic_colname} || "# $_"
       ) );
       undef $bindattrs->[$_];
index 1895a9f..1a511f2 100644 (file)
@@ -121,7 +121,7 @@ my $schema = DBICTest->init_schema();
 # make sure the side-effects of RT#67581 do not result in data loss
 my $row;
 warnings_exist { $row = $schema->resultset('Artist')->create ({ name => 'alpha rank', rank => 'abc' }) }
-  [qr/Non-numeric value supplied for column 'rank' despite the numeric datatype/],
+  [qr/Non-integer value supplied for column 'rank' despite the integer datatype/],
   'proper warning on string insertion into an numeric column'
 ;
 $row->discard_changes;