Tarantool development patches archive
 help / color / mirror / Atom feed
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(-)
> 

      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