Changeset 33708
- Timestamp:
- 06/01/09 20:52:56 (4 years ago)
- Location:
- lang/perl/Data-Model/trunk
- Files:
-
- 3 modified
-
lib/Data/Model/Driver/DBI.pm (modified) (3 diffs)
-
lib/Data/Model/Driver/DBI/MasterSlave.pm (modified) (1 diff)
-
t/030_dbi/master_slave.t (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/Data-Model/trunk/lib/Data/Model/Driver/DBI.pm
r33707 r33708 435 435 sub txn_begin { 436 436 my $self = shift; 437 $self->{active_transaction} = 1; 437 438 my $dbh = $self->rw_handle; 438 439 eval { $dbh->begin_work } or Carp::croak $@; … … 441 442 sub txn_rollback { 442 443 my $self = shift; 444 return unless $self->{active_transaction}; 443 445 my $dbh = $self->rw_handle; 444 446 eval { $dbh->rollback } or Carp::croak $@; … … 447 449 sub txn_commit { 448 450 my $self = shift; 451 return unless $self->{active_transaction}; 449 452 my $dbh = $self->rw_handle; 450 453 eval { $dbh->commit } or Carp::croak $@; 451 454 } 452 455 456 sub txn_end { 457 $_[0]->{active_transaction} = 0; 458 } 459 453 460 1; -
lang/perl/Data-Model/trunk/lib/Data/Model/Driver/DBI/MasterSlave.pm
r32089 r33708 22 22 23 23 sub rw_handle { $_[0]->_get_dbh('master') }; 24 sub r_handle { $_[0]->_get_dbh('slave') }; 24 # トランザクション中は master のみを返す 25 sub r_handle { $_[0]->_get_dbh( $_[0]->{active_transaction} ? 'master' : 'slave' ) }; 25 26 26 27 1; -
lang/perl/Data-Model/trunk/t/030_dbi/master_slave.t
r32089 r33708 22 22 use Data::Model::Schema; 23 23 24 base_driver $driver; 24 25 install_model counter => schema { 25 driver $driver;26 26 key 'id'; 27 27 column id … … 33 33 default => 0, 34 34 }; 35 }; 36 37 install_model user => schema { 38 key 'name'; 39 40 columns qw/ name nickname /; 41 42 schema_options create_sql_attributes => { 43 mysql => 'TYPE=InnoDB', 44 }; 35 45 }; 36 46 } … … 82 92 }; 83 93 } 94 95 sub t_11_transaction : Tests(11) { 96 isnt($model->get_base_driver->rw_handle, $model->get_base_driver->r_handle, 'rw_handle != r_handle'); 97 98 my $scope = $model->txn_scope; 99 is($model->get_base_driver->rw_handle, $model->get_base_driver->r_handle, 'rw_handle == r_handle'); 100 $scope->rollback; 101 isnt($model->get_base_driver->rw_handle, $model->get_base_driver->r_handle, 'rw_handle != r_handle'); 102 103 $model->txn_scope; 104 isnt($model->get_base_driver->rw_handle, $model->get_base_driver->r_handle, 'rw_handle != r_handle'); 105 106 do { 107 my $scope = $model->txn_scope; 108 is($model->get_base_driver->rw_handle, $model->get_base_driver->r_handle, 'rw_handle == r_handle'); 109 }; 110 isnt($model->get_base_driver->rw_handle, $model->get_base_driver->r_handle, 'rw_handle != r_handle'); 111 112 113 $scope = $model->txn_scope; 114 $scope->set( user => { name => 'osawa', nickname => 'yappo' } ); 115 my($get) = $scope->get( user => 'osawa' ); 116 is($get->nickname, 'yappo', 'get from rw_handle'); 117 $scope->commit; 118 isnt($model->get_base_driver->rw_handle, $model->get_base_driver->r_handle, 'rw_handle != r_handle'); 119 120 ($get) = $model->get( user => 'osawa' ); 121 ok(!$get, 'get from r_handle'); 122 123 $scope = $model->txn_scope; 124 ($get) = $scope->get( user => 'osawa' ); 125 is($get->nickname, 'yappo', 'get from rw_handle'); 126 $scope->rollback; 127 128 ($get) = $model->get( user => 'osawa' ); 129 ok(!$get, 'get from r_handle'); 130 } 84 131 } 85 132
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)