[Tarantool-patches] [PATCH v3 00/20] sql: prepared statements
Nikita Pettik
korablev at tarantool.org
Fri Dec 20 15:47:05 MSK 2019
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
More information about the Tarantool-patches
mailing list