Please, fix commit message subject. Then LGTM. > On 4 Feb 2019, at 20:05, Ivan Koptelov wrote: > > On 04/02/2019 18:28, n.pettik wrote: >>> On 4 Feb 2019, at 17:44, Ivan Koptelov wrote: >>> >>> Adds error raise in case of CHECK constraint declared with ON >>> CONFLICT REPLACE action. Before the patch such option was >>> forbidden, but if a user tried to create space with such constraint, >>> this attempt failed silently. >>> >> What is more, now all on conflict actions are ignored for check >> constraints. So lets simply fix parser to disallow this clause. >> It is quite easy: all you need is to remove onconf rule after CHECK >> keyword: >> >> 319 tcons ::= CHECK LP expr(E) RP onconf. >> 320 {sql_add_check_constraint(pParse,&E);} > Thank you for the idea, done. > > -- > src/box/sql/parse.y | 2 +- > test/sql-tap/check.test.lua | 37 ++++++++++++++++++++++++++++++++++++- > 2 files changed, 37 insertions(+), 2 deletions(-) > > diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y > index 8e21b6fca..a5fe7c0a7 100644 > --- a/src/box/sql/parse.y > +++ b/src/box/sql/parse.y > @@ -316,7 +316,7 @@ tcons ::= UNIQUE LP sortlist(X) RP. > {sql_create_index(pParse,0,0,X,0, > SORT_ORDER_ASC,false, > SQL_INDEX_TYPE_CONSTRAINT_UNIQUE);} > -tcons ::= CHECK LP expr(E) RP onconf. > +tcons ::= CHECK LP expr(E) RP . > {sql_add_check_constraint(pParse,&E);} > tcons ::= FOREIGN KEY LP eidlist(FA) RP > REFERENCES nm(T) eidlist_opt(TA) refargs(R) defer_subclause_opt(D). { > diff --git a/test/sql-tap/check.test.lua b/test/sql-tap/check.test.lua > index 1f369fb02..7960204bc 100755 > --- a/test/sql-tap/check.test.lua > +++ b/test/sql-tap/check.test.lua > @@ -1,6 +1,6 @@ > #!/usr/bin/env tarantool > test = require("sqltester") > -test:plan(58) > +test:plan(61) > > --!./tcltestrunner.lua > -- 2005 November 2 > @@ -772,5 +772,40 @@ test:do_execsql_test( > -- > }) > > +-- gh-3345 : the test checks that ON CONFLICT REPLACE > +-- is not allowed for CHECK constraint. > +test:do_catchsql_test( > + 9.1, > + [[ > + CREATE TABLE t101 (a INT primary key, b INT, CHECK(b < 10) > + ON CONFLICT REPLACE) > + ]], { > + -- <9.1> > + 1, "keyword \"ON\" is reserved" > + -- > + }) > + > +test:do_catchsql_test( > + 9.2, > + [[ > + CREATE TABLE t101 (a INT primary key, b INT, CHECK(b < 10) > + ON CONFLICT ABORT) > + ]], { > + -- <9.2> > + 1, "keyword \"ON\" is reserved" > + -- > + }) > + > +test:do_catchsql_test( > + 9.3, > + [[ > + CREATE TABLE t101 (a INT primary key, b INT, CHECK(b < 10) > + ON CONFLICT ROLLBACK) > + ]], { > + -- <9.3> > + 1, "keyword \"ON\" is reserved" > + -- > + }) > + > test:finish_test() > > -- > 2.14.3 (Apple Git-98) > >