[patches] [PATCH 4/8] sql: remove struct Db

Bulat Niatshin niatshin at tarantool.org
Wed Feb 21 15:33:17 MSK 2018


Remove struct Db for backend removal follow-up.

For #3119
---
 src/box/sql/alter.c     |  2 +-
 src/box/sql/analyze.c   |  8 +++----
 src/box/sql/attach.c    |  2 +-
 src/box/sql/build.c     | 56 +++++++++++++++++++------------------------------
 src/box/sql/main.c      |  2 +-
 src/box/sql/pragma.c    |  6 ++----
 src/box/sql/prepare.c   |  6 ++----
 src/box/sql/sqliteInt.h | 18 ++++------------
 src/box/sql/status.c    |  2 +-
 src/box/sql/trigger.c   | 12 +++++------
 src/box/sql/vdbe.c      | 12 +++++------
 11 files changed, 49 insertions(+), 77 deletions(-)

diff --git a/src/box/sql/alter.c b/src/box/sql/alter.c
index 22345397a..33194c98e 100644
--- a/src/box/sql/alter.c
+++ b/src/box/sql/alter.c
@@ -314,7 +314,7 @@ sqlite3AlterBeginAddColumn(Parse * pParse, SrcList * pSrc)
 		pCol->zColl = 0;
 		pCol->pDflt = 0;
 	}
-	pNew->pSchema = db->mdb.pSchema;
+	pNew->pSchema = db->pSchema;
 	pNew->addColOffset = pTab->addColOffset;
 	pNew->nTabRef = 1;
 
