X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits%2FDBIx-Class-DeploymentHandler.git;a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FDeploymentHandler%2FDeployMethod%2FSQL%2FTranslator.pm;h=7c0785e5415bac60cc14ad8771a97f5c301d762f;hp=9f9b9714c0c89446595288d32b46084e994df61d;hb=97aa9a748e07c9e5875d56bd7d6554e481911c5d;hpb=870526b16b12b766329625d6316d6270ad7fa329 diff --git a/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator.pm b/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator.pm index 9f9b971..7c0785e 100644 --- a/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator.pm +++ b/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator.pm @@ -1,4 +1,5 @@ package DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator; + use Moose; # ABSTRACT: Manage your SQL and Perl migrations in nicely laid out directories @@ -264,19 +265,20 @@ sub _split_sql_chunk { s/^(?:BEGIN|BEGIN TRANSACTION|COMMIT).*//mgi; # trim whitespaces - s/^\s+|\s+$//mg; + s/^\s+//gm; + s/\s+$//gm; # remove comments s/^--.*//gm; # remove blank lines - s/^\n//mg; + s/^\n//gm; # put on single line s/\n/ /g; } - return @sql; + return grep $_, @sql; } sub _run_sql { @@ -287,6 +289,7 @@ sub _run_sql { sub _load_sandbox { my $_file = shift; + $_file = "$_file"; my $_package = $_file; $_package =~ s/([^A-Za-z0-9_])/sprintf("_%2x", ord($1))/eg; @@ -359,8 +362,9 @@ sub deploy { log_info { "deploying version $version" }; my $sqlt_type = $self->storage->sqlt_type; my $sql; + my $sqltargs = $self->sql_translator_args; if ($self->ignore_ddl) { - $sql = $self->_sql_from_yaml({}, + $sql = $self->_sql_from_yaml($sqltargs, '_ddl_protoschema_deploy_consume_filenames', $sqlt_type ); } @@ -483,10 +487,10 @@ sub _sql_from_yaml { my @sql; my $actual_file = $self->$from_file($version); - for my $yaml_filename (@{ + for my $yaml_filename (@{( DlogS_trace { "generating SQL from Serialized SQL Files: $_" } (ref $actual_file?$actual_file:[$actual_file]) - }) { + )}) { my $sqlt = SQL::Translator->new({ add_drop_table => 0, parser => 'SQL::Translator::Parser::YAML', @@ -589,7 +593,13 @@ sub prepare_deploy { my $self = shift; $self->prepare_protoschema({ # Exclude __VERSION so that it gets installed separately - parser_args => { sources => [grep { $_ ne '__VERSION' } $self->schema->sources], } + parser_args => { + sources => [ + sort { $a cmp $b } + grep { $_ ne '__VERSION' } + $self->schema->sources + ], + } }, '_ddl_protoschema_produce_filename'); $self->_prepare_install({}, '_ddl_protoschema_produce_filename', '_ddl_schema_produce_filename'); } @@ -703,14 +713,13 @@ sub prepare_protoschema { # we do this because the code that uses this sets parser args, # so we just need to merge in the package - $sqltargs->{parser_args}{package} = $self->schema; my $sqlt = SQL::Translator->new({ parser => 'SQL::Translator::Parser::DBIx::Class', producer => 'SQL::Translator::Producer::YAML', %{ $sqltargs }, }); - my $yml = $sqlt->translate; + my $yml = $sqlt->translate(data => $self->schema); croak("Failed to translate to YAML: " . $sqlt->error) unless $yml;