[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