diff --git a/src/box/sql/analyze.c b/src/box/sql/analyze.c
index ca8d37c76..db06d0182 100644
--- a/src/box/sql/analyze.c
+++ b/src/box/sql/analyze.c
@@ -1113,7 +1113,7 @@ static void
 analyzeDatabase(Parse * pParse)
 {
 	sqlite3 *db = pParse->db;
-	Schema *pSchema = db->mdb.pSchema;	/* Schema of database */
+	Schema *pSchema = db->pSchema;	/* Schema of database */
 	HashElem *k;
 	int iStatCur;
 	int iMem;
@@ -1677,7 +1677,7 @@ sqlite3AnalysisLoad(sqlite3 * db)
 	int rc = SQLITE_OK;
 
 	/* Clear any prior statistics */
-	for (j = sqliteHashFirst(&db->mdb.pSchema->tblHash); j;
+	for (j = sqliteHashFirst(&db->pSchema->tblHash); j;
 	     j = sqliteHashNext(j)) {
 		Table *pTab = sqliteHashData(j);
 		for (i = sqliteHashFirst(&pTab->idxHash); i;
@@ -1697,7 +1697,7 @@ sqlite3AnalysisLoad(sqlite3 * db)
 	}
 
 	/* Set appropriate defaults on all indexes not in the _sql_stat1 table */
-	for (j = sqliteHashFirst(&db->mdb.pSchema->tblHash); j;
+	for (j = sqliteHashFirst(&db->pSchema->tblHash); j;
 	     j = sqliteHashNext(j)) {
 		Table *pTab = sqliteHashData(j);
 		for (i = sqliteHashFirst(&pTab->idxHash); i;
@@ -1715,7 +1715,7 @@ sqlite3AnalysisLoad(sqlite3 * db)
 		db->lookaside.bDisable--;
 	}
 
-	for (j = sqliteHashFirst(&db->mdb.pSchema->tblHash); j;
+	for (j = sqliteHashFirst(&db->pSchema->tblHash); j;
 	     j = sqliteHashNext(j)) {
 		Table *pTab = sqliteHashData(j);
 		for (i = sqliteHashFirst(&pTab->idxHash); i;
diff --git a/src/box/sql/attach.c b/src/box/sql/attach.c
index 7d812e802..0a68b76ca 100644
--- a/src/box/sql/attach.c
+++ b/src/box/sql/attach.c
@@ -49,7 +49,7 @@ sqlite3FixInit(DbFixer * pFix,	/* The fixer to be initialized */
 
 	db = pParse->db;
 	pFix->pParse = pParse;
-	pFix->pSchema = db->mdb.pSchema;
+	pFix->pSchema = db->pSchema;
 	pFix->zType = zType;
 	pFix->pName = pName;
 	pFix->bVarOnly = 0;
diff --git a/src/box/sql/build.c b/src/box/sql/build.c
index ab4bc05cb..92c89076f 100644
--- a/src/box/sql/build.c
+++ b/src/box/sql/build.c
@@ -110,12 +110,10 @@ sqlite3FinishCoding(Parse * pParse)
 			sqlite3VdbeJumpHere(v, 0);
 			Schema *pSchema;
 			if (DbMaskTest(pParse->cookieMask, 0) != 0) {
-				pSchema = db->mdb.pSchema;
-				sqlite3VdbeAddOp4Int(v, OP_Transaction,	/* Opcode */
-						     0,	/* P1 */
-						     DbMaskTest(pParse->writeMask, 0),	/* P2 */
-						     pSchema->schema_cookie,	/* P3 */
-						     pSchema->iGeneration	/* P4 */
+				pSchema = db->pSchema;
+				sqlite3VdbeAddOp2(v, OP_Transaction,	/* Opcode */
+						  0,	/* P1 */
+						  DbMaskTest(pParse->writeMask, 0)	/* P2 */
 				    );
 				if (pParse->initiateTTrans)
 					sqlite3VdbeAddOp0(v, OP_TTransaction);
@@ -237,7 +235,7 @@ sqlite3FindTable(sqlite3 * db, const char *zName)
 	}
 #endif
 
-	return sqlite3HashFind(&db->mdb.pSchema->tblHash, zName);
+	return sqlite3HashFind(&db->pSchema->tblHash, zName);
 }
 
 /*
@@ -382,12 +380,9 @@ sqlite3UnlinkAndDeleteIndex(sqlite3 * db, Index * pIndex)
 void
 sqlite3ResetOneSchema(sqlite3 * db)
 {
-	Db *pDb;
-
 	/* Case 1:  Reset the single schema of the database  */
-	pDb = &db->mdb;
-	assert(pDb->pSchema != 0);
-	sqlite3SchemaClear(pDb->pSchema);
+	assert(db->pSchema != 0);
+	sqlite3SchemaClear(db->pSchema);
 }
 
 /*
@@ -398,9 +393,8 @@ void
 sqlite3ResetAllSchemasOfConnection(sqlite3 * db)
 {
 	struct session *user_session = current_session();
-	Db *pDb = &db->mdb;
-	if (pDb->pSchema) {
-		sqlite3SchemaClear(pDb->pSchema);
+	if (db->pSchema) {
+		sqlite3SchemaClear(db->pSchema);
 	}
 	user_session->sql_flags &= ~SQLITE_InternChanges;
 }
@@ -516,13 +510,11 @@ void
 sqlite3UnlinkAndDeleteTable(sqlite3 * db, const char *zTabName)
 {
 	Table *p;
-	Db *pDb;
 
 	assert(db != 0);
 	assert(zTabName);
 	testcase(zTabName[0] == 0);	/* Zero-length table names are allowed */
-	pDb = &db->mdb;
-	p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName, 0);
+	p = sqlite3HashInsert(&db->pSchema->tblHash, zTabName, 0);
 	sqlite3DeleteTable(db, p);
 }
 
@@ -722,7 +714,7 @@ sqlite3StartTable(Parse *pParse, Token *pName, int noErr)
 	pTable->zName = zName;
 	pTable->iPKey = -1;
 	pTable->iAutoIncPKey = -1;
-	pTable->pSchema = db->mdb.pSchema;
+	pTable->pSchema = db->pSchema;
 	sqlite3HashInit(&pTable->idxHash);
 	pTable->nTabRef = 1;
 	pTable->nRowLogEst = 200;
@@ -1905,17 +1897,17 @@ sqlite3EndTable(Parse * pParse,	/* Parse context */
 		if (NEVER(v == 0))
 			return;
 
-		pSysSchema = sqlite3HashFind(&pParse->db->mdb.pSchema->tblHash,
+		pSysSchema = sqlite3HashFind(&pParse->db->pSchema->tblHash,
 					     TARANTOOL_SYS_SCHEMA_NAME);
 		if (NEVER(!pSysSchema))
 			return;
 
-		pSysSpace = sqlite3HashFind(&pParse->db->mdb.pSchema->tblHash,
+		pSysSpace = sqlite3HashFind(&pParse->db->pSchema->tblHash,
 					    TARANTOOL_SYS_SPACE_NAME);
 		if (NEVER(!pSysSpace))
 			return;
 
-		pSysIndex = sqlite3HashFind(&pParse->db->mdb.pSchema->tblHash,
+		pSysIndex = sqlite3HashFind(&pParse->db->pSchema->tblHash,
 					    TARANTOOL_SYS_INDEX_NAME);
 		if (NEVER(!pSysIndex))
 			return;
@@ -1982,7 +1974,7 @@ sqlite3EndTable(Parse * pParse,	/* Parse context */
 
 			/* Do an insertion into _sequence  */
 			sys_sequence = sqlite3HashFind(
-				&pParse->db->mdb.pSchema->tblHash,
+				&pParse->db->pSchema->tblHash,
 				TARANTOOL_SYS_SEQUENCE_NAME);
 			if (NEVER(!sys_sequence))
 				return;
@@ -2004,7 +1996,7 @@ sqlite3EndTable(Parse * pParse,	/* Parse context */
 
 			/* Do an insertion into _space_sequence  */
 			sys_space_sequence = sqlite3HashFind(
-				&pParse->db->mdb.pSchema->tblHash,
+				&pParse->db->pSchema->tblHash,
 				TARANTOOL_SYS_SPACE_SEQUENCE_NAME);
 			if (NEVER(!sys_space_sequence))
 				return;
@@ -2250,9 +2242,7 @@ static void
 sqliteViewResetAll(sqlite3 * db)
 {
 	HashElem *i;
-	if (!DbHasProperty(db, DB_UnresetViews))
-		return;
-	for (i = sqliteHashFirst(&db->mdb.pSchema->tblHash); i;
+	for (i = sqliteHashFirst(&db->pSchema->tblHash); i;
 	     i = sqliteHashNext(i)) {
 		Table *pTab = sqliteHashData(i);
 		if (pTab->pSelect) {
@@ -3063,7 +3053,7 @@ sqlite3CreateIndex(Parse * pParse,	/* All information about this parse */
 	pIndex->onError = (u8) onError;
 	pIndex->uniqNotNull = onError != ON_CONFLICT_ACTION_NONE;
 	pIndex->idxType = idxType;
-	pIndex->pSchema = db->mdb.pSchema;
+	pIndex->pSchema = db->pSchema;
 	pIndex->nKeyCol = pList->nExpr;
 	/* Tarantool have access to each column by any index */
 	pIndex->isCovering = 1;
@@ -3251,7 +3241,7 @@ sqlite3CreateIndex(Parse * pParse,	/* All information about this parse */
 		sqlite3BeginWriteOperation(pParse, 1);
 
 		pSysIndex =
-		    sqlite3HashFind(&pParse->db->mdb.pSchema->tblHash,
+		    sqlite3HashFind(&pParse->db->pSchema->tblHash,
 				    TARANTOOL_SYS_INDEX_NAME);
 		if (NEVER(!pSysIndex))
 			return;
@@ -4155,14 +4145,12 @@ reindexTable(Parse * pParse, Table * pTab, char const *zColl)
 static void
 reindexDatabases(Parse * pParse, char const *zColl)
 {
-	Db *pDb;		/* A single database */
 	sqlite3 *db = pParse->db;	/* The database connection */
-	HashElem *k;		/* For looping over tables in pDb */
+	HashElem *k;		/* For looping over tables in pSchema */
 	Table *pTab;		/* A table in the database */
 
-	pDb = &db->mdb;
-	assert(pDb != 0);
-	for (k = sqliteHashFirst(&pDb->pSchema->tblHash); k;
+	assert(db->pSchema);
+	for (k = sqliteHashFirst(&db->pSchema->tblHash); k;
 	     k = sqliteHashNext(k)) {
 		pTab = (Table *) sqliteHashData(k);
 		reindexTable(pParse, pTab, zColl);
diff --git a/src/box/sql/main.c b/src/box/sql/main.c
index 5e1104ba9..a9149d63c 100644
--- a/src/box/sql/main.c
+++ b/src/box/sql/main.c
@@ -2373,7 +2373,7 @@ openDatabase(const char *zFilename,	/* Database filename UTF-8 encoded */
 		goto opendb_out;
 	}
 
-	db->mdb.pSchema = sqlite3SchemaCreate(db);
+	db->pSchema = sqlite3SchemaCreate(db);
 	db->magic = SQLITE_MAGIC_OPEN;
 	if (db->mallocFailed) {
 		goto opendb_out;
diff --git a/src/box/sql/pragma.c b/src/box/sql/pragma.c
index 03ae926e0..a078c64af 100644
--- a/src/box/sql/pragma.c
+++ b/src/box/sql/pragma.c
@@ -249,7 +249,6 @@ sqlite3Pragma(Parse * pParse, Token * pId,	/* First part of [schema.]id field */
 	char *zTable = 0;	/* Nul-terminated UTF-8 string <value2> or NULL */
 	int rc;			/* return value form SQLITE_FCNTL_PRAGMA */
 	sqlite3 *db = pParse->db;	/* The database connection */
-	Db *pDb;		/* The specific database being pragmaed */
 	Vdbe *v = sqlite3GetVdbe(pParse);	/* Prepared statement */
 	const PragmaName *pPragma;	/* The pragma */
 	struct session *user_session = current_session();
@@ -259,7 +258,6 @@ sqlite3Pragma(Parse * pParse, Token * pId,	/* First part of [schema.]id field */
 		return;
 	sqlite3VdbeRunOnlyOnce(v);
 	pParse->nMem = 2;
-	pDb = &db->mdb;
 
 	zLeft = sqlite3NameFromToken(db, pId);
 	if (!zLeft)
@@ -394,7 +392,7 @@ sqlite3Pragma(Parse * pParse, Token * pId,	/* First part of [schema.]id field */
 			HashElem *i;
 			pParse->nMem = 4;
 			sqlite3CodeVerifySchema(pParse);
-			for (i = sqliteHashFirst(&pDb->pSchema->tblHash); i;
+			for (i = sqliteHashFirst(&db->pSchema->tblHash); i;
 			     i = sqliteHashNext(i)) {
 				Table *pTab = sqliteHashData(i);
 				sqlite3VdbeMultiLoad(v, 1, "ssii",
@@ -598,7 +596,7 @@ sqlite3Pragma(Parse * pParse, Token * pId,	/* First part of [schema.]id field */
 			regKey = ++pParse->nMem;
 			regRow = ++pParse->nMem;
 			sqlite3CodeVerifySchema(pParse);
-			k = sqliteHashFirst(&db->mdb.pSchema->tblHash);
+			k = sqliteHashFirst(&db->pSchema->tblHash);
 			while (k) {
 				if (zRight) {
 					pTab =
diff --git a/src/box/sql/prepare.c b/src/box/sql/prepare.c
index a319c5c4e..5d340ee98 100644
--- a/src/box/sql/prepare.c
+++ b/src/box/sql/prepare.c
@@ -163,10 +163,9 @@ extern int
 sqlite3InitDatabase(sqlite3 * db)
 {
 	int rc;
-	Db *pDb;
 	InitData initData;
 
-	assert(db->mdb.pSchema);
+	assert(db->pSchema);
 	assert(sqlite3_mutex_held(db->mutex));
 
 	memset(&initData, 0, sizeof(InitData));
@@ -182,7 +181,6 @@ sqlite3InitDatabase(sqlite3 * db)
 
 	/* Create a cursor to hold the database open
 	 */
-	pDb = &db->mdb;
 
 	/* Tarantool: schema_cookie is not used so far, but
 	 * might be used in future. Set it to dummy value.
@@ -305,7 +303,7 @@ sqlite3SchemaToIndex(sqlite3 * db, Schema * pSchema)
 	 */
 	assert(sqlite3_mutex_held(db->mutex));
 	if (pSchema) {
-		if (db->mdb.pSchema == pSchema) {
+		if (db->pSchema == pSchema) {
 			i = 0;
 		}
 		assert(i == 0);
diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
index e8213219b..c51564dbc 100644
--- a/src/box/sql/sqliteInt.h
+++ b/src/box/sql/sqliteInt.h
@@ -833,7 +833,6 @@ typedef struct AuthContext AuthContext;
 typedef struct AutoincInfo AutoincInfo;
 typedef struct Bitvec Bitvec;
 typedef struct Column Column;
-typedef struct Db Db;
 typedef struct Schema Schema;
 typedef struct Expr Expr;
 typedef struct ExprList ExprList;
@@ -889,14 +888,6 @@ typedef int VList;
 #include "os.h"
 #include "mutex.h"
 
-/*
- * Each database file to be accessed by the system is an instance
- * of the following structure.
- */
-struct Db {
-	Schema *pSchema;	/* Pointer to database schema (possibly shared) */
-};
-
 /*
  * An instance of the following structure stores a database schema.
  */
@@ -916,10 +907,9 @@ struct Schema {
  * These macros can be used to test, set, or clear bits in the
  * Db.pSchema->flags field.
  */
-#define DbHasProperty(D,P)     (((D)->mdb.pSchema->schemaFlags&(P))==(P))
-#define DbHasAnyProperty(D,P)  (((D)->mdb.pSchema->schemaFlags&(P))!=0)
-#define DbSetProperty(D,P)     (D)->mdb.pSchema->schemaFlags|=(P)
-#define DbClearProperty(D,P)   (D)->mdb.pSchema->schemaFlags&=~(P)
+#define DbHasProperty(D,P)     (((D)->pSchema->schemaFlags&(P))==(P))
+#define DbHasAnyProperty(D,P)  (((D)->pSchema->schemaFlags&(P))!=0)
+#define DbSetProperty(D,P)     (D)->pSchema->schemaFlags|=(P)
 
 /*
  * Allowed values for the DB.pSchema->flags field.
@@ -1034,7 +1024,7 @@ struct sqlite3 {
 	struct Vdbe *pVdbe;	/* List of active virtual machines */
 	struct coll *pDfltColl;	/* The default collating sequence (BINARY) */
 	sqlite3_mutex *mutex;	/* Connection mutex */
-	Db mdb;			/* All backends */
+	struct Schema *pSchema; /* Schema of the database */
 	i64 szMmap;		/* Default mmap_size setting */
 	unsigned int openFlags;	/* Flags passed to sqlite3_vfs.xOpen() */
 	int errCode;		/* Most recent error code (SQLITE_*) */
diff --git a/src/box/sql/status.c b/src/box/sql/status.c
index 39f909a73..8b476f814 100644
--- a/src/box/sql/status.c
+++ b/src/box/sql/status.c
@@ -245,7 +245,7 @@ sqlite3_db_status(sqlite3 * db,	/* The database connection whose status is desir
 			int nByte = 0;	/* Used to accumulate return value */
 
 			db->pnBytesFreed = &nByte;
-			Schema *pSchema = db->mdb.pSchema;
+			Schema *pSchema = db->pSchema;
 			if (ALWAYS(pSchema != 0)) {
 				HashElem *p;
 
diff --git a/src/box/sql/trigger.c b/src/box/sql/trigger.c
index 5cabaaa1f..def724ae6 100644
--- a/src/box/sql/trigger.c
+++ b/src/box/sql/trigger.c
@@ -123,7 +123,7 @@ sqlite3BeginTrigger(Parse * pParse,	/* The parse context of the CREATE TRIGGER s
 	if (!zName || SQLITE_OK != sqlite3CheckIdentifierName(pParse, zName)) {
 		goto trigger_cleanup;
 	}
-	if (sqlite3HashFind(&(db->mdb.pSchema->trigHash), zName)) {
+	if (sqlite3HashFind(&(db->pSchema->trigHash), zName)) {
 		if (!noErr) {
 			sqlite3ErrorMsg(pParse, "trigger %s already exists",
 					zName);
@@ -187,7 +187,7 @@ sqlite3BeginTrigger(Parse * pParse,	/* The parse context of the CREATE TRIGGER s
 	pTrigger->zName = zName;
 	zName = 0;
 	pTrigger->table = sqlite3DbStrDup(db, pTableName->a[0].zName);
-	pTrigger->pSchema = db->mdb.pSchema;
+	pTrigger->pSchema = db->pSchema;
 	pTrigger->pTabSchema = pTab->pSchema;
 	pTrigger->op = (u8) op;
 	pTrigger->tr_tm = tr_tm == TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER;
@@ -260,7 +260,7 @@ sqlite3FinishTrigger(Parse * pParse,	/* Parser context */
 		if (v == 0)
 			goto triggerfinish_cleanup;
 
-		pSysTrigger = sqlite3HashFind(&pParse->db->mdb.pSchema->tblHash,
+		pSysTrigger = sqlite3HashFind(&pParse->db->pSchema->tblHash,
 					      TARANTOOL_SYS_TRIGGER_NAME);
 		if (NEVER(!pSysTrigger))
 			goto triggerfinish_cleanup;
@@ -324,7 +324,7 @@ sqlite3FinishTrigger(Parse * pParse,	/* Parser context */
 
 	if (db->init.busy) {
 		Trigger *pLink = pTrig;
-		Hash *pHash = &db->mdb.pSchema->trigHash;
+		Hash *pHash = &db->pSchema->trigHash;
 		pTrig = sqlite3HashInsert(pHash, zName, pTrig);
 		if (pTrig) {
 			sqlite3OomFault(db);
@@ -539,7 +539,7 @@ sqlite3DropTrigger(Parse * pParse, SrcList * pName, int noErr)
 
 	assert(pName->nSrc == 1);
 	zName = pName->a[0].zName;
-	pTrigger = sqlite3HashFind(&(db->mdb.pSchema->trigHash), zName);
+	pTrigger = sqlite3HashFind(&(db->pSchema->trigHash), zName);
 	if (!pTrigger) {
 		if (!noErr) {
 			sqlite3ErrorMsg(pParse, "no such trigger: %S", pName,
@@ -617,7 +617,7 @@ sqlite3UnlinkAndDeleteTrigger(sqlite3 * db, const char *zName)
 	Hash *pHash;
 	struct session *user_session = current_session();
 
-	pHash = &(db->mdb.pSchema->trigHash);
+	pHash = &(db->pSchema->trigHash);
 	pTrigger = sqlite3HashInsert(pHash, zName, 0);
 	if (ALWAYS(pTrigger)) {
 		if (pTrigger->pSchema == pTrigger->pTabSchema) {
diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
index 3b28d8bad..8bcb20430 100644
--- a/src/box/sql/vdbe.c
+++ b/src/box/sql/vdbe.c
@@ -3124,10 +3124,8 @@ case OP_ReadCookie: {               /* out2 */
  * A transaction must be started before executing this opcode.
  */
 case OP_SetCookie: {
-	Db *pDb;
 	assert(pOp->p1==0);
 	assert(p->readOnly==0);
-	pDb = &db->mdb;
 	/* See note about index shifting on OP_ReadCookie */
 	/* When the schema cookie changes, record the new cookie internally */
 	pDb->pSchema->schema_cookie = pOp->p3;
@@ -3269,7 +3267,7 @@ case OP_OpenWrite:
 			zName = space_name(space);
 			assert(zName);
 
-			pTab = sqlite3HashFind(&db->mdb.pSchema->tblHash, zName);
+			pTab = sqlite3HashFind(&db->pSchema->tblHash, zName);
 			assert(pTab);
 
 			pIdx = sqlite3PrimaryKeyIndex(pTab);
@@ -4870,7 +4868,7 @@ case OP_RenameTable: {
 	assert(space);
 	zOldTableName = space_name(space);
 	assert(zOldTableName);
-	pTab = sqlite3HashFind(&db->mdb.pSchema->tblHash, zOldTableName);
+	pTab = sqlite3HashFind(&db->pSchema->tblHash, zOldTableName);
 	assert(pTab);
 	pTrig = pTab->pTrigger;
 	iRootPage = pTab->tnum;
@@ -4891,8 +4889,8 @@ case OP_RenameTable: {
 		if (rc) goto abort_due_to_error;
 		pFKey->zTo = sqlite3DbStrNDup(db, zNewTableName,
 					      sqlite3Strlen30(zNewTableName));
-		sqlite3HashInsert(&db->mdb.pSchema->fkeyHash, zOldTableName, 0);
-		sqlite3HashInsert(&db->mdb.pSchema->fkeyHash, zNewTableName, pFKey);
+		sqlite3HashInsert(&db->pSchema->fkeyHash, zOldTableName, 0);
+		sqlite3HashInsert(&db->pSchema->fkeyHash, zNewTableName, pFKey);
 	}
 
 	sqlite3UnlinkAndDeleteTable(db, pTab->zName);
@@ -4913,7 +4911,7 @@ case OP_RenameTable: {
 		goto abort_due_to_error;
 	}
 
-	pTab = sqlite3HashFind(&db->mdb.pSchema->tblHash, zNewTableName);
+	pTab = sqlite3HashFind(&db->pSchema->tblHash, zNewTableName);
 	pTab->pTrigger = pTrig;
 
 	/* Rename all trigger created on this table.*/
-- 
2.14.1




More information about the Tarantool-patches mailing list