[Bast-commits] r5079 - in DBIx-Class/0.08/branches/column_attr: . lib/DBIx/Class

nigel at dev.catalyst.perl.org nigel at dev.catalyst.perl.org
Sat Nov 8 20:43:36 GMT 2008


Author: nigel
Date: 2008-11-08 20:43:36 +0000 (Sat, 08 Nov 2008)
New Revision: 5079

Modified:
   DBIx-Class/0.08/branches/column_attr/
   DBIx-Class/0.08/branches/column_attr/lib/DBIx/Class/ResultSet.pm
Log:
 r10067 at Hex:  nigel | 2008-11-08 20:43:22 +0000
 Cleaner working version



Property changes on: DBIx-Class/0.08/branches/column_attr
___________________________________________________________________
Name: svk:merge
   - 168d5346-440b-0410-b799-f706be625ff1:/DBIx-Class-current:2207
462d4d0c-b505-0410-bf8e-ce8f877b3390:/local/bast/DBIx-Class:3159
9c88509d-e914-0410-b01c-b9530614cbfe:/local/DBIx-Class:32260
9c88509d-e914-0410-b01c-b9530614cbfe:/local/DBIx-Class-CDBICompat:54993
9c88509d-e914-0410-b01c-b9530614cbfe:/vendor/DBIx-Class:31122
ab17426e-7cd3-4704-a2a2-80b7c0a611bb:/local/dbic_column_attr:10066
bd5ac9a7-f185-4d95-9186-dbb8b392a572:/local/os/bast/DBIx-Class/0.08/trunk:2798
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/cdbicompat_integration:4160
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/complex_join_rels:4589
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/file_column:3920
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/on_disconnect_do:3694
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/oracle_sequence:4173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/parser_fk_index:4485
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/replication_dedux:4600
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/savepoints:4223
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/storage-ms-access:4142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/versioned_enhancements:4125
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/versioning:4578
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/trunk:5073
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-C3:318
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-current:2222
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-joins:173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-resultset:570
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/datetime:1716
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_compat:1855
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_unique_query_fixes:2142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/inflate:1988
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/many_to_many:2025
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/re_refactor_bugfix:1944
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/reorganize_tests:1827
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset-new-refactor:1766
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_2_electric_boogaloo:2175
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_cleanup:2102
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/sqlt_tests_refactor:2043
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/trunk/DBIx-Class:3606
fe160bb6-dc1c-0410-9f2b-d64a711b54a5:/local/DBIC-trunk-0.08:10510
   + 168d5346-440b-0410-b799-f706be625ff1:/DBIx-Class-current:2207
462d4d0c-b505-0410-bf8e-ce8f877b3390:/local/bast/DBIx-Class:3159
9c88509d-e914-0410-b01c-b9530614cbfe:/local/DBIx-Class:32260
9c88509d-e914-0410-b01c-b9530614cbfe:/local/DBIx-Class-CDBICompat:54993
9c88509d-e914-0410-b01c-b9530614cbfe:/vendor/DBIx-Class:31122
ab17426e-7cd3-4704-a2a2-80b7c0a611bb:/local/dbic_column_attr:10067
bd5ac9a7-f185-4d95-9186-dbb8b392a572:/local/os/bast/DBIx-Class/0.08/trunk:2798
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/cdbicompat_integration:4160
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/complex_join_rels:4589
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/file_column:3920
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/on_disconnect_do:3694
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/oracle_sequence:4173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/parser_fk_index:4485
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/replication_dedux:4600
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/savepoints:4223
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/storage-ms-access:4142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/versioned_enhancements:4125
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/versioning:4578
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/trunk:5073
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-C3:318
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-current:2222
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-joins:173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-resultset:570
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/datetime:1716
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_compat:1855
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_unique_query_fixes:2142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/inflate:1988
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/many_to_many:2025
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/re_refactor_bugfix:1944
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/reorganize_tests:1827
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset-new-refactor:1766
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_2_electric_boogaloo:2175
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_cleanup:2102
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/sqlt_tests_refactor:2043
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/trunk/DBIx-Class:3606
fe160bb6-dc1c-0410-9f2b-d64a711b54a5:/local/DBIC-trunk-0.08:10510

