all tests pass blocked_by_work_suspended_before_dq_lands/alias-columns
Rafael Kitover [Tue, 6 Mar 2012 23:31:31 +0000 (18:31 -0500)]
lib/DBIx/Class/ResultSet.pm
lib/DBIx/Class/ResultSource.pm
lib/DBIx/Class/SQLMaker.pm
lib/DBIx/Class/Storage/DBI.pm
t/sqlmaker/alias_column.t

index 8806682..a80c4c5 100644 (file)
@@ -1802,6 +1802,7 @@ sub _rs_update_delete {
     # at all. Tell SQLMaker to dequalify idents via a gross hack.
     my $cond = do {
       my $sqla = $rsrc->storage->sql_maker;
+      local $sqla->{FROM} = $rsrc;
       local $sqla->{_dequalify_idents} = 1;
       \[ $sqla->_recurse_where($self->{cond}) ];
     };
index fe82fac..bfbe37f 100644 (file)
@@ -11,7 +11,7 @@ use DBIx::Class::Carp;
 use Devel::GlobalDestruction;
 use Try::Tiny;
 use List::Util 'first';
-use Scalar::Util qw/blessed weaken isweak/;
+use Scalar::Util qw/blessed weaken isweak refaddr/;
 use namespace::clean;
 
 use base qw/DBIx::Class/;
@@ -1151,6 +1151,12 @@ clause contents.
 
 sub from { die 'Virtual method!' }
 
+use overload
+    '""' => sub { my $name = $_[0]->from; return ref $name ? $$name : $name },
+    '0+' => sub { refaddr($_[0]) },
+    '==' => sub { refaddr($_[0]) == refaddr($_[1]) },
+    fallback => 1;
+
 =head2 schema
 
 =over 4
index 16c73cf..e929c93 100644 (file)
@@ -93,7 +93,7 @@ sub __max_int () { 0x7FFFFFFF };
 sub _quote {
   return undef if not defined $_[1];
 
-  my $col = ( $_[0]{_dequalify_idents} and ! ref $_[1] )
+  my ($col) = ( $_[0]{_dequalify_idents} and ! ref $_[1] )
     ? $_[1] =~ / ([^\.]+) $ /x
     : $_[1]
   ;
@@ -238,6 +238,7 @@ sub update {
 }
 
 sub delete {
+  local $_[0]->{FROM} = $_[1];
 
   shift->next::method(@_);
 }
index 68bb845..bec8a7a 100644 (file)
@@ -1556,7 +1556,7 @@ sub _gen_sql_bind {
   my ($self, $op, $ident, $args) = @_;
 
   my ($sql, @bind) = $self->sql_maker->$op(
-    blessed($ident) ? $ident->from : $ident,
+    $ident,
     @$args,
   );
 
index c5b6b0f..1d70dd2 100644 (file)
@@ -54,7 +54,7 @@ eval {
 
 is_same_sql_bind(
   $sql, \@bind,
-  "DELETE FROM bad_names_1 WHERE ( me.stupid_name = ? )", ["'2001'"],
+  "DELETE FROM bad_names_1 WHERE ( stupid_name = ? )", ["'2001'"],
   'delete'
 );