logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers - CodeRef Transforms for

Author

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

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

             ...
          });

See Also