* Added test cases to test if arrayref bind values in insert/update are passed throu...
Norbert Buchmuller [Mon, 17 Nov 2008 04:29:33 +0000 (05:29 +0100)]
 * Added 'array_datatypes' parameter to the sql_maker constructor.

lib/DBIx/Class/Storage/DBI.pm
t/95sql_maker.t [new file with mode: 0644]

index 54c79f1..45dba23 100644 (file)
@@ -857,7 +857,7 @@ sub dbh {
 sub _sql_maker_args {
     my ($self) = @_;
     
-    return ( bindtype=>'columns', limit_dialect => $self->dbh, %{$self->_sql_maker_opts} );
+    return ( bindtype=>'columns', array_datatypes => 1, limit_dialect => $self->dbh, %{$self->_sql_maker_opts} );
 }
 
 sub sql_maker {
diff --git a/t/95sql_maker.t b/t/95sql_maker.t
new file mode 100644 (file)
index 0000000..0971d12
--- /dev/null
@@ -0,0 +1,53 @@
+use strict;
+use warnings;
+
+use Test::More;
+use SQL::Abstract::Test import => ['is_same_sql_bind'];
+
+
+BEGIN {
+    eval "use DBD::SQLite";
+    plan $@
+        ? ( skip_all => 'needs DBD::SQLite for testing' )
+        : ( tests => 3 );
+}
+
+use lib qw(t/lib);
+
+use_ok('DBICTest');
+
+my $schema = DBICTest->init_schema();
+
+my $sql_maker = $schema->storage->sql_maker;
+
+
+my ($sql, @bind) = $sql_maker->insert(
+          'lottery',
+          {
+            'day' => '2008-11-16',
+            'numbers' => [13, 21, 34, 55, 89]
+          }
+);
+
+is_same_sql_bind(
+  $sql, \@bind,
+  q/INSERT INTO lottery (day, numbers) VALUES (?, ?)/,
+    [ ['day' => '2008-11-16'], ['numbers' => [13, 21, 34, 55, 89]] ],
+  'sql_maker passes arrayrefs in insert'
+);
+
+
+($sql, @bind) = $sql_maker->update(
+          'lottery',
+          {
+            'day' => '2008-11-16',
+            'numbers' => [13, 21, 34, 55, 89]
+          }
+);
+
+is_same_sql_bind(
+  $sql, \@bind,
+  q/UPDATE lottery SET day = ?, numbers = ?/,
+    [ ['day' => '2008-11-16'], ['numbers' => [13, 21, 34, 55, 89]] ],
+  'sql_maker passes arrayrefs in update'
+);