From: Nikita Pettik <korablev@tarantool.org> To: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH v3 00/20] sql: prepared statements Date: Fri, 20 Dec 2019 15:47:05 +0300 [thread overview] Message-ID: <cover.1576844631.git.korablev@tarantool.org> (raw) Branch: https://github.com/tarantool/tarantool/tree/np/gh-2592-prepared-statements-v3 Issue: https://github.com/tarantool/tarantool/issues/2592 V1: https://lists.tarantool.org/pipermail/tarantool-patches/2019-November/012274.html V2: https://lists.tarantool.org/pipermail/tarantool-patches/2019-November/012496.html Changes in V3 (requested by server team): - Now there's no eviction policy, so statements reside in 'cache' until explicit deallocation via 'unprepare' call or session's disconect; - instead of string ids, now we use numeric ids which correspond to value of hash function applied to the string containing original SQL request; - in accordance with previous point, 'unprepare' support has been returned; - since there's no eviction policy, disconnect event may turn out to be expensive (in terms of deallocating all related to the session prepared statements). To remove possible spikes in workload, we maintain GC queue and reference counters for prepared statements. When all sessions (previously refed statement) unref it, statement gets into GC queue. In case of prepared statements holder is out of memory, GC process is launched: all statements in queue are deallocated; - to track available in scope of session prepared statements, we also maintain session-local map containing statement's IDs allocated in this session. Nikita Pettik (20): sql: remove sql_prepare_v2() sql: refactor sql_prepare() and sqlPrepare() sql: move sql_prepare() declaration to box/execute.h sql: rename sqlPrepare() to sql_stmt_compile() sql: rename sql_finalize() to sql_stmt_finalize() sql: rename sql_reset() to sql_stmt_reset() sql: move sql_stmt_finalize() to execute.h port: increase padding of struct port port: add result set format and request type to port_sql sql: resurrect sql_bind_parameter_count() function sql: resurrect sql_bind_parameter_name() sql: add sql_stmt_schema_version() sql: introduce sql_stmt_sizeof() function box: increment schema_version on ddl operations sql: introduce sql_stmt_query_str() method sql: move sql_stmt_busy() declaration to box/execute.h sql: introduce holder for prepared statemets box: introduce prepared statements netbox: introduce prepared statements sql: add cache statistics to box.info src/box/CMakeLists.txt | 1 + src/box/alter.cc | 3 + src/box/bind.c | 2 +- src/box/box.cc | 26 ++ src/box/box.h | 3 + src/box/ck_constraint.c | 7 +- src/box/errcode.h | 2 + src/box/execute.c | 234 ++++++++++++- src/box/execute.h | 60 ++++ src/box/iproto.cc | 68 +++- src/box/iproto_constants.c | 7 +- src/box/iproto_constants.h | 5 + src/box/lua/cfg.cc | 9 + src/box/lua/execute.c | 235 ++++++++++++- src/box/lua/execute.h | 2 +- src/box/lua/info.c | 25 ++ src/box/lua/init.c | 2 +- src/box/lua/load_cfg.lua | 3 + src/box/lua/net_box.c | 98 +++++- src/box/lua/net_box.lua | 27 ++ src/box/session.cc | 35 ++ src/box/session.h | 17 + src/box/sql.c | 3 + src/box/sql/analyze.c | 23 +- src/box/sql/legacy.c | 3 +- src/box/sql/prepare.c | 56 +-- src/box/sql/sqlInt.h | 51 +-- src/box/sql/vdbe.c | 4 +- src/box/sql/vdbe.h | 2 +- src/box/sql/vdbeInt.h | 1 - src/box/sql/vdbeapi.c | 113 ++++-- src/box/sql/vdbeaux.c | 6 +- src/box/sql_stmt_cache.c | 305 +++++++++++++++++ src/box/sql_stmt_cache.h | 153 +++++++++ src/box/xrow.c | 23 +- src/box/xrow.h | 4 +- src/lib/core/port.h | 2 +- test/app-tap/init_script.result | 37 +- test/box/admin.result | 2 + test/box/cfg.result | 7 + test/box/cfg.test.lua | 1 + test/box/info.result | 1 + test/box/misc.result | 5 + test/sql/engine.cfg | 4 + test/sql/iproto.result | 2 +- test/sql/prepared.result | 737 ++++++++++++++++++++++++++++++++++++++++ test/sql/prepared.test.lua | 282 +++++++++++++++ 47 files changed, 2503 insertions(+), 195 deletions(-) create mode 100644 src/box/sql_stmt_cache.c create mode 100644 src/box/sql_stmt_cache.h create mode 100644 test/sql/prepared.result create mode 100644 test/sql/prepared.test.lua -- 2.15.1
next reply other threads:[~2019-12-20 12:47 UTC|newest] Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-12-20 12:47 Nikita Pettik [this message] 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 01/20] sql: remove sql_prepare_v2() Nikita Pettik 2019-12-23 14:03 ` Sergey Ostanevich 2019-12-24 0:51 ` Nikita Pettik 2019-12-27 19:18 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 02/20] sql: refactor sql_prepare() and sqlPrepare() Nikita Pettik 2019-12-24 11:35 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 03/20] sql: move sql_prepare() declaration to box/execute.h Nikita Pettik 2019-12-24 11:40 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 04/20] sql: rename sqlPrepare() to sql_stmt_compile() Nikita Pettik 2019-12-24 12:01 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 05/20] sql: rename sql_finalize() to sql_stmt_finalize() Nikita Pettik 2019-12-24 12:08 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 06/20] sql: rename sql_reset() to sql_stmt_reset() Nikita Pettik 2019-12-24 12:09 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 07/20] sql: move sql_stmt_finalize() to execute.h Nikita Pettik 2019-12-24 12:11 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 08/20] port: increase padding of struct port Nikita Pettik 2019-12-24 12:34 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 09/20] port: add result set format and request type to port_sql Nikita Pettik 2019-12-25 13:37 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 10/20] sql: resurrect sql_bind_parameter_count() function Nikita Pettik 2019-12-24 20:23 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 11/20] sql: resurrect sql_bind_parameter_name() Nikita Pettik 2019-12-24 20:26 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 12/20] sql: add sql_stmt_schema_version() Nikita Pettik 2019-12-25 13:37 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 13/20] sql: introduce sql_stmt_sizeof() function Nikita Pettik 2019-12-25 13:44 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 14/20] box: increment schema_version on ddl operations Nikita Pettik 2019-12-25 14:33 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 15/20] sql: introduce sql_stmt_query_str() method Nikita Pettik 2019-12-25 14:36 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 16/20] sql: move sql_stmt_busy() declaration to box/execute.h Nikita Pettik 2019-12-25 14:54 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 17/20] sql: introduce holder for prepared statemets Nikita Pettik 2019-12-23 20:54 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 18/20] box: introduce prepared statements Nikita Pettik 2019-12-25 15:23 ` Sergey Ostanevich 2019-12-30 10:27 ` Nikita Pettik 2019-12-30 14:15 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 19/20] netbox: " Nikita Pettik 2019-12-25 20:41 ` Sergey Ostanevich 2019-12-30 9:58 ` Nikita Pettik 2019-12-30 14:16 ` Sergey Ostanevich 2019-12-20 12:47 ` [Tarantool-patches] [PATCH v3 20/20] sql: add cache statistics to box.info Nikita Pettik 2019-12-25 20:53 ` Sergey Ostanevich 2019-12-30 9:46 ` Nikita Pettik 2019-12-30 14:23 ` Sergey Ostanevich 2019-12-30 1:13 ` [Tarantool-patches] [PATCH v3 00/20] sql: prepared statements Nikita Pettik 2019-12-31 8:39 ` Kirill Yukhin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=cover.1576844631.git.korablev@tarantool.org \ --to=korablev@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v3 00/20] sql: prepared statements' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox