package DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator;
use Moose;
+
+use autodie;
+use Carp qw( carp croak );
+
use Method::Signatures::Simple;
use Try::Tiny;
+
use SQL::Translator;
require SQL::Translator::Diff;
+
require DBIx::Class::Storage; # loaded for type constraint
-use autodie;
-use File::Path 'mkpath';
use DBIx::Class::DeploymentHandler::Types;
-use File::Spec::Functions;
+use File::Path 'mkpath';
+use File::Spec::Functions;
with 'DBIx::Class::DeploymentHandler::HandlesDeploy';
-use Carp 'carp';
-
has schema => (
isa => 'DBIx::Class::Schema',
is => 'ro',
has _filedata => (
isa => 'ArrayRef[Str]',
is => 'rw',
+ default => sub { [] },
);
has txn_wrap => (
if (-d $main) {
$dir = catfile($main, $prefix, join q(-), @{$versions})
} elsif (-d $generic) {
- $dir = catfile($main, $prefix, join q(-), @{$versions})
+ $dir = catfile($generic, $prefix, join q(-), @{$versions});
} else {
- die 'PREPARE TO SQL'
+ croak "neither $main or $generic exist; please write/generate some SQL";
}
opendir my($dh), $dir;
- my %files = map { $_ => "$dir/$_" } grep { /\.sql$/ && -f "$dir/$_" } readdir($dh);
+ my %files = map { $_ => "$dir/$_" } grep { /\.sql$/ && -f "$dir/$_" } readdir $dh;
closedir $dh;
if (-d $common) {
opendir my($dh), $common;
- for my $filename (grep { /\.sql$/ && -f "$common/$_" } readdir($dh)) {
+ for my $filename (grep { /\.sql$/ && -f catfile($common,$_) } readdir $dh) {
unless ($files{$filename}) {
- $files{$filename} = "$common/$_";
+ $files{$filename} = catfile($common,$filename);
}
}
closedir $dh;
});
my $sqlt_schema = $sqlt->translate( data => $schema )
- or $self->throw_exception($sqlt->error);
+ or croak($sqlt->error);
foreach my $db (@$databases) {
$sqlt->reset;
carp("Failed to translate to $db, skipping. (" . $sqlt->error . ")");
next;
}
- my $file;
- unless( open $file, q(>), $filename ) {
- $self->throw_exception("Can't open $filename for writing ($!)");
- next;
- }
+ open my $file, q(>), $filename;
print {$file} $output;
close $file;
}
sub prepare_upgrade {
my ($self, $from_version, $to_version, $version_set) = @_;
- $from_version ||= $self->db_version;
+ $from_version ||= '1.0'; #$self->database_version;
$to_version ||= $self->schema_version;
# for updates prepared automatically (rob's stuff)
$sqlt->parser('SQL::Translator::Parser::DBIx::Class');
my $sqlt_schema = $sqlt->translate( data => $schema )
- or $self->throw_exception ($sqlt->error);
+ or croak($sqlt->error);
foreach my $db (@$databases) {
$sqlt->reset;
});
$t->parser( $db ) # could this really throw an exception?
- or $self->throw_exception ($t->error);
+ or croak($t->error);
my $out = $t->translate( $prefilename )
- or $self->throw_exception ($t->error);
+ or croak($t->error);
$source_schema = $t->schema;
});
$t->parser( $db ) # could this really throw an exception?
- or $self->throw_exception ($t->error);
+ or croak($t->error);
my $filename = $self->_ddl_schema_produce_filename($db, $to_version, $dir);
my $out = $t->translate( $filename )
- or $self->throw_exception ($t->error);
+ or croak($t->error);
$dest_schema = $t->schema;
$dest_schema, $db,
$sqltargs
);
- my $file;
- unless(open $file, q(>), $diff_file) {
- $self->throw_exception("Can't write to $diff_file ($!)");
- next;
- }
+ open my $file, q(>), $diff_file;
print {$file} $diff;
close $file;
}
method _read_sql_file($file) {
return unless $file;
- open my $fh, '<', $file or carp("Can't open sql file, $file ($!)");
+ open my $fh, '<', $file;
my @data = split /;\n/, join '', <$fh>;
close $fh;
return \@data;
}
-# these are exactly the same for now
sub _downgrade_single_step {
my $self = shift;
my @version_set = @{ shift @_ };
- my @upgrade_files = @{$self->_ddl_schema_up_consume_filenames(
+ my @downgrade_files = @{$self->_ddl_schema_down_consume_filenames(
$self->storage->sqlt_type,
\@version_set,
)};
- for my $upgrade_file (@upgrade_files) {
- unless (-f $upgrade_file) {
- # croak?
- carp "Upgrade not possible, no upgrade file found ($upgrade_file), please create one\n";
- return;
- }
-
- $self->_filedata($self->_read_sql_file($upgrade_file)); # I don't like this --fREW 2010-02-22
+ for my $downgrade_file (@downgrade_files) {
+ $self->_filedata($self->_read_sql_file($downgrade_file)); # I don't like this --fREW 2010-02-22
my $guard = $self->schema->txn_scope_guard if $self->txn_wrap;
$self->_do_upgrade;
\@version_set,
)};
+ my $upgrade_sql;
for my $upgrade_file (@upgrade_files) {
- unless (-f $upgrade_file) {
- # croak?
- carp "Upgrade not possible, no upgrade file found ($upgrade_file), please create one\n";
- return;
- }
-
- $self->_filedata($self->_read_sql_file($upgrade_file)); # I don't like this --fREW 2010-02-22
+ my $up = $self->_read_sql_file($upgrade_file);
+ $upgrade_sql .= $up;
+ $self->_filedata($up); # I don't like this --fREW 2010-02-22
my $guard = $self->schema->txn_scope_guard if $self->txn_wrap;
$self->_do_upgrade;
$guard->commit if $self->txn_wrap;
}
+ return ['', $upgrade_sql];
}
method _do_upgrade { $self->_run_upgrade(qr/.*?/) }
method _run_upgrade($stm) {
- return unless $self->_filedata;
my @statements = grep { $_ =~ $stm } @{$self->_filedata};
for (@statements) {
$self->storage->dbh->do($_) or carp "SQL was: $_"
}
+__PACKAGE__->meta->make_immutable;
+
1;
__END__