[Bast-commits] r5886 - in DBIx-Class/0.08/trunk: lib/DBIx lib/DBIx/Class t t/lib t/lib/DBICTest t/lib/DBICTest/Schema

pcc at dev.catalyst.perl.org pcc at dev.catalyst.perl.org
Mon Apr 13 18:35:54 GMT 2009


Author: pcc
Date: 2009-04-13 19:35:51 +0100 (Mon, 13 Apr 2009)
New Revision: 5886

Added:
   DBIx-Class/0.08/trunk/t/lib/DBICTest/Schema/Demographic.pm
Modified:
   DBIx-Class/0.08/trunk/lib/DBIx/Class.pm
   DBIx-Class/0.08/trunk/lib/DBIx/Class/ResultSource.pm
   DBIx-Class/0.08/trunk/t/66relationship.t
   DBIx-Class/0.08/trunk/t/93single_accessor_object.t
   DBIx-Class/0.08/trunk/t/96multi_create_torture.t
   DBIx-Class/0.08/trunk/t/lib/DBICTest/Schema.pm
   DBIx-Class/0.08/trunk/t/lib/DBICTest/Schema/Genre.pm
   DBIx-Class/0.08/trunk/t/lib/sqlite.sql
Log:
Correctly propagate forced left joins through arrayrefs and hashrefs

