Merge branch 'v1.1.x'
[m6w6/ext-pq] / src / php_pqstm.c
index dff5375d973e61f5b40b1ac29190537e06e01279..9e927dc80fdd0747ab5c147e85ccf6adac37d797 100644 (file)
@@ -51,8 +51,8 @@ static void php_pqstm_deallocate(php_pqstm_object_t *obj, zend_bool async, zend_
                        } else {
                                PGresult *res;
 
-                               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 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));
        }
 }
 
@@ -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;
 }
 
@@ -252,7 +255,7 @@ static PHP_METHOD(pqstm, exec) {
                        PGresult *res;
 
                        php_pq_params_set_params(obj->intern->params, zparams ? Z_ARRVAL_P(zparams) : &obj->intern->bound);
-                       res = PQexecPrepared(obj->intern->conn->intern->conn, obj->intern->name, obj->intern->params->param.count, (const char *const*) obj->intern->params->param.strings, NULL, NULL, 0);
+                       res = php_pq_exec_prepared(obj->intern->conn->intern->conn, obj->intern->name, obj->intern->params->param.count, (const char *const*) obj->intern->params->param.strings, NULL, NULL, 0);
                        php_pq_params_set_params(obj->intern->params, NULL);
 
                        if (!res) {
@@ -340,7 +343,7 @@ static PHP_METHOD(pqstm, desc) {
                                                add_next_index_long(return_value, PQparamtype(res, p));
                                        }
                                }
-                               PHP_PQclear(res);
+                               php_pqres_clear(res);
                                php_pqconn_notify_listeners(obj->intern->conn);
                        }
                }
@@ -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);
                        }
                }
        }