Test sqlt_deploy_hook on the Schema level
Ash Berlin [Fri, 12 Oct 2007 18:20:43 +0000 (18:20 +0000)]
lib/SQL/Translator/Parser/DBIx/Class.pm
t/86sqlt.t
t/lib/DBICTest/Schema.pm
t/lib/DBICTest/Schema/Artist.pm

index a53a7a5..58d2be9 100644 (file)
@@ -67,8 +67,6 @@ sub parse {
 
     foreach my $moniker (@monikers)
     {
-        #eval "use $tableclass";
-        #print("Can't load $tableclass"), next if($@);
         my $source = $dbixschema->source($moniker);
 
         next if $seen_tables{$source->name}++;
@@ -80,7 +78,7 @@ sub parse {
         my $colcount = 0;
         foreach my $col ($source->columns)
         {
-            # assuming column_info in dbix is the same as DBI (?)
+            # assuming column_info in dbic is the same as DBI (?)
             # data_type is a number, column_type is text?
             my %colinfo = (
               name => $col,
@@ -175,6 +173,11 @@ sub parse {
           $source->result_class->sqlt_deploy_hook($table);
         }
     }
+
+    if ($dbixschema->can('sqlt_deploy_hook')) {
+      $dbixschema->sqlt_deploy_hook($schema);
+    }
+
     return 1;
 }
 
index c70be74..0d3a759 100644 (file)
@@ -10,7 +10,7 @@ plan skip_all => 'SQL::Translator required' if $@;
 
 my $schema = DBICTest->init_schema;
 
-plan tests => 55;
+plan tests => 56;
 
 my $translator = SQL::Translator->new( 
   parser_args => {
@@ -28,7 +28,6 @@ my $output = $translator->translate();
 ok($output, "SQLT produced someoutput")
   or diag($translator->error);
 
-
 # Note that the constraints listed here are the only ones that are tested -- if
 # more exist in the Schema than are listed here and all listed constraints are
 # correct, the test will still pass. If you add a class with UNIQUE or FOREIGN
@@ -224,6 +223,10 @@ my %indexes = (
 
 my $tschema = $translator->schema();
 
+# Test that the $schema->sqlt_deploy_hook was called okay and that it removed
+# the 'link' table
+ok( !defined($tschema->get_table('link')), "Link table was removed by hook");
+
 # Test that nonexistent constraints are not found
 my $constraint = get_constraint('FOREIGN KEY', 'cd', ['title'], 'cd', ['year']);
 ok( !defined($constraint), 'nonexistent FOREIGN KEY constraint not found' );
index b2e4099..979cf84 100644 (file)
@@ -39,4 +39,10 @@ __PACKAGE__->load_classes(qw/
   qw/Owners BooksInLibrary/
 );
 
+sub sqlt_deploy_hook {
+  my ($self, $sqlt_schema) = @_;
+
+  $sqlt_schema->drop_table('link');
+}
+
 1;
index 424fbe9..2221029 100644 (file)
@@ -44,8 +44,11 @@ __PACKAGE__->has_many(
 sub sqlt_deploy_hook {
   my ($self, $sqlt_table) = @_;
 
-  $sqlt_table->add_index( name => 'artist_name', fields => ['name'] )
-    or die $sqlt_table->error;
+
+  if ($sqlt_table->schema->translator->producer_type =~ /SQLite$/ ) {
+    $sqlt_table->add_index( name => 'artist_name', fields => ['name'] )
+      or die $sqlt_table->error;
+  }
 }
 
 1;