cvsuser 03/07/17 10:47:51
Modified: P5EEx/Blue/P5EEx/Blue/Repository DBI.pm
Log:
added support for remote databases
Revision Changes Path
1.25 +24 -14 p5ee/P5EEx/Blue/P5EEx/Blue/Repository/DBI.pm
Index: DBI.pm
===================================================================
RCS file: /cvs/public/p5ee/P5EEx/Blue/P5EEx/Blue/Repository/DBI.pm,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -w -r1.24 -r1.25
--- DBI.pm 16 Jul 2003 15:55:18 -0000 1.24
+++ DBI.pm 17 Jul 2003 17:47:51 -0000 1.25
@@ -1,13 +1,13 @@
######################################################################
-## File: $Id: DBI.pm,v 1.24 2003/07/16 15:55:18 spadkins Exp $
+## File: $Id: DBI.pm,v 1.25 2003/07/17 17:47:51 spadkins Exp $
######################################################################
use P5EEx::Blue::P5EE;
use P5EEx::Blue::Repository;
package P5EEx::Blue::Repository::DBI;
-$VERSION = do { my @r=(q$Revision: 1.24 $=~/\d+/g); sprintf "%d."."%02d"x$#r,@r};
+$VERSION = do { my @r=(q$Revision: 1.25 $=~/\d+/g); sprintf "%d."."%02d"x$#r,@r};
@ISA = ( "P5EEx::Blue::Repository" );
@@ -147,7 +147,7 @@
}
else {
my ($var, $capsvar);
- foreach $var qw(dbidriver dbname dbuser dbpass dbioptions dbschema) {
+ foreach $var qw(dbidriver dbname dbuser dbpass dbioptions dbschema dbhost
dbport) {
if (! defined $self->{$var}) {
$capsvar = uc($var);
if ($ENV{$capsvar}) {
@@ -170,29 +170,39 @@
if (!defined $self->{dbh}) {
if (!defined $self->{dsn}) {
- my ($dbidriver, $dbname, $dbuser, $dbpass, $dbioptions, $dbschema);
+ my $dbidriver = $self->{dbidriver};
+ my $dbname = $self->{dbname};
+ my $dbuser = $self->{dbuser};
+ my $dbpass = $self->{dbpass};
+ my $dbschema = $self->{dbschema};
+ my $dbhost = $self->{dbhost};
+ my $dbport = $self->{dbport};
- $dbidriver = $self->{dbidriver};
- $dbname = $self->{dbname};
- $dbuser = $self->{dbuser};
- $dbpass = $self->{dbpass};
- $dbioptions = $self->{dbioptions};
- $dbschema = $self->{dbschema};
-
- die "ERROR: missing DBI driver [$dbidriver] and/or db name [$dbname] in
configuration.\n"
+ die "ERROR: missing DBI driver and/or db name [$dbidriver,$dbname] in
configuration.\n"
if (!$dbidriver || !$dbname);
- $self->{dsn} = "dbi:${dbidriver}:database=${dbname}";
+ my $dsn = "dbi:${dbidriver}:database=${dbname}";
+ $dsn .= ";host=$dbhost" if ($dbhost);
+ $dsn .= ";port=$dbport" if ($dbport); # if $dbhost not supplied,
$dbport is path to Unix socket
+
+ # NOTE: mysql_client_found_rows=true is important for the following
condition.
+ # If an update is executed against a row that exists, but its values do
not change,
+ # MySQL does not ordinarily report this as a row that has been affected
by the
+ # statement. However, we occasionally need to know if the update found
the row.
+ # We really don't care if the values were changed or not. To get this
behavior,
+ # we need to set this option.
# enforce driver-specific rules here
if ($dbidriver eq "mysql") {
# force an update of a row to report that is was found (even if the
values didn't change)
- $self->{dsn} .= ";mysql_client_found_rows=true";
+ $dsn .= ";mysql_client_found_rows=true";
$self->{attr} = { "PrintError" => 0, "AutoCommit" => 1,
"RaiseError" => 0 };
}
else {
$self->{attr} = { "PrintError" => 0, "AutoCommit" => 0,
"RaiseError" => 0 };
}
+
+ $self->{dsn} = $dsn;
}
$self->{dbh} = DBI->connect($self->{dsn}, $self->{dbuser}, $self->{dbpass},
$self->{attr});