Show
Ignore:
Timestamp:
01/29/08 17:45:53 (6 years ago)
Author:
daisuke
Message:

lang/perl/DBIx-Replicate; more refactoring

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/DBIx-Replicate/branch/object-refactor/lib/DBIx/Replicate.pm

    r5791 r5794  
    11# $Id$ 
     2 
    23package DBIx::Replicate; 
    3  
    44use strict; 
    55use warnings; 
     
    1919our $VERSION = '0.01'; 
    2020 
    21 __PACKAGE__->mk_accessors($_) for qw(src dest columns extra_cond); 
     21__PACKAGE__->mk_accessors($_) for qw(src dest columns block extra_cond); 
    2222 
    2323sub new 
     
    2525    my $class = shift; 
    2626    my $args  = shift || {}; 
     27    foreach my $p (qw/src dest columns/) { 
     28        croak "required parameter $p is missing\n" 
     29            unless $args->{$p}; 
     30    } 
     31    $args->{block} ||= 1000; 
     32 
     33    my $self  = $class->SUPER::new({ 
     34        columns => $args->{columns}, 
     35        block   => $args->{block}, 
     36        src     => $args->{src}, 
     37        dest    => $args->{dest}, 
     38        extra_cond => $args->{extra_cond}, 
     39    }); 
     40         
     41    return $self; 
     42} 
     43 
     44 
     45sub dbix_replicate { 
     46    my $args = shift; 
     47 
     48    $args = { %$args }; 
     49 
    2750    foreach my $p (qw/src_table src_conn dest_table dest_conn columns/) { 
    2851        croak "required parameter $p is missing\n" 
    2952            unless $args->{$p}; 
    3053    } 
    31     $args->{block} ||= 1000; 
    32  
    33     my $self  = $class->SUPER::new({ 
    34         columns => $args->{columns}, 
    35         block   => $args->{block}, 
    36         src => DBIx::Replicate::Node->new( { 
    37             table => $args->{src_table}, 
    38             conn  => $args->{src_conn}, 
    39         }), 
    40         dest => DBIx::Replicate::Node->new( { 
    41             table => $args->{dest_table}, 
    42             conn  => $args->{dest_conn} 
    43         }), 
    44  
    45         extra_cond => $args->{extra_cond}, 
     54 
     55    my $src = DBIx::Replicate::Node->new( { 
     56        table => delete $args->{src_table}, 
     57        conn  => delete $args->{src_conn}, 
     58    } ); 
     59    my $dest = DBIx::Replicate::Node->new( { 
     60        table => delete $args->{dest_table}, 
     61        conn  => delete $args->{dest_conn} 
    4662    }); 
    47          
    48     return $self; 
    49 } 
    50  
    51  
    52 sub dbix_replicate { 
    53     my ($args) = @_; 
    54  
    55     my $self = DBIx::Replicate->new($args); 
    56     $self->replicate($args); 
     63    my $dr = DBIx::Replicate->new( { %$args, src => $src, dest => $dest } ); 
     64    $dr->replicate($args); 
    5765} 
    5866 
     
    6573    my $sql; 
    6674     
    67     my $src_table = $self->src->table; 
     75    my $block      = $self->block; 
     76    my $src_table  = $self->src->table; 
    6877    my $dest_table = $self->dest->table; 
    69     my $src_conn = $self->src->conn; 
    70     my $dest_conn = $self->dest->conn; 
     78    my $src_conn   = $self->src->conn; 
     79    my $dest_conn  = $self->dest->conn; 
    7180 
    7281    if ($args->{copy_by}) { 
     
    128137                            @$rows, 
    129138                            0, 
    130                             min(scalar(@$rows), $args->{block}), 
     139                            min(scalar(@$rows), $block), 
    131140                        ), 
    132141                    ); 
     
    157166        my $order_by = $args->{order_by} || join(',', @$pkey); 
    158167         
    159         # copy by 'limit $args->{block}' 
     168        # copy by 'limit $block' 
    160169        my ($start_srcconn, $start_destconn) = qw/1 1/; 
    161170        while (1) { 
    162171            my $start = time; 
    163             $sql = "select $columns_str from $src_table where $start_srcconn $extra_cond order by $order_by limit $args->{block}"; 
     172            $sql = "select $columns_str from $src_table where $start_srcconn $extra_cond order by $order_by limit $block"; 
    164173            my $rows = $src_conn->selectall_arrayref( 
    165174                $sql, 
     
    245254    extra_cond   => 'age<20', 
    246255  }); 
     256 
     257 
     258  # OO interface 
     259  my $dr = DBIx::Replicate->new( 
     260    src => DBIx::Replicate::Node->new(...) 
     261    dest => DBIx::Replicate::Node->new(...) 
     262    strategy => DBIx::Replicate::Strategy::PK->new() 
     263  ); 
     264  $dr->replicate(); 
    247265   
    248266=head1 DESCRIPTION