From 118696aeeb3bed44f1642e62f8697885b7630a90 Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Wed, 11 Aug 2021 10:13:19 +0200 Subject: [PATCH] fix async queries not cleared prior some sync queries --- src/php_pqconn.c | 6 ++-- src/php_pqconn_event.c | 2 +- tests/async010.phpt | 67 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 tests/async010.phpt diff --git a/src/php_pqconn.c b/src/php_pqconn.c index 3a44a95..6278323 100644 --- a/src/php_pqconn.c +++ b/src/php_pqconn.c @@ -590,7 +590,7 @@ static inline PGresult *unlisten(PGconn *conn, const char *channel_str, size_t c smart_str_appends(&cmd, quoted_channel); smart_str_0(&cmd); - res = PQexec(conn, smart_str_v(&cmd)); + res = php_pq_exec(conn, smart_str_v(&cmd)); smart_str_free(&cmd); PQfreemem(quoted_channel); @@ -990,7 +990,7 @@ static PHP_METHOD(pqconn, notify) { PGresult *res; char *params[2] = {channel_str, message_str}; - res = PQexecParams(obj->intern->conn, "select pg_notify($1, $2)", 2, NULL, (const char *const*) params, NULL, NULL, 0); + res = php_pq_exec_params(obj->intern->conn, "select pg_notify($1, $2)", 2, NULL, (const char *const*) params, NULL, NULL, 0); if (!res) { throw_exce(EX_RUNTIME, "Failed to notify listeners (%s)", PHP_PQerrorMessage(obj->intern->conn)); @@ -1224,7 +1224,7 @@ static PHP_METHOD(pqconn, execParams) { php_pq_params_t *params; params = php_pq_params_init(&obj->intern->converters, ztypes ? Z_ARRVAL_P(ztypes) : NULL, Z_ARRVAL_P(zparams)); - res = PQexecParams(obj->intern->conn, query_str, params->param.count, params->type.oids, (const char *const*) params->param.strings, NULL, NULL, 0); + res = php_pq_exec_params(obj->intern->conn, query_str, params->param.count, params->type.oids, (const char *const*) params->param.strings, NULL, NULL, 0); php_pq_params_free(¶ms); if (!res) { diff --git a/src/php_pqconn_event.c b/src/php_pqconn_event.c index 802a9e4..13e790a 100644 --- a/src/php_pqconn_event.c +++ b/src/php_pqconn_event.c @@ -55,7 +55,7 @@ static inline PGresult *relisten(PGconn *conn, const char *channel_str, size_t c smart_str_appends(&cmd, quoted_channel); smart_str_0(&cmd); - res = PQexec(conn, smart_str_v(&cmd)); + res = php_pq_exec(conn, smart_str_v(&cmd)); smart_str_free(&cmd); PQfreemem(quoted_channel); diff --git a/tests/async010.phpt b/tests/async010.phpt new file mode 100644 index 0000000..8ae089e --- /dev/null +++ b/tests/async010.phpt @@ -0,0 +1,67 @@ +--TEST-- +asnyc query not cleaned before sync exec +--SKIPIF-- + +--FILE-- + $c->execAsync("select clock_timestamp(), pg_sleep(0.1), clock_timestamp()", function($r) { + var_dump([ + "cb" => $r->fetchRow() + ]); + }) +]); + +var_dump([ + "execParams" => $c->execParams("select \$1", [123])->fetchRow() +]); +?> +DONE +--EXPECTF-- +Test +array(1) { + ["async"]=> + NULL +} +array(1) { + ["cb"]=> + array(3) { + [0]=> + object(pq\DateTime)#%d (4) { + ["format"]=> + string(14) "Y-m-d H:i:s.uO" + ["date"]=> + string(26) "%s" + ["timezone_type"]=> + int(1) + ["timezone"]=> + string(6) "%s" + } + [1]=> + string(0) "" + [2]=> + object(pq\DateTime)#%d (4) { + ["format"]=> + string(14) "Y-m-d H:i:s.uO" + ["date"]=> + string(26) "%s" + ["timezone_type"]=> + int(1) + ["timezone"]=> + string(6) "%s" + } + } +} +array(1) { + ["execParams"]=> + array(1) { + [0]=> + string(3) "123" + } +} +DONE \ No newline at end of file -- 2.30.2