Commit failing test for unique constraints: When a table has two or more unique
Daniel Westermann-Clark [Fri, 7 Jul 2006 05:30:53 +0000 (05:30 +0000)]
constraints, and you satisfy one, you get a partial key in the WHERE clause.

This required adding two unique constraints to the 'track' table, and fixing up
a couple of cases where we had duplicate values.

t/60core.t
t/66relationship.t
t/80unique.t
t/lib/DBICTest/Schema/Track.pm
t/lib/sqlite.sql

index b981365..aae959e 100644 (file)
@@ -164,7 +164,7 @@ is($cd->get_column('name'), 'Caterwauler McCrae', 'Additional column returned');
 $new = $schema->resultset("Track")->new( {
   trackid => 100,
   cd => 1,
-  position => 1,
+  position => 4,
   title => 'Insert or Update',
 } );
 $new->update_or_insert;
index 2565c48..406e289 100644 (file)
@@ -72,7 +72,7 @@ $track = $schema->resultset("Track")->create( {
   trackid => 2,
   cd => 3,
   position => 99,
-  title => 'Hidden Track'
+  title => 'Hidden Track 2'
 } );
 $track->update_from_related( cd => $cd );
 
index 18a41f2..ad62f0f 100644 (file)
@@ -7,10 +7,24 @@ use DBICTest;
 
 my $schema = DBICTest->init_schema();
 
-plan tests => 36;
+plan tests => 39;
 
-is_deeply([ sort $schema->source('CD')->unique_constraint_names ], [ qw/cd_artist_title primary/ ], 'CD source has an automatically named unique constraint');
-is_deeply([ sort $schema->source('Producer')->unique_constraint_names ], [ qw/primary prod_name/ ], 'Producer source has a named unique constraint');
+# Check the defined unique constraints
+is_deeply(
+  [ sort $schema->source('CD')->unique_constraint_names ],
+  [ qw/cd_artist_title primary/ ],
+  'CD source has an automatically named unique constraint'
+);
+is_deeply(
+  [ sort $schema->source('Producer')->unique_constraint_names ],
+  [ qw/primary prod_name/ ],
+  'Producer source has a named unique constraint'
+);
+is_deeply(
+  [ sort $schema->source('Track')->unique_constraint_names ],
+  [ qw/primary track_cd_position track_cd_title/ ],
+  'Track source has three unique constraints'
+);
 
 my $artistid = 1;
 my $title    = 'UNIQUE Constraint';
@@ -126,3 +140,14 @@ is($cd9->get_column('artist'), $cd1->get_column('artist'), 'artist is correct');
 is($cd9->title, $cd1->title, 'title is correct');
 is($cd9->year, 2021, 'year is correct');
 
+# KNOWN TO FAIL: Table with two unique constraints, and we're satisying one of them
+my $track = $schema->resultset('Track')->find(
+  {
+    cd       => 1,
+    position => 3,
+  },
+  { order_by => 'position' }
+);
+
+is($track->get_column('cd'), 1, 'track cd is correct');
+is($track->get_column('position'), 3, 'track position is correct');
index 691974a..d45e9f2 100644 (file)
@@ -23,6 +23,9 @@ __PACKAGE__->add_columns(
 );
 __PACKAGE__->set_primary_key('trackid');
 
+__PACKAGE__->add_unique_constraint([ qw/cd position/ ]);
+__PACKAGE__->add_unique_constraint([ qw/cd title/ ]);
+
 __PACKAGE__->belongs_to( cd => 'DBICTest::Schema::CD' );
 __PACKAGE__->belongs_to( disc => 'DBICTest::Schema::CD' => 'cd');
 
index 868aba1..e4d4e6a 100644 (file)
@@ -1,6 +1,6 @@
 -- 
 -- Created by SQL::Translator::Producer::SQLite
--- Created on Thu Jun 22 22:47:36 2006
+-- Created on Thu Jun  6 23:36:19 2006
 -- 
 BEGIN TRANSACTION;
 
@@ -203,5 +203,7 @@ CREATE TABLE onekey (
 
 CREATE UNIQUE INDEX tktlnameunique_twokeytreelike on twokeytreelike (name);
 CREATE UNIQUE INDEX cd_artist_title_cd on cd (artist, title);
+CREATE UNIQUE INDEX track_cd_position_track on track (cd, position);
+CREATE UNIQUE INDEX track_cd_title_track on track (cd, title);
 CREATE UNIQUE INDEX prod_name_producer on producer (name);
 COMMIT;