[patches] [PATCH 1/3] sql: remove hidden column attribute

Nikita Pettik korablev at tarantool.org
Wed Feb 14 15:38:10 MSK 2018


As part of Tarantool data dictionary integration into SQL, all usages of
colflag (i.e. field in struct Column) after space creation should be
removed. Currently, colflag indicates one of three statuses:
primary key column, hidden column and column with specified type.
Since there is no more any hidden columns, this patch removes all
code connected with them.

Part of #3118

Signed-off-by: Nikita Pettik <korablev at tarantool.org>
---
 src/box/sql/build.c     | 17 -----------------
 src/box/sql/delete.c    |  2 +-
 src/box/sql/insert.c    | 35 +++++++----------------------------
 src/box/sql/pragma.c    |  8 +-------
 src/box/sql/select.c    | 14 --------------
 src/box/sql/sqliteInt.h | 26 --------------------------
 src/box/sql/whereexpr.c |  6 +-----
 7 files changed, 10 insertions(+), 98 deletions(-)

diff --git a/src/box/sql/build.c b/src/box/sql/build.c
index 2777e8073..ae140ee3c 100644
--- a/src/box/sql/build.c
+++ b/src/box/sql/build.c
@@ -760,22 +760,6 @@ sqlite3StartTable(Parse *pParse, Token *pName, int noErr)
 	return;
 }
 
-/* Set properties of a table column based on the (magical)
- * name of the column.
- */
-#if SQLITE_ENABLE_HIDDEN_COLUMNS
-void
-sqlite3ColumnPropertiesFromName(Table * pTab, Column * pCol)
-{
-	if (sqlite3_strnicmp(pCol->zName, "__hidden__", 10) == 0) {
-		pCol->colFlags |= COLFLAG_HIDDEN;
-	} else if (pTab && pCol != pTab->aCol
-		   && (pCol[-1].colFlags & COLFLAG_HIDDEN)) {
-		pTab->tabFlags |= TF_OOOHidden;
-	}
-}
-#endif
-
 /*
  * Add a new column to the table currently being constructed.
  *
@@ -828,7 +812,6 @@ sqlite3AddColumn(Parse * pParse, Token * pName, Token * pType)
 	pCol = &p->aCol[p->nCol];
 	memset(pCol, 0, sizeof(p->aCol[0]));
 	pCol->zName = z;
-	sqlite3ColumnPropertiesFromName(p, pCol);
 
 	if (pType->n == 0) {
 		/* If there is no type specified, columns have the default affinity
diff --git a/src/box/sql/delete.c b/src/box/sql/delete.c
index b15f43844..9320625e0 100644
--- a/src/box/sql/delete.c
+++ b/src/box/sql/delete.c
@@ -123,7 +123,7 @@ sqlite3MaterializeView(Parse * pParse,	/* Parsing context */
 		assert(pFrom->a[0].pUsing == 0);
 	}
 	pSel = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, 0,
-				SF_IncludeHidden, 0, 0);
+				0, 0, 0);
 	sqlite3SelectDestInit(&dest, SRT_EphemTab, iCur);
 	sqlite3Select(pParse, pSel, &dest);
 	sqlite3SelectDelete(db, pSel);
