From a396931bbe6c1d67968dae34c1854c8d17fe8c71 Mon Sep 17 00:00:00 2001 From: Denis Smirnov <sd@picodata.io> Date: Fri, 30 Aug 2024 18:02:52 +0700 Subject: [PATCH] fix: check sql statement is not busy on unprepare NO_DOC=internal NO_TEST=internal NO_CHANGELOG=internal --- src/box/errcode.h | 2 +- src/box/execute.c | 9 +++++++++ test/box/error.result | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/box/errcode.h b/src/box/errcode.h index 1044dad736..a3a8bcddf6 100644 --- a/src/box/errcode.h +++ b/src/box/errcode.h @@ -323,7 +323,7 @@ struct errcode_record { /*268 */_(ER_ILLEGAL_OPTIONS, "Illegal options: %s") \ /*269 */_(ER_ILLEGAL_OPTIONS_FORMAT, "Each option in third argument must be a table containing only one key value pair") \ /*270 */_(ER_CANT_GENERATE, "Can't generate %s") \ - /*271 */_(ER_UNUSED5, "") \ + /*271 */_(ER_SQL_STATEMENT_BUSY, "SQL statement %d is busy") \ /*272 */_(ER_SCHEMA_UPGRADE_IN_PROGRESS, "Schema upgrade is already in progress") \ /*273 */_(ER_UNUSED7, "") \ /*274 */_(ER_UNCONFIGURED, "Please call box.cfg{} first") \ diff --git a/src/box/execute.c b/src/box/execute.c index 7da79e6025..0bb678820d 100644 --- a/src/box/execute.c +++ b/src/box/execute.c @@ -195,6 +195,15 @@ sql_unprepare_ext(uint32_t stmt_id, uint64_t session_id) diag_set(ClientError, ER_WRONG_QUERY_ID, stmt_id); return -1; } + struct sql_stmt *stmt = sql_stmt_cache_find(stmt_id); + if (stmt == NULL) { + diag_set(ClientError, ER_WRONG_QUERY_ID, stmt_id); + return -1; + } + if (sql_stmt_busy(stmt)) { + diag_set(ClientError, ER_SQL_STATEMENT_BUSY, stmt_id); + return -1; + } session_remove_stmt_id(session, stmt_id); sql_stmt_unref(stmt_id); return 0; diff --git a/test/box/error.result b/test/box/error.result index da623923a2..b412d3caad 100644 --- a/test/box/error.result +++ b/test/box/error.result @@ -489,6 +489,7 @@ t; | 268: box.error.ILLEGAL_OPTIONS | 269: box.error.ILLEGAL_OPTIONS_FORMAT | 270: box.error.CANT_GENERATE + | 271: box.error.SQL_STATEMENT_BUSY | 272: box.error.SCHEMA_UPGRADE_IN_PROGRESS | 274: box.error.UNCONFIGURED | 278: box.error.IN_ANOTHER_PROMOTE -- GitLab