… | |
… | |
44 | use DBI (); |
44 | use DBI (); |
45 | |
45 | |
46 | BEGIN { |
46 | BEGIN { |
47 | use base qw(Exporter DynaLoader); |
47 | use base qw(Exporter DynaLoader); |
48 | |
48 | |
49 | $VERSION = 0.123; |
49 | $VERSION = 0.1241; |
50 | @EXPORT = qw( |
50 | @EXPORT = qw( |
51 | sql_exec sql_fetch sql_fetchall sql_exists sql_insertid $sql_exec |
51 | sql_exec sql_fetch sql_fetchall sql_exists sql_insertid $sql_exec |
52 | sql_uexec sql_ufetch sql_ufetchall sql_uexists |
52 | sql_uexec sql_ufetch sql_ufetchall sql_uexists |
53 | ); |
53 | ); |
54 | @EXPORT_OK = qw( |
54 | @EXPORT_OK = qw( |
… | |
… | |
123 | Examples: |
123 | Examples: |
124 | |
124 | |
125 | # try your luck opening the papp database without access info |
125 | # try your luck opening the papp database without access info |
126 | $dbh = connect_cached __FILE__, "DBI:mysql:papp"; |
126 | $dbh = connect_cached __FILE__, "DBI:mysql:papp"; |
127 | |
127 | |
|
|
128 | Mysql-specific behaviour: The default setting of mysql_client_found_rows |
|
|
129 | is TRUE, you can overwrite this, though. |
|
|
130 | |
128 | =cut |
131 | =cut |
129 | |
132 | |
130 | sub connect_cached { |
133 | sub connect_cached { |
131 | my ($id, $dsn, $user, $pass, $flags, $connect) = @_; |
134 | my ($id, $dsn, $user, $pass, $flags, $connect) = @_; |
132 | # the following line is duplicated in PApp::SQL::Database::new |
135 | # the following line is duplicated in PApp::SQL::Database::new |
133 | $id = "$id\0$dsn\0$user\0$pass"; |
136 | $id = "$id\0$dsn\0$user\0$pass"; |
134 | unless ($dbcache{$id} && $dbcache{$id}->ping) { |
137 | unless ($dbcache{$id} && $dbcache{$id}->ping) { |
135 | #warn "connecting to ($dsn|$user|$pass|$flags)\n";#d# |
|
|
136 | # first, nuke our statement cache (sooory ;) |
138 | # first, nuke our statement cache (sooory ;) |
137 | cachesize cachesize 0; |
139 | cachesize cachesize 0; |
|
|
140 | |
|
|
141 | # then make mysql behave more standardly by default |
|
|
142 | $dsn =~ /^[Dd][Bb][Ii]:mysql:/ |
|
|
143 | and $dsn !~ /;mysql_client_found_rows/ |
|
|
144 | and $dsn .= ";mysql_client_found_rows=1"; |
|
|
145 | |
138 | # then connect anew |
146 | # then connect anew |
139 | $dbcache{$id} = |
147 | $dbcache{$id} = |
140 | eval { DBI->connect($dsn, $user, $pass, $flags) } |
148 | eval { DBI->connect($dsn, $user, $pass, $flags) } |
141 | || eval { DBI->connect($dsn, $user, $pass, $flags) } |
149 | || eval { DBI->connect($dsn, $user, $pass, $flags) } |
142 | || die "unable to connect to database $dsn: $DBI::errstr\n"; |
150 | || die "unable to connect to database $dsn: $DBI::errstr\n"; |