NAME

    DBIx::Class::DeploymentHandler::CLI - Command line interface for
    deployment handler

VERSION

    Version 0.3.0

SYNOPSIS

    This module provides an command line interface for
    DBIx::Class::DeploymentHandler.

    A sample script using this module looks like:

        #! /usr/bin/env perl
    
        use strict;
        use warnings;
    
        use PerlDance::Schema;
        use DBIx::Class::DeploymentHandler::CLI;
    
        my $schema = PerlDance::Schema->connect('perldance');
    
        my $dh_cli = DBIx::Class::DeploymentHandler::CLI->new(
            schema => $schema,
            databases => 'MySQL',
            args => \@ARGV,
        );
    
        if (my $ret = $dh_cli->run) {
           print $ret, "\n";
        }

    Let's assume that you name the script dh-cli.

    Now you can call the module's methods through commandline parameters:

        ./dh-cli prepare-version-storage
        ./dh-cli install-version-storage

    It doesn't matter whether you use dashes ( - ) or underscores ( _ ) in
    the function name.

BEST PRACTICES

    It is often desirable to follow what DeploymentHandler is doing, thus
    we recommendend to turn on debugging in your dh-cli script:

        BEGIN {
            $ENV{DBICDH_DEBUG} = 1;
        }

Configuration

    We are showing examples for YAML configuration files, but you can also
    use any other format supported by Config::Any.

 Values

    schema_class

    connection

    databases

 Files

    dh-cli.yaml

    ~/.dh-cli.yaml

    /etc/dh-cli.yaml

ATTRIBUTES

 schema

    DBIx::Class::Schema object. This parameter is required.

 databases

    Array reference with database names or single database name as a
    string. This parameter is required.

    It is passed directly to DBIx::Class::DeploymentHandler.

 sql_translator_args

    Hash reference with parameters for SQL::Translator.

    Defaults to:

        {
            add_drop_table => 0,
            producer_args => {
                mysql_version => 5,
            },
        }

    SQL::Translator defaults to use data types for totally outdated
    versions of MySQL, thus we force the major version almost all running
    instances are using.

    This prevents you from ending up with an enum MySQL data type for
    boolean columns in the schema instead of the boolean one supported by
    MySQL 5.

    It is passed directly to DBIx::Class::DeploymentHandler.

 args

    Array reference with commandline parameters.

 config

    Configuration object DBIx::Class::DeploymentHandler::CLI::ConfigReader.
    Created automatically.

 config_files

    Candidates for configuration files to be used instead of the default
    ones.

    Type: array reference.

 run

    Determines method to be run.

 version

    Prints database and schema version.

 database_version

    Retrieves schema version from database.

    Dies if version storage is missing from database.

    Returns 0 if version storage is present, but doesn't contain any
    records.

 schema_version

    Retrieves schema version from schema.

 custom_upgrade_directory

    Returns custom upgrade directory if possible.

 run_custom

    Runs a custom upgrade script.

 install_custom

    Installs a custom upgrade script.

 prepare_version_storage

 install_version_storage

 prepare_upgrade

 upgrade

AUTHOR

    Stefan Hornburg (Racke), <racke at linuxia.de>

BUGS

    Please report any bugs or feature requests at
    https://github.com/interchange/DBIx-Class-DeploymentHandler-CLI/issues

    I will be notified, and then you'll automatically be notified of
    progress on your bug as I make changes.

ACKNOWLEDGEMENTS

    None so far.

LICENSE AND COPYRIGHT

    Copyright 2016-2022 Stefan Hornburg (Racke).

    This program is free software; you can redistribute it and/or modify it
    under the terms of the the Artistic License (2.0). You may obtain a
    copy of the full license at:

    http://www.perlfoundation.org/artistic_license_2_0

    Any use, modification, and distribution of the Standard or Modified
    Versions is governed by this Artistic License. By using, modifying or
    distributing the Package, you accept this license. Do not use, modify,
    or distribute the Package, if you do not accept this license.

    If your Modified Version has been derived from a Modified Version made
    by someone other than you, you are nevertheless required to ensure that
    your Modified Version complies with the requirements of this license.

    This license does not grant you the right to use any trademark, service
    mark, tradename, or logo of the Copyright Holder.

    This license includes the non-exclusive, worldwide, free-of-charge
    patent license to make, have made, use, offer to sell, sell, import and
    otherwise transfer the Package with respect to any patent claims
    licensable by the Copyright Holder that are necessarily infringed by
    the Package. If you institute patent litigation (including a
    cross-claim or counterclaim) against any party alleging that the
    Package constitutes direct or contributory patent infringement, then
    this Artistic License to you shall terminate on the date that such
    litigation is filed.

    Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER
    AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
    THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
    PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY
    YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR
    CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR
    CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE,
    EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

