sort unique constraints
Rafael Kitover [Thu, 18 Aug 2011 20:55:09 +0000 (16:55 -0400)]
Relationships and unique constraints are now sorted by name in the
Result files to cut down on pointless diff spam in version control.

This commit also adds checking for the SCHEMA_LOADER_TESTS_NOCLEANUP
environment variable when removing the test sqlite DBs used by various
tests, this allows for inspecting them with the sqlite3 shell.

Changes
TODO
lib/DBIx/Class/Schema/Loader/Base.pm
t/23dumpmore.t
t/lib/make_dbictest_db.pm
t/lib/make_dbictest_db_bad_comment_tables.pm
t/lib/make_dbictest_db_clashing_monikers.pm
t/lib/make_dbictest_db_comments.pm
t/lib/make_dbictest_db_multi_unique.pm [new file with mode: 0644]
t/lib/make_dbictest_db_plural_tables.pm
t/lib/make_dbictest_db_with_unique.pm

diff --git a/Changes b/Changes
index 2e70f2d..a38b46f 100644 (file)
--- a/Changes
+++ b/Changes
@@ -9,6 +9,7 @@ Revision history for Perl extension DBIx::Class::Schema::Loader
         - $schema->loader is now a public method
         - add schema_components option
         - sort relationships so they always come out in the same order
+        - also sort unique constraints so they always come out in the same order
         - multi db_schema support with cross-schema rels (RT#39478)
         - added moniker_parts option for name clashes in multi db_schema setups
         - add quiet option
diff --git a/TODO b/TODO
index 2257cca..6973743 100644 (file)
--- a/TODO
+++ b/TODO
@@ -45,7 +45,6 @@
     - make 23dumpmore.t auto cleanup and remove dump warnings
     - generate POD for schema class with class list
     - remove implicit rels from common tests so all tests work on MySQL
-    - sort unique keys by name
     - server link support for Oracle and MSSQL
     - add -I support to dbicdump
 
index 11ca730..04a89c1 100644 (file)
@@ -2250,6 +2250,10 @@ sub _setup_src_meta {
     $self->_dbic_stmt($table_class, 'set_primary_key', @$pks)
         if @$pks;
 
+    # Sort unique constraints by constraint name for repeatable results (rels
+    # are sorted as well elsewhere.)
+    @uniqs = sort { $a->[0] cmp $b->[0] } @uniqs;
+
     foreach my $uniq (@uniqs) {
         my ($name, $cols) = @$uniq;
         $self->_dbic_stmt($table_class,'add_unique_constraint', $name, $cols);
index 2c1ef7b..a1cd0cd 100644 (file)
@@ -95,6 +95,18 @@ $t->dump_test(
 
 $t->cleanup;
 
+$t->dump_test(
+    classname => 'DBICTest::Schema::_sorted_uniqs',
+    test_db_class => 'make_dbictest_db_multi_unique',
+    regexes => {
+        Bar => [
+            qr/->add_unique_constraint\("uniq1_unique".*->add_unique_constraint\("uniq2_unique"/s,
+        ],
+    },
+);
+
+$t->cleanup;
+
 # test naming => { monikers => 'plural' }
 $t->dump_test(
     classname => 'DBICTest::Schema::_plural_monikers',
index d87dd01..6bdaf28 100644 (file)
@@ -35,6 +35,6 @@ $dbh->do($_) for (
     q|INSERT INTO bar VALUES (4,1)|,
 );
 
-END { unlink($fn); }
+END { unlink($fn) unless $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}; }
 
 1;
index 7e5cfb3..dc0dc74 100644 (file)
@@ -41,6 +41,6 @@ $dbh->do($_) for (
     q|INSERT INTO bar VALUES (4,1)|,
 );
 
-END { unlink($fn); }
+END { unlink($fn) unless $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}; }
 
 1
index e1c82b3..f344e0b 100644 (file)
@@ -40,6 +40,6 @@ $dbh->do($_) for (
     q|INSERT INTO bar VALUES (4,1)|,
 );
 
-END { unlink($fn); }
+END { unlink($fn) unless $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}; }
 
 1;
index 375bcb8..216556d 100644 (file)
@@ -58,6 +58,6 @@ $dbh->do($_) for (
     q|INSERT INTO bar VALUES (4,1)|,
 );
 
-END { unlink($fn); }
+END { unlink($fn) unless $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}; }
 
 1
diff --git a/t/lib/make_dbictest_db_multi_unique.pm b/t/lib/make_dbictest_db_multi_unique.pm
new file mode 100644 (file)
index 0000000..ead7b67
--- /dev/null
@@ -0,0 +1,42 @@
+package make_dbictest_db_multi_unique;
+
+use strict;
+use warnings;
+use DBI;
+use dbixcsl_test_dir qw/$tdir/;
+
+eval { require DBD::SQLite };
+my $class = $@ ? 'SQLite2' : 'SQLite';
+
+my $fn = "$tdir/dbictest_multi_unique.db";
+
+unlink($fn);
+our $dsn = "dbi:$class:dbname=$fn";
+my $dbh = DBI->connect($dsn);
+$dbh->do('PRAGMA SYNCHRONOUS = OFF');
+
+$dbh->do($_) for (
+    q|CREATE TABLE foo (
+        fooid INTEGER PRIMARY KEY,
+        footext TEXT DEFAULT 'footext',
+        foodt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+      )|,
+    q|CREATE TABLE bar (
+        barid INTEGER PRIMARY KEY,
+        uniq1 INT UNIQUE,
+        uniq2 INT UNIQUE,
+        fooref INTEGER REFERENCES foo(fooid)
+      )|,
+    q|INSERT INTO foo (fooid, footext) VALUES (1,'Foo text for number 1')|,
+    q|INSERT INTO foo (fooid, footext) VALUES (2,'Foo record associated with the Bar with barid 3')|,
+    q|INSERT INTO foo (fooid, footext) VALUES (3,'Foo text for number 3')|,
+    q|INSERT INTO foo (fooid, footext) VALUES (4,'Foo text for number 4')|,
+    q|INSERT INTO bar VALUES (1,1,1,4)|,
+    q|INSERT INTO bar VALUES (2,2,2,3)|,
+    q|INSERT INTO bar VALUES (3,3,3,2)|,
+    q|INSERT INTO bar VALUES (4,4,4,1)|,
+);
+
+END { unlink($fn) unless $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}; }
+
+1;
index 39b1f7b..b44a5ea 100644 (file)
@@ -35,6 +35,6 @@ $dbh->do($_) for (
     q|INSERT INTO bars VALUES (4,1)|,
 );
 
-END { unlink($fn); }
+END { unlink($fn) unless $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}; }
 
 1;
index a0b47bf..11363d6 100644 (file)
@@ -65,6 +65,6 @@ $dbh->do($_) for (
     q|INSERT INTO RouteChange VALUES (1,1,3)|,
 );
 
-END { unlink($fn); }
+END { unlink($fn) unless $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}; }
 
 1;