From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
To: tarantool-patches@freelists.org,
Kirill Shcherbatov <kshcherbatov@tarantool.org>,
Nikita Pettik <korablev@tarantool.org>
Subject: [tarantool-patches] Re: [PATCH v1 0/3] sql: do not use OP_Delete+OP_Insert for UPDATES
Date: Thu, 20 Dec 2018 23:41:59 +0300 [thread overview]
Message-ID: <156112be-070e-4b54-b126-b1b0d74fd85e@tarantool.org> (raw)
In-Reply-To: <cover.1545233551.git.kshcherbatov@tarantool.org>
Nikita, please, do first review.
On 19/12/2018 18:37, Kirill Shcherbatov wrote:
> Introduced a new OP_Update opcode making Tarantool native Update
> operation.
> In case of UPDATE or REPLACE we can't use new OP_Update as it
> has a complex SQL-specific semantics:
>
> CREATE TABLE tj (s1 INT PRIMARY KEY, s2 INT);
> INSERT INTO tj VALUES (1, 3),(2, 4),(3,5);
> CREATE UNIQUE INDEX i ON tj (s2);
> SELECT * FROM tj;
> [1, 3], [2, 4], [3, 5]
> UPDATE OR REPLACE tj SET s2 = s2 + 1;
> SELECT * FROM tj;
> [1, 4], [3, 6]
>
> I.e. [1, 3] tuple is updated as [1, 4] and have replaced tuple
> [2, 4]. This logic is implemented as preventive tuples deletion
> by all corresponding indexes in SQL.
>
> The other significant change is forbidden primary key update.
> It was possible to deal with it the same way like with or
> REPLACE specifier but we need an atomic UPDATE step for #3691
> ticket to support "or IGNORE/or ABORT/or FAIL" specifiers.
> Reworked tests to make testing avoiding primary key UPDATE where
> possible.
>
> Fixed bug in VDBE - sometimes temporal tuples in memory allocated
> with sql_vdbe_mem_alloc_region were stored in Mem variable having
> invalid flags set.
>
> Branch: http://github.com/tarantool/tarantool/tree/kshch/gh-3850-op-update
> Issue: https://github.com/tarantool/tarantool/issues/3850
>
> Kirill Shcherbatov (3):
> sql: clean-up vdbe_emit_constraint_checks
> sql: fix sql_vdbe_mem_alloc_region result memory
> sql: do not use OP_Delete+OP_Insert for UPDATES
>
> src/box/sql/delete.c | 3 +-
> src/box/sql/fkey.c | 49 +++---
> src/box/sql/insert.c | 49 ++----
> src/box/sql/sqliteInt.h | 17 +-
> src/box/sql/update.c | 81 +++++++--
> src/box/sql/vdbe.c | 106 ++++++++++++
> src/box/sql/vdbeInt.h | 6 +
> src/box/sql/vdbeaux.c | 3 +-
> src/box/sql/vdbemem.c | 36 ++++
> src/mpstream.c | 20 +++
> src/mpstream.h | 7 +
> test/sql-tap/alter2.test.lua | 16 +-
> test/sql-tap/analyze9.test.lua | 43 ++++-
> test/sql-tap/bigrow1.test.lua | 12 +-
> test/sql-tap/check.test.lua | 14 +-
> test/sql-tap/fkey2.test.lua | 161 +++++++++---------
> test/sql-tap/fkey3.test.lua | 25 ++-
> test/sql-tap/fkey4.test.lua | 32 ++--
> test/sql-tap/gh2140-trans.test.lua | 26 +--
> .../gh2250-trigger-chain-limit.test.lua | 8 +-
> test/sql-tap/gh2259-in-stmt-trans.test.lua | 12 +-
> test/sql-tap/identifier_case.test.lua | 2 +-
> test/sql-tap/index6.test.lua | 5 +-
> test/sql-tap/intpkey.test.lua | 10 +-
> test/sql-tap/misc1.test.lua | 20 ++-
> test/sql-tap/quote.test.lua | 6 +-
> test/sql-tap/table.test.lua | 2 +-
> test/sql-tap/tkt-a8a0d2996a.test.lua | 4 +-
> test/sql-tap/tkt2767.test.lua | 16 +-
> test/sql-tap/tkt2832.test.lua | 10 +-
> test/sql-tap/tkt3554.test.lua | 15 +-
> test/sql-tap/trigger2.test.lua | 28 +--
> test/sql-tap/trigger7.test.lua | 2 +-
> test/sql-tap/triggerB.test.lua | 28 +--
> test/sql-tap/triggerC.test.lua | 43 ++---
> test/sql-tap/triggerD.test.lua | 4 +-
> test/sql-tap/update.test.lua | 31 ++--
> test/sql-tap/with1.test.lua | 24 +--
> test/sql/on-conflict.result | 8 +-
> test/sql/on-conflict.test.lua | 8 +-
> test/sql/row-count.result | 10 +-
> test/sql/row-count.test.lua | 10 +-
> test/sql/triggers.result | 16 +-
> test/sql/triggers.test.lua | 16 +-
> 44 files changed, 660 insertions(+), 384 deletions(-)
>
prev parent reply other threads:[~2018-12-20 20:42 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-19 15:37 [tarantool-patches] " Kirill Shcherbatov
2018-12-19 15:37 ` [tarantool-patches] [PATCH v1 1/3] sql: clean-up vdbe_emit_constraint_checks Kirill Shcherbatov
2018-12-25 17:26 ` [tarantool-patches] " n.pettik
2018-12-19 15:37 ` [tarantool-patches] [PATCH v1 2/3] sql: fix sql_vdbe_mem_alloc_region result memory Kirill Shcherbatov
2018-12-25 17:26 ` [tarantool-patches] " n.pettik
2018-12-19 15:37 ` [tarantool-patches] [PATCH v1 3/3] sql: do not use OP_Delete+OP_Insert for UPDATES Kirill Shcherbatov
2018-12-25 17:26 ` [tarantool-patches] " n.pettik
2018-12-26 8:35 ` Kirill Shcherbatov
2018-12-28 14:17 ` n.pettik
2018-12-20 20:41 ` Vladislav Shpilevoy [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=156112be-070e-4b54-b126-b1b0d74fd85e@tarantool.org \
--to=v.shpilevoy@tarantool.org \
--cc=korablev@tarantool.org \
--cc=kshcherbatov@tarantool.org \
--cc=tarantool-patches@freelists.org \
--subject='[tarantool-patches] Re: [PATCH v1 0/3] sql: do not use OP_Delete+OP_Insert for UPDATES' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox