Committed by Greg Sabino Mullane <[email protected]>

Make sure CREATE TABLE .. AS SELECT returns rows in non do() cases.
Per dicsussion on #postgresql

---
 Changes        |    2 ++
 dbdimp.c       |    9 ++++++---
 t/03dbmethod.t |   13 +++++++++++--
 3 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/Changes b/Changes
index 0232a36..86a410b 100644
--- a/Changes
+++ b/Changes
@@ -4,6 +4,8 @@
 Version ???
 
 
+  - Make sure CREATE TABLE .. AS SELECT returns rows in non do() cases. [GSM]
+
   - Spelling fix per CPAN bug #78168
 
 
diff --git a/dbdimp.c b/dbdimp.c
index ec84e46..d8f4f88 100644
--- a/dbdimp.c
+++ b/dbdimp.c
@@ -3313,7 +3313,8 @@ int dbd_st_execute (SV * sth, imp_sth_t * imp_sth)
                                gotrows = DBDPG_TRUE;
                        }
                        else if (0 == strncmp(cmdStatus, "DELETE", 6)
-                                        || 0 == strncmp(cmdStatus, "UPDATE", 
6)) {
+                                        || 0 == strncmp(cmdStatus, "UPDATE", 6)
+                                        || 0 == strncmp(cmdStatus, "SELECT", 
6)) {
                                ret = atoi(cmdStatus + 7);
                                gotrows = DBDPG_TRUE;
                        }
@@ -3393,8 +3394,9 @@ AV * dbd_st_fetch (SV * sth, imp_sth_t * imp_sth)
                if (TEND_slow) TRC(DBILOGFP, "%sEnd dbd_st_fetch (error: no 
statement)\n", THEADER_slow);
                return Nullav;
        }
-       
+
        TRACE_PQNTUPLES;
+
        if (imp_sth->cur_tuple == imp_sth->rows) {
                if (TRACE5_slow)
                        TRC(DBILOGFP, "%sFetched the last tuple (%d)\n", 
THEADER_slow, imp_sth->cur_tuple);
@@ -4705,7 +4707,8 @@ int pg_db_result (SV *h, imp_dbh_t *imp_dbh)
                                rows = atoi(cmdStatus + 5);
                        }
                        else if (0 == strncmp(cmdStatus, "DELETE", 6)
-                                        || 0 == strncmp(cmdStatus, "UPDATE", 
6)) {
+                                        || 0 == strncmp(cmdStatus, "UPDATE", 6)
+                                        || 0 == strncmp(cmdStatus, "SELECT", 
6)) {
                                rows = atoi(cmdStatus + 7);
                        }
                        break;
diff --git a/t/03dbmethod.t b/t/03dbmethod.t
index 9bcb2ba..fd35d4a 100644
--- a/t/03dbmethod.t
+++ b/t/03dbmethod.t
@@ -26,7 +26,7 @@ my $dbh = connect_database();
 if (! $dbh) {
        plan skip_all => 'Connection to database failed, cannot continue 
testing';
 }
-plan tests => 534;
+plan tests => 535;
 
 isnt ($dbh, undef, 'Connect to database for database handle method testing');
 
@@ -103,9 +103,18 @@ eval {
 };
 like ($@, qr{last_insert_id}, $t);
 
+$SQL = 'CREATE TEMP TABLE foobar AS SELECT * FROM pg_class LIMIT 3';
+
 $t='DB handle method "do" returns correct count with CREATE AS SELECT';
 $dbh->rollback();
-$result = $dbh->do('CREATE TEMP TABLE foobar AS SELECT * FROM pg_class LIMIT 
3');
+$result = $dbh->do($SQL);
+$expected = $pgversion >= 90000 ? 3 : '0E0';
+is ($result, $expected, $t);
+
+$t='DB handle method "execute" returns correct count with CREATE AS SELECT';
+$dbh->rollback();
+$sth = $dbh->prepare($SQL);
+$result = $sth->execute();
 $expected = $pgversion >= 90000 ? 3 : '0E0';
 is ($result, $expected, $t);
 
-- 
1.7.1

Reply via email to