[Bast-commits] r7093 - in DBIx-Class/0.08/branches/mssql_money_type: lib/DBIx/Class/Storage/DBI/ODBC t

caelum at dev.catalyst.perl.org caelum at dev.catalyst.perl.org
Thu Jul 23 14:31:08 GMT 2009


Author: caelum
Date: 2009-07-23 14:31:08 +0000 (Thu, 23 Jul 2009)
New Revision: 7093

Modified:
   DBIx-Class/0.08/branches/mssql_money_type/lib/DBIx/Class/Storage/DBI/ODBC/Microsoft_SQL_Server.pm
   DBIx-Class/0.08/branches/mssql_money_type/t/746mssql.t
Log:
fix money columns

Modified: DBIx-Class/0.08/branches/mssql_money_type/lib/DBIx/Class/Storage/DBI/ODBC/Microsoft_SQL_Server.pm
===================================================================
--- DBIx-Class/0.08/branches/mssql_money_type/lib/DBIx/Class/Storage/DBI/ODBC/Microsoft_SQL_Server.pm	2009-07-23 12:35:53 UTC (rev 7092)
+++ DBIx-Class/0.08/branches/mssql_money_type/lib/DBIx/Class/Storage/DBI/ODBC/Microsoft_SQL_Server.pm	2009-07-23 14:31:08 UTC (rev 7093)
@@ -38,6 +38,20 @@
   my $self = shift;
   my ($op, $extra_bind, $ident, $args) = @_;
 
+# cast MONEY values properly
+  if ($op eq 'insert' || $op eq 'update') {
+    my $fields = $args->[0];
+    my $col_info = $self->_resolve_column_info($ident, [keys %$fields]);
+
+    for my $col (keys %$col_info) {
+      if ($col_info->{$col}{data_type} eq 'money') {
+        my $val = $fields->{$col};
+
+        $fields->{$col} = \['CAST(? AS MONEY)', [ $col => $val ]];
+      }
+    }
+  }
+
   my ($sql, $bind) = $self->next::method (@_);
 
   if ($op eq 'insert') {

Modified: DBIx-Class/0.08/branches/mssql_money_type/t/746mssql.t
===================================================================
--- DBIx-Class/0.08/branches/mssql_money_type/t/746mssql.t	2009-07-23 12:35:53 UTC (rev 7092)
+++ DBIx-Class/0.08/branches/mssql_money_type/t/746mssql.t	2009-07-23 14:31:08 UTC (rev 7093)
@@ -12,7 +12,7 @@
 plan skip_all => 'Set $ENV{DBICTEST_MSSQL_ODBC_DSN}, _USER and _PASS to run this test'
   unless ($dsn && $user);
 
-plan tests => 29;
+plan tests => 31;
 
 my $schema = DBICTest::Schema->connect($dsn, $user, $pass);
 
@@ -94,11 +94,17 @@
 
 my $row;
 lives_ok {
-  $row = $rs->create({ amount => \'cast(100.00 as money)' });
+  $row = $rs->create({ amount => 100 });
 } 'inserted a money value';
 
 is $rs->find($row->id)->amount, '100.00', 'money value round-trip';
 
+lives_ok {
+  $row->update({ amount => 200 });
+} 'updated a money value';
+
+is $rs->find($row->id)->amount, '200.00', 'updated money value round-trip';
+
 $schema->storage->dbh_do (sub {
     my ($storage, $dbh) = @_;
     eval { $dbh->do("DROP TABLE Owners") };




More information about the Bast-commits mailing list