From: Rafael Kitover Date: Thu, 6 Aug 2009 15:54:33 +0000 (+0000) Subject: improve the ->name(REF) warning code X-Git-Tag: v0.08109~29^2~3 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=a8fcfb9f520ab32891d79d8e3ff2f48439537372;p=dbsrgits%2FDBIx-Class.git improve the ->name(REF) warning code --- diff --git a/lib/DBIx/Class/Manual/Cookbook.pod b/lib/DBIx/Class/Manual/Cookbook.pod index 8728eb5..0951c49 100644 --- a/lib/DBIx/Class/Manual/Cookbook.pod +++ b/lib/DBIx/Class/Manual/Cookbook.pod @@ -141,6 +141,13 @@ L, ... 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 diff --git a/lib/SQL/Translator/Parser/DBIx/Class.pm b/lib/SQL/Translator/Parser/DBIx/Class.pm index 6e6d193..4e57a47 100644 --- a/lib/SQL/Translator/Parser/DBIx/Class.pm +++ b/lib/SQL/Translator/Parser/DBIx/Class.pm @@ -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 } }