From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
To: "n.pettik" <korablev@tarantool.org>, tarantool-patches@freelists.org
Subject: [tarantool-patches] Re: [PATCH 1/6] sql: move constraint name to struct contraint_parse
Date: Wed, 16 Jan 2019 23:54:09 +0300 [thread overview]
Message-ID: <01339b2d-9868-3f4e-e4c3-c7b5c5c9e5dd@tarantool.org> (raw)
In-Reply-To: <3C226FE6-A27A-46CD-8C83-AA839AAF08F2@tarantool.org>
Hi! Thanks for the fixes! See 2 comments below.
> diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
> index 51a5d01b5..981e3c660 100644
> --- a/src/box/sql/sqliteInt.h
> +++ b/src/box/sql/sqliteInt.h
> @@ -2697,7 +2697,7 @@ struct fkey_parse {
> */
> struct constraint_parse {
> /** Name of table which constraint belongs to. */
> - struct SrcList *table_name;
> + struct SrcList *table;
> /** Name of the constraint currently being parsed. */
> struct Token name;
> };
>
>>
>>> + /** Name of the constraint currently being parsed. */
>>> + struct Token name;
>>> +};
>>
>> 2.1. Also, I see that struct constraint_parse is not able to
>> describe a foreign key - it has no parent table, referenced
>> columns - you pass them separately from struct constraint_parse
>> which looks contr-intuitive. Can you please, elaborate so it,
>> for example, has struct fkey_parse as a member? Or at least,
>> have both parent and child table name and cols as Token and
>> ExprList pointers?
>
> According to ANSI only three constraints can be added:
> UNIQUE/PK, FK and CHECK.
1. But you've named foreign key system space _fk_constraint ...
And here you have struct constraint_parse, which is not able to
fit a whole fk *constraint*.
> Only name of table and name
> of constraint are shared among features of these constraints:
> CHECK also has ExprSpan and UNIQUE - columns (child).
> I guess it is fair to move child cols to this structure,
> but other members seems to be redundant.
> Hence, I will add parent name and parent colls
> only if you insist.
If I were you I would add here both child and parent attributes,
is_deferred, action, but who am I to insist on anything? Please,
consult server team chat whether we should consider foreign keys
as constraints. Or do nothing. I am not a manager, so it is just
an advice. I do not insist on elaborating this structure further.
(Although it looks unfinished to me.)
>
> diff --git a/src/box/sql/build.c b/src/box/sql/build.c
> index 963b16626..af961592a 100644
> --- a/src/box/sql/build.c
> +++ b/src/box/sql/build.c
>
> @@ -727,8 +726,10 @@ sqlite3AddPrimaryKey(Parse * pParse, /* Parsing context */
> &token, 0));
> if (list == NULL)
> goto primary_key_exit;
> - sql_create_index(pParse, 0, 0, list, 0, SORT_ORDER_ASC,
> + pParse->constraint.cols = list;
> + sql_create_index(pParse, 0, 0, 0, SORT_ORDER_ASC,
> false, SQL_INDEX_TYPE_CONSTRAINT_PK);
> + pParse->constraint.cols = NULL;
2. I think, that it is safer to nullify pParse->constraint.cols in the
same place where it is deleted, inside sql_create_index. What do you think?
Also, it removes code duplication here and in the hunk below.
> if (db->mallocFailed)
> goto primary_key_exit;
> } else if (autoInc) {
> @@ -736,8 +737,10 @@ sqlite3AddPrimaryKey(Parse * pParse, /* Parsing context */
> "INTEGER PRIMARY KEY or INT PRIMARY KEY");
> goto primary_key_exit;
> } else {
> - sql_create_index(pParse, 0, 0, pList, 0, sortOrder, false,
> + pParse->constraint.cols = pList;
> + sql_create_index(pParse, 0, 0, 0, sortOrder, false,
> SQL_INDEX_TYPE_CONSTRAINT_PK);
> + pParse->constraint.cols = NULL;
> pList = 0;
> if (pParse->nErr > 0)
> goto primary_key_exit;
>
next prev parent reply other threads:[~2019-01-16 20:54 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-09 12:13 [tarantool-patches] [PATCH 0/6] Introduce ALTER TABLE ADD CONSTRAINT UNIQUE/PK Nikita Pettik
2019-01-09 12:13 ` [tarantool-patches] [PATCH 1/6] sql: move constraint name to struct contraint_parse Nikita Pettik
2019-01-14 14:04 ` [tarantool-patches] " Vladislav Shpilevoy
2019-01-16 20:06 ` n.pettik
2019-01-16 20:54 ` Vladislav Shpilevoy [this message]
2019-01-17 10:56 ` Konstantin Osipov
2019-01-17 17:14 ` n.pettik
2019-01-09 12:13 ` [tarantool-patches] [PATCH 2/6] sql: rework ALTER TABLE grammar Nikita Pettik
2019-01-14 14:05 ` [tarantool-patches] " Vladislav Shpilevoy
2019-01-16 20:06 ` n.pettik
2019-01-16 20:54 ` Vladislav Shpilevoy
2019-01-17 11:51 ` Konstantin Osipov
2019-01-17 17:14 ` n.pettik
2019-01-18 1:42 ` Konstantin Osipov
2019-01-09 12:13 ` [tarantool-patches] [PATCH 3/6] sql: remove start token from sql_create_index args Nikita Pettik
2019-01-09 12:13 ` [tarantool-patches] [PATCH 4/6] sql: refactor getNewIid() function Nikita Pettik
2019-01-14 14:05 ` [tarantool-patches] " Vladislav Shpilevoy
2019-01-09 12:13 ` [tarantool-patches] [PATCH 5/6] sql: fix error message for improperly created index Nikita Pettik
2019-01-14 14:06 ` [tarantool-patches] " Vladislav Shpilevoy
2019-01-16 20:06 ` n.pettik
2019-01-09 12:13 ` [tarantool-patches] [PATCH 6/6] sql: introduce ALTER TABLE ADD CONSTRAINT UNIQUE/PRIMARY KEY Nikita Pettik
2019-01-14 14:06 ` [tarantool-patches] " Vladislav Shpilevoy
2019-01-16 20:06 ` n.pettik
2019-01-16 20:54 ` Vladislav Shpilevoy
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=01339b2d-9868-3f4e-e4c3-c7b5c5c9e5dd@tarantool.org \
--to=v.shpilevoy@tarantool.org \
--cc=korablev@tarantool.org \
--cc=tarantool-patches@freelists.org \
--subject='[tarantool-patches] Re: [PATCH 1/6] sql: move constraint name to struct contraint_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