diff --git a/src/box/sql/insert.c b/src/box/sql/insert.c
index bc1906fb6..82a8c2c31 100644
--- a/src/box/sql/insert.c
+++ b/src/box/sql/insert.c
@@ -216,7 +216,7 @@ xferOptimization(Parse * pParse,	/* Parser context */
  *    insert into TABLE (IDLIST) default values
  *
  * The IDLIST following the table name is always optional.  If omitted,
- * then a list of all (non-hidden) columns for the table is substituted.
+ * then a list of all columns for the table is substituted.
  * The IDLIST appears in the pColumn parameter.  pColumn is NULL if IDLIST
  * is omitted.
  *
@@ -319,7 +319,6 @@ sqlite3Insert(Parse * pParse,	/* Parser context */
 	Vdbe *v;		/* Generate code into this virtual machine */
 	Index *pIdx;		/* For looping over indices of the table */
 	int nColumn;		/* Number of columns in the data */
-	int nHidden = 0;	/* Number of hidden columns. */
 	int iDataCur = 0;	/* VDBE cursor that is the main data repository */
 	int iIdxCur = 0;	/* First index cursor */
 	int ipkColumn = -1;	/* Column that is the INTEGER PRIMARY KEY */
@@ -453,7 +452,7 @@ sqlite3Insert(Parse * pParse,	/* Parser context */
 	 * is appears in the original table.  (The index of the INTEGER
 	 * PRIMARY KEY in the original table is pTab->iPKey.)
 	 */
-	bIdListInOrder = (pTab->tabFlags & TF_OOOHidden) == 0;
+	bIdListInOrder = 1;
 	if (pColumn) {
 		for (i = 0; i < pColumn->nId; i++) {
 			pColumn->a[i].idx = -1;
@@ -588,16 +587,10 @@ sqlite3Insert(Parse * pParse,	/* Parser context */
 		ipkColumn = pTab->iPKey;
 	}
 
-	/* Make sure the number of columns in the source data matches the number
-	 * of columns to be inserted into the table.
-	 */
-	for (i = 0; i < pTab->nCol; i++) {
-		nHidden += (IsHiddenColumn(&pTab->aCol[i]) ? 1 : 0);
-	}
-	if (pColumn == 0 && nColumn && nColumn != (pTab->nCol - nHidden)) {
+	if (pColumn == 0 && nColumn && nColumn != (pTab->nCol)) {
 		sqlite3ErrorMsg(pParse,
 				"table %S has %d columns but %d values were supplied",
-				pTabList, 0, pTab->nCol - nHidden, nColumn);
+				pTabList, 0, pTab->nCol, nColumn);
 		goto insert_cleanup;
 	}
 	if (pColumn != 0 && nColumn != pColumn->nId) {
@@ -677,9 +670,7 @@ sqlite3Insert(Parse * pParse,	/* Parser context */
 				}
 			}
 			if ((!useTempTable && !pList)
-			    || (pColumn && j >= pColumn->nId)
-			    || (pColumn == 0
-				&& IsOrdinaryHiddenColumn(&pTab->aCol[i]))) {
+			    || (pColumn && j >= pColumn->nId)) {
 				if (i == pTab->iAutoIncPKey)
 					sqlite3VdbeAddOp2(v, OP_Integer, -1,
 							  regCols + i + 1);
@@ -696,8 +687,7 @@ sqlite3Insert(Parse * pParse,	/* Parser context */
 							pList->a[j].pExpr,
 							regCols + i + 1);
 			}
-			if (pColumn == 0
-			    && !IsOrdinaryHiddenColumn(&pTab->aCol[i]))
+			if (pColumn == 0)
 				j++;
 		}
 
@@ -739,16 +729,10 @@ sqlite3Insert(Parse * pParse,	/* Parser context */
 		/* Compute data for all columns of the new entry, beginning
 		 * with the first column.
 		 */
-		nHidden = 0;
 		for (i = 0; i < pTab->nCol; i++) {
 			int iRegStore = regTupleid + 1 + i;
 			if (pColumn == 0) {
-				if (IsHiddenColumn(&pTab->aCol[i])) {
-					j = -1;
-					nHidden++;
-				} else {
-					j = i - nHidden;
-				}
+				j = i;
 			} else {
 				for (j = 0; j < pColumn->nId; j++) {
 					if (pColumn->a[j].idx == i)
@@ -1807,11 +1791,6 @@ xferOptimization(Parse * pParse,	/* Parser context */
 	for (i = 0; i < pDest->nCol; i++) {
 		Column *pDestCol = &pDest->aCol[i];
 		Column *pSrcCol = &pSrc->aCol[i];
-#ifdef SQLITE_ENABLE_HIDDEN_COLUMNS
-		if ((pDestCol->colFlags | pSrcCol->colFlags) & COLFLAG_HIDDEN) {
-			return 0;	/* Neither table may have __hidden__ columns */
-		}
-#endif
 		if (pDestCol->affinity != pSrcCol->affinity) {
 			return 0;	/* Affinity must be the same on all columns */
 		}
diff --git a/src/box/sql/pragma.c b/src/box/sql/pragma.c
index 1efc9ab7b..3eb3248c6 100644
--- a/src/box/sql/pragma.c
+++ b/src/box/sql/pragma.c
@@ -345,7 +345,6 @@ sqlite3Pragma(Parse * pParse, Token * pId,	/* First part of [schema.]id field */
 			pTab = sqlite3LocateTable(pParse, LOCATE_NOERR, zRight);
 			if (pTab) {
 				int i, k;
-				int nHidden = 0;
 				Column *pCol;
 				Index *pPk = sqlite3PrimaryKeyIndex(pTab);
 				pParse->nMem = 6;
@@ -353,10 +352,6 @@ sqlite3Pragma(Parse * pParse, Token * pId,	/* First part of [schema.]id field */
 				sqlite3ViewGetColumnNames(pParse, pTab);
 				for (i = 0, pCol = pTab->aCol; i < pTab->nCol;
 				     i++, pCol++) {
-					if (IsHiddenColumn(pCol)) {
-						nHidden++;
-						continue;
-					}
 					if ((pCol->
 					     colFlags & COLFLAG_PRIMKEY) == 0) {
 						k = 0;
@@ -372,8 +367,7 @@ sqlite3Pragma(Parse * pParse, Token * pId,	/* First part of [schema.]id field */
 					assert(pCol->pDflt == 0
 					       || pCol->pDflt->op == TK_SPAN);
 					sqlite3VdbeMultiLoad(v, 1, "issisi",
-							     i - nHidden,
-							     pCol->zName,
+							     i, pCol->zName,
 							     sqlite3ColumnType
 							     (pCol, ""),
 							     pCol->
diff --git a/src/box/sql/select.c b/src/box/sql/select.c
index b86a9fa11..acc0a8ad9 100644
--- a/src/box/sql/select.c
+++ b/src/box/sql/select.c
@@ -1946,7 +1946,6 @@ sqlite3ColumnsFromExprList(Parse * pParse,	/* Parsing context */
 				sqlite3_randomness(sizeof(cnt), &cnt);
 		}
 		pCol->zName = zName;
-		sqlite3ColumnPropertiesFromName(0, pCol);
 		if (zName && sqlite3HashInsert(&ht, zName, pCol) == pCol) {
 			sqlite3OomFault(db);
 		}
@@ -4949,19 +4948,6 @@ selectExpander(Walker * pWalker, Select * p)
 									    zTName) == 0) {
 							continue;
 						}
-
-						/* If a column is marked as 'hidden', omit it from the expanded
-						 * result-set list unless the SELECT has the SF_IncludeHidden
-						 * bit set.
-						 */
-						if ((p->
-						     selFlags &
-						     SF_IncludeHidden) == 0
-						    && IsHiddenColumn(&pTab->
-								      aCol[j])
-						    ) {
-							continue;
-						}
 						tableSeen = 1;
 
 						if (i > 0 && zTName == 0) {
diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
index 193c21c34..46b94430e 100644
--- a/src/box/sql/sqliteInt.h
+++ b/src/box/sql/sqliteInt.h
@@ -1359,7 +1359,6 @@ struct Column {
 /* Allowed values for Column.colFlags:
  */
 #define COLFLAG_PRIMKEY  0x0001	/* Column is part of the primary key */
-#define COLFLAG_HIDDEN   0x0002	/* A hidden column. */
 #define COLFLAG_HASTYPE  0x0004	/* Type name follows column name */
 
 /*
@@ -1449,31 +1448,12 @@ struct Table {
 
 /*
  * Allowed values for Table.tabFlags.
- *
- * TF_OOOHidden applies to tables or view that have hidden columns that are
- * followed by non-hidden columns.Such tables require special
- * handling during INSERT processing.
  */
 #define TF_Readonly        0x01	/* Read-only system table */
 #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 */
 #define TF_View   	   0x20	/* A view */
-#define TF_OOOHidden       0x80	/* Out-of-Order hidden columns */
-
-/*
- * Macros to determine if a column is hidden.
- * IsOrdinaryHiddenColumn() is always false unless
- * SQLITE_ENABLE_HIDDEN_COLUMNS is defined. The IsHiddenColumn()
- * macro is general purpose.
- */
-#if defined(SQLITE_ENABLE_HIDDEN_COLUMNS)
-#define IsHiddenColumn(X)         (((X)->colFlags & COLFLAG_HIDDEN)!=0)
-#define IsOrdinaryHiddenColumn(X) (((X)->colFlags & COLFLAG_HIDDEN)!=0)
-#else
-#define IsHiddenColumn(X)         0
-#define IsOrdinaryHiddenColumn(X) 0
-#endif
 
 /*
  * Each foreign key constraint is an instance of the following structure.
@@ -2279,7 +2259,6 @@ struct Select {
 #define SF_FixedLimit     0x04000	/* nSelectRow set by a constant LIMIT */
 #define SF_MaybeConvert   0x08000	/* Need convertCompoundSelectToSubquery() */
 #define SF_Converted      0x10000	/* By convertCompoundSelectToSubquery() */
-#define SF_IncludeHidden  0x20000	/* Include hidden columns in output */
 
 /*
  * The results of a SELECT can be distributed in several ways, as defined
@@ -3127,11 +3106,6 @@ Table *sqlite3ResultSetOfSelect(Parse *, Select *);
 Index *sqlite3PrimaryKeyIndex(Table *);
 i16 sqlite3ColumnOfIndex(Index *, i16);
 void sqlite3StartTable(Parse *, Token *, int);
-#if SQLITE_ENABLE_HIDDEN_COLUMNS
-void sqlite3ColumnPropertiesFromName(Table *, Column *);
-#else
-#define sqlite3ColumnPropertiesFromName(T,C)	/* no-op */
-#endif
 void sqlite3AddColumn(Parse *, Token *, Token *);
 void sqlite3AddNotNull(Parse *, int);
 void sqlite3AddPrimaryKey(Parse *, ExprList *, int, int, int);
diff --git a/src/box/sql/whereexpr.c b/src/box/sql/whereexpr.c
index 40c0431df..87972fd23 100644
--- a/src/box/sql/whereexpr.c
+++ b/src/box/sql/whereexpr.c
@@ -1473,9 +1473,6 @@ sqlite3WhereExprAnalyze(SrcList * pTabList,	/* the FROM clause */
 /*
  * For table-valued-functions, transform the function arguments into
  * new WHERE clause terms.
- *
- * Each function argument translates into an equality constraint against
- * a HIDDEN column in the table.
  */
 void
 sqlite3WhereTabFuncArgs(Parse * pParse,	/* Parsing context */
@@ -1496,8 +1493,7 @@ sqlite3WhereTabFuncArgs(Parse * pParse,	/* Parsing context */
 	if (pArgs == 0)
 		return;
 	for (j = k = 0; j < pArgs->nExpr; j++) {
-		while (k < pTab->nCol
-		       && (pTab->aCol[k].colFlags & COLFLAG_HIDDEN) == 0) {
+		while (k < pTab->nCol) {
 			k++;
 		}
 		if (k >= pTab->nCol) {
-- 
2.15.1




More information about the Tarantool-patches mailing list