[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