X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-pq;a=blobdiff_plain;f=src%2Fphp_pqcur.c;h=6dcd83e3823222ba63678ca7bd9e3395f5da3315;hp=be6443d4fe6715c607bfff64818b6dbc44199a58;hb=7ebb278e7854e8dd7c4fd6c0363531642d135676;hpb=6e28a8741be3fccdaca960e492c31bc26837a4ed diff --git a/src/php_pqcur.c b/src/php_pqcur.c index be6443d..6dcd83e 100644 --- a/src/php_pqcur.c +++ b/src/php_pqcur.c @@ -47,8 +47,8 @@ static void cur_close(php_pqcur_object_t *obj, zend_bool async, zend_bool silent throw_exce(EX_IO, "Failed to close cursor (%s)", PHP_PQerrorMessage(obj->intern->conn->intern->conn)); } } else { - if ((res = PQexec(obj->intern->conn->intern->conn, smart_str_v(&cmd)))) { - PHP_PQclear(res); + if ((res = php_pq_exec(obj->intern->conn->intern->conn, smart_str_v(&cmd)))) { + php_pqres_clear(res); } else if (!silent) { throw_exce(EX_RUNTIME, "Failed to close cursor (%s)", PHP_PQerrorMessage(obj->intern->conn->intern->conn)); } @@ -133,7 +133,7 @@ static void cur_fetch_or_move(INTERNAL_FUNCTION_PARAMETERS, const char *action, obj->intern->conn->intern->poller = PQconsumeInput; } } else { - PGresult *res = PQexec(obj->intern->conn->intern->conn, smart_str_v(&cmd)); + PGresult *res = php_pq_exec(obj->intern->conn->intern->conn, smart_str_v(&cmd)); if (!res) { throw_exce(EX_RUNTIME, "Failed to %s cursor (%s)", *action == 'f' ? "fetch from" : "move in", PHP_PQerrorMessage(obj->intern->conn->intern->conn)); @@ -152,7 +152,7 @@ static void php_pqcur_object_free(zend_object *o) { php_pqcur_object_t *obj = PHP_PQ_OBJ(NULL, o); #if DBG_GC - fprintf(stderr, "FREE cur(#%d) %p (conn: %p)\n", obj->zv.handle, obj, obj->intern->conn); + fprintf(stderr, "FREE cur(#%d) %p (conn: %p)\n", obj->zo.handle, obj, obj->intern->conn); #endif if (obj->intern) { cur_close(obj, 0, 1); @@ -162,26 +162,13 @@ static void php_pqcur_object_free(zend_object *o) efree(obj->intern); obj->intern = NULL; } - zend_object_std_dtor(o); - efree(obj); + php_pq_object_dtor(o); } php_pqcur_object_t *php_pqcur_create_object_ex(zend_class_entry *ce, php_pqcur_t *intern) { - php_pqcur_object_t *o; - - o = ecalloc(1, sizeof(*o) + zend_object_properties_size(ce)); - zend_object_std_init(&o->zo, ce); - object_properties_init(&o->zo, ce); - o->prophandler = &php_pqcur_object_prophandlers; - - if (intern) { - o->intern = intern; - } - - o->zo.handlers = &php_pqcur_object_handlers; - - return o; + return php_pq_object_create(ce, intern, sizeof(php_pqcur_object_t), + &php_pqcur_object_handlers, &php_pqcur_object_prophandlers); } static zend_object *php_pqcur_create_object(zend_class_entry *class_type) @@ -203,6 +190,15 @@ static void php_pqcur_object_read_connection(zval *object, void *o, zval *return php_pq_object_to_zval(obj->intern->conn, return_value); } +static void php_pqcur_object_gc_connection(zval *object, void *o, zval *return_value) +{ + php_pqcur_object_t *obj = o; + zval zconn; + + php_pq_object_to_zval_no_addref(obj->intern->conn, &zconn); + add_next_index_zval(return_value, &zconn); +} + static void php_pqcur_object_read_query(zval *object, void *o, zval *return_value) { php_pqcur_object_t *obj = o; @@ -404,7 +400,7 @@ static PHP_METHOD(pqcur, moveAsync) } static zend_function_entry php_pqcur_methods[] = { - PHP_ME(pqcur, __construct, ai_pqcur___construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) + PHP_ME(pqcur, __construct, ai_pqcur___construct, ZEND_ACC_PUBLIC) PHP_ME(pqcur, open, ai_pqcur_open, ZEND_ACC_PUBLIC) PHP_ME(pqcur, openAsync, ai_pqcur_openAsync, ZEND_ACC_PUBLIC) PHP_ME(pqcur, close, ai_pqcur_close, ZEND_ACC_PUBLIC) @@ -437,12 +433,12 @@ PHP_MINIT_FUNCTION(pqcur) php_pqcur_object_handlers.read_property = php_pq_object_read_prop; php_pqcur_object_handlers.write_property = php_pq_object_write_prop; php_pqcur_object_handlers.clone_obj = NULL; - php_pqcur_object_handlers.get_property_ptr_ptr = NULL; - php_pqcur_object_handlers.get_gc = NULL; + php_pqcur_object_handlers.get_property_ptr_ptr = php_pq_object_get_prop_ptr_null; + php_pqcur_object_handlers.get_gc = php_pq_object_get_gc; php_pqcur_object_handlers.get_properties = php_pq_object_properties; php_pqcur_object_handlers.get_debug_info = php_pq_object_debug_info; - zend_hash_init(&php_pqcur_object_prophandlers, 4, NULL, NULL, 1); + zend_hash_init(&php_pqcur_object_prophandlers, 4, NULL, php_pq_object_prophandler_dtor, 1); zend_declare_class_constant_long(php_pqcur_class_entry, ZEND_STRL("BINARY"), PHP_PQ_DECLARE_BINARY); zend_declare_class_constant_long(php_pqcur_class_entry, ZEND_STRL("INSENSITIVE"), PHP_PQ_DECLARE_INSENSITIVE); @@ -456,13 +452,15 @@ PHP_MINIT_FUNCTION(pqcur) zend_declare_property_null(php_pqcur_class_entry, ZEND_STRL("connection"), ZEND_ACC_PUBLIC); ph.read = php_pqcur_object_read_connection; + ph.gc = php_pqcur_object_gc_connection; zend_hash_str_add_mem(&php_pqcur_object_prophandlers, "connection", sizeof("connection")-1, (void *) &ph, sizeof(ph)); + ph.gc = NULL; zend_declare_property_null(php_pqcur_class_entry, ZEND_STRL("query"), ZEND_ACC_PUBLIC); ph.read = php_pqcur_object_read_query; zend_hash_str_add_mem(&php_pqcur_object_prophandlers, "query", sizeof("query")-1, (void *) &ph, sizeof(ph)); - zend_declare_property_null(php_pqcur_class_entry, ZEND_STRL("flags"), ZEND_ACC_PUBLIC TSRMLS_CC); + zend_declare_property_null(php_pqcur_class_entry, ZEND_STRL("flags"), ZEND_ACC_PUBLIC); ph.read = php_pqcur_object_read_flags; zend_hash_str_add_mem(&php_pqcur_object_prophandlers, "flags", sizeof("flags")-1, (void *) &ph, sizeof(ph));