Changeset 160
- Timestamp:
- 02/10/09 00:06:49 (10 months ago)
- Location:
- trunk
- Files:
-
- 3 modified
-
lib/TheSchwartz.pm (modified) (5 diffs)
-
t/lib/db-common.pl (modified) (2 diffs)
-
t/scoreboard.t (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/TheSchwartz.pm
r152 r160 61 61 my($list) = @_; 62 62 for my $ref (@$list) { 63 my $full = join '|', map { $ref->{$_} || '' } qw( dsn user pass ); 63 my $var; 64 my @parts; 65 if ($ref->{driver}) { 66 my $dbh = tied(%{$ref->{driver}->dbh}); 67 my $dsn = "dbd:".$dbh->{Driver}->{Name}.":".$dbh->{Name}; 68 my $user = $dbh->{Username} || ''; 69 @parts = ($dsn, $user); 70 } else { 71 @parts = map { $ref->{$_} || '' } qw(dsn user); 72 } 73 my $full = join '|', @parts; 64 74 $client->{databases}{ md5_hex($full) } = $ref; 65 75 } … … 77 87 my $db = $client->{databases}{$hashdsn} 78 88 or croak "Ouch, I don't know about a database whose hash is $hashdsn"; 79 $driver = Data::ObjectDriver::Driver::DBI->new( 80 dsn => $db->{dsn}, 81 username => $db->{user}, 82 password => $db->{pass}, 83 ($db->{prefix} ? (prefix => $db->{prefix}) : ()), 84 ); 89 if ($db->{driver}) { 90 $driver = $db->{driver}; 91 } else { 92 $driver = Data::ObjectDriver::Driver::DBI->new( 93 dsn => $db->{dsn}, 94 username => $db->{user}, 95 password => $db->{pass}, 96 ); 97 } 98 $driver->prefix($db->{prefix}) if exists $db->{prefix}; 99 85 100 if ($cache_duration) { 86 101 $client->{cached_drivers}{$hashdsn}{driver} = $driver; … … 828 843 appropriate jobs in the other databases automatically. 829 844 830 Each member of the C<databases> value should be a hashref containing :845 Each member of the C<databases> value should be a hashref containing either: 831 846 832 847 =over 4 … … 843 858 844 859 The password to use when connecting to this database. 860 861 =back 862 863 or 864 865 =over 4 866 867 =item * C<driver> 868 869 A C<Data::ObjectDriver::Driver::DBI> object. 870 871 See note below. 845 872 846 873 =back … … 1046 1073 out of scope) 1047 1074 1075 =head1 PASSING IN AN EXISTING DRIVER 1076 1077 You can pass in a existing C<Data::Object::Driver::DBI> object which also allows you 1078 to reuse exist Database handles like so: 1079 1080 my $dbh = DBI->connect( $dsn, "root", "", { 1081 RaiseError => 1, 1082 PrintError => 0, 1083 AutoCommit => 1, 1084 } ) or die $DBI::errstr; 1085 my $driver = Data::ObjectDriver::Driver::DBI->new( dbh => $dbh); 1086 return TheSchwartz->new(databases => [{ driver => $driver }]); 1087 1088 B<Note>: it's important that the C<RaiseError> and C<AutoCommit> flags are 1089 set on the handle for various bits of functionality to work. 1090 1048 1091 =head1 COPYRIGHT, LICENSE & WARRANTY 1049 1092 -
trunk/t/lib/db-common.pl
r91 r160 53 53 } 54 54 55 return TheSchwartz->new(databases => [ 55 if ($ENV{USE_DBH_FOR_TEST}) { 56 my @tmp; 57 for (@$dbs) { eval { 58 my $dsn = dsn_for($_); 59 my $dbh = DBI->connect( $dsn, "root", "", { 60 RaiseError => 1, 61 PrintError => 0, 62 AutoCommit => 1, 63 } ) or die $DBI::errstr; 64 my $driver = Data::ObjectDriver::Driver::DBI->new( dbh => $dbh); 65 push @tmp, { driver => $driver, prefix => $pfx }; 66 } } 67 return TheSchwartz->new(databases => [@tmp]); 68 } else { 69 return TheSchwartz->new(databases => [ 56 70 map { { 57 71 dsn => dsn_for($_), … … 61 75 } } @$dbs 62 76 ]); 77 } 63 78 } 64 79 -
trunk/t/scoreboard.t
r151 r160 10 10 use TheSchwartz; 11 11 use File::Spec qw(); 12 use File::Temp qw(tempdir); 12 13 # create a tmp directory with a unique name. This stops 13 14 # us conflicting with any other runs of this process and means … … 21 22 setup_dbs({prefix => $pfx}, $dbs); 22 23 23 my $client = TheSchwartz->new(scoreboard => $t mpdir,24 my $client = TheSchwartz->new(scoreboard => $tempdir, 24 25 databases => [ 25 26 map { {
