//???pefree(dbh, dbh->is_persistent);
}
-PDO_API void php_pdo_dbh_addref(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
-{
- dbh->refcount++;
-}
-/* }}} */
-
-PDO_API void php_pdo_dbh_delref(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
-{
- dbh_free(dbh TSRMLS_CC);
-}
-/* }}} */
-
static void pdo_dbh_free_storage(zend_object *std TSRMLS_DC)
{
pdo_dbh_t *dbh = php_pdo_dbh_fetch_object(std);
for (i = 0; i < sizeof(err_initializer)/sizeof(err_initializer[0]); i++) {
info = &err_initializer[i];
- zend_hash_str_add_ptr(&err_hash, info->state, sizeof(info->state), info);
+ zend_hash_str_add_ptr(&err_hash, info->state, sizeof(info->state), (void *)info);
}
return SUCCESS;
static int pgsql_lob_close(php_stream *stream, int close_handle TSRMLS_DC)
{
struct pdo_pgsql_lob_self *self = (struct pdo_pgsql_lob_self*)stream->abstract;
- pdo_dbh_t *dbh = self->dbh;
if (close_handle) {
lo_close(self->conn, self->lfd);
}
+ zval_ptr_dtor(&self->dbh);
efree(self);
- php_pdo_dbh_delref(dbh TSRMLS_CC);
return 0;
}
NULL
};
-php_stream *pdo_pgsql_create_lob_stream(pdo_dbh_t *dbh, int lfd, Oid oid TSRMLS_DC)
+php_stream *pdo_pgsql_create_lob_stream(zval *dbh, int lfd, Oid oid TSRMLS_DC)
{
php_stream *stm;
struct pdo_pgsql_lob_self *self = ecalloc(1, sizeof(*self));
- pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
+ pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)(Z_PDO_DBH_P(dbh))->driver_data;
- self->dbh = dbh;
+ ZVAL_COPY_VALUE(&self->dbh, dbh);
self->lfd = lfd;
self->oid = oid;
self->conn = H->server;
stm = php_stream_alloc(&pdo_pgsql_lob_stream_ops, self, 0, "r+b");
if (stm) {
- php_pdo_dbh_addref(dbh TSRMLS_CC);
+ Z_ADDREF_P(dbh);
return stm;
}
int command_failed = 0;
int buffer_len = 0;
zval *tmp;
- HashPosition pos;
PQclear(pgsql_result);
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pg_rows), &pos);
- while ((tmp = zend_hash_get_current_data_ex(Z_ARRVAL_P(pg_rows), &pos)) != NULL) {
+ ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pg_rows), tmp) {
int query_len;
convert_to_string_ex(tmp);
PDO_HANDLE_DBH_ERR();
RETURN_FALSE;
}
- zend_hash_move_forward_ex(Z_ARRVAL_P(pg_rows), &pos);
- }
+ } ZEND_HASH_FOREACH_END();
if (query) {
efree(query);
}
lfd = lo_open(H->server, oid, mode);
if (lfd >= 0) {
- php_stream *stream = pdo_pgsql_create_lob_stream(dbh, lfd, oid TSRMLS_CC);
+ php_stream *stream = pdo_pgsql_create_lob_stream(getThis(), lfd, oid TSRMLS_CC);
if (stream) {
php_stream_to_zval(stream, return_value);
return;
S->param_types[param->paramno] = OIDOID;
return 1;
} else {
- int len;
-
- SEPARATE_ZVAL_IF_NOT_REF(¶m->parameter);
- Z_TYPE_INFO(param->parameter) = IS_STRING;
-
- if ((Z_STR(param->parameter) = php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0)) == NULL) {
+ zend_string *str = php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0);
+ if (str != NULL) {
+ SEPARATE_ZVAL_IF_NOT_REF(¶m->parameter);
+ ZVAL_STR(¶m->parameter, str);
+ } else {
ZVAL_EMPTY_STRING(¶m->parameter);
}
}
case OIDOID:
/* did the user bind the column as a LOB ? */
if (stmt->bound_columns && (
- (param = zend_hash_index_find(stmt->bound_columns, colno)) != NULL ||
- (param = zend_hash_str_find(stmt->bound_columns, cols[colno].name, cols[colno].namelen)) != NULL)) {
+ (param = zend_hash_index_find_ptr(stmt->bound_columns, colno)) != NULL ||
+ (param = zend_hash_str_find_ptr(stmt->bound_columns, cols[colno].name, cols[colno].namelen)) != NULL)) {
if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB) {
cols[colno].param_type = PDO_PARAM_LOB;
Oid oid = (Oid)strtoul(*ptr, &end_ptr, 10);
int loid = lo_open(S->H->server, oid, INV_READ);
if (loid >= 0) {
- *ptr = (char*)pdo_pgsql_create_lob_stream(stmt->dbh, loid, oid TSRMLS_CC);
+ *ptr = (char*)pdo_pgsql_create_lob_stream(&stmt->database_object_handle, loid, oid TSRMLS_CC);
*len = 0;
return *ptr ? 1 : 0;
}
};
struct pdo_pgsql_lob_self {
- pdo_dbh_t *dbh;
+ zval dbh;
PGconn *conn;
int lfd;
Oid oid;
PGSQL_TRANSACTION_UNKNOWN = PQTRANS_UNKNOWN
};
-php_stream *pdo_pgsql_create_lob_stream(pdo_dbh_t *stmt, int lfd, Oid oid TSRMLS_DC);
+php_stream *pdo_pgsql_create_lob_stream(zval *pdh, int lfd, Oid oid TSRMLS_DC);
extern php_stream_ops pdo_pgsql_lob_stream_ops;
#endif /* PHP_PDO_PGSQL_INT_H */