DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers - CodeRef Transforms for common use-cases in DBICDH Migrations
use DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers 'schema_from_schema_loader'; schema_from_schema_loader({ naming => 'v4' }, sub { my ($schema, $version_set) = @_; ... });
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.
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({ 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.
$sl_opts
naming
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.
v7
schema_from_schema_loader
Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>
This software is copyright (c) 2018 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.
To install DBIx::Class::DeploymentHandler, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DBIx::Class::DeploymentHandler
CPAN shell
perl -MCPAN -e shell install DBIx::Class::DeploymentHandler
For more information on module installation, please visit the detailed CPAN module installation guide.