From: "n.pettik" <korablev@tarantool.org>
To: tarantool-patches@freelists.org
Cc: Imeev Mergen <imeevma@tarantool.org>
Subject: [tarantool-patches] Re: [PATCH v4 8/8] sql: remove sqlErrorMsg()
Date: Tue, 26 Mar 2019 16:34:26 +0300 [thread overview]
Message-ID: <2E9AC693-B13A-4FFD-8F0D-A3FA7AA442A3@tarantool.org> (raw)
In-Reply-To: <20190325184737.GA18346@tarantool.org>
>> @@ -1039,8 +1036,8 @@ resolveCompoundOrderBy(Parse * pParse, /* Parsing context. Leave error messages
>> const char *err = "Error at ORDER BY in place %d: "\
>> "term does not match any column in "\
>> "the result set";
>> - err = tt_sprintf(err, i + 1);
>> - diag_set(ClientError, ER_SQL_PARSER_GENERIC, err);
>> + diag_set(ClientError, ER_SQL_PARSER_GENERIC,
>> + tt_sprintf(err, i + 1));
>>
>>> @@ -1444,10 +1469,37 @@ resolveSelectStep(Walker * pWalker, Select * p)
>>> * number of expressions in the select list.
>>> */
>>> if (p->pNext && p->pEList->nExpr != p->pNext->pEList->nExpr) {
>>> - sqlSelectWrongNumTermsError(pParse, p->pNext);
>>> + if (p->pNext->selFlags & SF_Values) {
>>> + diag_set(ClientError, ER_SQL_PARSER_GENERIC,
>>> + "all VALUES must have the same "\
>>> + "number of terms");
>>> + } else {
>>> + const char *err_msg =
>>> + "SELECTs to the left and right of %s "\
>>> + "do not have the same number of "\
>>> + "result columns";
>>> + switch (p->pNext->op) {
>>> + case TK_ALL:
>>> + err_msg = tt_sprintf(err_msg,
>>> + "UNION ALL");
>>> + break;
>>
>> Why don’t use selectOpName?
>> Like it was in sqlSelectWrongNumTermsError().
>>
> Function selectOpName defined in different file and is static.
> I think it isn't worth to share it for one error.
I believe it is worth doing. For instance, you can return
sqlSelectWrongNumTermsError() which was placed in select.c
and called that static func.
> Diff between versions:
>
> diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
> index e26596a..1077285 100644
> --- a/src/box/sql/expr.c
> +++ b/src/box/sql/expr.c
> @@ -666,13 +666,7 @@ codeVectorCompare(Parse * pParse, /* Code generator context */
> int regRight = 0;
> u8 op = pExpr->op;
> int addrDone = sqlVdbeMakeLabel(v);
> -
> - if (nLeft != sqlExprVectorSize(pRight)) {
> - diag_set(ClientError, ER_SQL_PARSER_GENERIC,
> - "row value misused");
> - pParse->is_aborted = true;
> - return;
> - }
Here the problem is that function is never called in our test suite:
I placed assert(0); and no one test failed. Please, add at least
simple tests like SELECT (1, 2) == (1, 2) to make sure that
codeVectorCompare() can be processed. Tests which you’ve added
fails before this func is called.
Added comment:
diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
index 107728590..397f8209c 100644
--- a/src/box/sql/expr.c
+++ b/src/box/sql/expr.c
@@ -666,6 +666,11 @@ codeVectorCompare(Parse * pParse, /* Code generator context */
int regRight = 0;
u8 op = pExpr->op;
int addrDone = sqlVdbeMakeLabel(v);
+ /*
+ * Situation when vectors have different dimensions is
+ * filtred way before - during expr resolution:
+ * see resolveExprStep().
+ */
> + assert(nLeft == sqlExprVectorSize(pRight));
> assert(pExpr->op == TK_EQ || pExpr->op == TK_NE
> || pExpr->op == TK_LT || pExpr->op == TK_GT
> || pExpr->op == TK_LE || pExpr->op == TK_GE);
>
>
> @@ -4384,10 +4378,8 @@ sqlWhereBegin(Parse * pParse, /* The parser context */
> * equal to pTabList->nSrc but might be shortened to 1 if the
> * WHERE_OR_SUBCLAUSE flag is set.
> */
> - for (ii = 0; ii < pTabList->nSrc; ii++) {
> + for (ii = 0; ii < pTabList->nSrc; ii++)
> createMask(pMaskSet, pTabList->a[ii].iCursor);
> - sqlWhereTabFuncArgs(pParse, &pTabList->a[ii], &pWInfo->sWC);
Move removal of this func to a separate patch pls alongside with mentions of
table-valued funcs. It is not related to errors.
next prev parent reply other threads:[~2019-03-26 13:34 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-13 17:03 [tarantool-patches] [PATCH v4 0/8] sql: use diag_set() for errors in SQL imeevma
2019-03-13 17:03 ` [tarantool-patches] [PATCH v4 1/8] sql: rework syntax errors imeevma
2019-03-14 18:24 ` [tarantool-patches] " n.pettik
2019-03-14 18:28 ` Imeev Mergen
2019-03-15 14:09 ` Kirill Yukhin
2019-03-13 17:03 ` [tarantool-patches] [PATCH v4 2/8] sql: set SQL parser errors via diag_set() imeevma
2019-03-14 19:26 ` [tarantool-patches] " n.pettik
2019-03-14 19:36 ` n.pettik
2019-03-18 15:06 ` Mergen Imeev
2019-03-19 9:41 ` n.pettik
2019-03-19 11:24 ` Kirill Yukhin
2019-03-13 17:03 ` [tarantool-patches] [PATCH v4 3/8] sql: replace rc with is_aborted status in struct Parse imeevma
2019-03-14 19:53 ` [tarantool-patches] " n.pettik
2019-03-18 15:28 ` Mergen Imeev
2019-03-19 9:54 ` n.pettik
2019-03-19 13:17 ` Kirill Yukhin
2019-03-13 17:03 ` [tarantool-patches] [PATCH v4 4/8] sql: remove field nErr from " imeevma
2019-03-14 19:58 ` [tarantool-patches] " n.pettik
2019-03-19 13:27 ` Kirill Yukhin
2019-03-13 17:03 ` [tarantool-patches] [PATCH v4 5/8] sql: remove field zErrMsg " imeevma
2019-03-14 22:15 ` [tarantool-patches] " n.pettik
2019-03-19 13:20 ` Kirill Yukhin
2019-03-13 17:03 ` [tarantool-patches] [PATCH v4 6/8] sql: rework three errors of "unsupported" type imeevma
2019-03-14 22:15 ` [tarantool-patches] " n.pettik
2019-03-19 13:30 ` Kirill Yukhin
2019-03-13 17:03 ` [tarantool-patches] [PATCH v4 7/8] sql: rework semantic errors imeevma
2019-03-15 15:49 ` [tarantool-patches] " n.pettik
2019-03-22 12:48 ` Mergen Imeev
2019-03-26 14:14 ` n.pettik
2019-03-26 16:56 ` Mergen Imeev
2019-03-26 18:16 ` n.pettik
2019-03-26 19:20 ` Mergen Imeev
2019-03-26 21:36 ` n.pettik
2019-03-27 6:48 ` Kirill Yukhin
2019-03-13 17:03 ` [tarantool-patches] [PATCH v4 8/8] sql: remove sqlErrorMsg() imeevma
2019-03-15 13:36 ` [tarantool-patches] " n.pettik
2019-03-25 18:47 ` Mergen Imeev
2019-03-26 13:34 ` n.pettik [this message]
2019-03-26 17:52 ` Mergen Imeev
2019-03-26 18:28 ` n.pettik
2019-03-26 19:21 ` Mergen Imeev
2019-03-26 21:36 ` n.pettik
2019-03-27 6:49 ` Kirill Yukhin
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=2E9AC693-B13A-4FFD-8F0D-A3FA7AA442A3@tarantool.org \
--to=korablev@tarantool.org \
--cc=imeevma@tarantool.org \
--cc=tarantool-patches@freelists.org \
--subject='[tarantool-patches] Re: [PATCH v4 8/8] sql: remove sqlErrorMsg()' \
/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