[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