[Bast-commits] r9497 - in DBIx-Class/0.08/branches/rs_UD_cleanup: . lib/DBIx/Class t/resultset

ribasushi at dev.catalyst.perl.org ribasushi at dev.catalyst.perl.org
Mon May 31 22:20:38 GMT 2010


Author: ribasushi
Date: 2010-05-31 23:20:38 +0100 (Mon, 31 May 2010)
New Revision: 9497

Modified:
   DBIx-Class/0.08/branches/rs_UD_cleanup/Changes
   DBIx-Class/0.08/branches/rs_UD_cleanup/Makefile.PL
   DBIx-Class/0.08/branches/rs_UD_cleanup/lib/DBIx/Class/ResultSet.pm
   DBIx-Class/0.08/branches/rs_UD_cleanup/t/resultset/update_delete.t
Log:
Fix update/delete on prefetching resultsets

Modified: DBIx-Class/0.08/branches/rs_UD_cleanup/Changes
===================================================================
--- DBIx-Class/0.08/branches/rs_UD_cleanup/Changes	2010-05-31 22:18:10 UTC (rev 9496)
+++ DBIx-Class/0.08/branches/rs_UD_cleanup/Changes	2010-05-31 22:20:38 UTC (rev 9497)
@@ -34,6 +34,8 @@
         - update() on row not in_storage no longer throws an exception
           if there are no dirty columns to update (fixes cascaded update
           annoyances)
+        - update()/delete() on prefetching resultsets no longer results
+          in malformed SQL (some $rs attributes were erroneously left in)
         - Fix dbicadmin to allow deploy() on non-versioned schema
         - Fix dbicadmin to respect sql_dir on upgrade() (RT#57732)
         - Update Schema::Versioned to respect hashref style of

Modified: DBIx-Class/0.08/branches/rs_UD_cleanup/Makefile.PL
===================================================================
--- DBIx-Class/0.08/branches/rs_UD_cleanup/Makefile.PL	2010-05-31 22:18:10 UTC (rev 9496)
+++ DBIx-Class/0.08/branches/rs_UD_cleanup/Makefile.PL	2010-05-31 22:20:38 UTC (rev 9497)
@@ -44,7 +44,7 @@
   'MRO::Compat'              => '0.09',
   'Module::Find'             => '0.06',
   'Path::Class'              => '0.18',
-  'SQL::Abstract'            => '1.66',
+  'SQL::Abstract'            => '1.67',
   'SQL::Abstract::Limit'     => '0.13',
   'Sub::Name'                => '0.04',
   'Data::Dumper::Concise'    => '1.000',

Modified: DBIx-Class/0.08/branches/rs_UD_cleanup/lib/DBIx/Class/ResultSet.pm
===================================================================
--- DBIx-Class/0.08/branches/rs_UD_cleanup/lib/DBIx/Class/ResultSet.pm	2010-05-31 22:18:10 UTC (rev 9496)
+++ DBIx-Class/0.08/branches/rs_UD_cleanup/lib/DBIx/Class/ResultSet.pm	2010-05-31 22:20:38 UTC (rev 9497)
@@ -197,7 +197,6 @@
   my $self = {
     _source_handle => $source,
     cond => $attrs->{where},
-    count => undef,
     pager => undef,
     attrs => $attrs
   };
@@ -1434,7 +1433,8 @@
     # make a new $rs selecting only the PKs (that's all we really need)
     my $attrs = $self->_resolved_attrs_copy;
 
-    delete $attrs->{$_} for qw/collapse select as/;
+
+    delete $attrs->{$_} for qw/collapse _collapse_order_by select _prefetch_select as/;
     $attrs->{columns} = [ map { "$attrs->{alias}.$_" } ($self->result_source->_pri_cols) ];
 
     if ($needs_group_by_subq) {
@@ -1468,7 +1468,6 @@
     }
 
     my $subrs = (ref $self)->new($rsrc, $attrs);
-
     return $self->result_source->storage->_subq_update_delete($subrs, $op, $values);
   }
   else {

Modified: DBIx-Class/0.08/branches/rs_UD_cleanup/t/resultset/update_delete.t
===================================================================
--- DBIx-Class/0.08/branches/rs_UD_cleanup/t/resultset/update_delete.t	2010-05-31 22:18:10 UTC (rev 9496)
+++ DBIx-Class/0.08/branches/rs_UD_cleanup/t/resultset/update_delete.t	2010-05-31 22:20:38 UTC (rev 9497)
@@ -5,6 +5,8 @@
 use Test::More;
 use Test::Exception;
 use DBICTest;
+use DBIC::DebugObj;
+use DBIC::SqlMakerTest;
 
 my $schema = DBICTest->init_schema();
 
@@ -105,7 +107,6 @@
 );
 
 $sub_rs->delete;
-
 is ($tkfks->count, $tkfk_cnt -= 2, 'Only two rows deleted');
 
 # make sure limit-only deletion works
@@ -113,4 +114,26 @@
 $tkfks->search ({}, { rows => 1 })->delete;
 is ($tkfks->count, $tkfk_cnt -= 1, 'Only one row deleted');
 
+
+# Make sure prefetch is properly stripped too
+# check with sql-equality, as sqlite will accept bad sql just fine
+my ($sql, @bind);
+my $orig_debugobj = $schema->storage->debugobj;
+my $orig_debug = $schema->storage->debug;
+
+$schema->storage->debugobj (DBIC::DebugObj->new (\$sql, \@bind) );
+$schema->storage->debug (1);
+$schema->resultset('CD')->search(
+  { year => { '!=' => 2010 } },
+  { prefetch => 'liner_notes' },
+)->delete;
+
+is_same_sql_bind (
+  $sql,
+  \@bind,
+  'DELETE FROM cd WHERE ( cdid IN ( SELECT me.cdid FROM cd me WHERE ( year != ? ) GROUP BY me.cdid ) )',
+  ["'2010'"],
+  'Update on prefetching resultset strips prefetch correctly'
+);
+
 done_testing;




More information about the Bast-commits mailing list