From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id 7D2E42CBFC for ; Thu, 29 Nov 2018 08:10:03 -0500 (EST) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RVn7CDJzDA10 for ; Thu, 29 Nov 2018 08:10:03 -0500 (EST) Received: from smtp52.i.mail.ru (smtp52.i.mail.ru [94.100.177.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id CD60927EC3 for ; Thu, 29 Nov 2018 08:09:56 -0500 (EST) From: Kirill Shcherbatov Subject: [tarantool-patches] [PATCH v1 0/6] sql: Checks on server side Date: Thu, 29 Nov 2018 16:09:44 +0300 Message-Id: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-help: List-unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-subscribe: List-owner: List-post: List-archive: To: tarantool-patches@freelists.org, v.shpilevoy@tarantool.org Cc: Kirill Shcherbatov 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