From: Nikita Pettik <korablev@tarantool.org> To: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Cc: tarantool-patches@dev.tarantool.org Subject: Re: [Tarantool-patches] [PATCH v4 6/6] sql: support column addition Date: Fri, 18 Sep 2020 12:59:01 +0000 [thread overview] Message-ID: <20200918125901.GL10599@tarantool.org> (raw) In-Reply-To: <4b304f32-379a-fb50-f427-615a91646b7d@tarantool.org> On 17 Sep 17:19, Vladislav Shpilevoy wrote: > Thanks for the comments! I tried to answer some of them. > > On 16.09.2020 22:18, Nikita Pettik wrote: > > On 12 Sep 00:51, Roman Khabibov wrote: > >> Enable to add column to existing space with > >> <ALTER TABLE ADD [COLUMN]> statement. Column definition can be > >> supplemented with the four types of constraints, <DEFAULT>, > >> <COLLATE> clauses and <[NOT] NULL>, AUTOINCREMENT. > >> > >> Closes #2349, #3075 > >> > >> @TarantoolBot document > >> Title: Add columns to existing tables in SQL > >> Now, it is possible to add columns to existing empty spaces using > > > > Space emptyness is required by ansi or it is tarantool's restriction? > > It is Tarantool's restriction. I mean it would be nice to explain this in the doc request.. > > In Postgres for instance, one can add column for non-empty table and > > it is considered to be ok (new column is filled with default value). > > We can use ephemeral tables as temporary holder while rebuilding space. > > Ephemeral spaces can't be used at least because of vinyl, because may > not fit into the memory. Anyway they are used for vinyl even now. > With Roman we decided to implement non-empty > alter later as a separate issue. Ok, then please create follow-up issue with proposed approach. > >> diff --git a/src/box/errcode.h b/src/box/errcode.h > >> index 3c21375f5..ec16399a0 100644 > >> --- a/src/box/errcode.h > >> +++ b/src/box/errcode.h > >> @@ -271,6 +271,7 @@ struct errcode_record { > >> /*216 */_(ER_SYNC_QUORUM_TIMEOUT, "Quorum collection for a synchronous transaction is timed out") \ > >> /*217 */_(ER_SYNC_ROLLBACK, "A rollback for a synchronous transaction is received") \ > >> /*218 */_(ER_TUPLE_METADATA_IS_TOO_BIG, "Can't create tuple: metadata size %u is too big") \ > >> + /*219 */_(ER_SQL_CANT_ADD_AUTOINC, "Can't add AUTOINCREMENT: the space '%s' already has one auto incremented field") \ > > > > Consider reusing sql_add_autoincrement() func. > > We can't. sql_add_autoincrement() fails only if autoinc is added more than once > inside one statements. Here Roman tries to handle an error, when autoinc was > added earlier in another statement, so we have has_autoinc false in ADD COLUMN. > Even if autoinc was specified in CREATE TABLE some time ago. Just set parse_context->create_table_def.has_autoinc before func invocation to space->sequence_fieldno. > > Or re-phrase err msg and use it > > in sql_add_autoinc. For example: > > space %s can't feature more than one AUTOINCREMENT field. > > > >> /* > >> * !IMPORTANT! Please follow instructions at start of the file > >> diff --git a/src/box/sql/build.c b/src/box/sql/build.c > >> index d1d240315..677099b48 100644 > >> --- a/src/box/sql/build.c > >> +++ b/src/box/sql/build.c > >> @@ -285,48 +285,110 @@ sql_field_retrieve(Parse *parser, struct space_def *space_def, uint32_t id) > >> return field; > >> } > >> > >> -/* > >> - * Add a new column to the table currently being constructed. > >> +/** > >> + * Make shallow copy of @a space on region. > >> * > >> - * The parser calls this routine once for each column declaration > >> - * in a CREATE TABLE statement. sqlStartTable() gets called > >> - * first to get things going. Then this routine is called for each > >> - * column. > >> + * Function is used to add a new column to an existing space with > >> + * <ALTER TABLE ADD COLUMN> statement. Copy space def and index > >> + * array to create constraints appeared in the statement. The > >> + * index array copy will be modified by adding new elements to it. > >> + * It is necessary, because the statement may contain several > >> + * index definitions (constraints). > >> */ > >> +static struct space * > >> +sql_shallow_space_copy(struct Parse *parse, struct space *space) > > > > Why do you need whole space *? Def is likely to be enough. > > We need to store indexes somewhere. UNIQUE, for example. Space_def > does not have index definitions. Hm, we need at most one index_def. Mb it is worth passing it as a separate arg?
next prev parent reply other threads:[~2020-09-18 12:59 UTC|newest] Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-11 21:51 [Tarantool-patches] [PATCH v4 0/6] Support " Roman Khabibov 2020-09-11 21:51 ` [Tarantool-patches] [PATCH v4 1/6] sql: rename TK_COLUMN to TK_COLUMN_NAME Roman Khabibov 2020-09-16 13:17 ` Nikita Pettik 2020-09-28 23:29 ` Roman Khabibov 2020-09-11 21:51 ` [Tarantool-patches] [PATCH v4 2/6] sql: refactor create_table_def and parse Roman Khabibov 2020-09-16 13:27 ` Nikita Pettik 2020-09-17 14:43 ` Vladislav Shpilevoy 2020-09-18 12:31 ` Nikita Pettik 2020-09-18 13:21 ` Roman Khabibov 2020-09-28 23:29 ` Roman Khabibov 2020-09-17 14:43 ` Vladislav Shpilevoy 2020-10-02 22:08 ` Vladislav Shpilevoy 2020-10-03 21:37 ` Roman Khabibov 2020-10-04 13:45 ` Vladislav Shpilevoy 2020-10-04 21:44 ` Roman Khabibov 2020-10-05 21:22 ` Vladislav Shpilevoy 2020-10-07 13:53 ` Roman Khabibov 2020-10-07 22:35 ` Vladislav Shpilevoy 2020-10-08 10:32 ` Roman Khabibov 2020-09-17 15:16 ` Vladislav Shpilevoy 2020-10-02 22:08 ` Vladislav Shpilevoy 2020-09-11 21:51 ` [Tarantool-patches] [PATCH v4 3/6] schema: add box_space_field_MAX Roman Khabibov 2020-09-11 21:51 ` [Tarantool-patches] [PATCH v4 4/6] sql: use parser's region of "index" array Roman Khabibov 2020-09-16 13:30 ` Nikita Pettik 2020-09-28 23:29 ` Roman Khabibov 2020-09-17 14:53 ` Vladislav Shpilevoy 2020-09-23 14:25 ` Roman Khabibov 2020-09-24 21:30 ` Vladislav Shpilevoy 2020-10-05 21:22 ` Vladislav Shpilevoy 2020-10-07 13:53 ` Roman Khabibov 2020-09-11 21:51 ` [Tarantool-patches] [PATCH v4 5/6] box: disallow to modify format of a view Roman Khabibov 2020-09-16 13:37 ` Nikita Pettik 2020-09-22 15:59 ` Roman Khabibov 2020-09-17 15:01 ` Vladislav Shpilevoy 2020-09-22 15:59 ` Roman Khabibov 2020-09-11 21:51 ` [Tarantool-patches] [PATCH v4 6/6] sql: support column addition Roman Khabibov 2020-09-16 20:18 ` Nikita Pettik 2020-09-17 15:19 ` Vladislav Shpilevoy 2020-09-18 12:59 ` Nikita Pettik [this message] 2020-09-28 23:28 ` Roman Khabibov 2020-10-02 22:08 ` Vladislav Shpilevoy 2020-10-03 21:37 ` Roman Khabibov 2020-09-17 15:45 ` Vladislav Shpilevoy 2020-10-04 13:45 ` Vladislav Shpilevoy 2020-10-04 21:44 ` Roman Khabibov 2020-09-11 22:00 ` [Tarantool-patches] [PATCH v4 0/6] Support " Roman Khabibov 2020-10-08 22:07 ` 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=20200918125901.GL10599@tarantool.org \ --to=korablev@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v4 6/6] sql: support column addition' \ /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