[PHP-CVS] cvs: php-src /ext/pdo_pgsql pgsql_driver.c pgsql_statement.c /ext/pdo_pgsql/tests bug44861.phpt
mbeccatiSat Mar 28 03:01:38 2009 UTC Modified files: /php-src/ext/pdo_pgsql pgsql_driver.c pgsql_statement.c /php-src/ext/pdo_pgsql/testsbug44861.phpt Log: MFB: - Fixed bug #44861 (scrollable cursor don't work with pgsql) http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_pgsql/pgsql_driver.c?r1=1.71r2=1.72diff_format=u Index: php-src/ext/pdo_pgsql/pgsql_driver.c diff -u php-src/ext/pdo_pgsql/pgsql_driver.c:1.71 php-src/ext/pdo_pgsql/pgsql_driver.c:1.72 --- php-src/ext/pdo_pgsql/pgsql_driver.c:1.71 Sat Mar 28 02:34:02 2009 +++ php-src/ext/pdo_pgsql/pgsql_driver.cSat Mar 28 03:01:38 2009 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pgsql_driver.c,v 1.71 2009/03/28 02:34:02 mbeccati Exp $ */ +/* $Id: pgsql_driver.c,v 1.72 2009/03/28 03:01:38 mbeccati Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -232,13 +232,13 @@ if (S-cursor_name) { efree(S-cursor_name); } - /* TODO: check how scrollable cursors related to prepared statements */ spprintf(S-cursor_name, 0, pdo_pgsql_cursor_%08x, (unsigned int) stmt); + emulate = 1; } #if HAVE_PQPREPARE - if (driver_options) { + else if (driver_options) { if (pdo_attr_lval(driver_options, PDO_PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT, 0 TSRMLS_CC) == 1) { emulate = 1; http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_pgsql/pgsql_statement.c?r1=1.51r2=1.52diff_format=u Index: php-src/ext/pdo_pgsql/pgsql_statement.c diff -u php-src/ext/pdo_pgsql/pgsql_statement.c:1.51 php-src/ext/pdo_pgsql/pgsql_statement.c:1.52 --- php-src/ext/pdo_pgsql/pgsql_statement.c:1.51Sat Mar 28 02:34:02 2009 +++ php-src/ext/pdo_pgsql/pgsql_statement.c Sat Mar 28 03:01:38 2009 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pgsql_statement.c,v 1.51 2009/03/28 02:34:02 mbeccati Exp $ */ +/* $Id: pgsql_statement.c,v 1.52 2009/03/28 03:01:38 mbeccati Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -129,6 +129,24 @@ S-current_row = 0; + if (S-cursor_name) { + char *q = NULL; + spprintf(q, 0, DECLARE %s SCROLL CURSOR WITH HOLD FOR %s, S-cursor_name, stmt-active_query_string); + S-result = PQexec(H-server, q); + efree(q); + + /* check if declare failed */ + status = PQresultStatus(S-result); + if (status != PGRES_COMMAND_OK status != PGRES_TUPLES_OK) { + pdo_pgsql_error_stmt(stmt, status, pdo_pgsql_sqlstate(S-result)); + return 0; + } + + /* fetch to be able to get the number of tuples later, but don't advance the cursor pointer */ + spprintf(q, 0, FETCH FORWARD 0 FROM %s, S-cursor_name); + S-result = PQexec(H-server, q); + efree(q); + } else #if HAVE_PQPREPARE if (S-stmt_name) { /* using a prepared statement */ @@ -182,12 +200,7 @@ 0); } else #endif - if (S-cursor_name) { - char *q = NULL; - spprintf(q, 0, DECLARE %s CURSOR FOR %s, S-cursor_name, stmt-active_query_string); - S-result = PQexec(H-server, q); - efree(q); - } else { + { S-result = PQexec(H-server, stmt-active_query_string); } status = PQresultStatus(S-result); @@ -350,19 +363,23 @@ pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt-driver_data; if (S-cursor_name) { - char *ori_str; + char *ori_str = NULL; char *q = NULL; ExecStatusType status; switch (ori) { - case PDO_FETCH_ORI_NEXT:ori_str = FORWARD; break; - case PDO_FETCH_ORI_PRIOR: ori_str = BACKWARD; break; - case PDO_FETCH_ORI_REL: ori_str = RELATIVE; break; + case PDO_FETCH_ORI_NEXT:spprintf(ori_str, 0, NEXT); break; + case PDO_FETCH_ORI_PRIOR: spprintf(ori_str, 0, BACKWARD); break; + case PDO_FETCH_ORI_FIRST: spprintf(ori_str, 0, FIRST); break; + case PDO_FETCH_ORI_LAST:spprintf(ori_str, 0, LAST); break; + case PDO_FETCH_ORI_ABS: spprintf(ori_str, 0, ABSOLUTE %ld, offset); break; + case PDO_FETCH_ORI_REL: spprintf(ori_str, 0, RELATIVE %ld, offset); break; default: return 0; } - spprintf(q, 0, FETCH
[PHP-CVS] cvs: php-src /ext/pdo_pgsql pgsql_driver.c pgsql_statement.c
iliaa Mon May 8 14:33:23 2006 UTC Modified files: /php-src/ext/pdo_pgsql pgsql_driver.c pgsql_statement.c Log: MFB: Fixed memory leaks when working with cursors in PDO PostgreSQL driver. http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo_pgsql/pgsql_driver.c?r1=1.58r2=1.59diff_format=u Index: php-src/ext/pdo_pgsql/pgsql_driver.c diff -u php-src/ext/pdo_pgsql/pgsql_driver.c:1.58 php-src/ext/pdo_pgsql/pgsql_driver.c:1.59 --- php-src/ext/pdo_pgsql/pgsql_driver.c:1.58 Tue Mar 14 11:14:05 2006 +++ php-src/ext/pdo_pgsql/pgsql_driver.cMon May 8 14:33:23 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pgsql_driver.c,v 1.58 2006/03/14 11:14:05 edink Exp $ */ +/* $Id: pgsql_driver.c,v 1.59 2006/05/08 14:33:23 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -155,6 +155,9 @@ PDO_CURSOR_FWDONLY TSRMLS_CC) == PDO_CURSOR_SCROLL; if (scrollable) { + if (S-cursor_name) { + efree(S-cursor_name); + } /* TODO: check how scrollable cursors related to prepared statements */ spprintf(S-cursor_name, 0, pdo_pgsql_cursor_%08x, (unsigned int) stmt); } http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo_pgsql/pgsql_statement.c?r1=1.36r2=1.37diff_format=u Index: php-src/ext/pdo_pgsql/pgsql_statement.c diff -u php-src/ext/pdo_pgsql/pgsql_statement.c:1.36 php-src/ext/pdo_pgsql/pgsql_statement.c:1.37 --- php-src/ext/pdo_pgsql/pgsql_statement.c:1.36Fri Mar 17 22:17:15 2006 +++ php-src/ext/pdo_pgsql/pgsql_statement.c Mon May 8 14:33:23 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: pgsql_statement.c,v 1.36 2006/03/17 22:17:15 tony2001 Exp $ */ +/* $Id: pgsql_statement.c,v 1.37 2006/05/08 14:33:23 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -241,6 +241,7 @@ spprintf(q, 0, FETCH %s %ld FROM %s, ori_str, offset, S-cursor_name); S-result = PQexec(S-H-server, q); + efree(q); status = PQresultStatus(S-result); if (status != PGRES_COMMAND_OK status != PGRES_TUPLES_OK) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo_pgsql pgsql_driver.c pgsql_statement.c
iliaa Sat Jul 9 00:54:07 2005 EDT Modified files: /php-src/ext/pdo_pgsql pgsql_driver.c pgsql_statement.c Log: Added cursor closer handler. Fixed memory leak. http://cvs.php.net/diff.php/php-src/ext/pdo_pgsql/pgsql_driver.c?r1=1.50r2=1.51ty=u Index: php-src/ext/pdo_pgsql/pgsql_driver.c diff -u php-src/ext/pdo_pgsql/pgsql_driver.c:1.50 php-src/ext/pdo_pgsql/pgsql_driver.c:1.51 --- php-src/ext/pdo_pgsql/pgsql_driver.c:1.50 Fri Jul 8 11:27:34 2005 +++ php-src/ext/pdo_pgsql/pgsql_driver.cSat Jul 9 00:54:04 2005 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: pgsql_driver.c,v 1.50 2005/07/08 15:27:34 wez Exp $ */ +/* $Id: pgsql_driver.c,v 1.51 2005/07/09 04:54:04 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -184,6 +184,7 @@ case PGRES_COMMAND_OK: case PGRES_TUPLES_OK: /* it worked */ + PQclear(res); return 1; case PGRES_BAD_RESPONSE: @@ -191,6 +192,7 @@ * PDO emulate it */ efree(S-stmt_name); S-stmt_name = NULL; + PQclear(res); break; default: http://cvs.php.net/diff.php/php-src/ext/pdo_pgsql/pgsql_statement.c?r1=1.29r2=1.30ty=u Index: php-src/ext/pdo_pgsql/pgsql_statement.c diff -u php-src/ext/pdo_pgsql/pgsql_statement.c:1.29 php-src/ext/pdo_pgsql/pgsql_statement.c:1.30 --- php-src/ext/pdo_pgsql/pgsql_statement.c:1.29Fri Jul 8 16:45:19 2005 +++ php-src/ext/pdo_pgsql/pgsql_statement.c Sat Jul 9 00:54:04 2005 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: pgsql_statement.c,v 1.29 2005/07/08 20:45:19 wez Exp $ */ +/* $Id: pgsql_statement.c,v 1.30 2005/07/09 04:54:04 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -498,6 +498,11 @@ return 1; } +static int pdo_pgsql_stmt_cursor_closer(pdo_stmt_t *stmt TSRMLS_DC) +{ + return 1; +} + struct pdo_stmt_methods pgsql_stmt_methods = { pgsql_stmt_dtor, pgsql_stmt_execute, @@ -508,7 +513,8 @@ NULL, /* set_attr */ NULL, /* get_attr */ pgsql_stmt_get_column_meta, - NULL /* next_rowset */ + NULL, /* next_rowset */ + pdo_pgsql_stmt_cursor_closer }; /* -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/pdo_pgsql pgsql_driver.c pgsql_statement.c php_pdo_pgsql_int.h
edink Fri Jul 1 18:30:55 2005 EDT Modified files: /php-src/ext/pdo_pgsql pgsql_driver.c pgsql_statement.c php_pdo_pgsql_int.h Log: Fold PQresultErrorField() into a macro http://cvs.php.net/diff.php/php-src/ext/pdo_pgsql/pgsql_driver.c?r1=1.44r2=1.45ty=u Index: php-src/ext/pdo_pgsql/pgsql_driver.c diff -u php-src/ext/pdo_pgsql/pgsql_driver.c:1.44 php-src/ext/pdo_pgsql/pgsql_driver.c:1.45 --- php-src/ext/pdo_pgsql/pgsql_driver.c:1.44 Fri Jul 1 17:54:50 2005 +++ php-src/ext/pdo_pgsql/pgsql_driver.cFri Jul 1 18:30:55 2005 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: pgsql_driver.c,v 1.44 2005/07/01 21:54:50 edink Exp $ */ +/* $Id: pgsql_driver.c,v 1.45 2005/07/01 22:30:55 edink Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -160,12 +160,7 @@ } else { ExecStatusType qs = PQresultStatus(res); if (qs != PGRES_COMMAND_OK qs != PGRES_TUPLES_OK) { -#if HAVE_PQRESULTERRORFIELD - char * sqlstate = PQresultErrorField(res, PG_DIAG_SQLSTATE); - pdo_pgsql_error(dbh, qs, (const char *)sqlstate); -#else - pdo_pgsql_error(dbh, qs, NULL); -#endif + pdo_pgsql_error(dbh, qs, pdo_pgsql_sqlstate(res)); PQclear(res); return -1; } @@ -232,12 +227,7 @@ id = estrdup((char *)PQgetvalue(res, 0, 0)); *len = PQgetlength(res, 0, 0); } else { -#if HAVE_PQRESULTERRORFIELD - char * sqlstate = PQresultErrorField(res, PG_DIAG_SQLSTATE); - pdo_pgsql_error(dbh, status, (const char *)sqlstate); -#else - pdo_pgsql_error(dbh, status, NULL); -#endif + pdo_pgsql_error(dbh, status, pdo_pgsql_sqlstate(res)); } if (res) { http://cvs.php.net/diff.php/php-src/ext/pdo_pgsql/pgsql_statement.c?r1=1.22r2=1.23ty=u Index: php-src/ext/pdo_pgsql/pgsql_statement.c diff -u php-src/ext/pdo_pgsql/pgsql_statement.c:1.22 php-src/ext/pdo_pgsql/pgsql_statement.c:1.23 --- php-src/ext/pdo_pgsql/pgsql_statement.c:1.22Wed May 18 18:40:56 2005 +++ php-src/ext/pdo_pgsql/pgsql_statement.c Fri Jul 1 18:30:55 2005 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: pgsql_statement.c,v 1.22 2005/05/18 22:40:56 iliaa Exp $ */ +/* $Id: pgsql_statement.c,v 1.23 2005/07/01 22:30:55 edink Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -97,13 +97,7 @@ status = PQresultStatus(S-result); if (status != PGRES_COMMAND_OK status != PGRES_TUPLES_OK) { -#if HAVE_PQRESULTERRORFIELD - char * sqlstate = PQresultErrorField(S-result, PG_DIAG_SQLSTATE); - pdo_pgsql_error_stmt(stmt, status, (const char *)sqlstate); -#else - pdo_pgsql_error_stmt(stmt, status, NULL); -#endif - + pdo_pgsql_error_stmt(stmt, status, pdo_pgsql_sqlstate(S-result)); return 0; } @@ -151,12 +145,7 @@ status = PQresultStatus(S-result); if (status != PGRES_COMMAND_OK status != PGRES_TUPLES_OK) { -#if HAVE_PQRESULTERRORFIELD - char * sqlstate = PQresultErrorField(S-result, PG_DIAG_SQLSTATE); - pdo_pgsql_error_stmt(stmt, status, (const char *)sqlstate); -#else - pdo_pgsql_error_stmt(stmt, status, NULL); -#endif + pdo_pgsql_error_stmt(stmt, status, pdo_pgsql_sqlstate(S-result)); return 0; } http://cvs.php.net/diff.php/php-src/ext/pdo_pgsql/php_pdo_pgsql_int.h?r1=1.10r2=1.11ty=u Index: php-src/ext/pdo_pgsql/php_pdo_pgsql_int.h diff -u php-src/ext/pdo_pgsql/php_pdo_pgsql_int.h:1.10 php-src/ext/pdo_pgsql/php_pdo_pgsql_int.h:1.11 --- php-src/ext/pdo_pgsql/php_pdo_pgsql_int.h:1.10 Tue May 17 16:08:53 2005 +++ php-src/ext/pdo_pgsql/php_pdo_pgsql_int.h Fri Jul 1 18:30:55 2005 @@ -16,12 +16,13 @@ +--+ */ -/* $Id: php_pdo_pgsql_int.h,v 1.10 2005/05/17 20:08:53 iliaa Exp $ */ +/* $Id: php_pdo_pgsql_int.h,v 1.11 2005/07/01 22:30:55 edink Exp $ */ #ifndef PHP_PDO_PGSQL_INT_H #define PHP_PDO_PGSQL_INT_H #include libpq-fe.h +#include php.h #define PHP_PDO_PGSQL_CONNECTION_FAILURE_SQLSTATE 08006 @@ -71,6 +72,12 @@ extern struct pdo_stmt_methods pgsql_stmt_methods; +#ifdef HAVE_PQRESULTERRORFIELD +#define pdo_pgsql_sqlstate(r) PQresultErrorField(r, PG_DIAG_SQLSTATE) +#else +#define pdo_pgsql_sqlstate(r) (const char *)NULL +#endif + #endif /* PHP_PDO_PGSQL_INT_H */ /* -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php