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 1627829A7F for ; Thu, 16 Aug 2018 09:57:49 -0400 (EDT) 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 Dy4thVSPdoPR for ; Thu, 16 Aug 2018 09:57:49 -0400 (EDT) Received: from smtp21.mail.ru (smtp21.mail.ru [94.100.179.250]) (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 C6A8429A7B for ; Thu, 16 Aug 2018 09:57:48 -0400 (EDT) Subject: [tarantool-patches] Re: [PATCH v1 1/1] sql: triggers on view unfinished updates References: From: Vladislav Shpilevoy Message-ID: <08349d3a-8804-fe60-303e-79fc313190e4@tarantool.org> Date: Thu, 16 Aug 2018 16:57:45 +0300 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit 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, Kirill Shcherbatov Cc: korablev@tarantool.org On 16/08/2018 16:26, Kirill Shcherbatov wrote: > Excepting primary index is a typical thing for view so > we should use space_index instead of index_find that doesn't > setup diag error when no index is finded. No such word: 'finded'. > > Closes #3536. > --- > Branch: https://github.com/tarantool/tarantool/tree/kshch/gh-3536-failed-view-insertion > Issue: https://github.com/tarantool/tarantool/issues/3536 > > src/box/sql/build.c | 3 ++- > test/sql/triggers.result | 34 ++++++++++++++++++++++++++++++++++ > test/sql/triggers.test.lua | 14 ++++++++++++++ > 3 files changed, 50 insertions(+), 1 deletion(-) > > diff --git a/src/box/sql/build.c b/src/box/sql/build.c > index cdf2bfc..dddeb12 100644 > --- a/src/box/sql/build.c > +++ b/src/box/sql/build.c > @@ -290,7 +290,8 @@ table_column_is_in_pk(Table *table, uint32_t column) > struct space *space = space_by_id(table->def->id); > assert(space != NULL); > > - struct index *primary_idx = index_find(space, 0 /* PK */); > + /* Primary key always has index 0. */ > + struct index *primary_idx = space_index(space, 0); > /* Views don't have any indexes. */ > if (primary_idx == NULL) > return false; > diff --git a/test/sql/triggers.result b/test/sql/triggers.result > index 658571b..556e931 100644 > --- a/test/sql/triggers.result > +++ b/test/sql/triggers.result > @@ -356,3 +356,37 @@ box.sql.execute("DROP TABLE test;") > box.sql.execute("DROP TABLE test2;") > --- > ... > +-- > +-- gh-3536: Some triggers cause error messages and/or half-finished updates > +-- > +box.cfg{} > +--- > +... > +box.sql.execute("CREATE TABLE t (s1 INT, s2 INT, s3 INT, s4 INT PRIMARY KEY);") > +--- > +... > +box.sql.execute("CREATE VIEW v AS SELECT s1, s2 FROM t;") > +--- > +... > +box.sql.execute("CREATE TRIGGER tv INSTEAD OF UPDATE ON v BEGIN UPDATE t SET s3 = new.s1 WHERE s1 = old.s1; END;") > +--- > +... > +box.sql.execute("INSERT INTO t VALUES (1,1,1,1);") > +--- > +... > +box.sql.execute("UPDATE v SET s2 = s1 + 1;") > +--- > +... > +box.sql.execute("UPDATE v SET s1 = s1 + 5;") > +--- > +... > +box.sql.execute("SELECT * FROM t;") > +--- > +- - [1, 1, 6, 1] > +... > +box.sql.execute("DROP VIEW v;") > +--- > +... > +box.sql.execute("DROP TABLE t;") > +--- > +... > diff --git a/test/sql/triggers.test.lua b/test/sql/triggers.test.lua > index 8fd385c..fff58e9 100644 > --- a/test/sql/triggers.test.lua > +++ b/test/sql/triggers.test.lua > @@ -142,3 +142,17 @@ box.sql.execute("SELECT * FROM test2") > box.sql.execute("ROLLBACK;") > box.sql.execute("DROP TABLE test;") > box.sql.execute("DROP TABLE test2;") > + > +-- > +-- gh-3536: Some triggers cause error messages and/or half-finished updates > +-- > +box.cfg{} > +box.sql.execute("CREATE TABLE t (s1 INT, s2 INT, s3 INT, s4 INT PRIMARY KEY);") > +box.sql.execute("CREATE VIEW v AS SELECT s1, s2 FROM t;") > +box.sql.execute("CREATE TRIGGER tv INSTEAD OF UPDATE ON v BEGIN UPDATE t SET s3 = new.s1 WHERE s1 = old.s1; END;") > +box.sql.execute("INSERT INTO t VALUES (1,1,1,1);") > +box.sql.execute("UPDATE v SET s2 = s1 + 1;") > +box.sql.execute("UPDATE v SET s1 = s1 + 5;") > +box.sql.execute("SELECT * FROM t;") > +box.sql.execute("DROP VIEW v;") > +box.sql.execute("DROP TABLE t;") >