From: imeevma@tarantool.org To: korablev@tarantool.org Cc: tarantool-patches@freelists.org Subject: [tarantool-patches] [PATCH v2 3/5] sql: save SQL parser errors in diag_set() Date: Mon, 25 Feb 2019 20:14:25 +0300 [thread overview] Message-ID: <85c9010267eba42be66e8c945d2b69098238a979.1551114402.git.imeevma@gmail.com> (raw) In-Reply-To: <cover.1551114402.git.imeevma@gmail.com> After this patch all SQL parser errors will be saved in diag_set() instead of field zErrMsg of struct Parse. Part of #3965 --- src/box/errcode.h | 1 + src/box/sql/build.c | 3 ++- src/box/sql/util.c | 6 +++--- test/box/misc.result | 1 + test/sql-tap/check.test.lua | 2 +- test/sql/triggers.result | 4 ++-- 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/box/errcode.h b/src/box/errcode.h index 6546b2f..779d927 100644 --- a/src/box/errcode.h +++ b/src/box/errcode.h @@ -238,6 +238,7 @@ struct errcode_record { /*183 */_(ER_SQL_KEYWORD_IS_RESERVED, "Keyword '%.*s' is reserved. Please use double quotes if '%.*s' is an identifier.") \ /*184 */_(ER_SQL_SYNTAX_NEAR, "Unrecognized syntax near '%.*s'") \ /*185 */_(ER_SQL_UNKNOWN_TOKEN, "Syntax error: unrecognized token: '%.*s'") \ + /*186 */_(ER_SQL_PARSER_GENERIC, "%s") \ /* * !IMPORTANT! Please follow instructions at start of the file diff --git a/src/box/sql/build.c b/src/box/sql/build.c index f112c9f..deb5b89 100644 --- a/src/box/sql/build.c +++ b/src/box/sql/build.c @@ -194,7 +194,8 @@ sql_finish_coding(struct Parse *parse_context) sqlVdbeMakeReady(v, parse_context); parse_context->rc = SQL_DONE; } else { - parse_context->rc = SQL_ERROR; + if (parse_context->rc != SQL_TARANTOOL_ERROR) + parse_context->rc = SQL_ERROR; } } /** diff --git a/src/box/sql/util.c b/src/box/sql/util.c index c89e2e8..e4c93cb 100644 --- a/src/box/sql/util.c +++ b/src/box/sql/util.c @@ -236,10 +236,10 @@ sqlErrorMsg(Parse * pParse, const char *zFormat, ...) va_start(ap, zFormat); zMsg = sqlVMPrintf(db, zFormat, ap); va_end(ap); + diag_set(ClientError, ER_SQL_PARSER_GENERIC, zMsg); + sqlDbFree(db, zMsg); pParse->nErr++; - sqlDbFree(db, pParse->zErrMsg); - pParse->zErrMsg = zMsg; - pParse->rc = SQL_ERROR; + pParse->rc = SQL_TARANTOOL_ERROR; } void diff --git a/test/box/misc.result b/test/box/misc.result index a1c94bf..47393d1 100644 --- a/test/box/misc.result +++ b/test/box/misc.result @@ -514,6 +514,7 @@ t; 182: box.error.SQL_STATEMENT_EMPTY 184: box.error.SQL_SYNTAX_NEAR 185: box.error.SQL_UNKNOWN_TOKEN + 186: box.error.SQL_PARSER_GENERIC ... test_run:cmd("setopt delimiter ''"); --- diff --git a/test/sql-tap/check.test.lua b/test/sql-tap/check.test.lua index f7d3ffe..8ce3184 100755 --- a/test/sql-tap/check.test.lua +++ b/test/sql-tap/check.test.lua @@ -319,7 +319,7 @@ test:do_catchsql_test( ); ]], { -- <check-3.1> - 1, "Failed to create space 'T3': SQL error: subqueries prohibited in CHECK constraints" + 1, "Failed to create space 'T3': subqueries prohibited in CHECK constraints" -- </check-3.1> }) diff --git a/test/sql/triggers.result b/test/sql/triggers.result index bbfff33..9ab169b 100644 --- a/test/sql/triggers.result +++ b/test/sql/triggers.result @@ -398,14 +398,14 @@ space_id = box.space.T1.id ... box.sql.execute("CREATE TRIGGER tr1 AFTER INSERT ON t1 WHEN new.a = ? BEGIN SELECT 1; END;") --- -- error: 'SQL error: bindings are not allowed in DDL' +- error: bindings are not allowed in DDL ... tuple = {"TR1", space_id, {sql = [[CREATE TRIGGER tr1 AFTER INSERT ON t1 WHEN new.a = ? BEGIN SELECT 1; END;]]}} --- ... box.space._trigger:insert(tuple) --- -- error: 'SQL error: bindings are not allowed in DDL' +- error: bindings are not allowed in DDL ... box.sql.execute("DROP TABLE t1;") --- -- 2.7.4
next prev parent reply other threads:[~2019-02-25 17:14 UTC|newest] Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-02-25 17:14 [tarantool-patches] [PATCH v2 0/5] sql: use diag_set() for errors in SQL imeevma 2019-02-25 17:14 ` [tarantool-patches] [PATCH v2 1/5] sql: remove "syntax error after column name" error imeevma 2019-02-25 19:34 ` [tarantool-patches] " n.pettik 2019-02-27 11:32 ` Kirill Yukhin 2019-02-25 17:14 ` [tarantool-patches] [PATCH v2 2/5] sql: rework syntax errors imeevma 2019-02-25 20:02 ` [tarantool-patches] " n.pettik 2019-02-26 8:24 ` Konstantin Osipov 2019-02-26 12:59 ` n.pettik 2019-02-26 13:12 ` Konstantin Osipov 2019-02-26 15:59 ` Imeev Mergen 2019-02-25 17:14 ` imeevma [this message] 2019-02-25 23:01 ` [tarantool-patches] Re: [PATCH v2 3/5] sql: save SQL parser errors in diag_set() n.pettik 2019-02-26 8:25 ` Konstantin Osipov 2019-02-26 15:29 ` Imeev Mergen 2019-02-25 17:14 ` [tarantool-patches] [PATCH v2 4/5] sql: remove file zErrMsg of struct Parse imeevma 2019-02-26 14:47 ` [tarantool-patches] " n.pettik 2019-02-26 15:36 ` Imeev Mergen 2019-02-26 18:17 ` n.pettik 2019-02-25 17:14 ` [tarantool-patches] [PATCH v2 5/5] sql: remove field nErr " imeevma 2019-02-26 8:27 ` [tarantool-patches] " Konstantin Osipov 2019-02-26 14:48 ` 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=85c9010267eba42be66e8c945d2b69098238a979.1551114402.git.imeevma@gmail.com \ --to=imeevma@tarantool.org \ --cc=korablev@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='Re: [tarantool-patches] [PATCH v2 3/5] sql: save SQL parser errors in diag_set()' \ /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