DBIx-Class-Storage-DBI-mysql-backup

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

Revision history for DBIx-Class-Storage-DBI-mysql-backup

0.04    2011-02-02 06:00 +09:00
        Rewrite sub refs out of `import`

0.03    2011-01-14 19:00 +09:00
        Added inc to tarball.
        Fixed testfail when mysqld_safe is not in the PATH.

0.02    2011-01-13 11:00 +09:00
        Removed `use DateTime`.

MANIFEST  view on Meta::CPAN

inc/Module/Install/Metadata.pm
inc/Module/Install/ReadmeFromPod.pm
inc/Module/Install/Win32.pm
inc/Module/Install/WriteAll.pm
inc/Module/Install/ReadmeMarkdownFromPod.pm
inc/Pod/Markdown.pm
Changes
MANIFEST
Makefile.PL
README
lib/DBIx/Class/Storage/DBI/mysql/backup.pm
t/00_basic.t
t/01_filename.t
t/02_backup.t
t/lib/DBICTest/Schema.pm
t/lib/DBICTest/Schema/Artist.pm
t/lib/DBICTest/Schema/CD.pm
t/var/ignoreme
META.yml

META.yml  view on Meta::CPAN

  Test::More: 0
  Test::mysqld: 0
configure_requires:
  ExtUtils::MakeMaker: 6.42
distribution_type: module
generated_by: 'Module::Install version 1.00'
license: perl
meta-spec:
  url: http://module-build.sourceforge.net/META-spec-v1.4.html
  version: 1.4
name: DBIx-Class-Storage-DBI-mysql-backup
no_index:
  directory:
    - inc
    - t
requires:
  DBIx::Class: 0
  DBIx::Class::Storage::DBI::mysql: 0
  FindBin::libs: 0
  MySQL::Backup: 0
  Symbol: 0
resources:
  license: http://dev.perl.org/licenses/
  repository: http://github.com/ngs/p5-dbix-class-storage-dbi-mysql-backup
version: 0.04

Makefile.PL  view on Meta::CPAN

use strict;
use warnings;
use inc::Module::Install;

name          'DBIx-Class-Storage-DBI-mysql-backup';
all_from      'lib/DBIx/Class/Storage/DBI/mysql/backup.pm';
readme_from   'lib/DBIx/Class/Storage/DBI/mysql/backup.pm';
readme_markdown_from 'lib/DBIx/Class/Storage/DBI/mysql/backup.pm';

requires      'DBIx::Class';
requires      'DBIx::Class::Storage::DBI::mysql';
requires      'MySQL::Backup';
requires      'FindBin::libs';
requires      'Symbol';

test_requires 'Test::More';
test_requires 'Test::mysqld';
test_requires 'FindBin::libs';
test_requires 'DBIx::Class::Schema::Versioned';

resources( repository => 'http://github.com/ngs/p5-dbix-class-storage-dbi-mysql-backup' );

WriteAll;

README  view on Meta::CPAN

NAME
    DBIx::Class::Storage::DBI::mysql::backup

SYNOPSIS
        package MyApp::Schema;
        use base qw/DBIx::Class::Schema/;
    
        our $VERSION = 0.001;
    
        __PACKAGE__->load_classes(qw/CD Book DVD/);
        __PACKAGE__->load_components(qw/
            Schema::Versioned
            Storage::DBI::mysql::backup
        /);

DESCRIPTION
    Adds "backup" method to DBIx::Class::Storage::DBI::mysql.

    This plugin enables "backup" in DBIx::Class::Schema::Versioned when
    using MySQL.

FUNCTIONS
  backup ( $to_dir )
    writes SQL file as "backup_filename" to $to_dir. returns SQL filename.

  backup_filename
    returns filename of backup *$DB_NAME-YYYYMMDD-hhmmss.sql*

  dump
    returns dumped SQL

SEE ALSO
    * DBIx::Class::Schema::Versioned

    * MySQL::Backup

AUTHOR

lib/DBIx/Class/Storage/DBI/mysql/backup.pm  view on Meta::CPAN

=encoding utf8

=head1 NAME

DBIx::Class::Storage::DBI::mysql::backup

=head1 SYNOPSIS
    
    package MyApp::Schema;
    use base qw/DBIx::Class::Schema/;
    
    our $VERSION = 0.001;
    
    __PACKAGE__->load_classes(qw/CD Book DVD/);
    __PACKAGE__->load_components(qw/
        Schema::Versioned
        Storage::DBI::mysql::backup
    /);


=head1 DESCRIPTION

Adds C<backup> method to L<DBIx::Class::Storage::DBI::mysql>.

This plugin enables L<DBIx::Class::Schema::Versioned/backup> when using MySQL.


=head1 FUNCTIONS

=cut

package DBIx::Class::Storage::DBI::mysql::backup;

use strict;
use warnings;

use DBIx::Class::Storage::DBI;
use MySQL::Backup;
use File::Path qw/mkpath/;
use Symbol;

use vars qw( $VERSION );
$VERSION = '0.04';


=head2 backup ( $to_dir )

writes SQL file as L</backup_filename> to $to_dir. returns SQL filename.

=cut

sub _backup {
    my ( $self, $dir ) = @_;
    mkpath([$dir]) unless -d $dir;
    my $filename = $self->backup_filename;
    my $fh = Symbol::gensym();
    open  $fh, ">$dir/$filename";
    print $fh $self->dump;
    close $fh;
    $filename
}


