From: imeevma@tarantool.org To: korablev@tarantool.org Cc: tarantool-patches@freelists.org Subject: [tarantool-patches] [PATCH v1 1/1] sql: rework five syntax errors Date: Thu, 21 Feb 2019 18:40:13 +0300 [thread overview] Message-ID: <ce92027aadf2864da791ff55285122d7fab96fcf.1550763542.git.imeevma@gmail.com> (raw) This patch reworks five syntax errors. These SQL errors were converted into Tarantool errors. Part of #3965 --- https://github.com/tarantool/tarantool/issues/3965 https://github.com/tarantool/tarantool/tree/imeevma/gh-3965-use-diag_set-to-describe-error src/box/errcode.h | 5 +++++ src/box/sql/build.c | 6 +++--- src/box/sql/parse.y | 26 ++++++++++++++++---------- src/box/sql/select.c | 6 +++--- test/box/misc.result | 4 ++++ test/sql-tap/check.test.lua | 6 +++--- test/sql-tap/e_select1.test.lua | 10 +++++----- test/sql-tap/index7.test.lua | 2 +- test/sql-tap/join.test.lua | 2 +- test/sql-tap/keyword1.test.lua | 2 +- test/sql-tap/misc1.test.lua | 2 +- test/sql-tap/misc5.test.lua | 2 +- test/sql-tap/select1.test.lua | 12 ++++++------ test/sql-tap/select3.test.lua | 2 +- test/sql-tap/start-transaction.test.lua | 10 +++++----- test/sql-tap/table.test.lua | 6 +++--- test/sql-tap/tkt3935.test.lua | 14 +++++++------- test/sql-tap/trigger1.test.lua | 8 ++++---- test/sql-tap/with1.test.lua | 6 +++--- test/sql-tap/with2.test.lua | 4 ++-- test/sql/iproto.result | 4 ++-- test/sql/misc.result | 14 ++++++++------ test/sql/on-conflict.result | 16 ++++++++-------- test/sql/types.result | 9 ++++++--- 24 files changed, 99 insertions(+), 79 deletions(-) diff --git a/src/box/errcode.h b/src/box/errcode.h index 1523b19..1807151 100644 --- a/src/box/errcode.h +++ b/src/box/errcode.h @@ -230,6 +230,11 @@ struct errcode_record { /*175 */_(ER_SQL_NO_SUCH_PRAGMA, "Pragma '%s' does not exist") \ /*176 */_(ER_SQL_CANT_RESOLVE_FIELD, "Can’t resolve field '%s'") \ /*177 */_(ER_INDEX_EXISTS_IN_SPACE, "Index '%s' already exists in space '%s'") \ + /*178 */_(ER_SQL_SYNTAX, "Syntax error in %s: %s") \ + /*179 */_(ER_SQL_STACK_OVERFLOW, "Failed to parse SQL statement: parser stack limit reached") \ + /*180 */_(ER_SQL_SELECT_WILDCARD, "Failed to expand '*' in SELECT statement without FROM clause") \ + /*181 */_(ER_SQL_STATEMENT_EMPTY, "Failed to execute an empty SQL statement") \ + /*182 */_(ER_SQL_KEYWORD_IS_RESERVED, "Keyword '%.*s' is reserved. Please use double quotes if '%.*s' is an identifier.") \ /* * !IMPORTANT! Please follow instructions at start of the file diff --git a/src/box/sql/build.c b/src/box/sql/build.c index 03bfbfb..173eea2 100644 --- a/src/box/sql/build.c +++ b/src/box/sql/build.c @@ -2815,9 +2815,9 @@ sqlSrcListAppendFromTerm(Parse * pParse, /* Parsing context */ struct SrcList_item *pItem; sql *db = pParse->db; if (!p && (pOn || pUsing)) { - sqlErrorMsg(pParse, "a JOIN clause is required before %s", - (pOn ? "ON" : "USING") - ); + diag_set(ClientError, ER_SQL_SYNTAX, "FROM clause", + "a JOIN clause is required before ON and USING"); + sql_parser_error(pParse); goto append_from_error; } p = sqlSrcListAppend(db, p, pTable); diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y index 661e695..f3f6803 100644 --- a/src/box/sql/parse.y +++ b/src/box/sql/parse.y @@ -33,13 +33,16 @@ UNUSED_PARAMETER(yymajor); /* Silence some compiler warnings */ assert( TOKEN.z[0] ); /* The tokenizer always gives us a token */ if (yypParser->is_fallback_failed && TOKEN.isReserved) { - sqlErrorMsg(pParse, "keyword \"%T\" is reserved", &TOKEN); + diag_set(ClientError, ER_SQL_KEYWORD_IS_RESERVED, TOKEN.n, TOKEN.z, + TOKEN.n, TOKEN.z); + sql_parser_error(pParse); } else { sqlErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN); } } %stack_overflow { - sqlErrorMsg(pParse, "parser stack overflow"); + diag_set(ClientError, ER_SQL_STACK_OVERFLOW); + sql_parser_error(pParse); } // The name of the generated procedure that implements the parser @@ -114,7 +117,8 @@ ecmd ::= explain cmdx SEMI. { sql_finish_coding(pParse); } ecmd ::= SEMI. { - sqlErrorMsg(pParse, "syntax error: empty request"); + diag_set(ClientError, ER_SQL_STATEMENT_EMPTY); + sql_parser_error(pParse); } explain ::= . explain ::= EXPLAIN. { pParse->explain = 1; } @@ -227,7 +231,8 @@ columnname(A) ::= nm(A) typedef(Y). {sqlAddColumn(pParse,&A,&Y);} %type nm {Token} nm(A) ::= id(A). { if(A.isReserved) { - sqlErrorMsg(pParse, "keyword \"%T\" is reserved", &A); + diag_set(ClientError, ER_SQL_KEYWORD_IS_RESERVED, A.n, A.z, A.n, A.z); + sql_parser_error(pParse); } } @@ -1380,14 +1385,15 @@ trnm(A) ::= nm DOT nm(X). { // tridxby ::= . tridxby ::= INDEXED BY nm. { - sqlErrorMsg(pParse, - "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " - "within triggers"); + diag_set(ClientError, ER_SQL_SYNTAX, "trigger body", "the INDEXED BY clause "\ + "is not allowed on UPDATE or DELETE statements within triggers"); + sql_parser_error(pParse); } tridxby ::= NOT INDEXED. { - sqlErrorMsg(pParse, - "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " - "within triggers"); + diag_set(ClientError, ER_SQL_SYNTAX, "trigger body", "the NOT INDEXED "\ + "clause is not allowed on UPDATE or DELETE statements within "\ + "triggers"); + sql_parser_error(pParse); } diff --git a/src/box/sql/select.c b/src/box/sql/select.c index f469de5..824a8ff 100644 --- a/src/box/sql/select.c +++ b/src/box/sql/select.c @@ -5028,11 +5028,11 @@ selectExpander(Walker * pWalker, Select * p) diag_set(ClientError, ER_NO_SUCH_SPACE, zTName); - sql_parser_error(pParse); } else { - sqlErrorMsg(pParse, - "no tables specified"); + diag_set(ClientError, + ER_SQL_SELECT_WILDCARD); } + sql_parser_error(pParse); } } } diff --git a/test/box/misc.result b/test/box/misc.result index 80bde72..eaf9bc8 100644 --- a/test/box/misc.result +++ b/test/box/misc.result @@ -507,6 +507,10 @@ t; 175: box.error.SQL_NO_SUCH_PRAGMA 176: box.error.SQL_CANT_RESOLVE_FIELD 177: box.error.INDEX_EXISTS_IN_SPACE + 178: box.error.SQL_SYNTAX + 179: box.error.SQL_STACK_OVERFLOW + 180: box.error.SQL_SELECT_WILDCARD + 181: box.error.SQL_STATEMENT_EMPTY ... test_run:cmd("setopt delimiter ''"); --- diff --git a/test/sql-tap/check.test.lua b/test/sql-tap/check.test.lua index 2bb1b2e..3191393 100755 --- a/test/sql-tap/check.test.lua +++ b/test/sql-tap/check.test.lua @@ -781,7 +781,7 @@ test:do_catchsql_test( ON CONFLICT REPLACE) ]], { -- <9.1> - 1, "keyword \"ON\" is reserved" + 1, "Keyword 'ON' is reserved. Please use double quotes if 'ON' is an identifier." -- </9.1> }) @@ -792,7 +792,7 @@ test:do_catchsql_test( ON CONFLICT ABORT) ]], { -- <9.2> - 1, "keyword \"ON\" is reserved" + 1, "Keyword 'ON' is reserved. Please use double quotes if 'ON' is an identifier." -- </9.2> }) @@ -803,7 +803,7 @@ test:do_catchsql_test( ON CONFLICT ROLLBACK) ]], { -- <9.3> - 1, "keyword \"ON\" is reserved" + 1, "Keyword 'ON' is reserved. Please use double quotes if 'ON' is an identifier." -- </9.3> }) diff --git a/test/sql-tap/e_select1.test.lua b/test/sql-tap/e_select1.test.lua index bd98528..3170b39 100755 --- a/test/sql-tap/e_select1.test.lua +++ b/test/sql-tap/e_select1.test.lua @@ -105,7 +105,7 @@ test:do_catchsql_test( SELECT count(*) FROM t1, t2 USING (a) ON (t1.a=t2.a) ]], { -- <e_select-0.1.5> - 1, [[keyword "ON" is reserved]] + 1, [[Keyword 'ON' is reserved. Please use double quotes if 'ON' is an identifier.]] -- </e_select-0.1.5> }) @@ -811,10 +811,10 @@ data = { {"1.2", "SELECT a, b, c FROM z1 GROUP BY *", 'near \"*\": syntax error'}, {"1.3", "SELECT 1 + * FROM z1", 'near \"*\": syntax error'}, {"1.4", "SELECT * + 1 FROM z1", 'near \"+\": syntax error'}, - {"2.1", "SELECT *", 'no tables specified'}, - {"2.2", "SELECT * WHERE 1", 'no tables specified'}, - {"2.3", "SELECT * WHERE 0", 'no tables specified'}, - {"2.4", "SELECT count(*), *", 'no tables specified' } + {"2.1", "SELECT *", "Failed to expand '*' in SELECT statement without FROM clause"}, + {"2.2", "SELECT * WHERE 1", "Failed to expand '*' in SELECT statement without FROM clause"}, + {"2.3", "SELECT * WHERE 0", "Failed to expand '*' in SELECT statement without FROM clause"}, + {"2.4", "SELECT count(*), *", "Failed to expand '*' in SELECT statement without FROM clause"} } for _, val in ipairs(data) do diff --git a/test/sql-tap/index7.test.lua b/test/sql-tap/index7.test.lua index 0a7fe60..7dd9efa 100755 --- a/test/sql-tap/index7.test.lua +++ b/test/sql-tap/index7.test.lua @@ -292,7 +292,7 @@ test:do_catchsql_test( CREATE TABLE t1 (a INTEGER PRIMARY KEY, b INTEGER); CREATE UNIQUE INDEX i ON t1 (a) WHERE a = 3; ]], { - 1, "keyword \"WHERE\" is reserved" + 1, "Keyword 'WHERE' is reserved. Please use double quotes if 'WHERE' is an identifier." }) -- Currently, when a user tries to create index (or primary key, diff --git a/test/sql-tap/join.test.lua b/test/sql-tap/join.test.lua index bda4091..df272a9 100755 --- a/test/sql-tap/join.test.lua +++ b/test/sql-tap/join.test.lua @@ -570,7 +570,7 @@ test:do_catchsql_test( SELECT * FROM t1 USING(a) ]], { -- <join-3.5> - 1, "a JOIN clause is required before USING" + 1, "Syntax error in FROM clause: a JOIN clause is required before ON and USING" -- </join-3.5> }) diff --git a/test/sql-tap/keyword1.test.lua b/test/sql-tap/keyword1.test.lua index 6895dc1..33873d1 100755 --- a/test/sql-tap/keyword1.test.lua +++ b/test/sql-tap/keyword1.test.lua @@ -237,7 +237,7 @@ for _, kw in ipairs(bannedkws) do test:do_catchsql_test( "bannedkw1-"..kw..".1", query, { - 1, 'keyword "'..kw..'" is reserved' + 1, "Keyword '"..kw.."' is reserved. Please use double quotes if '"..kw.."' is an identifier." }) end diff --git a/test/sql-tap/misc1.test.lua b/test/sql-tap/misc1.test.lua index 4358b58..e5f1303 100755 --- a/test/sql-tap/misc1.test.lua +++ b/test/sql-tap/misc1.test.lua @@ -413,7 +413,7 @@ test:do_catchsql_test( SELECT *; ]], { -- <misc1-8.1> - 1, "no tables specified" + 1, "Failed to expand '*' in SELECT statement without FROM clause" -- </misc1-8.1> }) diff --git a/test/sql-tap/misc5.test.lua b/test/sql-tap/misc5.test.lua index 0852741..05084a1 100755 --- a/test/sql-tap/misc5.test.lua +++ b/test/sql-tap/misc5.test.lua @@ -299,7 +299,7 @@ test:do_test( return test:catchsql(sql) end, { -- <misc5-7.1> - 1, "parser stack overflow" + 1, "Failed to parse SQL statement: parser stack limit reached" -- </misc5-7.1> }) diff --git a/test/sql-tap/select1.test.lua b/test/sql-tap/select1.test.lua index 6c35b6f..84c5359 100755 --- a/test/sql-tap/select1.test.lua +++ b/test/sql-tap/select1.test.lua @@ -1416,7 +1416,7 @@ test:do_catchsql_test( SELECT f1 FROM test1 UNION SELECT WHERE; ]], { -- <select1-7.2> - 1, [[keyword "WHERE" is reserved]] + 1, [[Keyword 'WHERE' is reserved. Please use double quotes if 'WHERE' is an identifier.]] -- </select1-7.2> }) @@ -1428,7 +1428,7 @@ test:do_catchsql_test( [[ SELECT f1 FROM test1 as "hi", test2 as]], { -- <select1-7.3> - 1, [[keyword "as" is reserved]] + 1, [[Keyword 'as' is reserved. Please use double quotes if 'as' is an identifier.]] -- </select1-7.3> }) @@ -1448,7 +1448,7 @@ test:do_catchsql_test( SELECT f1 FROM test1 ORDER BY f1 desc, f2 where; ]], { -- <select1-7.5> - 1, [[keyword "where" is reserved]] + 1, [[Keyword 'where' is reserved. Please use double quotes if 'where' is an identifier.]] -- </select1-7.5> }) @@ -1458,7 +1458,7 @@ test:do_catchsql_test( SELECT count(f1,f2 FROM test1; ]], { -- <select1-7.6> - 1, [[keyword "FROM" is reserved]] + 1, [[Keyword 'FROM' is reserved. Please use double quotes if 'FROM' is an identifier.]] -- </select1-7.6> }) @@ -1488,7 +1488,7 @@ test:do_catchsql_test( SELECT f1 FROM test1 LIMIT 5+3 OFFSET 11 ORDER BY f2; ]], { -- <select1-7.9> - 1, [[keyword "ORDER" is reserved]] + 1, [[Keyword 'ORDER' is reserved. Please use double quotes if 'ORDER' is an identifier.]] -- </select1-7.9> }) @@ -2075,7 +2075,7 @@ test:do_catchsql_test( SELECT 1 FROM (SELECT *) ]], { -- <select1-16.1> - 1, "no tables specified" + 1, "Failed to expand '*' in SELECT statement without FROM clause" -- </select1-16.1> }) diff --git a/test/sql-tap/select3.test.lua b/test/sql-tap/select3.test.lua index e7e306e..9582a40 100755 --- a/test/sql-tap/select3.test.lua +++ b/test/sql-tap/select3.test.lua @@ -182,7 +182,7 @@ test:do_catchsql_test("select3-2.13", [[ SELECT log, count(*) FROM t1 GROUP BY ORDER BY log; ]], { -- <select3-2.13> - 1, [[keyword "ORDER" is reserved]] + 1, [[Keyword 'ORDER' is reserved. Please use double quotes if 'ORDER' is an identifier.]] -- </select3-2.13> }) diff --git a/test/sql-tap/start-transaction.test.lua b/test/sql-tap/start-transaction.test.lua index 82356ae..918b759 100755 --- a/test/sql-tap/start-transaction.test.lua +++ b/test/sql-tap/start-transaction.test.lua @@ -94,7 +94,7 @@ test:do_catchsql_test( COMMIT TRANSACTION; ]], { -- <start-transaction-1.6> - 1, "keyword \"TRANSACTION\" is reserved" + 1, "Keyword 'TRANSACTION' is reserved. Please use double quotes if 'TRANSACTION' is an identifier." -- <start-transaction-1.6> }) @@ -119,7 +119,7 @@ test:do_catchsql_test( END; ]], { -- <start-transaction-1.8> - 1, "keyword \"END\" is reserved" + 1, "Keyword 'END' is reserved. Please use double quotes if 'END' is an identifier." -- <start-transaction-1.8> }) @@ -144,7 +144,7 @@ test:do_catchsql_test( END TRANSACTION; ]], { -- <start-transaction-1.10> - 1, "keyword \"END\" is reserved" + 1, "Keyword 'END' is reserved. Please use double quotes if 'END' is an identifier." -- <start-transaction-1.10> }) @@ -193,7 +193,7 @@ test:do_catchsql_test( COMMIT; ]], { -- <start-transaction-1.14> - 1, "keyword \"TRANSACTION\" is reserved" + 1, "Keyword 'TRANSACTION' is reserved. Please use double quotes if 'TRANSACTION' is an identifier." -- <start-transaction-1.14> }) @@ -246,7 +246,7 @@ test:do_catchsql_test( COMMIT; ]], { -- <start-transaction-1.18> - 1, "keyword \"TRANSACTION\" is reserved" + 1, "Keyword 'TRANSACTION' is reserved. Please use double quotes if 'TRANSACTION' is an identifier." -- <start-transaction-1.18> }) diff --git a/test/sql-tap/table.test.lua b/test/sql-tap/table.test.lua index 2bcc5aa..73198dd 100755 --- a/test/sql-tap/table.test.lua +++ b/test/sql-tap/table.test.lua @@ -1253,7 +1253,7 @@ test:do_catchsql_test( ); ]], { -- <table-22.1> - 1,"keyword \"CONSTRAINT\" is reserved" + 1,"Keyword 'CONSTRAINT' is reserved. Please use double quotes if 'CONSTRAINT' is an identifier." -- </table-22.1> }) @@ -1318,7 +1318,7 @@ test:do_catchsql_test( ); ]], { -- <table-22.6> - 1,"keyword \"CONSTRAINT\" is reserved" + 1,"Keyword 'CONSTRAINT' is reserved. Please use double quotes if 'CONSTRAINT' is an identifier." -- </table-22.6> }) @@ -1332,7 +1332,7 @@ test:do_catchsql_test( ); ]], { -- <table-22.7> - 1,"keyword \"CONSTRAINT\" is reserved" + 1,"Keyword 'CONSTRAINT' is reserved. Please use double quotes if 'CONSTRAINT' is an identifier." -- </table-22.7> }) diff --git a/test/sql-tap/tkt3935.test.lua b/test/sql-tap/tkt3935.test.lua index e13391c..cc8fea7 100755 --- a/test/sql-tap/tkt3935.test.lua +++ b/test/sql-tap/tkt3935.test.lua @@ -57,7 +57,7 @@ test:do_catchsql_test( SELECT a FROM (t1) AS t ON b USING(a) ]], { -- <tkt3935.4> - 1, "a JOIN clause is required before ON" + 1, "Syntax error in FROM clause: a JOIN clause is required before ON and USING" -- </tkt3935.4> }) @@ -67,7 +67,7 @@ test:do_catchsql_test( SELECT a FROM (t1) AS t ON b ]], { -- <tkt3935.5> - 1, "a JOIN clause is required before ON" + 1, "Syntax error in FROM clause: a JOIN clause is required before ON and USING" -- </tkt3935.5> }) @@ -77,7 +77,7 @@ test:do_catchsql_test( SELECT a FROM (SELECT * FROM t1) AS t ON b USING(a) ]], { -- <tkt3935.6> - 1, "a JOIN clause is required before ON" + 1, "Syntax error in FROM clause: a JOIN clause is required before ON and USING" -- </tkt3935.6> }) @@ -87,7 +87,7 @@ test:do_catchsql_test( SELECT a FROM (SELECT * FROM t1) AS t ON b ]], { -- <tkt3935.7> - 1, "a JOIN clause is required before ON" + 1, "Syntax error in FROM clause: a JOIN clause is required before ON and USING" -- </tkt3935.7> }) @@ -97,7 +97,7 @@ test:do_catchsql_test( SELECT a FROM t1 AS t ON b ]], { -- <tkt3935.8> - 1, "a JOIN clause is required before ON" + 1, "Syntax error in FROM clause: a JOIN clause is required before ON and USING" -- </tkt3935.8> }) @@ -107,7 +107,7 @@ test:do_catchsql_test( SELECT a FROM t1 AS t ON b USING(a) ]], { -- <tkt3935.9> - 1, "a JOIN clause is required before ON" + 1, "Syntax error in FROM clause: a JOIN clause is required before ON and USING" -- </tkt3935.9> }) @@ -117,7 +117,7 @@ test:do_catchsql_test( SELECT a FROM t1 AS t USING(a) ]], { -- <tkt3935.10> - 1, "a JOIN clause is required before USING" + 1, "Syntax error in FROM clause: a JOIN clause is required before ON and USING" -- </tkt3935.10> }) diff --git a/test/sql-tap/trigger1.test.lua b/test/sql-tap/trigger1.test.lua index 871a144..4ca4f67 100755 --- a/test/sql-tap/trigger1.test.lua +++ b/test/sql-tap/trigger1.test.lua @@ -809,7 +809,7 @@ test:do_catchsql_test( END; ]], { -- <trigger1-16.4> - 1, "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements within triggers" + 1, "Syntax error in trigger body: the NOT INDEXED clause is not allowed on UPDATE or DELETE statements within triggers" -- </trigger1-16.4> }) @@ -821,7 +821,7 @@ test:do_catchsql_test( END; ]], { -- <trigger1-16.5> - 1, "the INDEXED BY clause is not allowed on UPDATE or DELETE statements within triggers" + 1, "Syntax error in trigger body: the INDEXED BY clause is not allowed on UPDATE or DELETE statements within triggers" -- </trigger1-16.5> }) @@ -833,7 +833,7 @@ test:do_catchsql_test( END; ]], { -- <trigger1-16.6> - 1, "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements within triggers" + 1, "Syntax error in trigger body: the NOT INDEXED clause is not allowed on UPDATE or DELETE statements within triggers" -- </trigger1-16.6> }) @@ -845,7 +845,7 @@ test:do_catchsql_test( END; ]], { -- <trigger1-16.7> - 1, "the INDEXED BY clause is not allowed on UPDATE or DELETE statements within triggers" + 1, "Syntax error in trigger body: the INDEXED BY clause is not allowed on UPDATE or DELETE statements within triggers" -- </trigger1-16.7> }) diff --git a/test/sql-tap/with1.test.lua b/test/sql-tap/with1.test.lua index 7896483..add2345 100755 --- a/test/sql-tap/with1.test.lua +++ b/test/sql-tap/with1.test.lua @@ -178,7 +178,7 @@ test:do_catchsql_test(3.6, [[ SELECT * FROM tmp; ]], { -- <3.6> - 1, [[keyword "SELECT" is reserved]] + 1, [[Keyword 'SELECT' is reserved. Please use double quotes if 'SELECT' is an identifier.]] -- </3.6> }) @@ -1018,7 +1018,7 @@ test:do_catchsql_test(13.1, [[ SELECT i FROM c; ]], { -- <13.1> - 1, "no tables specified" + 1, "Failed to expand '*' in SELECT statement without FROM clause" -- </13.1> }) @@ -1027,7 +1027,7 @@ test:do_catchsql_test(13.2, [[ SELECT i FROM c; ]], { -- <13.2> - 1, "no tables specified" + 1, "Failed to expand '*' in SELECT statement without FROM clause" -- </13.2> }) diff --git a/test/sql-tap/with2.test.lua b/test/sql-tap/with2.test.lua index c27a9d1..23ed55b 100755 --- a/test/sql-tap/with2.test.lua +++ b/test/sql-tap/with2.test.lua @@ -528,7 +528,7 @@ test:do_catchsql_test("6.3.1", [[ INSERT INTO t2 SELECT a, b, FROM t1; ]], { -- <6.3> - 1, [[keyword "FROM" is reserved]] + 1, [[Keyword 'FROM' is reserved. Please use double quotes if 'FROM' is an identifier.]] -- </6.3> }) @@ -546,7 +546,7 @@ test:do_catchsql_test(6.4, [[ INSERT INTO t2 SELECT a, b, FROM t1 a a a; ]], { -- <6.4> - 1, [[keyword "FROM" is reserved]] + 1, [[Keyword 'FROM' is reserved. Please use double quotes if 'FROM' is an identifier.]] -- </6.4> }) diff --git a/test/sql/iproto.result b/test/sql/iproto.result index 562e068..e7de36a 100644 --- a/test/sql/iproto.result +++ b/test/sql/iproto.result @@ -118,11 +118,11 @@ cn:execute('select 1', nil, {dry_run = true}) -- Empty request. cn:execute('') --- -- error: 'Failed to execute SQL statement: syntax error: empty request' +- error: 'Failed to execute SQL statement: Failed to execute an empty SQL statement' ... cn:execute(' ;') --- -- error: 'Failed to execute SQL statement: syntax error: empty request' +- error: 'Failed to execute SQL statement: Failed to execute an empty SQL statement' ... -- -- gh-3467: allow only positive integers under limit clause. diff --git a/test/sql/misc.result b/test/sql/misc.result index ef104c1..9a8aa8d 100644 --- a/test/sql/misc.result +++ b/test/sql/misc.result @@ -14,11 +14,13 @@ box.sql.execute('select 1;') ... box.sql.execute('select 1; select 2;') --- -- error: keyword "select" is reserved +- error: Keyword 'select' is reserved. Please use double quotes if 'select' is an + identifier. ... box.sql.execute('create table t1 (id INT primary key); select 100;') --- -- error: keyword "select" is reserved +- error: Keyword 'select' is reserved. Please use double quotes if 'select' is an + identifier. ... box.space.t1 == nil --- @@ -26,17 +28,17 @@ box.space.t1 == nil ... box.sql.execute(';') --- -- error: 'syntax error: empty request' +- error: Failed to execute an empty SQL statement ... box.sql.execute('') --- -- error: 'syntax error: empty request' +- error: Failed to execute an empty SQL statement ... box.sql.execute(' ;') --- -- error: 'syntax error: empty request' +- error: Failed to execute an empty SQL statement ... box.sql.execute('\n\n\n\t\t\t ') --- -- error: 'syntax error: empty request' +- error: Failed to execute an empty SQL statement ... diff --git a/test/sql/on-conflict.result b/test/sql/on-conflict.result index 07bb403..6d37e69 100644 --- a/test/sql/on-conflict.result +++ b/test/sql/on-conflict.result @@ -13,37 +13,37 @@ box.sql.execute('pragma sql_default_engine=\''..engine..'\'') -- box.sql.execute("CREATE TABLE t (id INTEGER PRIMARY KEY, v INTEGER UNIQUE ON CONFLICT ABORT)") --- -- error: keyword "ON" is reserved +- error: Keyword 'ON' is reserved. Please use double quotes if 'ON' is an identifier. ... box.sql.execute("CREATE TABLE q (id INTEGER PRIMARY KEY, v INTEGER UNIQUE ON CONFLICT FAIL)") --- -- error: keyword "ON" is reserved +- error: Keyword 'ON' is reserved. Please use double quotes if 'ON' is an identifier. ... box.sql.execute("CREATE TABLE p (id INTEGER PRIMARY KEY, v INTEGER UNIQUE ON CONFLICT IGNORE)") --- -- error: keyword "ON" is reserved +- error: Keyword 'ON' is reserved. Please use double quotes if 'ON' is an identifier. ... box.sql.execute("CREATE TABLE g (id INTEGER PRIMARY KEY, v INTEGER UNIQUE ON CONFLICT REPLACE)") --- -- error: keyword "ON" is reserved +- error: Keyword 'ON' is reserved. Please use double quotes if 'ON' is an identifier. ... box.sql.execute("CREATE TABLE e (id INTEGER PRIMARY KEY ON CONFLICT REPLACE, v INTEGER)") --- -- error: keyword "ON" is reserved +- error: Keyword 'ON' is reserved. Please use double quotes if 'ON' is an identifier. ... box.sql.execute("CREATE TABLE t1(a INT PRIMARY KEY ON CONFLICT REPLACE)") --- -- error: keyword "ON" is reserved +- error: Keyword 'ON' is reserved. Please use double quotes if 'ON' is an identifier. ... box.sql.execute("CREATE TABLE t2(a INT PRIMARY KEY ON CONFLICT IGNORE)") --- -- error: keyword "ON" is reserved +- error: Keyword 'ON' is reserved. Please use double quotes if 'ON' is an identifier. ... -- CHECK constraint is illegal with REPLACE option. -- box.sql.execute("CREATE TABLE t (id INTEGER PRIMARY KEY, a INTEGER CHECK (a > 5) ON CONFLICT REPLACE);") --- -- error: keyword "ON" is reserved +- error: Keyword 'ON' is reserved. Please use double quotes if 'ON' is an identifier. ... -- -- gh-3473: Primary key can't be declared with NULL. diff --git a/test/sql/types.result b/test/sql/types.result index 9043cbf..7261f66 100644 --- a/test/sql/types.result +++ b/test/sql/types.result @@ -8,7 +8,8 @@ test_run = env.new() -- box.sql.execute("CREATE TABLE t1 (id PRIMARY KEY);") --- -- error: keyword "PRIMARY" is reserved +- error: Keyword 'PRIMARY' is reserved. Please use double quotes if 'PRIMARY' is an + identifier. ... box.sql.execute("CREATE TABLE t1 (a, id INT PRIMARY KEY);") --- @@ -16,7 +17,8 @@ box.sql.execute("CREATE TABLE t1 (a, id INT PRIMARY KEY);") ... box.sql.execute("CREATE TABLE t1 (id PRIMARY KEY, a INT);") --- -- error: keyword "PRIMARY" is reserved +- error: Keyword 'PRIMARY' is reserved. Please use double quotes if 'PRIMARY' is an + identifier. ... box.sql.execute("CREATE TABLE t1 (id INT PRIMARY KEY, a);") --- @@ -24,7 +26,8 @@ box.sql.execute("CREATE TABLE t1 (id INT PRIMARY KEY, a);") ... box.sql.execute("CREATE TABLE t1 (id INT PRIMARY KEY, a INT, b UNIQUE);") --- -- error: keyword "UNIQUE" is reserved +- error: Keyword 'UNIQUE' is reserved. Please use double quotes if 'UNIQUE' is an + identifier. ... -- gh-3104: real type is stored in space format. -- -- 2.7.4
next reply other threads:[~2019-02-21 15:40 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-02-21 15:40 imeevma [this message] 2019-02-21 19:01 ` [tarantool-patches] " n.pettik
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=ce92027aadf2864da791ff55285122d7fab96fcf.1550763542.git.imeevma@gmail.com \ --to=imeevma@tarantool.org \ --cc=korablev@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='Re: [tarantool-patches] [PATCH v1 1/1] sql: rework five syntax errors' \ /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