From: Nikita Pettik <korablev@tarantool.org> To: tarantool-patches@dev.tarantool.org Cc: v.shpilevoy@tarantool.org Subject: [Tarantool-patches] [PATCH 00/15] sql: prepared statements Date: Thu, 7 Nov 2019 04:04:40 +0300 [thread overview] Message-ID: <20191107010455.64457-1-korablev@tarantool.org> (raw) Branch: https://github.com/tarantool/tarantool/tree/np/gh-2592-prepared-statements Issues: https://github.com/tarantool/tarantool/issues/2592 For details see particular patches and RFC. One difference from RFC is that there's no LRU replacement policy in current implementation. User has to remove statements manually. Optional check of values to be bound I'm going to implement as a follow-up to these patches. To the one who will review: I've failed to come up with remote (netbox) :execute() and :unpepare() methods for prepared statement objects. So there are only cn:execute(query_id) and cn:unprepare(query_id) methods. Hence we get a small inconsistency between remote and local behaviour: Local mode s = box.prepare("SELECT 1;") tarantool> s --- - execute: 'function: 0x011240df28' query_id: 1 params: [] unprepare: 'function: 0x011240df60' metadata: - name: '1' type: integer param_count: 0 ... s:execute() -> unfolds into box.execute(s.query_id) Remote mode cn = netbox.connect(box.cfg.listen) s = cn:prepare("SELECT 1;") tarantool> s --- query_id: 1 params: [] metadata: - name: '1' type: integer param_count: 0 ... cn:execute(s.query_id) It seems that introducing :prepare() and :execute() methods might require a lot of Lua netbox module refactoring (to make up execute/unprepare requests we need established channel; as a workaround we can attempt at hiding it in prepared statement object via patching serializable methods). Nikita Pettik (15): 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_compile() sql: move sql_finalize() to execute.h port: increase padding of struct port port: add dump format and request type to port_sql sql: resurrect sql_bind_parameter_count() function sql: resurrect sql_bind_parameter_name() sql: add sql_schema_version() sql: introduce sql_stmt_sizeof() function box: increment schema_version on ddl operations sql: introduce cache for prepared statemets box: introduce prepared statements netbox: introduce prepared statements src/box/CMakeLists.txt | 1 + src/box/alter.cc | 3 + src/box/box.cc | 19 ++ src/box/box.h | 1 + src/box/ck_constraint.c | 1 + src/box/errcode.h | 2 + src/box/execute.c | 193 ++++++++++- src/box/execute.h | 66 ++++ src/box/iproto.cc | 68 +++- src/box/iproto_constants.c | 7 +- src/box/iproto_constants.h | 5 + src/box/lua/cfg.cc | 12 + src/box/lua/execute.c | 231 +++++++++++++- src/box/lua/execute.h | 2 +- src/box/lua/init.c | 2 +- src/box/lua/load_cfg.lua | 3 + src/box/lua/net_box.c | 104 +++++- src/box/lua/net_box.lua | 28 ++ src/box/lua/session.c | 10 + src/box/prep_stmt.c | 108 +++++++ src/box/prep_stmt.h | 88 ++++++ src/box/session.cc | 14 + src/box/session.h | 2 + src/box/sql/analyze.c | 16 +- src/box/sql/legacy.c | 3 +- src/box/sql/prepare.c | 56 +--- src/box/sql/sqlInt.h | 44 ++- src/box/sql/vdbe.h | 2 +- src/box/sql/vdbeInt.h | 1 - src/box/sql/vdbeapi.c | 83 +++-- src/box/sql/vdbeaux.c | 5 +- src/box/xrow.c | 19 +- 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/misc.result | 5 + test/sql/engine.cfg | 4 + test/sql/iproto.result | 2 +- test/sql/prepared.result | 685 ++++++++++++++++++++++++++++++++++++++++ test/sql/prepared.test.lua | 266 ++++++++++++++++ 43 files changed, 2043 insertions(+), 171 deletions(-) create mode 100644 src/box/prep_stmt.c create mode 100644 src/box/prep_stmt.h create mode 100644 test/sql/prepared.result create mode 100644 test/sql/prepared.test.lua -- 2.15.1
next reply other threads:[~2019-11-07 1:05 UTC|newest] Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-11-07 1:04 Nikita Pettik [this message] 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 01/15] sql: remove sql_prepare_v2() Nikita Pettik 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 02/15] sql: refactor sql_prepare() and sqlPrepare() Nikita Pettik 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 03/15] sql: move sql_prepare() declaration to box/execute.h Nikita Pettik 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 04/15] sql: rename sqlPrepare() to sql_compile() Nikita Pettik 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 05/15] sql: move sql_finalize() to execute.h Nikita Pettik 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 06/15] port: increase padding of struct port Nikita Pettik 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 07/15] port: add dump format and request type to port_sql Nikita Pettik 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 08/15] sql: resurrect sql_bind_parameter_count() function Nikita Pettik 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 09/15] sql: resurrect sql_bind_parameter_name() Nikita Pettik 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 10/15] sql: add sql_schema_version() Nikita Pettik 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 11/15] sql: introduce sql_stmt_sizeof() function Nikita Pettik 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 12/15] box: increment schema_version on ddl operations Nikita Pettik 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 13/15] sql: introduce cache for prepared statemets Nikita Pettik 2019-11-10 23:40 ` Konstantin Osipov 2019-11-11 10:53 ` Nikita Pettik 2019-11-11 18:35 ` Konstantin Osipov 2019-11-12 7:54 ` Georgy Kirichenko 2019-11-12 8:50 ` Konstantin Osipov 2019-11-12 9:30 ` Georgy Kirichenko 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 14/15] box: introduce prepared statements Nikita Pettik 2019-11-10 23:42 ` Konstantin Osipov 2019-11-07 1:04 ` [Tarantool-patches] [PATCH 15/15] netbox: " Nikita Pettik
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=20191107010455.64457-1-korablev@tarantool.org \ --to=korablev@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH 00/15] 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