Modified: DBIx-Class/0.08/trunk/lib/DBIx/Class/ResultSource.pm
===================================================================
--- DBIx-Class/0.08/trunk/lib/DBIx/Class/ResultSource.pm	2009-04-13 17:08:45 UTC (rev 5885)
+++ DBIx-Class/0.08/trunk/lib/DBIx/Class/ResultSource.pm	2009-04-13 18:35:51 UTC (rev 5886)
@@ -1089,12 +1089,16 @@
   $seen ||= {};
   $force_left ||= { force => 0 };
   if (ref $join eq 'ARRAY') {
-    return map { $self->resolve_join($_, $alias, $seen) } @$join;
+    return
+      map {
+        local $force_left->{force} = $force_left->{force};
+        $self->resolve_join($_, $alias, $seen, $force_left);
+      } @$join;
   } elsif (ref $join eq 'HASH') {
     return
       map {
         my $as = ($seen->{$_} ? $_.'_'.($seen->{$_}+1) : $_);
-        local $force_left->{force};
+        local $force_left->{force} = $force_left->{force};
         (
           $self->resolve_join($_, $alias, $seen, $force_left),
           $self->related_source($_)->resolve_join(

Modified: DBIx-Class/0.08/trunk/lib/DBIx/Class.pm
===================================================================
--- DBIx-Class/0.08/trunk/lib/DBIx/Class.pm	2009-04-13 17:08:45 UTC (rev 5885)
+++ DBIx-Class/0.08/trunk/lib/DBIx/Class.pm	2009-04-13 18:35:51 UTC (rev 5886)
@@ -281,6 +281,8 @@
 
 perigrin: Chris Prather <chris at prather.org>
 
+Peter Collingbourne <peter at pcc.me.uk>
+
 phaylon: Robert Sedlacek <phaylon at dunkelheit.at>
 
 plu: Johannes Plunien <plu at cpan.org>

Modified: DBIx-Class/0.08/trunk/t/66relationship.t
===================================================================
--- DBIx-Class/0.08/trunk/t/66relationship.t	2009-04-13 17:08:45 UTC (rev 5885)
+++ DBIx-Class/0.08/trunk/t/66relationship.t	2009-04-13 18:35:51 UTC (rev 5886)
@@ -8,7 +8,7 @@
 
 my $schema = DBICTest->init_schema();
 
-plan tests => 71;
+plan tests => 74;
 
 # has_a test
 my $cd = $schema->resultset("CD")->find(4);
@@ -289,3 +289,13 @@
 my $rs_overridden = $schema->source('ForceForeign');
 my $relinfo_with_attr = $rs_overridden->relationship_info ('cd_3');
 cmp_ok($relinfo_with_attr->{attrs}{is_foreign_key_constraint}, '==', 0, "is_foreign_key_constraint defined for belongs_to relationships with attr.");
+
+# check that relationships below left join relationships are forced to left joins
+my $cds = $schema->resultset("CD")->search({ cdid => 1 }, { join => { genre => 'demographic' } });
+is($cds->count, 1, "subjoins under left joins force_left (string)");
+
+$cds = $schema->resultset("CD")->search({ cdid => 1 }, { join => { genre => [ 'demographic' ] } });
+is($cds->count, 1, "subjoins under left joins force_left (arrayref)");
+
+$cds = $schema->resultset("CD")->search({ cdid => 1 }, { join => { genre => { demographic => {} } } });
+is($cds->count, 1, "subjoins under left joins force_left (hashref)");

Modified: DBIx-Class/0.08/trunk/t/93single_accessor_object.t
===================================================================
--- DBIx-Class/0.08/trunk/t/93single_accessor_object.t	2009-04-13 17:08:45 UTC (rev 5885)
+++ DBIx-Class/0.08/trunk/t/93single_accessor_object.t	2009-04-13 18:35:51 UTC (rev 5886)
@@ -56,7 +56,7 @@
 
 {
 	my $artist = $schema->resultset('Artist')->create({ artistid => 666, name => 'bad religion' });
-	my $genre = $schema->resultset('Genre')->create({ genreid => 88, name => 'disco' });
+	my $genre = $schema->resultset('Genre')->create({ genreid => 88, name => 'disco', demographicid => 1 });
 	my $cd = $schema->resultset('CD')->create({ cdid => 187, artist => 1, title => 'how could hell be any worse?', year => 1982 });
 
 	dies_ok { $cd->genre } 'genre accessor throws without column';

Modified: DBIx-Class/0.08/trunk/t/96multi_create_torture.t
===================================================================
--- DBIx-Class/0.08/trunk/t/96multi_create_torture.t	2009-04-13 17:08:45 UTC (rev 5885)
+++ DBIx-Class/0.08/trunk/t/96multi_create_torture.t	2009-04-13 18:35:51 UTC (rev 5886)
@@ -27,6 +27,9 @@
     year => '2012',
     genre => {
       name => '"Greatest" collections',
+      demographic => {
+        name => '"Greatest" collections demographic',
+      },
     },
     tags => [
       { tag => 'A' },
@@ -47,6 +50,9 @@
                       year => 2012,
                       genre => {
                         name => '"Greatest" collections',
+                        demographic => {
+                          name => '"Greatest" collections demographic',
+                        },
                       },
                       tags => [
                         { tag => 'A' },
@@ -68,6 +74,9 @@
                                     year => 2012,
                                     genre => {
                                       name => '"Greatest" collections',
+                                      demographic => {
+                                        name => '"Greatest" collections demographic',
+                                      },
                                     },
                                     tags => [
                                       { tag => 'A' },
@@ -79,6 +88,9 @@
                                     year => 2012,
                                     genre => {
                                       name => '"Greatest" collections2',
+                                      demographic => {
+                                        name => '"Greatest" collections demographic',
+                                      },
                                     },
                                     tags => [
                                       { tag => 'A' },
@@ -91,6 +103,9 @@
                               year => 2013,
                               genre => {
                                 name => '"Greatest" collections2',
+                                demographic => {
+                                  name => '"Greatest" collections demographic',
+                                },
                               },
                             }},
                           ],
@@ -103,6 +118,9 @@
                 year => 2012,
                 genre => {
                   name => '"Greatest" collections',
+                  demographic => {
+                    name => '"Greatest" collections demographic',
+                  },
                 },
                 tags => [
                   { tag => 'A' },

Added: DBIx-Class/0.08/trunk/t/lib/DBICTest/Schema/Demographic.pm
===================================================================
--- DBIx-Class/0.08/trunk/t/lib/DBICTest/Schema/Demographic.pm	                        (rev 0)
+++ DBIx-Class/0.08/trunk/t/lib/DBICTest/Schema/Demographic.pm	2009-04-13 18:35:51 UTC (rev 5886)
@@ -0,0 +1,21 @@
+package DBICTest::Schema::Demographic;
+
+use strict;
+
+use base 'DBIx::Class::Core';
+
+__PACKAGE__->table('demographic');
+__PACKAGE__->add_columns(
+    demographicid => {
+      data_type => 'integer',
+      is_auto_increment => 1,
+    },
+    name => {
+      data_type => 'varchar',
+      size => 100,
+    },
+);
+__PACKAGE__->set_primary_key('demographicid');
+__PACKAGE__->add_unique_constraint ( demographic_name => [qw/name/] );
+
+1;

Modified: DBIx-Class/0.08/trunk/t/lib/DBICTest/Schema/Genre.pm
===================================================================
--- DBIx-Class/0.08/trunk/t/lib/DBICTest/Schema/Genre.pm	2009-04-13 17:08:45 UTC (rev 5885)
+++ DBIx-Class/0.08/trunk/t/lib/DBICTest/Schema/Genre.pm	2009-04-13 18:35:51 UTC (rev 5886)
@@ -14,10 +14,15 @@
       data_type => 'varchar',
       size => 100,
     },
+    demographicid => {
+      data_type => 'integer',
+      is_nullable => 0,
+    },
 );
 __PACKAGE__->set_primary_key('genreid');
 __PACKAGE__->add_unique_constraint ( genre_name => [qw/name/] );
 
 __PACKAGE__->has_many (cds => 'DBICTest::Schema::CD', 'genreid');
+__PACKAGE__->belongs_to (demographic => 'DBICTest::Schema::Demographic', 'demographicid');
 
 1;

Modified: DBIx-Class/0.08/trunk/t/lib/DBICTest/Schema.pm
===================================================================
--- DBIx-Class/0.08/trunk/t/lib/DBICTest/Schema.pm	2009-04-13 17:08:45 UTC (rev 5885)
+++ DBIx-Class/0.08/trunk/t/lib/DBICTest/Schema.pm	2009-04-13 18:35:51 UTC (rev 5886)
@@ -11,6 +11,7 @@
   BindType
   Employee
   CD
+  Demographic
   FileColumn
   Genre
   Link

Modified: DBIx-Class/0.08/trunk/t/lib/sqlite.sql
===================================================================
--- DBIx-Class/0.08/trunk/t/lib/sqlite.sql	2009-04-13 17:08:45 UTC (rev 5885)
+++ DBIx-Class/0.08/trunk/t/lib/sqlite.sql	2009-04-13 18:35:51 UTC (rev 5886)
@@ -137,6 +137,16 @@
 CREATE INDEX collection_object_idx_object_c ON collection_object (object);
 
 --
+-- Table: demographic
+--
+CREATE TABLE demographic (
+  demographicid INTEGER PRIMARY KEY NOT NULL,
+  name varchar(100) NOT NULL
+);
+
+CREATE UNIQUE INDEX demographic_name_demographic ON demographic (name);
+
+--
 -- Table: employee
 --
 CREATE TABLE employee (
@@ -221,7 +231,8 @@
 --
 CREATE TABLE genre (
   genreid INTEGER PRIMARY KEY NOT NULL,
-  name varchar(100) NOT NULL
+  name varchar(100) NOT NULL,
+  demographicid INTEGER NOT NULL
 );
 
 CREATE UNIQUE INDEX genre_name_genre ON genre (name);




More information about the Bast-commits mailing list