]> granicus.if.org Git - php/commitdiff
Adjust for the new get_col api
authorEdin Kadribasic <edink@php.net>
Sun, 6 Feb 2005 22:48:35 +0000 (22:48 +0000)
committerEdin Kadribasic <edink@php.net>
Sun, 6 Feb 2005 22:48:35 +0000 (22:48 +0000)
ext/pdo_pgsql/pgsql_statement.c
ext/pdo_pgsql/php_pdo_pgsql_int.h

index 4d535c55171718363e71993f68144f4de61d650c..78d2cf8d9335eaa8ef49aeba79102abf2b6cf1d1 100644 (file)
 #define OIDOID      26
 
 
-static void _pdo_pgsql_free_lobs(pdo_stmt_t *stmt TSRMLS_DC)
-{
-       pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data;
-       int i;
-
-       for (i=0; i<stmt->column_count; i++) {
-               if (S->cols[i].lobval) {
-                       free(S->cols[i].lobval);
-                       S->cols[i].lobval = NULL;
-                       S->cols[i].lobval = 0;
-               }
-       }
-}
-
 static int pgsql_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
 {
        pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data;
@@ -77,7 +63,6 @@ static int pgsql_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
        }
        
        if(S->cols) {
-               _pdo_pgsql_free_lobs(stmt TSRMLS_CC);
                efree(S->cols);
                S->cols = NULL;
        }
@@ -141,9 +126,6 @@ static int pgsql_stmt_fetch(pdo_stmt_t *stmt,
 {
        pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data;
 
-       /* free any allocated lob objects from the previos fetch operation */
-       _pdo_pgsql_free_lobs(stmt TSRMLS_CC);
-
        if (S->cursor_name) {
                char *ori_str = NULL;
                char *q = NULL;
@@ -224,10 +206,12 @@ static int pgsql_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC)
        return 1;
 }
 
-static int pgsql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned long *len TSRMLS_DC)
+static int pgsql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned long *len, int *caller_frees  TSRMLS_DC)
 {
        pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data;
        struct pdo_column_data *cols = stmt->columns;
+       char *tmp_ptr;
+       size_t tmp_len;
 
        if (!S->result) {
                return 0;
@@ -256,9 +240,11 @@ static int pgsql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned
                                break;
                                
                        case PDO_PARAM_LOB:
-                               S->cols[colno].lobval = PQunescapeBytea(*ptr, &(S->cols[colno].loblen));
-                               *ptr = S->cols[colno].lobval;
-                               *len = S->cols[colno].loblen;
+                               tmp_ptr = PQunescapeBytea(*ptr, &tmp_len);
+                               *ptr = estrndup(tmp_ptr, tmp_len);
+                               *len = tmp_len;
+                               caller_frees = 1;
+                               free(tmp_ptr);
                                break;
                }
        }
index 2955baf2a5f485fccd69c4043d1ff2b1f9207199..ee3e290f83b0e2eec37cee110585ea308ba43b18 100644 (file)
@@ -46,8 +46,6 @@ typedef struct {
        Oid          pgsql_type;
        long         intval;
        zend_bool    boolval;
-       char         *lobval;
-       size_t       loblen;
 } pdo_pgsql_column;
 
 typedef struct {