if ($new_version) {
# create versions table and version row
$self->{vschema}->deploy;
- $self->_set_db_version;
+ $self->_set_db_version({ version => $new_version });
}
}
$self->install();
}
+=head2 create_upgrade_path
+
+=over 4
+
+=item Arguments: { upgrade_file => $file }
+
+=back
+
+Virtual method that should be overriden to create an upgrade file.
+This is useful in the case of upgrading across multiple versions
+to concatenate several files to create one upgrade file.
+
+You'll probably want the db_version retrieved via $self->get_db_version
+and the schema_version which is retrieved via $self->schema_version
+
+=cut
+
+sub create_upgrade_path {
+ ## override this method
+}
+
=head2 upgrade
Call this to attempt to upgrade your database from the version it is at to the version
$db_version,
);
+ $self->create_upgrade_path({ upgrade_file => $upgrade_file });
+
unless (-f $upgrade_file) {
warn "Upgrade not possible, no upgrade file found ($upgrade_file), please create one\n";
return;
}
+ warn "\nDB version ($db_version) is lower than the schema version (".$self->schema_version."). Attempting upgrade.\n";
+
# backup if necessary then apply upgrade
$self->_filedata($self->_read_sql_file($upgrade_file));
$self->backup() if($self->do_backup);
for (@statements)
{
$self->storage->debugobj->query_start($_) if $self->storage->debug;
- $self->storage->dbh->do($_) or warn "SQL was:\n $_";
+ $self->apply_statement($_);
$self->storage->debugobj->query_end($_) if $self->storage->debug;
}
return 1;
}
+=head2 apply_statement
+
+Takes an SQL statement and runs it. Override this if you want to handle errors
+differently.
+
+=cut
+
+sub apply_statement {
+ my ($self, $statement) = @_;
+
+ $self->storage->dbh->do($_) or warn "SQL was:\n $_";
+}
+
=head2 get_db_version
Returns the version that your database is currently at. This is determined by the values in the
return;
}
- eval 'require SQL::Translator "0.09"';
+ eval 'require SQL::Translator "0.09003"';
if ($@) {
- $self->throw_exception("SQL::Translator 0.09 required");
+ $self->throw_exception("SQL::Translator 0.09003 required");
}
my $db_tr = SQL::Translator->new({
$db_tr->producer($db);
my $dbic_tr = SQL::Translator->new;
$dbic_tr->parser('SQL::Translator::Parser::DBIx::Class');
- $dbic_tr = $self->storage->configure_sqlt($dbic_tr, $db);
$dbic_tr->data($self);
$dbic_tr->producer($db);
sub _set_db_version {
my $self = shift;
+ my ($params) = @_;
+ $params ||= {};
+ my $version = $params->{version} ? $params->{version} : $self->schema_version;
my $vtable = $self->{vschema}->resultset('Table');
- $vtable->create({ version => $self->schema_version,
+ $vtable->create({ version => $version,
installed => strftime("%Y-%m-%d %H:%M:%S", gmtime())
});