=head2 backup_filename

returns filename of backup I<$DB_NAME-YYYYMMDD-hhmmss.sql>

=cut

sub _backup_filename {
    my $self = shift;
    my $dsn = $self->_dbi_connect_info->[0];
    my $dbname = $1 if($dsn =~ /^dbi:mysql:database=([^;]+)/i);
    unless($dbname) {
        $dbname = $1 if($dsn =~ /^dbi:mysql:dbname=([^;]+)/i);
    }
    unless($dbname) {
        $dbname = $1 if($dsn =~ /^dbi:mysql:([^;]+)/i);
    }
    $self->throw_exception("Cannot determine name of mysql database")

lib/DBIx/Class/Storage/DBI/mysql/backup.pm  view on Meta::CPAN


=head2 dump

returns dumped SQL

=cut

sub _dump {
    my $self = shift;
    my $mb = MySQL::Backup->new_from_DBH( $self->dbh ,{'USE_REPLACE' => 1, 'SHOW_TABLE_NAMES' => 1});
    $mb->create_structure() . $mb->data_backup()
}

*DBIx::Class::Storage::DBI::dump = \&_dump;
*DBIx::Class::Storage::DBI::backup = \&_backup;
*DBIx::Class::Storage::DBI::backup_filename = \&_backup_filename;


1;
__END__

=head1 SEE ALSO

=over 2

=item * 

t/00_basic.t  view on Meta::CPAN

use strict;
use warnings;
use FindBin;
use lib "$FindBin::RealBin/../lib";
use Test::More;
use DBIx::Class::Storage::DBI::mysql;

BEGIN { use_ok 'DBIx::Class::Storage::DBI::mysql::backup' }

{
    is ref(DBIx::Class::Storage::DBI::mysql->new->can('backup')), 'CODE', 'ref backup is CODE';
    is ref(DBIx::Class::Storage::DBI::mysql->new->can('backup_filename')), 'CODE', 'ref backup_filename is CODE';
    is ref(DBIx::Class::Storage::DBI::mysql->new->can('dump')), 'CODE', 'ref dump is CODE';
}

done_testing;

t/01_filename.t  view on Meta::CPAN

BEGIN {
    use_ok 'DBICTest::Schema';
}

{
    local $ENV{DBIC_NO_VERSION_CHECK} = 1;

    my $re = qr/test\-\d{8}\-\d{6}\.sql/;
    
    my $filename;
    $filename = DBICTest::Schema->connect('DBI:mysql:test')->storage->backup_filename;
    like
        $filename, $re, '$dsn = "DBI:mysql:$database"';
    
    $filename = DBICTest::Schema->connect('DBI:mysql:test','foo','bar')->storage->backup_filename;
    like
        $filename, $re, '$dsn = "DBI:mysql:$database"';
    
    $filename = DBICTest::Schema->connect('DBI:mysql:database=test;host=127.0.0.1','foo','bar')->storage->backup_filename;
    like
        $filename, $re, '$dsn = "DBI:mysql:database=$database;host=$hostname"';
    
    $filename = DBICTest::Schema->connect('DBI:mysql:dbname=test;host=127.0.0.1','foo','bar')->storage->backup_filename;
    like
        $filename, $re, '$dsn = "DBI:mysql:dbname=$database;host=$hostname"';
    
    $filename = DBICTest::Schema->connect('DBI:mysql:dbname=test;host=127.0.0.1;port=1234','foo','bar')->storage->backup_filename;
    like
        $filename, $re, '$dsn = "DBI:mysql:database=$database;host=$hostname;port=$port"';
    
}

done_testing;

t/02_backup.t  view on Meta::CPAN

        artist => $artist,
    });
    
    my $dump = $schema->storage->dump;
    like $dump, qr/CREATE TABLE `artist`/i, 'has CREATE TABLE `artist`';
    like $dump, qr/CREATE TABLE `cd`/i, 'has CREATE TABLE `cd`';
    like $dump, qr/'album1'/, 'has album1';
    like $dump, qr/'album2'/, 'has album2';
    like $dump, qr/'the great artist'/, 'has the great artist';
    
    my $backup_file = $schema->backup;
    ok $backup_file, "returned file name $backup_file";

    my $dir = $schema->backup_directory;
    my $target = "$dir/$backup_file";
    ok -f $target, "backup file exists to $target";
    my $fh = Symbol::gensym();
    open $fh, $target or fail($!);
    local $/ = undef;
    my $read = <$fh>;
    close $fh;
    is $read, $dump, 'dumped sql file correctly';
    
    rmtree $dir;
}

t/lib/DBICTest/Schema.pm  view on Meta::CPAN


use base qw/DBIx::Class::Schema/;
use FindBin;

our $VERSION = '1.0';

__PACKAGE__->load_namespaces;
__PACKAGE__->load_classes;
__PACKAGE__->load_components(qw/
    Schema::Versioned
    Storage::DBI::mysql::backup
/);

__PACKAGE__->upgrade_directory("$FindBin::RealBin/var/upgrade");
__PACKAGE__->backup_directory("$FindBin::RealBin/var/backup");


1



( run in 1.484 second using v1.01-cache-2.11-cpan-49f99fa48dc )