prepare v2.2.3
[m6w6/ext-pq] / src / php_pqstm.c
index fbab27e81037f9fe4d0f344b1669493da6086fb3..f421b81b8da8e7362a3b37ff12f821b5b50c02fd 100644 (file)
@@ -52,7 +52,7 @@ static void php_pqstm_deallocate(php_pqstm_object_t *obj, zend_bool async, zend_
                                PGresult *res;
 
                                if ((res = php_pq_exec(obj->intern->conn->intern->conn, smart_str_v(&cmd)))) {
-                                       php_pq_clear_res(res);
+                                       php_pqres_clear(res);
                                } else if (!silent) {
                                        throw_exce(EX_RUNTIME, "Failed to deallocate statement (%s)", PHP_PQerrorMessage(obj->intern->conn->intern->conn));
                                }
@@ -63,6 +63,7 @@ static void php_pqstm_deallocate(php_pqstm_object_t *obj, zend_bool async, zend_
                }
 
                obj->intern->allocated = 0;
+               zend_hash_str_del(&obj->intern->conn->intern->statements, obj->intern->name, strlen(obj->intern->name));
        }
 }
 
@@ -101,21 +102,21 @@ static zend_object *php_pqstm_create_object(zend_class_entry *class_type)
        return &php_pqstm_create_object_ex(class_type, NULL)->zo;
 }
 
-static void php_pqstm_object_read_name(zval *object, void *o, zval *return_value)
+static void php_pqstm_object_read_name(void *o, zval *return_value)
 {
        php_pqstm_object_t *obj = o;
 
        RETVAL_STRING(obj->intern->name);
 }
 
-static void php_pqstm_object_read_connection(zval *object, void *o, zval *return_value)
+static void php_pqstm_object_read_connection(void *o, zval *return_value)
 {
        php_pqstm_object_t *obj = o;
 
        php_pq_object_to_zval(obj->intern->conn, return_value);
 }
 
-static void php_pqstm_object_gc_connection(zval *object, void *o, zval *return_value)
+static void php_pqstm_object_gc_connection(void *o, zval *return_value)
 {
        php_pqstm_object_t *obj = o;
        zval zconn;
@@ -124,14 +125,14 @@ static void php_pqstm_object_gc_connection(zval *object, void *o, zval *return_v
        add_next_index_zval(return_value, &zconn);
 }
 
-static void php_pqstm_object_read_query(zval *object, void *o, zval *return_value)
+static void php_pqstm_object_read_query(void *o, zval *return_value)
 {
        php_pqstm_object_t *obj = o;
 
        RETVAL_STRING(obj->intern->query);
 }
 
-static void php_pqstm_object_read_types(zval *object, void *o, zval *return_value)
+static void php_pqstm_object_read_types(void *o, zval *return_value)
 {
        int i;
        php_pqstm_object_t *obj = o;
@@ -155,6 +156,8 @@ php_pqstm_t *php_pqstm_init(php_pqconn_object_t *conn, const char *name, const c
 
        ZEND_INIT_SYMTABLE(&stm->bound);
 
+       zend_hash_str_add_ptr(&conn->intern->statements, name, strlen(name), stm);
+
        return stm;
 }
 
@@ -272,7 +275,7 @@ ZEND_END_ARG_INFO();
 static PHP_METHOD(pqstm, execAsync) {
        zend_error_handling zeh;
        zval *zparams = NULL;
-       php_pq_callback_t resolver = {{0}};
+       php_pq_callback_t resolver = PHP_PQ_CALLBACK_INIT;
        ZEND_RESULT_CODE rv;
 
        zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh);
@@ -340,7 +343,7 @@ static PHP_METHOD(pqstm, desc) {
                                                add_next_index_long(return_value, PQparamtype(res, p));
                                        }
                                }
-                               php_pq_clear_res(res);
+                               php_pqres_clear(res);
                                php_pqconn_notify_listeners(obj->intern->conn);
                        }
                }
@@ -352,7 +355,7 @@ ZEND_BEGIN_ARG_INFO_EX(ai_pqstm_desc_async, 0, 0, 1)
 ZEND_END_ARG_INFO();
 static PHP_METHOD(pqstm, descAsync) {
        zend_error_handling zeh;
-       php_pq_callback_t resolver = {{0}};
+       php_pq_callback_t resolver = PHP_PQ_CALLBACK_INIT;
        ZEND_RESULT_CODE rv;
 
        zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh);
@@ -410,7 +413,7 @@ static PHP_METHOD(pqstm, deallocateAsync)
        php_pqstm_deallocate_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
 }
 
-static zend_always_inline void php_pqstm_prepare_handler(INTERNAL_FUNCTION_PARAMETERS, zend_bool async)
+static inline void php_pqstm_prepare_handler(INTERNAL_FUNCTION_PARAMETERS, zend_bool async)
 {
        zend_error_handling zeh;
        ZEND_RESULT_CODE rv;
@@ -433,6 +436,9 @@ static zend_always_inline void php_pqstm_prepare_handler(INTERNAL_FUNCTION_PARAM
 
                        if (SUCCESS == rv) {
                                obj->intern->allocated = 1;
+
+                               zend_hash_str_add_ptr(&obj->intern->conn->intern->statements,
+                                               obj->intern->name, strlen(obj->intern->name), obj->intern);
                        }
                }
        }
@@ -453,7 +459,7 @@ static PHP_METHOD(pqstm, prepareAsync)
 }
 
 static zend_function_entry php_pqstm_methods[] = {
-       PHP_ME(pqstm, __construct, ai_pqstm_construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
+       PHP_ME(pqstm, __construct, ai_pqstm_construct, ZEND_ACC_PUBLIC)
        PHP_ME(pqstm, bind, ai_pqstm_bind, ZEND_ACC_PUBLIC)
        PHP_ME(pqstm, deallocate, ai_pqstm_deallocate, ZEND_ACC_PUBLIC)
        PHP_ME(pqstm, deallocateAsync, ai_pqstm_deallocate_async, ZEND_ACC_PUBLIC)
@@ -487,7 +493,7 @@ PHP_MINIT_FUNCTION(pqstm)
        php_pqstm_object_handlers.read_property = php_pq_object_read_prop;
        php_pqstm_object_handlers.write_property = php_pq_object_write_prop;
        php_pqstm_object_handlers.clone_obj = NULL;
-       php_pqstm_object_handlers.get_property_ptr_ptr = NULL;
+       php_pqstm_object_handlers.get_property_ptr_ptr = php_pq_object_get_prop_ptr_null;
        php_pqstm_object_handlers.get_gc = php_pq_object_get_gc;
        php_pqstm_object_handlers.get_properties = php_pq_object_properties;
        php_pqstm_object_handlers.get_debug_info = php_pq_object_debug_info;