fixed rels ending with me breaking subquery realiasing
Alexander Hartmaier [Mon, 14 Jun 2010 12:05:18 +0000 (14:05 +0200)]
Changes
lib/DBIx/Class/SQLAHacks.pm
t/sqlahacks/limit_dialects/rownum.t

diff --git a/Changes b/Changes
index 13f03bd..0f6aa20 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,8 @@
 Revision history for DBIx::Class
 
+    * Fixes
+        - Fixed rels ending with me breaking subqueried limit realiasing
+
 0.08123 2010-06-12 14:46 (UTC)
     * Fixes
         - Make sure Oracle identifier shortener applies to auto-generated
index 68566f3..3cf750c 100644 (file)
@@ -122,7 +122,7 @@ sub _subqueried_limit_attrs {
   # for possible further chaining)
   my (@in_sel, @out_sel, %renamed);
   for my $node (@sel) {
-    if (first { $_ =~ / (?<! $re_alias ) $re_sep /x } ($node->{as}, $node->{unquoted_sql}) )  {
+    if (first { $_ =~ / (?<! ^ $re_alias ) $re_sep /x } ($node->{as}, $node->{unquoted_sql}) )  {
       $node->{as} = $self->_unqualify_colname($node->{as});
       my $quoted_as = $self->_quote($node->{as});
       push @in_sel, sprintf '%s AS %s', $node->{sql}, $quoted_as;
index 85ca3e8..34619fc 100644 (file)
@@ -32,4 +32,23 @@ is_same_sql_bind (
   'Rownum subsel aliasing works correctly'
 );
 
+is_same_sql_bind (
+  $rs->search ({}, { rows => 1, offset => 3,columns => [
+      { id => 'foo.id' },
+      { 'ends_with_me.id' => 'ends_with_me.id' },
+    ]})->as_query,
+  '(SELECT id, ends_with_me__id
+      FROM (
+        SELECT id, ends_with_me__id, ROWNUM rownum__index
+          FROM (
+            SELECT foo.id AS id, ends_with_me.id AS ends_with_me__id
+              FROM cd me
+          ) me
+      ) me
+    WHERE rownum__index BETWEEN 4 AND 4
+  )',
+  [],
+  'Rownum subsel aliasing works correctly'
+);
+
 done_testing;