add warning for custom resultsources through ->name(SCALARREF) on ->deploy
Rafael Kitover [Thu, 6 Aug 2009 15:12:49 +0000 (15:12 +0000)]
lib/SQL/Translator/Parser/DBIx/Class.pm
t/lib/DBICTest/Schema/CustomSql.pm

index 2740760..6e6d193 100644 (file)
@@ -81,7 +81,14 @@ sub parse {
     {
         my $source = $dbicschema->source($moniker);
         my $table_name = $source->name;
-        $table_name = $$table_name if ref $table_name eq 'SCALAR';  #sqlt currently does not do quoting right anyway
+
+        if (ref $table_name) {
+          if (ref $table_name eq 'SCALAR') {
+            $table_name = $$table_name;
+          } else {
+            next;
+          }
+        }
 
         # Its possible to have multiple DBIC sources using the same table
         next if $tables{$table_name};
@@ -250,8 +257,23 @@ sub parse {
     ) {
       $schema->add_table ($tables{$table}{object});
       $tables{$table}{source} -> _invoke_sqlt_deploy_hook( $tables{$table}{object} );
-    }
 
+      if ($schema->get_table($table) && $table =~ /\( \s* SELECT \s+/x) {
+        warn <<'EOF';
+Custom SQL through ->name(\'( SELECT ...') is DEPRECATED, see the "Arbitrary
+SQL" entry in:
+
+  perldoc DBIx::Class::Manual::Cookbook
+
+for the current method of doing this.
+
+To exclude this Result class from ->deploy, add the following to it:
+
+  sub sqlt_deploy_hook { $_[1]->schema->drop_table ($_[1]) }
+
+EOF
+      }
+    }
 
     my %views;
     foreach my $moniker (sort @view_monikers)
index d169d72..bdad8b8 100644 (file)
@@ -12,4 +12,6 @@ __PACKAGE__->result_source_instance->name(\<<SQL);
   WHERE cd.year = ?)
 SQL
 
+sub sqlt_deploy_hook { $_[1]->schema->drop_table($_[1]) }
+
 1;