[tarantool-patches] Re: [PATCH v2 2/5] sql: rework syntax errors

n.pettik korablev at tarantool.org
Mon Feb 25 23:02:30 MSK 2019



> On 25 Feb 2019, at 20:14, imeevma at tarantool.org wrote:
> 
> This patch reworks SQL syntax errors. After this patch, these
> error will be set as Tarantool errors.
> 
> Part of #3965
> ---
> src/box/errcode.h                          |  7 +++++
> src/box/sql/build.c                        |  6 ++---
> src/box/sql/parse.y                        | 41 ++++++++++++++++++------------
> src/box/sql/select.c                       | 11 ++++----
> src/box/sql/tokenize.c                     |  7 ++---
> test/box/misc.result                       |  6 +++++
> test/sql-tap/alter2.test.lua               |  4 +--
> test/sql-tap/blob.test.lua                 | 20 +++++++--------
> test/sql-tap/check.test.lua                | 10 ++++----
> test/sql-tap/colname.test.lua              |  2 +-
> test/sql-tap/count.test.lua                |  2 +-
> test/sql-tap/default.test.lua              |  4 +--
> test/sql-tap/e_select1.test.lua            | 18 ++++++-------
> test/sql-tap/gh-2367-pragma.test.lua       |  4 +--
> test/sql-tap/gh2168-temp-tables.test.lua   |  4 +--
> test/sql-tap/identifier_case.test.lua      |  2 +-
> test/sql-tap/index-info.test.lua           |  2 +-
> test/sql-tap/index1.test.lua               |  2 +-
> 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                |  8 +++---
> test/sql-tap/misc5.test.lua                |  6 ++---
> test/sql-tap/null.test.lua                 |  8 +++---
> test/sql-tap/select1.test.lua              | 20 +++++++--------
> test/sql-tap/select3.test.lua              |  4 +--
> test/sql-tap/start-transaction.test.lua    | 14 +++++-----
> test/sql-tap/table.test.lua                | 10 ++++----
> test/sql-tap/tkt3935.test.lua              | 14 +++++-----
> test/sql-tap/tokenize.test.lua             | 26 +++++++++----------
> test/sql-tap/trigger1.test.lua             | 14 +++++-----
> test/sql-tap/view.test.lua                 |  4 +--
> test/sql-tap/with1.test.lua                |  6 ++---
> test/sql-tap/with2.test.lua                | 18 ++++++-------
> test/sql/checks.result                     |  2 +-
> test/sql/collation.result                  | 12 ++++-----
> test/sql/foreign-keys.result               | 10 +++++---
> test/sql/gh-3888-values-blob-assert.result |  8 +++---
> test/sql/iproto.result                     | 10 ++++----
> test/sql/misc.result                       | 14 +++++-----
> test/sql/on-conflict.result                | 16 ++++++------
> test/sql/types.result                      | 13 ++++++----
> 42 files changed, 213 insertions(+), 182 deletions(-)
> 
> diff --git a/src/box/errcode.h b/src/box/errcode.h
> index a1fcf01..6546b2f 100644
> --- a/src/box/errcode.h
> +++ b/src/box/errcode.h
> @@ -231,6 +231,13 @@ struct errcode_record {
> 	/*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_INCONSISTENT_TYPES,	"Inconsistent types: expected %s got %s") \
> +	/*179 */_(ER_SQL_SYNTAX,		"Syntax error in %s: %s") \
> +	/*180 */_(ER_SQL_STACK_OVERFLOW,	"Failed to parse SQL statement: parser stack limit reached") \
> +	/*181 */_(ER_SQL_SELECT_WILDCARD,	"Failed to expand '*' in SELECT statement without FROM clause") \
> +	/*182 */_(ER_SQL_STATEMENT_EMPTY,	"Failed to execute an empty SQL statement") \
> +	/*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'") \

Quite strange name for err code.
I’d rather say ER_SQL_UNRECOGNIZED_SYMBOL/SYNTAX.
Is this message suggested by Konstantin? To be honest, I would
prefer old one. “Unrecognized syntax” doesn’t sound good and clear enough,
at least for me. Personally I would say “Syntax error near %s”.
The last one is used in several DBs, so I suppose it is common way to raise
errors like that.

> diff --git a/test/sql-tap/alter2.test.lua b/test/sql-tap/alter2.test.lua
> index e219a36..ef57955 100755
> --- a/test/sql-tap/alter2.test.lua
> +++ b/test/sql-tap/alter2.test.lua
> @@ -223,7 +223,7 @@ test:do_catchsql_test(
>         ALTER TABLE child ADD CONSTRAINT fk FOREIGN KEY REFERENCES child(id);
>     ]], {
>         -- <alter2-4.1>
> -        1, "near \"REFERENCES\": syntax error"
> +        1, "Unrecognized syntax near 'REFERENCES'"
>         -- </alter2-4.1>
>     })

The rest is obvious and OK.





More information about the Tarantool-patches mailing list