From: Ilia Alshanetsky Date: Tue, 19 Sep 2006 15:45:22 +0000 (+0000) Subject: Fixed bug #37870 (pgo_pgsql tries to de-allocate unused statements). X-Git-Tag: php-5.2.0RC5~127 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2332e4f9fc134b2ddec3779bcaf1ea237631b7c2;p=php Fixed bug #37870 (pgo_pgsql tries to de-allocate unused statements). Fixed bug #36681 (pdo_pgsql driver incorrectly ignored some errors). Fixed test for bug #38253 not to use faulty SQL that generates errors in PostgreSQL --- diff --git a/NEWS b/NEWS index 5637b432ec..6f2be7ae6b 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,10 @@ PHP NEWS (Tony) - Fixed bug #38574 (missing curl constants and improper constant detection). (Ilia) +- Fixed bug #37870 (pgo_pgsql tries to de-allocate unused statements). + (Ilia, ce at netage dot bg) +- Fixed bug #36681 (pdo_pgsql driver incorrectly ignored some errors). (Wez, + Ilia) - Fixed bug #34066 (recursive array_walk causes segfault). (Tony) 14 Sep 2006, PHP 5.2.0RC4 diff --git a/ext/pdo/tests/bug_38253.phpt b/ext/pdo/tests/bug_38253.phpt index 713eefb701..6dfdab8df1 100644 --- a/ext/pdo/tests/bug_38253.phpt +++ b/ext/pdo/tests/bug_38253.phpt @@ -15,7 +15,7 @@ require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc'; $pdo = PDOTest::factory(); $pdo->exec ("create table test (id integer primary key, n text)"); -$pdo->exec ("INSERT INTO test (n) VALUES ('hi')"); +$pdo->exec ("INSERT INTO test (id, n) VALUES (1, 'hi')"); $pdo->setAttribute (PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_CLASS); $stmt = $pdo->prepare ("SELECT * FROM test"); @@ -25,7 +25,7 @@ var_dump($stmt->fetchAll()); $pdo = PDOTest::factory(); $pdo->exec ("create table test2 (id integer primary key, n text)"); -$pdo->exec ("INSERT INTO test2 (n) VALUES ('hi')"); +$pdo->exec ("INSERT INTO test2 (id, n) VALUES (1,'hi')"); $pdo->setAttribute (PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_FUNC); $stmt = $pdo->prepare ("SELECT * FROM test2"); diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c index ed28052d2c..11f320e416 100644 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@ -472,6 +472,7 @@ static int pdo_pgsql_transaction_cmd(const char *cmd, pdo_dbh_t *dbh TSRMLS_DC) res = PQexec(H->server, cmd); if (PQresultStatus(res) != PGRES_COMMAND_OK) { + pdo_pgsql_error(dbh, PQresultStatus(res), pdo_pgsql_sqlstate(res)); ret = 0; } diff --git a/ext/pdo_pgsql/pgsql_statement.c b/ext/pdo_pgsql/pgsql_statement.c index a1488b5a39..2821fe880b 100644 --- a/ext/pdo_pgsql/pgsql_statement.c +++ b/ext/pdo_pgsql/pgsql_statement.c @@ -60,10 +60,14 @@ static int pgsql_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC) char *q = NULL; PGresult *res; - spprintf(&q, 0, "DEALLOCATE %s", S->stmt_name); - res = PQexec(H->server, q); - efree(q); - if (res) PQclear(res); + if (S->is_prepared) { + spprintf(&q, 0, "DEALLOCATE %s", S->stmt_name); + res = PQexec(H->server, q); + efree(q); + if (res) { + PQclear(res); + } + } efree(S->stmt_name); S->stmt_name = NULL; }