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 845C129262 for ; Tue, 27 Aug 2019 09:34:36 -0400 (EDT) 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 eHs5y8Cx1pkN for ; Tue, 27 Aug 2019 09:34:36 -0400 (EDT) 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 35BDF20112 for ; Tue, 27 Aug 2019 09:34:36 -0400 (EDT) From: Nikita Pettik Subject: [tarantool-patches] [PATCH 5/8] sql: move sql_prepare() declaration to box/execute.h Date: Tue, 27 Aug 2019 16:34:26 +0300 Message-Id: <5cb066a8cede9a29a43be1654a9b32ffe9f05706.1566907520.git.korablev@tarantool.org> In-Reply-To: References: 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 Cc: v.shpilevoy@tarantool.org, kostja@tarantool.org, alexander.turenko@tarantool.org, Nikita Pettik We are going to split sql_prepare_and_execute() into several explicit and logically separated steps: 1. sql_prepare() -- compile VDBE byte-code 2. sql_bind() -- bind variables (if there are any) 3. sql_execute() -- query (byte-code) execution in virtual machine For instance, for dry-run we are interested only in query preparation. Contrary, if we had prepared statement cache, we could skip query preparation and handle only bind and execute steps. To avoid inclusion of sql/sqlInt.h header (which gathers almost all SQL specific functions and constants) let's move sql_prepare() to box/execute.h header (which already holds sql_prepare_and_execute()). Needed for #3292 --- src/box/execute.h | 12 ++++++++++++ src/box/sql/analyze.c | 1 + src/box/sql/legacy.c | 1 + src/box/sql/sqlInt.h | 12 ------------ 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/box/execute.h b/src/box/execute.h index 1995c43d5..1b4e14246 100644 --- a/src/box/execute.h +++ b/src/box/execute.h @@ -69,6 +69,18 @@ sql_prepare_and_execute(const char *sql, int len, const struct sql_bind *bind, uint32_t bind_count, struct port *port, struct region *region); +/** + * Prepare (compile into VDBE byte-code) statement. + * + * @param sql UTF-8 encoded SQL statement. + * @param length Length of @param sql in bytes. + * @param[out] stmt A pointer to the prepared statement. + * @param[out] sql_tail End of parsed string. + */ +int +sql_prepare(const char *sql, int length, struct sql_stmt **stmt, + const char **sql_tail); + #if defined(__cplusplus) } /* extern "C" { */ #endif diff --git a/src/box/sql/analyze.c b/src/box/sql/analyze.c index fa3d364e9..7e3ad270e 100644 --- a/src/box/sql/analyze.c +++ b/src/box/sql/analyze.c @@ -106,6 +106,7 @@ */ #include "box/box.h" +#include "box/execute.h" #include "box/index.h" #include "box/key_def.h" #include "box/schema.h" diff --git a/src/box/sql/legacy.c b/src/box/sql/legacy.c index 16507b334..e3a2c77ca 100644 --- a/src/box/sql/legacy.c +++ b/src/box/sql/legacy.c @@ -37,6 +37,7 @@ */ #include "sqlInt.h" +#include "box/execute.h" #include "box/session.h" /* diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h index d2fc76919..7dc0fb8b4 100644 --- a/src/box/sql/sqlInt.h +++ b/src/box/sql/sqlInt.h @@ -447,18 +447,6 @@ typedef void (*sql_destructor_type) (void *); #define SQL_STATIC ((sql_destructor_type)0) #define SQL_TRANSIENT ((sql_destructor_type)-1) -/** - * Prepare (compile into VDBE byte-code) statement. - * - * @param sql UTF-8 encoded SQL statement. - * @param length Length of @param sql in bytes. - * @param[out] stmt A pointer to the prepared statement. - * @param[out] sql_tail End of parsed string. - */ -int -sql_prepare(const char *sql, int length, struct sql_stmt **stmt, - const char **sql_tail); - int sql_step(sql_stmt *); -- 2.15.1