From: Nikita Pettik <korablev@tarantool.org> To: tarantool-patches@freelists.org Cc: v.shpilevoy@tarantool.org, Nikita Pettik <korablev@tarantool.org> Subject: [tarantool-patches] [PATCH 04/10] sql: remove flags from struct Table Date: Sun, 12 Aug 2018 17:13:00 +0300 [thread overview] Message-ID: <2e3030fa0e25bad36c4d847babff2be4d6ff2c69.1534001739.git.korablev@tarantool.org> (raw) In-Reply-To: <cover.1534001739.git.korablev@tarantool.org> In-Reply-To: <cover.1534001739.git.korablev@tarantool.org> Check on flag TF_HasPrimaryKey replaced with simple PK lookup in the list of table indexes. Check on flag TF_Ephemeral replaced with table->def->id == 0. Check on flag TF_Autoincrement replaced with table->iAutoinc >= 0. Part of #3561 --- src/box/sql/build.c | 11 ++++------- src/box/sql/insert.c | 12 ++++-------- src/box/sql/select.c | 4 +--- src/box/sql/sqliteInt.h | 8 -------- src/box/sql/where.c | 3 +-- 5 files changed, 10 insertions(+), 28 deletions(-) diff --git a/src/box/sql/build.c b/src/box/sql/build.c index 78206a1ed..31b91a4e2 100644 --- a/src/box/sql/build.c +++ b/src/box/sql/build.c @@ -883,13 +883,12 @@ sqlite3AddPrimaryKey(Parse * pParse, /* Parsing context */ int nTerm; if (pTab == 0) goto primary_key_exit; - if (pTab->tabFlags & TF_HasPrimaryKey) { + if (sqlite3PrimaryKeyIndex(pTab) != NULL) { sqlite3ErrorMsg(pParse, "table \"%s\" has more than one primary key", pTab->def->name); goto primary_key_exit; } - pTab->tabFlags |= TF_HasPrimaryKey; if (pList == 0) { iCol = pTab->def->field_count - 1; nTerm = 1; @@ -918,10 +917,8 @@ sqlite3AddPrimaryKey(Parse * pParse, /* Parsing context */ pTab->def->fields[iCol].type == FIELD_TYPE_INTEGER && sortOrder != SORT_ORDER_DESC) { assert(autoInc == 0 || autoInc == 1); - if (autoInc) { + if (autoInc) pTab->iAutoIncPKey = iCol; - pTab->tabFlags |= TF_Autoincrement; - } struct sqlite3 *db = pParse->db; struct ExprList *list; struct Token token; @@ -1698,7 +1695,7 @@ sqlite3EndTable(Parse * pParse, /* Parse context */ } if (!p->def->opts.is_view) { - if ((p->tabFlags & TF_HasPrimaryKey) == 0) { + if (sqlite3PrimaryKeyIndex(p) == NULL) { sqlite3ErrorMsg(pParse, "PRIMARY KEY missing on table %s", p->def->name); @@ -1767,7 +1764,7 @@ sqlite3EndTable(Parse * pParse, /* Parse context */ * Check to see if we need to create an _sequence table * for keeping track of autoincrement keys. */ - if ((p->tabFlags & TF_Autoincrement) != 0) { + if (p->iAutoIncPKey >= 0) { assert(reg_space_id != 0); /* Do an insertion into _sequence. */ int reg_seq_id = ++pParse->nMem; diff --git a/src/box/sql/insert.c b/src/box/sql/insert.c index 50c30fd82..ddd7f932b 100644 --- a/src/box/sql/insert.c +++ b/src/box/sql/insert.c @@ -714,8 +714,7 @@ sqlite3Insert(Parse * pParse, /* Parser context */ dflt, iRegStore); } else if (useTempTable) { - if ((pTab->tabFlags & TF_Autoincrement) - && (i == pTab->iAutoIncPKey)) { + if (i == pTab->iAutoIncPKey) { int regTmp = ++pParse->nMem; /* Emit code which doesn't override * autoinc-ed value with select result @@ -734,8 +733,7 @@ sqlite3Insert(Parse * pParse, /* Parser context */ } } else if (pSelect) { if (regFromSelect != regData) { - if ((pTab->tabFlags & TF_Autoincrement) - && (i == pTab->iAutoIncPKey)) { + if (i == pTab->iAutoIncPKey) { /* Emit code which doesn't override * autoinc-ed value with select result * in case that result is NULL @@ -1022,9 +1020,7 @@ sqlite3GenerateConstraintChecks(Parse * pParse, /* The parser context */ /* Don't bother checking for NOT NULL on columns that do not change */ continue; } - if (def->fields[i].is_nullable || - (pTab->tabFlags & TF_Autoincrement && - pTab->iAutoIncPKey == (int) i)) + if (def->fields[i].is_nullable || pTab->iAutoIncPKey == (int) i) continue; /* This column is allowed to be NULL */ on_error = table_column_nullable_action(pTab, i); @@ -1203,7 +1199,7 @@ sqlite3GenerateConstraintChecks(Parse * pParse, /* The parser context */ if (pTab->def->fields[fieldno].affinity == AFFINITY_INTEGER) { int skip_if_null = sqlite3VdbeMakeLabel(v); - if ((pTab->tabFlags & TF_Autoincrement) != 0) { + if (pTab->iAutoIncPKey >= 0) { sqlite3VdbeAddOp2(v, OP_IsNull, reg_pk, skip_if_null); diff --git a/src/box/sql/select.c b/src/box/sql/select.c index 6738ba54f..d22f4e0a9 100644 --- a/src/box/sql/select.c +++ b/src/box/sql/select.c @@ -4601,7 +4601,6 @@ withExpand(Walker * pWalker, struct SrcList_item *pFrom) pTab->tuple_log_count = DEFAULT_TUPLE_LOG_COUNT; assert(sqlite3LogEst(DEFAULT_TUPLE_COUNT) == DEFAULT_TUPLE_LOG_COUNT); - pTab->tabFlags |= TF_Ephemeral; pFrom->pSelect = sqlite3SelectDup(db, pCte->pSelect, 0); if (db->mallocFailed) return SQLITE_NOMEM_BKPT; @@ -4803,7 +4802,6 @@ selectExpander(Walker * pWalker, Select * p) pTab->tuple_log_count = DEFAULT_TUPLE_LOG_COUNT; assert(sqlite3LogEst(DEFAULT_TUPLE_COUNT) == DEFAULT_TUPLE_LOG_COUNT); - pTab->tabFlags |= TF_Ephemeral; } else { /* * An ordinary table or view name in the @@ -5157,7 +5155,7 @@ selectAddSubqueryTypeInfo(Walker * pWalker, Select * p) for (i = 0, pFrom = pTabList->a; i < pTabList->nSrc; i++, pFrom++) { Table *pTab = pFrom->pTab; assert(pTab != 0); - if ((pTab->tabFlags & TF_Ephemeral) != 0) { + if (pTab->def->id == 0) { /* A sub-query in the FROM clause of a SELECT */ Select *pSel = pFrom->pSelect; if (pSel) { diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h index 5757efe49..e13e6ad34 100644 --- a/src/box/sql/sqliteInt.h +++ b/src/box/sql/sqliteInt.h @@ -1884,7 +1884,6 @@ struct Table { * can be fetched from space struct. */ LogEst tuple_log_count; - u8 tabFlags; /* Mask of TF_* values */ Schema *pSchema; /* Schema that contains this table */ Table *pNextZombie; /* Next on the Parse.pZombieTab list */ /** Space definition with Tarantool metadata. */ @@ -1901,13 +1900,6 @@ struct Table { LogEst sql_space_tuple_log_count(struct Table *tab); -/* - * Allowed values for Table.tabFlags. - */ -#define TF_Ephemeral 0x02 /* An ephemeral table */ -#define TF_HasPrimaryKey 0x04 /* Table has a primary key */ -#define TF_Autoincrement 0x08 /* Integer primary key is autoincrement */ - /* * Each foreign key constraint is an instance of the following structure. * diff --git a/src/box/sql/where.c b/src/box/sql/where.c index 117357662..db8d0bf80 100644 --- a/src/box/sql/where.c +++ b/src/box/sql/where.c @@ -4673,8 +4673,7 @@ sqlite3WhereBegin(Parse * pParse, /* The parser context */ struct SrcList_item *pTabItem = &pTabList->a[pLevel->iFrom]; Table *pTab = pTabItem->pTab; pLoop = pLevel->pWLoop; - if ((pTab->tabFlags & TF_Ephemeral) != 0 || - pTab->def->opts.is_view) { + if (pTab->def->id == 0 || pTab->def->opts.is_view) { /* Do nothing */ } else if ((pLoop->wsFlags & WHERE_IDX_ONLY) == 0 && (wctrlFlags & WHERE_OR_SUBCLAUSE) == 0) { -- 2.15.1
next prev parent reply other threads:[~2018-08-12 14:13 UTC|newest] Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-08-12 14:12 [tarantool-patches] [PATCH 00/10] sql: cleanup in struct Index and " Nikita Pettik 2018-08-12 14:12 ` [tarantool-patches] [PATCH 01/10] sql: remove suport of ALTER TABLE ADD COLUMN Nikita Pettik 2018-08-13 20:24 ` [tarantool-patches] " Vladislav Shpilevoy 2018-08-12 14:12 ` [tarantool-patches] [PATCH 02/10] sql: remove string of fields collation from Table Nikita Pettik 2018-08-13 20:24 ` [tarantool-patches] " Vladislav Shpilevoy 2018-08-12 14:12 ` [tarantool-patches] [PATCH 03/10] sql: remove index hash from struct Table Nikita Pettik 2018-08-13 20:24 ` [tarantool-patches] " Vladislav Shpilevoy 2018-08-12 14:13 ` Nikita Pettik [this message] 2018-08-13 20:24 ` [tarantool-patches] Re: [PATCH 04/10] sql: remove flags " Vladislav Shpilevoy 2018-08-12 14:13 ` [tarantool-patches] [PATCH 05/10] sql: remove affinity string of columns from Index Nikita Pettik 2018-08-13 20:24 ` [tarantool-patches] " Vladislav Shpilevoy 2018-08-21 16:31 ` n.pettik 2018-08-24 21:04 ` Vladislav Shpilevoy 2018-08-26 19:45 ` n.pettik 2018-08-12 14:13 ` [tarantool-patches] [PATCH 06/10] sql: completely remove support of partial indexes Nikita Pettik 2018-08-13 20:24 ` [tarantool-patches] " Vladislav Shpilevoy 2018-08-21 16:31 ` n.pettik 2018-08-24 21:04 ` Vladislav Shpilevoy 2018-08-26 19:44 ` n.pettik 2018-08-12 14:13 ` [tarantool-patches] [PATCH 07/10] sql: remove index type from struct Index Nikita Pettik 2018-08-13 20:24 ` [tarantool-patches] " Vladislav Shpilevoy 2018-08-21 16:31 ` n.pettik 2018-08-12 14:13 ` [tarantool-patches] [PATCH 08/10] sql: use secondary indexes to process OP_Delete Nikita Pettik 2018-08-13 20:24 ` [tarantool-patches] " Vladislav Shpilevoy 2018-08-12 14:13 ` [tarantool-patches] [PATCH 09/10] sql: disable ON CONFLICT actions for indexes Nikita Pettik 2018-08-13 20:24 ` [tarantool-patches] " Vladislav Shpilevoy 2018-08-21 16:31 ` n.pettik 2018-08-24 21:04 ` Vladislav Shpilevoy 2018-08-26 19:44 ` n.pettik 2018-08-27 17:24 ` Vladislav Shpilevoy 2018-08-12 14:13 ` [tarantool-patches] [PATCH 10/10] sql: move autoincrement field number to server Nikita Pettik 2018-08-13 20:24 ` [tarantool-patches] " Vladislav Shpilevoy 2018-08-21 16:31 ` n.pettik 2018-08-24 21:03 ` Vladislav Shpilevoy 2018-08-26 19:44 ` n.pettik 2018-08-27 17:24 ` Vladislav Shpilevoy 2018-08-27 17:24 ` [tarantool-patches] Re: [PATCH 00/10] sql: cleanup in struct Index and struct Table Vladislav Shpilevoy 2018-08-29 14:11 ` 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=2e3030fa0e25bad36c4d847babff2be4d6ff2c69.1534001739.git.korablev@tarantool.org \ --to=korablev@tarantool.org \ --cc=tarantool-patches@freelists.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [tarantool-patches] [PATCH 04/10] sql: remove flags from struct Table' \ /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