X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-pq;a=blobdiff_plain;f=src%2Fphp_pqres.c;h=b365f3d2e36a1379f40fad1745775550bf4631a2;hp=3b5d6bff0216893b5ff4a6bdd77269e40d193a4c;hb=d613997b3072b8093bca3fe9d8aca115e2a579aa;hpb=9255d2d54bca41644cf3588e4e4259a1855b58d7 diff --git a/src/php_pqres.c b/src/php_pqres.c index 3b5d6bf..b365f3d 100644 --- a/src/php_pqres.c +++ b/src/php_pqres.c @@ -38,7 +38,7 @@ static zend_object_iterator *php_pqres_iterator_init(zend_class_entry *ce, zval iter = ecalloc(1, sizeof(*iter)); iter->zi.funcs = &php_pqres_iterator_funcs; iter->zi.data = object; - Z_ADDREF_P(object); + /* do not addref, because the iterator lives inside this object anyway */ zfetch_type = prop = zend_read_property(ce, object, ZEND_STRL("fetchType"), 0 TSRMLS_CC); if (Z_TYPE_P(zfetch_type) != IS_LONG) { @@ -66,7 +66,6 @@ static void php_pqres_iterator_dtor(zend_object_iterator *i TSRMLS_DC) zval_ptr_dtor(&iter->current_val); iter->current_val = NULL; } - zval_ptr_dtor((zval **) &iter->zi.data); efree(iter); } @@ -273,8 +272,10 @@ void php_pqres_init_instance_data(PGresult *res, php_pqconn_object_t *conn_obj, zend_hash_init(&r->bound, 0, 0, ZVAL_PTR_DTOR, 0); zend_hash_init(&r->converters, 0, 0, ZVAL_PTR_DTOR, 0); zend_hash_copy(&r->converters, &conn_obj->intern->converters, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *)); - php_pqres_create_object_ex(php_pqres_class_entry, r, &obj TSRMLS_CC); + r->default_fetch_type = conn_obj->intern->default_fetch_type; + + php_pqres_create_object_ex(php_pqres_class_entry, r, &obj TSRMLS_CC); PQresultSetInstanceData(res, php_pqconn_event, obj); if (ptr) { @@ -392,7 +393,7 @@ static void php_pqres_object_read_fetch_type(zval *object, void *o, zval *return if (obj->intern->iter) { RETVAL_LONG(obj->intern->iter->fetch_type); } else { - RETVAL_LONG(PHP_PQRES_FETCH_ARRAY); + RETVAL_LONG(obj->intern->default_fetch_type); } } @@ -601,7 +602,7 @@ static PHP_METHOD(pqres, fetchRow) { zval **row = NULL; if (fetch_type == -1) { - fetch_type = obj->intern->iter ? obj->intern->iter->fetch_type : PHP_PQRES_FETCH_ARRAY; + fetch_type = obj->intern->iter ? obj->intern->iter->fetch_type : obj->intern->default_fetch_type; } zend_replace_error_handling(EH_THROW, exce(EX_RUNTIME), &zeh TSRMLS_CC); @@ -761,7 +762,7 @@ static PHP_METHOD(pqres, map) { } if (fetch_type == -1) { - fetch_type = obj->intern->iter ? obj->intern->iter->fetch_type : PHP_PQRES_FETCH_ARRAY; + fetch_type = obj->intern->iter ? obj->intern->iter->fetch_type : obj->intern->default_fetch_type; } if (keys) { @@ -858,7 +859,7 @@ static PHP_METHOD(pqres, fetchAll) { int r, rows = PQntuples(obj->intern->res); if (fetch_type == -1) { - fetch_type = obj->intern->iter ? obj->intern->iter->fetch_type : PHP_PQRES_FETCH_ARRAY; + fetch_type = obj->intern->iter ? obj->intern->iter->fetch_type : obj->intern->default_fetch_type; } array_init(return_value);