improve the ->name(REF) warning code
Rafael Kitover [Thu, 6 Aug 2009 15:54:33 +0000 (15:54 +0000)]
lib/DBIx/Class/Manual/Cookbook.pod
lib/SQL/Translator/Parser/DBIx/Class.pm

index 8728eb5..0951c49 100644 (file)
@@ -141,6 +141,13 @@ L</delete>, ...  on it).
 
 Note that you cannot have bind parameters unless is_virtual is set to true.
 
+If you're using the old C<< $rsrc_instance->name(\'( SELECT ...') >> method for
+custom SQL, you are highly encouraged to update your code to use a virtual view
+as above. Otherwise add the following code so that on C<< ->deploy >> there is
+no attempt to create a table with that name:
+
+  sub sqlt_deploy_hook { $_[1]->schema->drop_table ($_[1]) }
+
 =head2 Using specific columns
 
 When you only want specific columns from a table, you can use
index 6e6d193..4e57a47 100644 (file)
@@ -82,13 +82,8 @@ sub parse {
         my $source = $dbicschema->source($moniker);
         my $table_name = $source->name;
 
-        if (ref $table_name) {
-          if (ref $table_name eq 'SCALAR') {
-            $table_name = $$table_name;
-          } else {
-            next;
-          }
-        }
+        # sqlt currently does not do quoting right anyway
+        $table_name = $$table_name if ref $table_name eq 'SCALAR';
 
         # Its possible to have multiple DBIC sources using the same table
         next if $tables{$table_name};
@@ -258,8 +253,9 @@ 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) {
+      if ($schema->get_table($table) && $table =~ /SELECT \s+/ix) {
         warn <<'EOF';
+
 Custom SQL through ->name(\'( SELECT ...') is DEPRECATED, see the "Arbitrary
 SQL" entry in:
 
@@ -267,10 +263,6 @@ SQL" entry in:
 
 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
       }
     }