[PHP-CVS] cvs: php-src /ext/pdo_pgsql pgsql_driver.c pgsql_statement.c /ext/pdo_pgsql/tests bug44861.phpt

2009-03-27 Thread Matteo Beccati
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

2006-05-08 Thread Ilia Alshanetsky
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

2005-07-08 Thread Ilia Alshanetsky
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

2005-07-01 Thread Edin Kadribasic
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