require SQL::Translator::Diff;
require DBIx::Class::Storage; # loaded for type constraint
use autodie;
+use File::Path;
with 'DBIx::Class::DeploymentHandler::HandlesDeploy';
is => 'rw',
);
-method _ddl_schema_in_filenames($type, $version, $dir) {
- my $filename = ref $self->schema;
- $filename =~ s/::/-/g;
+method __ddl_in_with_prefix($type, $versions, $prefix) {
+ my $base_dir = $self->upgrade_directory;
- my %files;
+ my $main = File::Spec->catfile( $base_dir, $type );
+ my $generic = File::Spec->catfile( $base_dir, '_generic' );
+ my $common = File::Spec->catfile( $base_dir, '_common', $prefix, join q(-), @{$versions} );
- if (-d "$dir/$type") {
- my $dirname = File::Spec->catfile(
- $dir, $type, 'schema', $version, '001-auto.sql'
- );
- opendir my $dh, $dirname;
- %files = map { $_ => "$dirname/$_" } grep { -f "$dirname/$_" } readdir($dh);
- closedir $dh;
-
- } elsif (-d "$dir/_generic") {
- $filename = File::Spec->catfile(
- $dir, '_generic', 'schema', $version, '001-auto.sql'
- );
+ my $dir;
+ if (-d $main) {
+ $dir = File::Spec->catfile($main, $prefix, join q(-), @{$versions})
+ } elsif (-d $generic) {
+ $dir = File::Spec->catfile($main, $prefix, join q(-), @{$versions})
} else {
- $filename = File::Spec->catfile(
- $dir, '_common', 'schema', $version, '001-auto.sql'
- );
+ die 'PREPARE TO SQL'
}
- return [$filename];
-}
+ opendir my($dh), $dir;
+ my %files = map { $_ => "$dir/$_" } grep { /\.sql$/ && -f "$dir/$_" } readdir($dh);
+ closedir $dh;
-method _ddl_schema_out_filename($type, $version, $dir) {
- my $filename = ref $self->schema;
- $filename =~ s/::/-/g;
+ if (-d $common) {
+ opendir my($dh), $common;
+ for my $filename (grep { /\.sql$/ && -f "$common/$_" } readdir($dh)) {
+ unless ($files{$filename}) {
+ $files{$filename} = "$common/$_";
+ }
+ }
+ closedir $dh;
+ }
- $filename = File::Spec->catfile(
- $dir, $type, 'schema', $version, '001-auto.sql'
- );
- );
+ return [@files{sort keys %files}]
+}
- return $filename;
+method _ddl_schema_in_filenames($type, $version) {
+ $self->__ddl_in_with_prefix($type, [ $version ], 'schema')
}
-method _ddl_schema_diff_in_filenames($type, $versions, $dir) {
- my $filename = ref $self->schema;
- $filename =~ s/::/-/g;
+method _ddl_schema_out_filename($type, $version, $dir) {
+ my $dirname = File::Spec->catfile(
+ $dir, $type, 'schema', $version
+ );
+ File::Path::mkpath($dirname) unless -d $dirname;
- $filename = File::Spec->catfile(
- $dir, $type, 'diff', join( q(-), @{$versions} ), '001-auto.sql'
+ return File::Spec->catfile(
+ $dirname, '001-auto.sql'
);
+}
- return [ $filename ];
+method _ddl_schema_diff_in_filenames($type, $versions, $dir) {
+ $self->__ddl_in_with_prefix($type, $versions, 'diff')
}
method _ddl_schema_diff_out_filename($type, $versions, $dir) {
- my $filename = ref $self->schema;
- $filename =~ s/::/-/g;
-
- $filename = File::Spec->catfile(
- $dir, $type, 'diff', join( q(-), @{$versions} ), '001-auto.sql'
+ my $dirname = File::Spec->catfile(
+ $dir, $type, 'diff', join( q(-), @{$versions} )
);
+ File::Path::mkpath($dirname) unless -d $dirname;
- return $filename;
+ return File::Spec->catfile(
+ $dirname, '001-auto.sql'
+ );
}
method _deployment_statements {
my $sqltargs = $self->sqltargs;
my $version = $self->schema_version;
- my @filenames = @{$self->_ddl_schema_in_filenames($type, $version, $dir)};
+ my @filenames = @{$self->_ddl_schema_in_filenames($type, $version)};
for my $filename (@filenames) {
if(-f $filename) {
my @upgrade_files = @{$self->_ddl_schema_diff_in_filenames(
$self->storage->sqlt_type,
\@version_set,
- $self->upgrade_directory,
)};
for my $upgrade_file (@upgrade_files) {