Committed by Greg Sabino Mullane <[email protected]>
Add tests and attribute handlers for $h->{switch_prepared}
---
dbdimp.c | 32 +++++++++++++++++++++++++++++++-
t/02attribs.t | 1 +
t/03smethod.t | 45 ++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 76 insertions(+), 2 deletions(-)
diff --git a/dbdimp.c b/dbdimp.c
index beb07ca..dc680b2 100644
--- a/dbdimp.c
+++ b/dbdimp.c
@@ -785,6 +785,12 @@ SV * dbd_db_FETCH_attrib (SV * dbh, imp_dbh_t * imp_dbh,
SV * keysv)
retsv = newSViv((IV)imp_dbh->pg_server_version);
break;
+ case 18: /* pg_switch_prepared */
+
+ if (strEQ("pg_switch_prepared", key))
+ retsv = newSViv((IV)imp_dbh->switch_prepared);
+ break;
+
case 25: /* pg_placeholder_dollaronly */
if (strEQ("pg_placeholder_dollaronly", key))
@@ -938,6 +944,16 @@ int dbd_db_STORE_attrib (SV * dbh, imp_dbh_t * imp_dbh, SV
* keysv, SV * valuesv
}
break;
+ case 18: /* pg_switch_prepared */
+
+ if (strEQ("pg_switch_prepared", key)) {
+ if (SvOK(valuesv)) {
+ imp_dbh->switch_prepared =
(unsigned)SvIV(valuesv);
+ retval = 1;
+ }
+ }
+ break;
+
case 25: /* pg_placeholder_dollaronly */
if (strEQ("pg_placeholder_dollaronly", key)) {
@@ -1091,6 +1107,12 @@ SV * dbd_st_FETCH_attrib (SV * sth, imp_sth_t * imp_sth,
SV * keysv)
retsv = newSViv((IV)imp_sth->server_prepare);
break;
+ case 18: /* pg_switch_prepared */
+
+ if (strEQ("pg_switch_prepared", key))
+ retsv = newSViv((IV)imp_sth->switch_prepared);
+ break;
+
case 25: /* pg_placeholder_dollaronly */
if (strEQ("pg_placeholder_dollaronly", key))
@@ -1352,7 +1374,7 @@ int dbd_st_STORE_attrib (SV * sth, imp_sth_t * imp_sth,
SV * keysv, SV * valuesv
}
break;
- case 17: /* pg_server_prepare*/
+ case 17: /* pg_server_prepare */
if (strEQ("pg_server_prepare", key)) {
imp_sth->server_prepare = strEQ(value,"0") ?
DBDPG_FALSE : DBDPG_TRUE;
@@ -1360,6 +1382,14 @@ int dbd_st_STORE_attrib (SV * sth, imp_sth_t * imp_sth,
SV * keysv, SV * valuesv
}
break;
+ case 18: /* pg_switch_prepared */
+
+ if (strEQ("pg_switch_prepared", key)) {
+ imp_sth->switch_prepared = (int)SvIV(valuesv);
+ retval = 1;
+ }
+ break;
+
case 25: /* pg_placeholder_dollaronly */
if (strEQ("pg_placeholder_dollaronly", key)) {
diff --git a/t/02attribs.t b/t/02attribs.t
index 5daa333..89cd943 100644
--- a/t/02attribs.t
+++ b/t/02attribs.t
@@ -60,6 +60,7 @@ d Warn
d pg_prepare_now - tested in 03smethod.t
d pg_server_prepare - tested in 03smethod.t
+d pg_switch_prepared - tested in 03smethod.t
d pg_prepare_now - tested in 03smethod.t
d pg_placeholder_dollaronly - tested in 12placeholders.t
diff --git a/t/03smethod.t b/t/03smethod.t
index f3ad929..24a18e1 100644
--- a/t/03smethod.t
+++ b/t/03smethod.t
@@ -21,7 +21,7 @@ my $dbh = connect_database();
if (! $dbh) {
plan skip_all => 'Connection to database failed, cannot continue
testing';
}
-plan tests => 97;
+plan tests => 122;
isnt ($dbh, undef, 'Connect to database for statement handle method testing');
@@ -53,6 +53,49 @@ $sth = $dbh->prepare($SQL);
$sth->execute(1);
ok ($sth->execute, $t);
+$t='Setting database attribute pg_switch_prepared to 7 works';
+$dbh->{pg_switch_prepared} = 7;
+is ($dbh->{pg_switch_prepared}, 7, $t);
+
+$t='Statement handle inherits pg_switch_prepared setting';
+$sth = $dbh->prepare($SQL);
+is ($sth->{pg_switch_prepared}, 7, $t);
+
+$t='Setting statement attribute pg_switch_prepared to 6 works';
+$sth->{pg_switch_prepared} = 6;
+is ($sth->{pg_switch_prepared}, 6, $t);
+
+$t='Running with statement attribute pg_switch_prepared at 6 works';
+for (1..10) {
+ $sth->execute(1);
+ my $it = "$t (run $_ of 10)";
+ ok ($sth->execute, $it);
+}
+
+$t='Running with statement attribute pg_switch_prepared at -1 works';
+$sth->{pg_switch_prepared} = -1;
+for (1..4) {
+ $sth->execute(1);
+ my $it = "$t (run $_ of 4)";
+ ok ($sth->execute, $it);
+}
+
+$t='Running with statement attribute pg_switch_prepared at 0 works';
+$sth->{pg_switch_prepared} = 0;
+for (1..4) {
+ $sth->execute(1);
+ my $it = "$t (run $_ of 4)";
+ ok ($sth->execute, $it);
+}
+
+$t='Running with statement attribute pg_switch_prepared at 1 works';
+$sth->{pg_switch_prepared} = 1;
+for (1..4) {
+ $sth->execute(1);
+ my $it = "$t (run $_ of 4)";
+ ok ($sth->execute, $it);
+}
+
## 7.4 does not have a full SSP implementation, so we simply skip these tests.
if ($pglibversion < 80000) {
SKIP: {
--
1.8.4