From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
To: Kirill Shcherbatov <kshcherbatov@tarantool.org>,
tarantool-patches@freelists.org
Subject: [tarantool-patches] Re: [PATCH v3 10/10] sql: VDBE tests for trigger existence
Date: Tue, 19 Jun 2018 13:24:28 +0300 [thread overview]
Message-ID: <4ed9ea53-a3b1-a633-9174-f7db97f3e40c@tarantool.org> (raw)
In-Reply-To: <79bd10d4-579b-92b3-e1ed-755d33febb8b@tarantool.org>
Hello. Thanks for the fixes! See 4 comments below.
On 18/06/2018 22:22, Kirill Shcherbatov wrote:
>> 1. Sorry, after discussion with Nikita we have decided to
>> use 'vdbe_' prefix for emitters even if they take parser in
>> first argument.
> Tnx, squashed.
>
>> 2. Mismatch of parameter names: error in header, error_src in source.
> Fixed.
1. Still is not fixed. Now mismatch of the parameter name in the
declaration and the name in the comment.
>
>> 3. Please, reduce the mess. Separate these OOM handlers.
> name = sqlite3DbStrDup(db, name_src);
> - if (name == NULL)
> + if (name == NULL) {
> + size_t size = strlen(name_src) + 1;
> + diag_set(OutOfMemory, size, "sqlite3DbStrDup", "name");
> return -1;
> + }
> error = sqlite3DbStrDup(db, error_src);
> if (error == NULL) {
> sqlite3DbFree(db, name);
> - return -1;
> - }
> - if (name == NULL || error == NULL) {
> - size_t size =
> - (name != NULL ? strlen(error_src) :
> - strlen(name_src)) + 1;
> - const char *var_name = name != NULL ? "error" : "name";
> - diag_set(OutOfMemory, size, "sqlite3DbStrDup", var_name);
> - sqlite3DbFree(db, name);
> - sqlite3DbFree(db, error);
> + size_t size = strlen(error_src) + 1;
> + diag_set(OutOfMemory, size, "sqlite3DbStrDup", "error");
> return -1;
> }
>
>
>> 6. Earlier this function could return either DONE or ERROR. Now
>> it can return SQL_TARANTOOL_ERROR, and I am not sure that the
>> behavior should be changed in such way. Please, explain why do you
>> need SQL_TARANTOOL_ERROR here.
> This is the sane behavior that parser has. I'd like to distinguish tarantool errors and out them from diag like Parser does.
> Take a look to the changes in sqlite3_errmsg.
2. I see the changes, but they are not linked with VdbeExec return value. The only
place where you have used SQL_TARANTOOL_ERROR is an assertion in sqlite3Step.
db->errCode finally is set not to VdbeExec return value, but to Vdbe->rc, that
is SQL_TARANTOOL_ERROR already.
I have reverted your changes at the end of OP_Halt:
@@ -1033,10 +1033,7 @@ case OP_Halt: {
p->rc = SQLITE_BUSY;
} else {
assert(rc==SQLITE_OK || (p->rc&0xff)==SQLITE_CONSTRAINT);
- if (p->rc != SQL_TARANTOOL_ERROR)
- rc = p->rc != SQLITE_OK ? SQLITE_ERROR : SQLITE_DONE;
- else
- rc = SQL_TARANTOOL_ERROR;
+ rc = p->rc ? SQLITE_ERROR : SQLITE_DONE;
}
goto vdbe_return;
And nothing is changed. The tests passed ok.
Why?
3. Please, put a new patch version at the end of letter.
> diff --git a/src/box/sql/build.c b/src/box/sql/build.c
> index 0edbda1d9..4588b1c6d 100644
> --- a/src/box/sql/build.c
> +++ b/src/box/sql/build.c
> @@ -4145,4 +4145,50 @@ sqlite3WithDelete(sqlite3 * db, With * pWith)
> sqlite3DbFree(db, pWith);
> }
> }
> +
> +int
> +vdbe_emit_execution_halt_on_exists(struct Parse *parser, int space_id,
> + int index_id, const char *name_src,
> + int tarantool_error_code,
> + const char *error_src, bool no_error)
> +{
> + struct Vdbe *v = sqlite3GetVdbe(parser);
> + assert(v != NULL);
> +
> + struct sqlite3 *db = parser->db;
> + char *name = NULL;
> + char *error = NULL;
> + name = sqlite3DbStrDup(db, name_src);
> + if (name == NULL) {
> + size_t size = strlen(name_src) + 1;
> + diag_set(OutOfMemory, size, "sqlite3DbStrDup", "name");
> + return -1;
> + }
> + error = sqlite3DbStrDup(db, error_src);
> + if (error == NULL) {
> + sqlite3DbFree(db, name);
> + size_t size = strlen(error_src) + 1;
> + diag_set(OutOfMemory, size, "sqlite3DbStrDup", "error");
> + return -1;
> + }
4. Why do you need to separate char *name and *error announcements from
assignments?
next prev parent reply other threads:[~2018-06-19 10:24 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-14 17:32 [tarantool-patches] [PATCH v3 00/10] sql: remove Triggers to server Kirill Shcherbatov
2018-06-14 17:32 ` [tarantool-patches] [PATCH v3 01/10] box: move db->pShchema init to sql_init Kirill Shcherbatov
2018-06-14 17:32 ` [tarantool-patches] [PATCH v3 10/10] sql: VDBE tests for trigger existence Kirill Shcherbatov
2018-06-14 19:27 ` [tarantool-patches] " Vladislav Shpilevoy
2018-06-15 16:21 ` Kirill Shcherbatov
2018-06-18 15:42 ` Vladislav Shpilevoy
2018-06-18 19:22 ` Kirill Shcherbatov
2018-06-19 10:24 ` Vladislav Shpilevoy [this message]
2018-06-19 15:12 ` Kirill Shcherbatov
2018-06-19 15:23 ` Vladislav Shpilevoy
2018-06-20 6:38 ` Kirill Shcherbatov
2018-06-20 8:10 ` Vladislav Shpilevoy
2018-06-20 8:24 ` Kirill Shcherbatov
2018-06-14 17:32 ` [tarantool-patches] [PATCH v3 02/10] sql: fix leak on CREATE TABLE and resolve self ref Kirill Shcherbatov
2018-06-14 22:46 ` [tarantool-patches] " n.pettik
2018-06-15 9:25 ` Vladislav Shpilevoy
2018-06-14 17:32 ` [tarantool-patches] [PATCH v3 03/10] sql: fix sql len in tarantoolSqlite3RenameTrigger Kirill Shcherbatov
2018-06-14 17:32 ` [tarantool-patches] [PATCH v3 04/10] box: port schema_find_id to C Kirill Shcherbatov
2018-06-14 19:27 ` [tarantool-patches] " Vladislav Shpilevoy
2018-06-14 22:46 ` n.pettik
2018-06-15 9:25 ` Vladislav Shpilevoy
2018-06-14 17:32 ` [tarantool-patches] [PATCH v3 05/10] sql: refactor sql_expr_compile to return AST Kirill Shcherbatov
2018-06-14 19:27 ` [tarantool-patches] " Vladislav Shpilevoy
2018-06-15 16:21 ` Kirill Shcherbatov
2018-06-14 17:32 ` [tarantool-patches] [PATCH v3 06/10] sql: move sqlite3DeleteTrigger to sql.h Kirill Shcherbatov
2018-06-14 19:27 ` [tarantool-patches] " Vladislav Shpilevoy
2018-06-14 17:32 ` [tarantool-patches] [PATCH v3 07/10] box: sort error codes in misc.test Kirill Shcherbatov
2018-06-14 17:32 ` [tarantool-patches] [PATCH v3 08/10] sql: new _trigger space format with space_id Kirill Shcherbatov
2018-06-14 19:27 ` [tarantool-patches] " Vladislav Shpilevoy
2018-06-15 16:21 ` Kirill Shcherbatov
2018-06-14 17:32 ` [tarantool-patches] [PATCH v3 09/10] sql: move Triggers to server Kirill Shcherbatov
2018-06-14 19:27 ` [tarantool-patches] " Vladislav Shpilevoy
2018-06-15 16:21 ` Kirill Shcherbatov
2018-06-18 15:42 ` Vladislav Shpilevoy
2018-06-18 19:22 ` Kirill Shcherbatov
2018-06-14 17:34 ` [tarantool-patches] Re: [PATCH v3 00/10] sql: remove " Kirill Shcherbatov
2018-06-20 8:35 ` Vladislav Shpilevoy
2018-06-28 15:47 ` 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=4ed9ea53-a3b1-a633-9174-f7db97f3e40c@tarantool.org \
--to=v.shpilevoy@tarantool.org \
--cc=kshcherbatov@tarantool.org \
--cc=tarantool-patches@freelists.org \
--subject='[tarantool-patches] Re: [PATCH v3 10/10] sql: VDBE tests for trigger existence' \
/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