DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers - CodeRef Transforms for
Contents
Copyright And License
This software is copyright (c) 2024 by Arthur Axel "fREW" Schmidt.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5
programming language system itself.
perl v5.38.2 2024-07-28 DBIx::Class::De...::ScriptHelpers(3pm)
Custom Script Helpers
If you find that in your scripts you need to always pass the same arguments to your script helpers, you
may want to define a custom set of script helpers. I am not sure that there is a better way than just
using Perl and other modules that are already installed when you install DBIx::Class::DeploymentHandler.
The following is a pattern that will get you started; if anyone has ideas on how to make this even easier
let me know.
package MyApp::DBICDH::ScriptHelpers;
use strict;
use warnings;
use DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers
dbh => { -as => '_old_dbh' },
schema_from_schema_loader => { -as => '_old_sfsl' };
use Sub::Exporter::Progressive -setup => {
exports => [qw(dbh schema_from_schema_loader)],
};
sub dbh {
my $coderef = shift;
_old_dbh(sub {
my ($dbh) = @_;
$dbh->do(q(SET search_path TO 'myapp_db'));
$coderef->(@_);
});
}
sub schema_from_schema_loader {
my ($config, $coderef) = @_;
$config->{naming} ||= 'v7';
_old_sfsl(sub {
my ($schema) = @_;
$schema->storage->dbh->do(q(SET search_path TO 'myapp_db'));
$coderef->(@_);
});
}
The above will default the naming to "v7" when using "schema_from_schema_loader". And in both cases it
will set the schema for PostgreSQL. Of course if you do that you will not be able to switch to MySQL or
something else, so I recommended looking into my DBIx::Introspector to only do that for the database in
question.
Description
This package is a set of coderef transforms for common use-cases in migrations. The subroutines are
simply helpers for creating coderefs that will work for "PERL SCRIPTS" in
DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator, yet have some argument other than the
current schema that you as a user might prefer.
Exported Subroutines
dbh($coderef)
dbh(sub {
my ($dbh, $version_set) = @_;
...
});
For those times when you almost exclusively need access to "the bare metal". Simply gives you the
correct database handle and the expected version set.
schema_from_schema_loader($sl_opts,$coderef)
schema_from_schema_loader({ naming => 'v4' }, sub {
my ($schema, $version_set) = @_;
...
});
Any time you write a perl migration script that uses a DBIx::Class::Schema you should probably use this.
Otherwise you'll run into problems if you remove a column from your schema yet still populate to it in an
older population script.
Note that $sl_opts requires that you specify something for the "naming" option.
Name
DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers - CodeRef Transforms for
common use-cases in DBICDH Migrations
Synopsis
use DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers
'schema_from_schema_loader';
schema_from_schema_loader({ naming => 'v4' }, sub {
my ($schema, $version_set) = @_;
...
});
