From: imeevma@tarantool.org
To: korablev@tarantool.org
Cc: tarantool-patches@freelists.org
Subject: [tarantool-patches] [PATCH v4 5/8] sql: remove field zErrMsg from struct Parse
Date: Wed, 13 Mar 2019 20:03:15 +0300 [thread overview]
Message-ID: <d0d78b7eb71413f1e5b0cc7bf0c3c83e4aafe55b.1552494059.git.imeevma@gmail.com> (raw)
In-Reply-To: <cover.1552494059.git.imeevma@gmail.com>
Hi! Thank you for review! My answers and new version of patch
below. Here won't be diff between patches due to some of its code
were moved to previous patches.
On 3/5/19 12:06 PM, n.pettik wrote:
>
>>>> @@ -146,11 +145,7 @@ sqlPrepare(sql * db, /* Database handle. */
>>>> *ppStmt = (sql_stmt *) sParse.pVdbe;
>>>> }
>>>>
>>>> - if (zErrMsg) {
>>>> - sqlErrorWithMsg(db, rc, "%s", zErrMsg);
>>>> - } else {
>>>> - sqlError(db, rc);
>>>> - }
>>>> + sqlError(db, rc);
>>>
>>> sqlError seems to be useless/dead. Please, make a note somewhere
>>> to remove it as follow-up to error-refactoring patch-set.
>>>
>> Ok, made a note.
>
> And where is it? Please, paste a link to it.
I will compile all of notices to this issue and send them a bit later.
>> New version:
>>
>> commit 29c77ea3f8463994b98bcb23653f901cf46e472a
>> Author: Mergen Imeev <imeevma@gmail.com>
>> Date: Wed Feb 27 09:40:17 2019 +0300
>>
>> sql: remove field zErrMsg of struct Parse
>>
>> This field become unused and should be removed.
>>
>> Part of #3965
>>
>> diff --git a/src/box/sql/prepare.c b/src/box/sql/prepare.c
>> index 42737ff..4359fa7 100644
>> --- a/src/box/sql/prepare.c
>> +++ b/src/box/sql/prepare.c
>> @@ -52,7 +52,6 @@ sqlPrepare(sql * db, /* Database handle. */
>> const char **pzTail /* OUT: End of parsed string */
>> )
>> {
>> - char *zErrMsg = 0; /* Error message */
>> int rc = SQL_OK; /* Result code */
>> Parse sParse; /* Parsing context */
>> sql_parser_create(&sParse, db);
>> @@ -89,14 +88,14 @@ sqlPrepare(sql * db, /* Database handle. */
>> }
>> zSqlCopy = sqlDbStrNDup(db, zSql, nBytes);
>> if (zSqlCopy) {
>> - sqlRunParser(&sParse, zSqlCopy, &zErrMsg);
>> + sqlRunParser(&sParse, zSqlCopy);
>> sParse.zTail = &zSql[sParse.zTail - zSqlCopy];
>> sqlDbFree(db, zSqlCopy);
>> } else {
>> sParse.zTail = &zSql[nBytes];
>> }
>> } else {
>> - sqlRunParser(&sParse, zSql, &zErrMsg);
>> + sqlRunParser(&sParse, zSql);
>> }
>> assert(0 == sParse.nQueryLoop);
>>
>> @@ -169,11 +168,7 @@ sqlPrepare(sql * db, /* Database handle. */
>> *ppStmt = (sql_stmt *) sParse.pVdbe;
>> }
>>
>> - if (zErrMsg) {
>> - sqlErrorWithMsg(db, rc, "%s", zErrMsg);
>> - } else {
>> - sqlError(db, rc);
>> - }
>> + sqlError(db, rc);
>
> As we pointed out, you can remove this call.
Removed.
>>
>> /* Delete any TriggerPrg structures allocated while parsing this statement. */
>> while (sParse.pTriggerPrg) {
>> @@ -318,7 +313,6 @@ sql_parser_destroy(Parse *parser)
>> db->lookaside.bDisable -= parser->disableLookaside;
>> }
>> parser->disableLookaside = 0;
>> - sqlDbFree(db, parser->zErrMsg);
>> switch (parser->parsed_ast_type) {
>> case AST_TYPE_SELECT:
>> sql_select_delete(db, parser->parsed_ast.select);
>> diff --git a/src/box/sql/select.c b/src/box/sql/select.c
>> index cfac553..66cbc73 100644
>> --- a/src/box/sql/select.c
>> +++ b/src/box/sql/select.c
>> @@ -5431,9 +5431,7 @@ vdbe_code_raise_on_multiple_rows(struct Parse *parser, int limit_reg, int end_ma
>> * The results are returned according to the SelectDest structure.
>> * See comments in sqlInt.h for further information.
>> *
>> - * This routine returns the number of errors. If any errors are
>> - * encountered, then an appropriate error message is left in
>> - * pParse->zErrMsg.
>> + * This routine returns the number of errors.
>
> That’s not true:
>
> rc = pParse->is_aborted;
>
> /* Control jumps to here if an error is encountered above, or upon
> * successful coding of the SELECT.
> */
> select_end:
> pParse->iSelectId = iRestoreSelectId;
>
> /* Identify column names if results of the SELECT are to be output.
> */
> if (rc == SQL_OK && pDest->eDest == SRT_Output) {
> generateColumnNames(pParse, pTabList, pEList);
> }
>
> sqlDbFree(db, sAggInfo.aCol);
> sqlDbFree(db, sAggInfo.aFunc);
> #ifdef SQL_DEBUG
> SELECTTRACE(1, pParse, p, ("end processing\n"));
> pParse->nSelectIndent--;
> #endif
> return rc;
>
> So it doesn’t return count of occurred errors.
>
>> diff --git a/src/box/sql/tokenize.c b/src/box/sql/tokenize.c
>> index 4ca3c2e..1a7248e 100644
>> --- a/src/box/sql/tokenize.c
>> +++ b/src/box/sql/tokenize.c
>> @@ -439,13 +439,10 @@ parser_space_delete(struct sql *db, struct space *space)
>>
>> /*
>> * Run the parser on the given SQL string. The parser structure is
>> - * passed in. An SQL_ status code is returned. If an error occurs
>> - * then an and attempt is made to write an error message into
>> - * memory obtained from sql_malloc() and to make *pzErrMsg point to that
>> - * error message.
>> + * passed in. An SQL_ status code is returned.
>
> On the other hand:
>
> return nErr;
>
> So what is the truth?
>
Fixed, rewritten part of the comment.
New version:
commit d0d78b7eb71413f1e5b0cc7bf0c3c83e4aafe55b
Author: Mergen Imeev <imeevma@gmail.com>
Date: Wed Feb 27 09:40:17 2019 +0300
sql: remove field zErrMsg from struct Parse
This field become unused and should be removed.
Part of #3965
diff --git a/src/box/sql/prepare.c b/src/box/sql/prepare.c
index 85385ee..512a3dd 100644
--- a/src/box/sql/prepare.c
+++ b/src/box/sql/prepare.c
@@ -311,7 +311,6 @@ sql_parser_destroy(Parse *parser)
db->lookaside.bDisable -= parser->disableLookaside;
}
parser->disableLookaside = 0;
- sqlDbFree(db, parser->zErrMsg);
switch (parser->parsed_ast_type) {
case AST_TYPE_SELECT:
sql_select_delete(db, parser->parsed_ast.select);
diff --git a/src/box/sql/select.c b/src/box/sql/select.c
index e83b898..9a8ea9d 100644
--- a/src/box/sql/select.c
+++ b/src/box/sql/select.c
@@ -5431,12 +5431,11 @@ vdbe_code_raise_on_multiple_rows(struct Parse *parser, int limit_reg, int end_ma
* The results are returned according to the SelectDest structure.
* See comments in sqlInt.h for further information.
*
- * This routine returns the number of errors. If any errors are
- * encountered, then an appropriate error message is left in
- * pParse->zErrMsg.
- *
* This routine does NOT free the Select structure passed in. The
* calling function needs to do that.
+ *
+ * @retval 0 on success.
+ * @retval != 0 on error.
*/
int
sqlSelect(Parse * pParse, /* The parser context */
diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
index b05e67b..5ddaca2 100644
--- a/src/box/sql/sqlInt.h
+++ b/src/box/sql/sqlInt.h
@@ -2653,7 +2653,6 @@ struct fk_constraint_parse {
*/
struct Parse {
sql *db; /* The main database structure */
- char *zErrMsg; /* An error message */
Vdbe *pVdbe; /* An engine for executing database bytecode */
u8 colNamesSet; /* TRUE after OP_ColumnName has been issued to pVdbe */
u8 nTempReg; /* Number of temporary registers in aTempReg[] */
diff --git a/src/box/sql/tokenize.c b/src/box/sql/tokenize.c
index be04c17..db06c39 100644
--- a/src/box/sql/tokenize.c
+++ b/src/box/sql/tokenize.c
@@ -531,8 +531,6 @@ sqlRunParser(Parse * pParse, const char *zSql)
sqlParserFree(pEngine, sql_free);
if (db->mallocFailed)
pParse->is_aborted = true;
- if (pParse->is_aborted && pParse->zErrMsg == 0)
- pParse->zErrMsg = sqlMPrintf(db, "%s", tarantoolErrorMessage());
if (pParse->pVdbe != NULL && pParse->is_aborted) {
sqlVdbeDelete(pParse->pVdbe);
pParse->pVdbe = 0;
diff --git a/src/box/sql/trigger.c b/src/box/sql/trigger.c
index 7eacd33..2f1268a 100644
--- a/src/box/sql/trigger.c
+++ b/src/box/sql/trigger.c
@@ -721,25 +721,6 @@ onErrorText(int onError)
}
#endif
-/*
- * Parse context structure pFrom has just been used to create a sub-vdbe
- * (trigger program). If an error has occurred, transfer error information
- * from pFrom to pTo.
- */
-static void
-transferParseError(Parse * pTo, Parse * pFrom)
-{
- assert(pFrom->zErrMsg == 0 || pFrom->is_aborted);
- assert(pTo->zErrMsg == 0 || pTo->is_aborted);
- if (!pTo->is_aborted) {
- pTo->zErrMsg = pFrom->zErrMsg;
- pTo->is_aborted = pFrom->is_aborted;
- } else {
- sqlDbFree(pFrom->db, pFrom->zErrMsg);
- }
- pFrom->zErrMsg = NULL;
-}
-
/**
* Create and populate a new TriggerPrg object with a sub-program
* implementing trigger pTrigger with ON CONFLICT policy orconf.
@@ -848,7 +829,8 @@ sql_row_trigger_program(struct Parse *parser, struct sql_trigger *trigger,
VdbeComment((v, "End: %s.%s", trigger->zName,
onErrorText(orconf)));
- transferParseError(parser, pSubParse);
+ if (!parser->is_aborted)
+ parser->is_aborted = pSubParse->is_aborted;
if (db->mallocFailed == 0) {
pProgram->aOp =
sqlVdbeTakeOpArray(v, &pProgram->nOp,
--
2.7.4
next prev parent reply other threads:[~2019-03-13 17:03 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 ` imeevma [this message]
2019-03-14 22:15 ` [tarantool-patches] Re: [PATCH v4 5/8] sql: remove field zErrMsg " 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
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=d0d78b7eb71413f1e5b0cc7bf0c3c83e4aafe55b.1552494059.git.imeevma@gmail.com \
--to=imeevma@tarantool.org \
--cc=korablev@tarantool.org \
--cc=tarantool-patches@freelists.org \
--subject='Re: [tarantool-patches] [PATCH v4 5/8] sql: remove field zErrMsg from struct Parse' \
/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