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) = @_;

     ...
  });

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.

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.

AUTHOR

Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>

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.