From bc9e41e9b5d06e70330964d94abbab2fabf3ced1 Mon Sep 17 00:00:00 2001 From: Kirill Shcherbatov <kshcherbatov@tarantool.org> Date: Thu, 11 Oct 2018 14:27:22 +0300 Subject: [PATCH] box: store sql text and length in sql_request Refactored sql_request structure to store pointer to sql string data and it's length instead of pointer to msgpack representation. This is required to use this structure in sql.c where the query has a different semantics and can be obtained from stack as a C string. Needed for #3505. --- src/box/execute.c | 6 +++--- src/box/execute.h | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/box/execute.c b/src/box/execute.c index f88572d220..5dc40f6abc 100644 --- a/src/box/execute.c +++ b/src/box/execute.c @@ -284,7 +284,8 @@ xrow_decode_sql(const struct xrow_header *row, struct sql_request *request, if (sql_bind_list_decode(request, value, region) != 0) return -1; } else { - request->sql_text = value; + request->sql_text = + mp_decode_str(&value, &request->sql_text_len); } } if (request->sql_text == NULL) { @@ -594,8 +595,7 @@ sql_prepare_and_execute(const struct sql_request *request, struct sql_response *response, struct region *region) { const char *sql = request->sql_text; - uint32_t len; - sql = mp_decode_str(&sql, &len); + uint32_t len = request->sql_text_len; struct sqlite3_stmt *stmt; sqlite3 *db = sql_get(); if (db == NULL) { diff --git a/src/box/execute.h b/src/box/execute.h index 77bfd7913d..79cee69b27 100644 --- a/src/box/execute.h +++ b/src/box/execute.h @@ -58,6 +58,8 @@ struct sql_request { uint64_t sync; /** SQL statement text. */ const char *sql_text; + /** Length of the SQL statement text. */ + uint32_t sql_text_len; /** Array of parameters. */ struct sql_bind *bind; /** Length of the @bind. */ -- GitLab