X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FDeploymentHandler%2FDeployMethod%2FSQL%2FTranslator%2FScriptHelpers.pm;h=90c43ca991a71f2664ac4c1ba4f3a6f722d14851;hb=624e2add2c6d023d22bf7b127b26cc18c16123e2;hp=2bdf7f452450696a38579b619a20ad19934809b0;hpb=3467d1a5f6490810b79a74da040dd28396a9d7c4;p=dbsrgits%2FDBIx-Class-DeploymentHandler.git diff --git a/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator/ScriptHelpers.pm b/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator/ScriptHelpers.pm index 2bdf7f4..90c43ca 100644 --- a/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator/ScriptHelpers.pm +++ b/lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator/ScriptHelpers.pm @@ -1,13 +1,18 @@ package DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers; +# ABSTRACT: CodeRef Transforms for common use-cases in DBICDH Migrations + use strict; use warnings; -use Sub::Exporter -setup => { +use Sub::Exporter::Progressive -setup => { exports => [qw(dbh schema_from_schema_loader)], }; use List::Util 'first'; +use Text::Brew 'distance'; +use Try::Tiny; +use DBIx::Class::DeploymentHandler::LogImporter qw(:dlog); sub dbh { my ($code) = @_; @@ -43,6 +48,10 @@ sub schema_from_schema_loader { warn 'using "current" naming in a deployment script is begging for problems. Just Say No.' if $opts->{naming} eq 'current' || (ref $opts->{naming} eq 'HASH' && first { $_ eq 'current' } values %{$opts->{naming}}); + + $opts->{debug} = 1 + if !exists $opts->{debug} && $ENV{DBICDH_TRACE}; + sub { my ($schema, $versions) = @_; @@ -54,8 +63,33 @@ sub schema_from_schema_loader { my $new_schema = DBIx::Class::Schema::Loader::make_schema_at( 'SHSchema::' . $count++, $opts, \@ci ); + + Dlog_debug { + "schema_from_schema_loader generated the following sources: $_" + } [ $new_schema->sources ]; my $sl_schema = $new_schema->connect(@ci); - $code->($sl_schema, $versions) + try { + $code->($sl_schema, $versions) + } catch { + if (m/Can't find source for (.+?) at/) { + my @presentsources = map { + (distance($_, $1))[0] < 3 ? "$_ <== Possible Match\n" : "$_\n"; + } $sl_schema->sources; + + die <<"ERR"; +$_ +You are seeing this error because the DBIx::Class::ResultSource in your +migration script called "$1" is not part of the schema that ::Schema::Loader +has inferred from your existing database. + +To help you debug this issue, here's a list of the actual sources that the +schema available to your migration knows about: + + @presentsources +ERR + } + die $_; + } } }