[tarantool-patches] [PATCH v1 0/6] sql: Checks on server side
Kirill Shcherbatov
kshcherbatov at tarantool.org
Thu Nov 29 16:09:44 MSK 2018
Branch: http://github.com/tarantool/tarantool/tree/kshch/gh-3691-checks-on-server-side
Issue: https://github.com/tarantool/tarantool/issues/3691
Implemented SQL Checks validations on server side.
Introduced a new sql_check class containing precompiled reusable VDBE making
required validations. It has been parameterized with binding parameters to map
a tuple to be inserted in VDBE memory and to manage checks to be performed on
UPDATE operation.
To support IGNORE/FAIL/ABORT semantics for UPDATE operation fixed DML bug:
The SQL UPDATE operation is consists of Delete and Insert operations. If for
some reason insert operation would fail(e.g. Check constraint fire), there
where no Delete rollback, so data has dissappered. Fixed this problem with
VDBE error handler code that use Savepoint to cancel this Delete.
Kirill Shcherbatov (6):
box: rename space->opts checks to checks_ast
sql: disallow use of TYPEOF in Check
box: exported sql_bind structure and API
sql: release OP_Idx{Insert,Replace} p2 argument
sql: fix incomplete UPDATE on IdxInsert failured
sql: make sql checks on server side
extra/mkopcodeh.sh | 2 +
src/box/alter.cc | 48 ++++++-
src/box/execute.c | 48 +------
src/box/execute.h | 52 ++++++++
src/box/space.c | 10 ++
src/box/space.h | 5 +
src/box/space_def.c | 15 ++-
src/box/space_def.h | 4 +-
src/box/sql.c | 177 +++++++++++++++++++++++++-
src/box/sql.h | 66 ++++++++++
src/box/sql/build.c | 42 ++++--
src/box/sql/delete.c | 2 +-
src/box/sql/expr.c | 4 +-
src/box/sql/insert.c | 121 ++++++------------
src/box/sql/select.c | 33 +++--
src/box/sql/sqliteInt.h | 37 +++++-
src/box/sql/update.c | 33 ++++-
src/box/sql/vdbe.c | 45 +++++--
src/box/sql/vdbeInt.h | 7 +
src/box/sql/vdbeapi.c | 8 --
src/box/sql/where.c | 2 +-
src/box/sql/wherecode.c | 5 +-
test/sql-tap/check.test.lua | 113 +++-------------
test/sql-tap/fkey2.test.lua | 4 +-
test/sql-tap/table.test.lua | 8 +-
test/sql/checks.result | 51 ++++++++
test/sql/checks.test.lua | 18 +++
test/sql/gh-2981-check-autoinc.result | 8 +-
28 files changed, 672 insertions(+), 296 deletions(-)
--
2.19.2
More information about the Tarantool-patches
mailing list