From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id AC1F22FAF9 for ; Sat, 17 Nov 2018 09:03:54 -0500 (EST) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5iHzOKzAt49B for ; Sat, 17 Nov 2018 09:03:54 -0500 (EST) Received: from smtpng3.m.smailru.net (smtpng3.m.smailru.net [94.100.177.149]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id 6312D2FB08 for ; Sat, 17 Nov 2018 09:03:54 -0500 (EST) From: imeevma@tarantool.org Subject: [tarantool-patches] [PATCH v1 01/10] box: store sql text and length in sql_request Date: Sat, 17 Nov 2018 17:03:52 +0300 Message-Id: <21dcd5200ae069fe2daede343fbeff9dd691ae62.1542460773.git.imeevma@gmail.com> In-Reply-To: References: Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-help: List-unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-subscribe: List-owner: List-post: List-archive: To: tarantool-patches@freelists.org, v.shpilevoy@tarantool.org 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, 6 insertions(+), 2 deletions(-) diff --git a/src/box/execute.c b/src/box/execute.c index e450444..ce9dd83 100644 --- a/src/box/execute.c +++ b/src/box/execute.c @@ -285,6 +285,9 @@ error: return -1; } else { request->sql_text = value; + request->sql_text = + mp_decode_str(&request->sql_text, + &request->sql_text_len); } } if (request->sql_text == NULL) { @@ -586,8 +589,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 77bfd79..79cee69 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. */ -- 2.7.4