[tarantool-patches] Re: [PATCH v1 0/3] sql: do not use OP_Delete+OP_Insert for UPDATES

Vladislav Shpilevoy v.shpilevoy at tarantool.org
Thu Dec 20 23:41:59 MSK 2018


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(-)
> 




More information about the Tarantool-patches mailing list