Trailing WS crusade - got to save them bits
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / MultiColumnIn.pm
index 050c018..a0a5586 100644 (file)
@@ -4,8 +4,9 @@ use strict;
 use warnings;
 
 use base 'DBIx::Class::Storage::DBI';
+use mro 'c3';
 
-=head1 NAME 
+=head1 NAME
 
 DBIx::Class::Storage::DBI::MultiColumnIn - Storage component for RDBMS supporting multicolumn in clauses
 
@@ -16,7 +17,7 @@ in fact understand WHERE (cola, colb) IN ( SELECT subcol_a, subcol_b ... )
 The storage class for any such RDBMS should inherit from this class, in order
 to dramatically speed up update/delete operations on joined multipk resultsets.
 
-At this point the only overriden method is C<_multipk_update_delete()>
+At this point the only overridden method is C<_multipk_update_delete()>
 
 =cut
 
@@ -25,17 +26,18 @@ sub _multipk_update_delete {
   my ($rs, $op, $values) = @_;
 
   my $rsrc = $rs->result_source;
-  my @pcols = $rsrc->primary_columns;
+  my @pcols = $rsrc->_pri_cols;
   my $attrs = $rs->_resolved_attrs;
 
-  # naive check - this is an internal method after all, we should know what we are doing 
+  # naive check - this is an internal method after all, we should know what we are doing
   $self->throw_exception ('Number of columns selected by supplied resultset does not match number of primary keys')
     if ( ref $attrs->{select} ne 'ARRAY' or @{$attrs->{select}} != @pcols );
 
   # This is hideously ugly, but SQLA does not understand multicol IN expressions
+  my $sqla = $self->_sql_maker;
   my ($sql, @bind) = @${$rs->as_query};
-  $sql = sprintf ('(%s) IN %s',
-    join (', ', @pcols),
+  $sql = sprintf ('(%s) IN %s',   # the as_query stuff is already enclosed in ()s
+    join (', ', map { $sqla->_quote ($_) } @pcols),
     $sql,
   );