[Tarantool-patches] [PATCH 00/15] sql: prepared statements
Nikita Pettik
korablev at tarantool.org
Thu Nov 7 04:04:40 MSK 2019
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
More information about the Tarantool-patches
mailing list