From: Dagfinn Ilmari Mannsåker Date: Mon, 30 Jun 2014 17:15:58 +0000 (+0100) Subject: Factor out quote option handling X-Git-Tag: v0.11021~16^2~15 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=b6fda1d15abec5e34f793a266b139d374bdfa4c3;p=dbsrgits%2FSQL-Translator.git Factor out quote option handling --- diff --git a/lib/SQL/Translator.pm b/lib/SQL/Translator.pm index ce4eebf..9c3e9ec 100644 --- a/lib/SQL/Translator.pm +++ b/lib/SQL/Translator.pm @@ -17,7 +17,7 @@ use IO::Dir; use Sub::Quote qw(quote_sub); use SQL::Translator::Producer; use SQL::Translator::Schema; -use SQL::Translator::Utils qw(throw ex2err carp_ro); +use SQL::Translator::Utils qw(throw ex2err carp_ro normalize_quote_options); $DEFAULT_SUB = sub { $_[0]->schema } unless defined $DEFAULT_SUB; @@ -40,40 +40,7 @@ around BUILDARGS => sub { $config->{filename} ||= $config->{file} if defined $config->{file}; - my $quote; - if (defined $config->{quote_identifiers}) { - $quote = $config->{quote_identifiers}; - - for (qw/quote_table_names quote_field_names/) { - carp "Ignoring deprecated parameter '$_', since 'quote_identifiers' is supplied" - if defined $config->{$_} - } - } - # Legacy one set the other is not - elsif ( - defined $config->{'quote_table_names'} - xor - defined $config->{'quote_field_names'} - ) { - if (defined $config->{'quote_table_names'}) { - carp "Explicitly disabling the deprecated 'quote_table_names' implies disabling 'quote_identifiers' which in turn implies disabling 'quote_field_names'" - unless $config->{'quote_table_names'}; - $quote = $config->{'quote_table_names'} ? 1 : 0; - } - else { - carp "Explicitly disabling the deprecated 'quote_field_names' implies disabling 'quote_identifiers' which in turn implies disabling 'quote_table_names'" - unless $config->{'quote_field_names'}; - $quote = $config->{'quote_field_names'} ? 1 : 0; - } - } - # Legacy both are set - elsif(defined $config->{'quote_table_names'}) { - croak 'Setting quote_table_names and quote_field_names to conflicting values is no longer supported' - if ($config->{'quote_table_names'} xor $config->{'quote_field_names'}); - - $quote = $config->{'quote_table_names'} ? 1 : 0; - } - + my $quote = normalize_quote_options($config); $config->{quote_identifiers} = $quote if defined $quote; return $config; diff --git a/lib/SQL/Translator/Utils.pm b/lib/SQL/Translator/Utils.pm index 1966e81..d0ac9cc 100644 --- a/lib/SQL/Translator/Utils.pm +++ b/lib/SQL/Translator/Utils.pm @@ -6,7 +6,7 @@ use Digest::SHA qw( sha1_hex ); use File::Spec; use Scalar::Util qw(blessed); use Try::Tiny; -use Carp qw(carp); +use Carp qw(carp croak); our $VERSION = '1.59'; our $DEFAULT_COMMENT = '-- '; @@ -17,6 +17,7 @@ our @EXPORT_OK = qw( $DEFAULT_COMMENT parse_mysql_version parse_dbms_version ddl_parser_instance batch_alter_table_statements throw ex2err carp_ro + normalize_quote_options ); use constant COLLISION_TAG_LENGTH => 8; @@ -60,6 +61,46 @@ sub normalize_name { return $name; } +sub normalize_quote_options { + my $config = shift; + + my $quote; + if (defined $config->{quote_identifiers}) { + $quote = $config->{quote_identifiers}; + + for (qw/quote_table_names quote_field_names/) { + carp "Ignoring deprecated parameter '$_', since 'quote_identifiers' is supplied" + if defined $config->{$_} + } + } + # Legacy one set the other is not + elsif ( + defined $config->{'quote_table_names'} + xor + defined $config->{'quote_field_names'} + ) { + if (defined $config->{'quote_table_names'}) { + carp "Explicitly disabling the deprecated 'quote_table_names' implies disabling 'quote_identifiers' which in turn implies disabling 'quote_field_names'" + unless $config->{'quote_table_names'}; + $quote = $config->{'quote_table_names'} ? 1 : 0; + } + else { + carp "Explicitly disabling the deprecated 'quote_field_names' implies disabling 'quote_identifiers' which in turn implies disabling 'quote_table_names'" + unless $config->{'quote_field_names'}; + $quote = $config->{'quote_field_names'} ? 1 : 0; + } + } + # Legacy both are set + elsif(defined $config->{'quote_table_names'}) { + croak 'Setting quote_table_names and quote_field_names to conflicting values is no longer supported' + if ($config->{'quote_table_names'} xor $config->{'quote_field_names'}); + + $quote = $config->{'quote_table_names'} ? 1 : 0; + } + + return $quote; +} + sub header_comment { my $producer = shift || caller; my $comment_char = shift;