Changeset 5794
- Timestamp:
- 01/29/08 17:45:53 (5 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/DBIx-Replicate/branch/object-refactor/lib/DBIx/Replicate.pm
r5791 r5794 1 1 # $Id$ 2 2 3 package DBIx::Replicate; 3 4 4 use strict; 5 5 use warnings; … … 19 19 our $VERSION = '0.01'; 20 20 21 __PACKAGE__->mk_accessors($_) for qw(src dest columns extra_cond);21 __PACKAGE__->mk_accessors($_) for qw(src dest columns block extra_cond); 22 22 23 23 sub new … … 25 25 my $class = shift; 26 26 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 45 sub dbix_replicate { 46 my $args = shift; 47 48 $args = { %$args }; 49 27 50 foreach my $p (qw/src_table src_conn dest_table dest_conn columns/) { 28 51 croak "required parameter $p is missing\n" 29 52 unless $args->{$p}; 30 53 } 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} 46 62 }); 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); 57 65 } 58 66 … … 65 73 my $sql; 66 74 67 my $src_table = $self->src->table; 75 my $block = $self->block; 76 my $src_table = $self->src->table; 68 77 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; 71 80 72 81 if ($args->{copy_by}) { … … 128 137 @$rows, 129 138 0, 130 min(scalar(@$rows), $ args->{block}),139 min(scalar(@$rows), $block), 131 140 ), 132 141 ); … … 157 166 my $order_by = $args->{order_by} || join(',', @$pkey); 158 167 159 # copy by 'limit $ args->{block}'168 # copy by 'limit $block' 160 169 my ($start_srcconn, $start_destconn) = qw/1 1/; 161 170 while (1) { 162 171 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"; 164 173 my $rows = $src_conn->selectall_arrayref( 165 174 $sql, … … 245 254 extra_cond => 'age<20', 246 255 }); 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(); 247 265 248 266 =head1 DESCRIPTION
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)