[tarantool-patches] [PATCH 0/4] Replace space id with space ptrs in VDBE runtime

Nikita Pettik korablev at tarantool.org
Wed Mar 21 02:48:38 MSK 2018


Branch: https://github.com/tarantool/tarantool/tree/np/gh-3252-slit-dml-and-ddl-sql
Issue: https://github.com/tarantool/tarantool/issues/3252

In order to avoid additional lookups during VDBE execution,
it was suggested to pass pointer fetched at query compilation time to
opcodes which create cursors (i.e. OP_OpenRead and OP_OpenWrite).
However, any DDL routine may invalidate pointers. Thus, to operate on
system spaces (which are used during DDL) new opcodes have been introduced:
OP_SInsert and OP_SDelete. But originally, SQL DDL under hood used nested
parsing to generate code for non-trivial deletion. For instance:
"DELETE FROM _INDEX WHERE id = space_id AND iid > 0" -- to remove all
secondary indexes. To use new operands such nested parsing has been
substituted with hardcoded VDBE programs.
Finally, fresh pointer to space can also be obtained at VDBE rutime using
new opcode OP_SIDtoPtr, which converts space id to ptr and saves it to
given register. This opcode should be used when it is impossible to avoid
mixing DDL and DML routine in the same query
(e.g. CREATE TABLE AS SELECT FROM ...).

Nikita Pettik (4):
  sql: pass space pointer to OP_OpenRead/OpenWrite
  sql: introduce opcodes to operate on system spaces
  sql: rework code generation for DDL routine
  sql: rework OP_OpenWrite/OpenRead

 src/box/sql.c                |  51 ++++---
 src/box/sql/analyze.c        |  17 ++-
 src/box/sql/build.c          | 321 ++++++++++++++++++++++---------------------
 src/box/sql/expr.c           |  14 +-
 src/box/sql/fkey.c           |  11 +-
 src/box/sql/insert.c         |  37 ++++-
 src/box/sql/opcodes.c        |  51 +++----
 src/box/sql/opcodes.h        |  59 ++++----
 src/box/sql/select.c         |  11 +-
 src/box/sql/sqliteInt.h      |   5 +
 src/box/sql/tarantoolInt.h   |  11 +-
 src/box/sql/trigger.c        |  27 ++--
 src/box/sql/vdbe.c           | 310 +++++++++++++++++++++--------------------
 src/box/sql/vdbe.h           |   1 +
 src/box/sql/vdbeInt.h        |   1 +
 src/box/sql/vdbeaux.c        |  13 ++
 src/box/sql/where.c          |  12 +-
 test/sql/transition.result   |  11 +-
 test/sql/transition.test.lua |   8 +-
 19 files changed, 550 insertions(+), 421 deletions(-)

-- 
2.15.1





More information about the Tarantool-patches mailing list