Modified: DBIx-Class/0.08/branches/column_attr/lib/DBIx/Class/ResultSet.pm
===================================================================
--- DBIx-Class/0.08/branches/column_attr/lib/DBIx/Class/ResultSet.pm	2008-11-08 20:43:31 UTC (rev 5078)
+++ DBIx-Class/0.08/branches/column_attr/lib/DBIx/Class/ResultSet.pm	2008-11-08 20:43:36 UTC (rev 5079)
@@ -2078,6 +2078,42 @@
     my $alias  = $attrs->{alias};
 
     $attrs->{columns} ||= delete $attrs->{cols} if exists $attrs->{cols};
+    my @colbits;
+
+    # build columns (as long as select isn't set), include_columns and +columns
+    # into a set of as/select hashes
+    foreach my $col (
+        (
+            $attrs->{select} ? ()
+            : @{ delete $attrs->{columns} || [ $source->columns ] }
+        ),
+        (
+            $attrs->{include_columns} ? @{ delete $attrs->{include_columns} }
+            : ()
+          ),
+        ( $attrs->{'+colums'} ? @{ delete $attrs->{'+colums'} } : () )
+      )
+    {
+        if ( ref($col) eq 'HASH' ) {
+            push( @colbits, $col );
+        }
+        else {
+            push(
+                @colbits,
+                {
+                    (
+                        ( $col =~ m/^\Q${alias}.\E(.+)$/ ) ? $1
+                        : $col
+                      ) => (
+                        ( $col =~ m/\./ ) ? $col
+                        : "${alias}.${col}"
+                      )
+                }
+            );
+        }
+    }
+
+    # start with initial select items
     if ( $attrs->{select} ) {
         $attrs->{select} =
             ( ref $attrs->{select} eq 'ARRAY' )
@@ -2096,54 +2132,17 @@
         );
     }
     else {
-        $attrs->{columns} ||= [ $source->columns ];
 
-        # if columns is set we overwrite select & as
+        # otherwise we intialise select & as
         $attrs->{select} = [];
         $attrs->{as}     = [];
-        foreach my $colbit ( @{ $attrs->{columns} } ) {
-            if ( ref($_) eq 'HASH' ) {
-                push(
-                    @{ $attrs->{select} },
-                    map { ref($_) ? $_ : m/\./ ? $_ : "${alias}.$_" }
-                      values( %{$colbit} )
-                );
-                push(
-                    @{ $attrs->{as} },
-                    map { m/^\Q${alias}.\E(.+)$/ ? $1 : $_ } keys( %{$colbit} )
-                );
-            }
-            else {
-                push(
-                    @{ $attrs->{select} },
-                    ( $colbit =~ m/\./ ) ? $colbit : "${alias}.${colbit}"
-                );
-                push(
-                    @{ $attrs->{as} },
-                    ( $colbit =~ m/^\Q${alias}.\E(.+)$/ ) ? $1 : $colbit
-                );
-            }
-        }
-        delete $attrs->{columns};
     }
 
+    # now add colbits to select/as
+    push( @{ $attrs->{select} }, map { values( %{$_} ) } @colbits );
+    push( @{ $attrs->{as} }, map { keys( %{$_} ) } @colbits );
+
     my $adds;
-    if ( $adds = delete $attrs->{include_columns} ) {
-        $adds = [$adds] unless ref $adds eq 'ARRAY';
-        push( @{ $attrs->{select} }, @$adds );
-        push( @{ $attrs->{as} }, map { m/([^.]+)$/; $1 } @$adds );
-    }
-    if ( $adds = delete $attrs->{'+columns'} ) {
-        $adds = [$adds] unless ref $adds eq 'ARRAY';
-        push(
-            @{ $attrs->{select} },
-            map { ref($_) eq 'HASH' ? values( %{$_} ) : $_ } @$adds
-        );
-        push(
-            @{ $attrs->{as} },
-            map { ref($_) eq 'HASH' ? keys( %{$_} ) : $_ } @$adds
-        );
-    }
     if ( $adds = delete $attrs->{'+select'} ) {
         $adds = [$adds] unless ref $adds eq 'ARRAY';
         push(
@@ -2176,7 +2175,8 @@
 
     }
 
-    $attrs->{group_by} ||= $attrs->{select} if delete $attrs->{distinct};
+    $attrs->{group_by} ||= $attrs->{select}
+      if delete $attrs->{distinct};
     if ( $attrs->{order_by} ) {
         $attrs->{order_by} = (
             ref( $attrs->{order_by} ) eq 'ARRAY'




More information about the Bast-commits mailing list