MXS-1337 Thread initialization is checked by explicit callbacks
When any of the QcSqliteInfo member functions are called, they can assume that thread initialization has been performed.
This commit is contained in:
@ -761,6 +761,8 @@ public:
|
|||||||
|
|
||||||
void mxs_sqlite3AlterFinishAddColumn(Parse* pParse, Token* pToken)
|
void mxs_sqlite3AlterFinishAddColumn(Parse* pParse, Token* pToken)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
m_operation = QUERY_OP_ALTER;
|
m_operation = QUERY_OP_ALTER;
|
||||||
@ -768,6 +770,8 @@ public:
|
|||||||
|
|
||||||
void mxs_sqlite3AlterBeginAddColumn(Parse* pParse, SrcList* pSrcList)
|
void mxs_sqlite3AlterBeginAddColumn(Parse* pParse, SrcList* pSrcList)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
update_names_from_srclist(this, pSrcList);
|
update_names_from_srclist(this, pSrcList);
|
||||||
|
|
||||||
exposed_sqlite3SrcListDelete(pParse->db, pSrcList);
|
exposed_sqlite3SrcListDelete(pParse->db, pSrcList);
|
||||||
@ -775,6 +779,8 @@ public:
|
|||||||
|
|
||||||
void mxs_sqlite3Analyze(Parse* pParse, SrcList* pSrcList)
|
void mxs_sqlite3Analyze(Parse* pParse, SrcList* pSrcList)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
|
|
||||||
@ -785,6 +791,8 @@ public:
|
|||||||
|
|
||||||
void mxs_sqlite3BeginTransaction(Parse* pParse, int token, int type)
|
void mxs_sqlite3BeginTransaction(Parse* pParse, int token, int type)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
if ((m_sql_mode != QC_SQL_MODE_ORACLE) || (token == TK_START))
|
if ((m_sql_mode != QC_SQL_MODE_ORACLE) || (token == TK_START))
|
||||||
{
|
{
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
@ -803,6 +811,8 @@ public:
|
|||||||
int isTemp, /* True if the TEMPORARY keyword is present */
|
int isTemp, /* True if the TEMPORARY keyword is present */
|
||||||
int noErr) /* Suppress errors if the trigger already exists */
|
int noErr) /* Suppress errors if the trigger already exists */
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
|
|
||||||
@ -826,6 +836,8 @@ public:
|
|||||||
|
|
||||||
void mxs_sqlite3CommitTransaction(Parse* pParse)
|
void mxs_sqlite3CommitTransaction(Parse* pParse)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = QUERY_TYPE_COMMIT;
|
m_type_mask = QUERY_TYPE_COMMIT;
|
||||||
}
|
}
|
||||||
@ -841,6 +853,8 @@ public:
|
|||||||
int sortOrder, /* Sort order of primary key when pList==NULL */
|
int sortOrder, /* Sort order of primary key when pList==NULL */
|
||||||
int ifNotExist) /* Omit error if index already exists */
|
int ifNotExist) /* Omit error if index already exists */
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
m_operation = QUERY_OP_CREATE;
|
m_operation = QUERY_OP_CREATE;
|
||||||
@ -868,6 +882,8 @@ public:
|
|||||||
int isTemp, /* TRUE for a TEMPORARY view */
|
int isTemp, /* TRUE for a TEMPORARY view */
|
||||||
int noErr) /* Suppress error messages if VIEW already exists */
|
int noErr) /* Suppress error messages if VIEW already exists */
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
m_operation = QUERY_OP_CREATE;
|
m_operation = QUERY_OP_CREATE;
|
||||||
@ -903,6 +919,8 @@ public:
|
|||||||
|
|
||||||
void mxs_sqlite3DeleteFrom(Parse* pParse, SrcList* pTabList, Expr* pWhere, SrcList* pUsing)
|
void mxs_sqlite3DeleteFrom(Parse* pParse, SrcList* pTabList, Expr* pWhere, SrcList* pUsing)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
|
|
||||||
if (m_operation != QUERY_OP_EXPLAIN)
|
if (m_operation != QUERY_OP_EXPLAIN)
|
||||||
@ -971,6 +989,8 @@ public:
|
|||||||
|
|
||||||
void mxs_sqlite3DropIndex(Parse* pParse, SrcList* pName, SrcList* pTable, int bits)
|
void mxs_sqlite3DropIndex(Parse* pParse, SrcList* pName, SrcList* pTable, int bits)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
m_operation = QUERY_OP_DROP;
|
m_operation = QUERY_OP_DROP;
|
||||||
@ -983,6 +1003,8 @@ public:
|
|||||||
|
|
||||||
void mxs_sqlite3DropTable(Parse *pParse, SrcList *pName, int isView, int noErr, int isTemp)
|
void mxs_sqlite3DropTable(Parse *pParse, SrcList *pName, int isView, int noErr, int isTemp)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = QUERY_TYPE_WRITE;
|
m_type_mask = QUERY_TYPE_WRITE;
|
||||||
if (!isTemp)
|
if (!isTemp)
|
||||||
@ -1006,31 +1028,17 @@ public:
|
|||||||
Select *pSelect, /* Select from a "CREATE ... AS SELECT" */
|
Select *pSelect, /* Select from a "CREATE ... AS SELECT" */
|
||||||
SrcList* pOldTable) /* The old table in "CREATE ... LIKE OldTable" */
|
SrcList* pOldTable) /* The old table in "CREATE ... LIKE OldTable" */
|
||||||
{
|
{
|
||||||
if (this_thread.initialized)
|
ss_dassert(this_thread.initialized);
|
||||||
{
|
|
||||||
if (pSelect)
|
|
||||||
{
|
|
||||||
update_field_infos_from_select(this, pSelect, QC_USED_IN_SELECT, NULL);
|
|
||||||
}
|
|
||||||
else if (pOldTable)
|
|
||||||
{
|
|
||||||
update_names_from_srclist(this, pOldTable);
|
|
||||||
exposed_sqlite3SrcListDelete(pParse->db, pOldTable);
|
|
||||||
}
|
|
||||||
|
|
||||||
// pSelect is deleted in parse.y
|
if (pSelect)
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
exposed_sqlite3EndTable(pParse, pCons, pEnd, tabOpts, pSelect);
|
update_field_infos_from_select(this, pSelect, QC_USED_IN_SELECT, NULL);
|
||||||
|
}
|
||||||
|
else if (pOldTable)
|
||||||
|
{
|
||||||
|
update_names_from_srclist(this, pOldTable);
|
||||||
|
exposed_sqlite3SrcListDelete(pParse->db, pOldTable);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void mxs_sqlite3FinishTrigger(Parse *pParse, /* Parser context */
|
|
||||||
TriggerStep *pStepList, /* The triggered program */
|
|
||||||
Token *pAll) /* Token that describes the complete CREATE TRIGGER */
|
|
||||||
{
|
|
||||||
exposed_sqlite3FinishTrigger(pParse, pStepList, pAll);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mxs_sqlite3Insert(Parse* pParse,
|
void mxs_sqlite3Insert(Parse* pParse,
|
||||||
@ -1040,6 +1048,8 @@ public:
|
|||||||
int onError,
|
int onError,
|
||||||
ExprList* pSet)
|
ExprList* pSet)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
|
|
||||||
if (m_operation != QUERY_OP_EXPLAIN)
|
if (m_operation != QUERY_OP_EXPLAIN)
|
||||||
@ -1085,32 +1095,25 @@ public:
|
|||||||
|
|
||||||
void mxs_sqlite3RollbackTransaction(Parse* pParse)
|
void mxs_sqlite3RollbackTransaction(Parse* pParse)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = QUERY_TYPE_ROLLBACK;
|
m_type_mask = QUERY_TYPE_ROLLBACK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mxs_sqlite3Select(Parse* pParse, Select* p, SelectDest* pDest)
|
void mxs_sqlite3Select(Parse* pParse, Select* p, SelectDest* pDest)
|
||||||
{
|
{
|
||||||
int rc = -1;
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
if (this_thread.initialized)
|
m_status = QC_QUERY_PARSED;
|
||||||
|
|
||||||
|
if (m_operation != QUERY_OP_EXPLAIN)
|
||||||
{
|
{
|
||||||
m_status = QC_QUERY_PARSED;
|
m_operation = QUERY_OP_SELECT;
|
||||||
|
|
||||||
if (m_operation != QUERY_OP_EXPLAIN)
|
maxscaleCollectInfoFromSelect(pParse, p, 0);
|
||||||
{
|
|
||||||
m_operation = QUERY_OP_SELECT;
|
|
||||||
|
|
||||||
maxscaleCollectInfoFromSelect(pParse, p, 0);
|
|
||||||
}
|
|
||||||
// NOTE: By convention, the select is deleted in parse.y.
|
|
||||||
}
|
}
|
||||||
else
|
// NOTE: By convention, the select is deleted in parse.y.
|
||||||
{
|
|
||||||
rc = exposed_sqlite3Select(pParse, p, pDest);
|
|
||||||
}
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mxs_sqlite3StartTable(Parse *pParse, /* Parser context */
|
void mxs_sqlite3StartTable(Parse *pParse, /* Parser context */
|
||||||
@ -1121,65 +1124,62 @@ public:
|
|||||||
int isVirtual, /* True if this is a VIRTUAL table */
|
int isVirtual, /* True if this is a VIRTUAL table */
|
||||||
int noErr) /* Do nothing if table already exists */
|
int noErr) /* Do nothing if table already exists */
|
||||||
{
|
{
|
||||||
if (this_thread.initialized)
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
|
m_status = QC_QUERY_PARSED;
|
||||||
|
m_operation = QUERY_OP_CREATE;
|
||||||
|
m_type_mask = QUERY_TYPE_WRITE;
|
||||||
|
|
||||||
|
if (isTemp)
|
||||||
{
|
{
|
||||||
m_status = QC_QUERY_PARSED;
|
m_type_mask |= QUERY_TYPE_CREATE_TMP_TABLE;
|
||||||
m_operation = QUERY_OP_CREATE;
|
|
||||||
m_type_mask = QUERY_TYPE_WRITE;
|
|
||||||
|
|
||||||
if (isTemp)
|
|
||||||
{
|
|
||||||
m_type_mask |= QUERY_TYPE_CREATE_TMP_TABLE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_type_mask |= QUERY_TYPE_COMMIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Token* pName = pName2->z ? pName2 : pName1;
|
|
||||||
const Token* pDatabase = pName2->z ? pName1 : NULL;
|
|
||||||
|
|
||||||
char name[pName->n + 1];
|
|
||||||
strncpy(name, pName->z, pName->n);
|
|
||||||
name[pName->n] = 0;
|
|
||||||
|
|
||||||
if (pDatabase)
|
|
||||||
{
|
|
||||||
char database[pDatabase->n + 1];
|
|
||||||
strncpy(database, pDatabase->z, pDatabase->n);
|
|
||||||
database[pDatabase->n] = 0;
|
|
||||||
|
|
||||||
update_names(database, name, NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
update_names(NULL, name, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_collect & QC_COLLECT_TABLES)
|
|
||||||
{
|
|
||||||
// If information is collected in several passes, then we may
|
|
||||||
// this information already.
|
|
||||||
if (!m_zCreated_table_name)
|
|
||||||
{
|
|
||||||
m_zCreated_table_name = MXS_STRDUP(m_pzTable_names[0]);
|
|
||||||
MXS_ABORT_IF_NULL(m_zCreated_table_name);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ss_dassert(m_collect != m_collected);
|
|
||||||
ss_dassert(strcmp(m_zCreated_table_name, m_pzTable_names[0]) == 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
exposed_sqlite3StartTable(pParse, pName1, pName2, isTemp, isView, isVirtual, noErr);
|
m_type_mask |= QUERY_TYPE_COMMIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Token* pName = pName2->z ? pName2 : pName1;
|
||||||
|
const Token* pDatabase = pName2->z ? pName1 : NULL;
|
||||||
|
|
||||||
|
char name[pName->n + 1];
|
||||||
|
strncpy(name, pName->z, pName->n);
|
||||||
|
name[pName->n] = 0;
|
||||||
|
|
||||||
|
if (pDatabase)
|
||||||
|
{
|
||||||
|
char database[pDatabase->n + 1];
|
||||||
|
strncpy(database, pDatabase->z, pDatabase->n);
|
||||||
|
database[pDatabase->n] = 0;
|
||||||
|
|
||||||
|
update_names(database, name, NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
update_names(NULL, name, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_collect & QC_COLLECT_TABLES)
|
||||||
|
{
|
||||||
|
// If information is collected in several passes, then we may
|
||||||
|
// this information already.
|
||||||
|
if (!m_zCreated_table_name)
|
||||||
|
{
|
||||||
|
m_zCreated_table_name = MXS_STRDUP(m_pzTable_names[0]);
|
||||||
|
MXS_ABORT_IF_NULL(m_zCreated_table_name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ss_dassert(m_collect != m_collected);
|
||||||
|
ss_dassert(strcmp(m_zCreated_table_name, m_pzTable_names[0]) == 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void mxs_sqlite3Update(Parse* pParse, SrcList* pTabList, ExprList* pChanges, Expr* pWhere, int onError)
|
void mxs_sqlite3Update(Parse* pParse, SrcList* pTabList, ExprList* pChanges, Expr* pWhere, int onError)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
|
|
||||||
if (m_operation != QUERY_OP_EXPLAIN)
|
if (m_operation != QUERY_OP_EXPLAIN)
|
||||||
@ -1212,12 +1212,16 @@ public:
|
|||||||
|
|
||||||
void mxs_sqlite3Savepoint(Parse *pParse, int op, Token *pName)
|
void mxs_sqlite3Savepoint(Parse *pParse, int op, Token *pName)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = QUERY_TYPE_WRITE;
|
m_type_mask = QUERY_TYPE_WRITE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void maxscaleCollectInfoFromSelect(Parse* pParse, Select* pSelect, int sub_select)
|
void maxscaleCollectInfoFromSelect(Parse* pParse, Select* pSelect, int sub_select)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
if (pSelect->pInto)
|
if (pSelect->pInto)
|
||||||
{
|
{
|
||||||
// If there's a single variable, then it's a write.
|
// If there's a single variable, then it's a write.
|
||||||
@ -1241,6 +1245,8 @@ public:
|
|||||||
SrcList *pSrc, /* The table to rename. */
|
SrcList *pSrc, /* The table to rename. */
|
||||||
Token *pName) /* The new table name (RENAME). */
|
Token *pName) /* The new table name (RENAME). */
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
m_operation = QUERY_OP_ALTER;
|
m_operation = QUERY_OP_ALTER;
|
||||||
@ -1268,6 +1274,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleCall(Parse* pParse, SrcList* pName, ExprList* pExprList)
|
void maxscaleCall(Parse* pParse, SrcList* pName, ExprList* pExprList)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = QUERY_TYPE_WRITE;
|
m_type_mask = QUERY_TYPE_WRITE;
|
||||||
|
|
||||||
@ -1282,6 +1290,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleCheckTable(Parse* pParse, SrcList* pTables)
|
void maxscaleCheckTable(Parse* pParse, SrcList* pTables)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
|
|
||||||
@ -1292,6 +1302,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleCreateSequence(Parse* pParse, Token* pDatabase, Token* pTable)
|
void maxscaleCreateSequence(Parse* pParse, Token* pDatabase, Token* pTable)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
|
|
||||||
const char* zDatabase = NULL;
|
const char* zDatabase = NULL;
|
||||||
@ -1314,6 +1326,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleComment()
|
void maxscaleComment()
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
if (m_status == QC_QUERY_INVALID)
|
if (m_status == QC_QUERY_INVALID)
|
||||||
{
|
{
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
@ -1323,6 +1337,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleDeclare(Parse* pParse)
|
void maxscaleDeclare(Parse* pParse)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
if (m_sql_mode != QC_SQL_MODE_ORACLE)
|
if (m_sql_mode != QC_SQL_MODE_ORACLE)
|
||||||
{
|
{
|
||||||
m_status = QC_QUERY_INVALID;
|
m_status = QC_QUERY_INVALID;
|
||||||
@ -1331,6 +1347,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleDeallocate(Parse* pParse, Token* pName)
|
void maxscaleDeallocate(Parse* pParse, Token* pName)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = QUERY_TYPE_WRITE;
|
m_type_mask = QUERY_TYPE_WRITE;
|
||||||
|
|
||||||
@ -1354,6 +1372,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleDo(Parse* pParse, ExprList* pEList)
|
void maxscaleDo(Parse* pParse, ExprList* pEList)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_READ | QUERY_TYPE_WRITE);
|
m_type_mask = (QUERY_TYPE_READ | QUERY_TYPE_WRITE);
|
||||||
|
|
||||||
@ -1362,6 +1382,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleDrop(Parse* pParse, int what, Token* pDatabase, Token* pName)
|
void maxscaleDrop(Parse* pParse, int what, Token* pDatabase, Token* pName)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
m_operation = QUERY_OP_DROP;
|
m_operation = QUERY_OP_DROP;
|
||||||
@ -1389,6 +1411,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleExecute(Parse* pParse, Token* pName, int type_mask)
|
void maxscaleExecute(Parse* pParse, Token* pName, int type_mask)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | type_mask);
|
m_type_mask = (QUERY_TYPE_WRITE | type_mask);
|
||||||
m_operation = QUERY_OP_EXECUTE;
|
m_operation = QUERY_OP_EXECUTE;
|
||||||
@ -1413,6 +1437,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleExecuteImmediate(Parse* pParse, Token* pName, ExprSpan* pExprSpan, int type_mask)
|
void maxscaleExecuteImmediate(Parse* pParse, Token* pName, ExprSpan* pExprSpan, int type_mask)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
if (m_sql_mode == QC_SQL_MODE_ORACLE)
|
if (m_sql_mode == QC_SQL_MODE_ORACLE)
|
||||||
{
|
{
|
||||||
// This should be "EXECUTE IMMEDIATE ...", but as "IMMEDIATE" is not
|
// This should be "EXECUTE IMMEDIATE ...", but as "IMMEDIATE" is not
|
||||||
@ -1441,6 +1467,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleExplain(Parse* pParse, Token* pNext)
|
void maxscaleExplain(Parse* pParse, Token* pNext)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = QUERY_TYPE_READ;
|
m_type_mask = QUERY_TYPE_READ;
|
||||||
m_operation = QUERY_OP_SHOW;
|
m_operation = QUERY_OP_SHOW;
|
||||||
@ -1469,12 +1497,16 @@ public:
|
|||||||
|
|
||||||
void maxscaleFlush(Parse* pParse, Token* pWhat)
|
void maxscaleFlush(Parse* pParse, Token* pWhat)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void maxscaleHandler(Parse* pParse, mxs_handler_t type, SrcList* pFullName, Token* pName)
|
void maxscaleHandler(Parse* pParse, mxs_handler_t type, SrcList* pFullName, Token* pName)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
@ -1511,6 +1543,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleLoadData(Parse* pParse, SrcList* pFullName)
|
void maxscaleLoadData(Parse* pParse, SrcList* pFullName)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = QUERY_TYPE_WRITE;
|
m_type_mask = QUERY_TYPE_WRITE;
|
||||||
m_operation = QUERY_OP_LOAD;
|
m_operation = QUERY_OP_LOAD;
|
||||||
@ -1525,6 +1559,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleLock(Parse* pParse, mxs_lock_t type, SrcList* pTables)
|
void maxscaleLock(Parse* pParse, mxs_lock_t type, SrcList* pTables)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = QUERY_TYPE_WRITE;
|
m_type_mask = QUERY_TYPE_WRITE;
|
||||||
|
|
||||||
@ -1538,6 +1574,8 @@ public:
|
|||||||
|
|
||||||
int maxscaleTranslateKeyword(int token)
|
int maxscaleTranslateKeyword(int token)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
switch (token)
|
switch (token)
|
||||||
{
|
{
|
||||||
case TK_CHARSET:
|
case TK_CHARSET:
|
||||||
@ -1570,6 +1608,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
int maxscaleKeyword(int token)
|
int maxscaleKeyword(int token)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
// This function is called for every keyword the sqlite3 parser encounters.
|
// This function is called for every keyword the sqlite3 parser encounters.
|
||||||
@ -1805,6 +1845,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleRenameTable(Parse* pParse, SrcList* pTables)
|
void maxscaleRenameTable(Parse* pParse, SrcList* pTables)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT;
|
m_type_mask = QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT;
|
||||||
|
|
||||||
@ -1824,6 +1866,8 @@ public:
|
|||||||
|
|
||||||
void maxscalePrepare(Parse* pParse, Token* pName, Expr* pStmt)
|
void maxscalePrepare(Parse* pParse, Token* pName, Expr* pStmt)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
// If the mode is MODE_ORACLE then if expression contains simply a string
|
// If the mode is MODE_ORACLE then if expression contains simply a string
|
||||||
// we can conclude that the statement has been fully parsed, because it will
|
// we can conclude that the statement has been fully parsed, because it will
|
||||||
// be sensible to parse the preparable statement. Otherwise we mark the
|
// be sensible to parse the preparable statement. Otherwise we mark the
|
||||||
@ -1911,6 +1955,8 @@ public:
|
|||||||
|
|
||||||
void maxscalePrivileges(Parse* pParse, int kind)
|
void maxscalePrivileges(Parse* pParse, int kind)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
|
|
||||||
@ -1931,6 +1977,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleSet(Parse* pParse, int scope, mxs_set_t kind, ExprList* pList)
|
void maxscaleSet(Parse* pParse, int scope, mxs_set_t kind, ExprList* pList)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = 0; // Reset what was set in maxscaleKeyword
|
m_type_mask = 0; // Reset what was set in maxscaleKeyword
|
||||||
|
|
||||||
@ -2087,6 +2135,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleShow(Parse* pParse, MxsShow* pShow)
|
void maxscaleShow(Parse* pParse, MxsShow* pShow)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_operation = QUERY_OP_SHOW;
|
m_operation = QUERY_OP_SHOW;
|
||||||
|
|
||||||
@ -2178,6 +2228,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleTruncate(Parse* pParse, Token* pDatabase, Token* pName)
|
void maxscaleTruncate(Parse* pParse, Token* pDatabase, Token* pName)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
|
||||||
m_operation = QUERY_OP_TRUNCATE;
|
m_operation = QUERY_OP_TRUNCATE;
|
||||||
@ -2205,6 +2257,8 @@ public:
|
|||||||
|
|
||||||
void maxscaleUse(Parse* pParse, Token* pToken)
|
void maxscaleUse(Parse* pParse, Token* pToken)
|
||||||
{
|
{
|
||||||
|
ss_dassert(this_thread.initialized);
|
||||||
|
|
||||||
m_status = QC_QUERY_PARSED;
|
m_status = QC_QUERY_PARSED;
|
||||||
m_type_mask = QUERY_TYPE_SESSION_WRITE;
|
m_type_mask = QUERY_TYPE_SESSION_WRITE;
|
||||||
m_operation = QUERY_OP_CHANGE_DB;
|
m_operation = QUERY_OP_CHANGE_DB;
|
||||||
@ -3615,10 +3669,17 @@ void mxs_sqlite3EndTable(Parse *pParse, /* Parse context */
|
|||||||
{
|
{
|
||||||
QC_TRACE();
|
QC_TRACE();
|
||||||
|
|
||||||
QcSqliteInfo* pInfo = this_thread.pInfo;
|
if (this_thread.initialized)
|
||||||
ss_dassert(pInfo);
|
{
|
||||||
|
QcSqliteInfo* pInfo = this_thread.pInfo;
|
||||||
|
ss_dassert(pInfo);
|
||||||
|
|
||||||
pInfo->mxs_sqlite3EndTable(pParse, pCons, pEnd, tabOpts, pSelect, pOldTable);
|
pInfo->mxs_sqlite3EndTable(pParse, pCons, pEnd, tabOpts, pSelect, pOldTable);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
exposed_sqlite3EndTable(pParse, pCons, pEnd, tabOpts, pSelect);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void mxs_sqlite3FinishTrigger(Parse *pParse, /* Parser context */
|
void mxs_sqlite3FinishTrigger(Parse *pParse, /* Parser context */
|
||||||
@ -3627,10 +3688,7 @@ void mxs_sqlite3FinishTrigger(Parse *pParse, /* Parser context */
|
|||||||
{
|
{
|
||||||
QC_TRACE();
|
QC_TRACE();
|
||||||
|
|
||||||
QcSqliteInfo* pInfo = this_thread.pInfo;
|
exposed_sqlite3FinishTrigger(pParse, pStepList, pAll);
|
||||||
ss_dassert(pInfo);
|
|
||||||
|
|
||||||
pInfo->mxs_sqlite3FinishTrigger(pParse, pStepList, pAll);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mxs_sqlite3Insert(Parse* pParse,
|
void mxs_sqlite3Insert(Parse* pParse,
|
||||||
@ -3663,10 +3721,17 @@ int mxs_sqlite3Select(Parse* pParse, Select* p, SelectDest* pDest)
|
|||||||
int rc = -1;
|
int rc = -1;
|
||||||
QC_TRACE();
|
QC_TRACE();
|
||||||
|
|
||||||
QcSqliteInfo* pInfo = this_thread.pInfo;
|
if (this_thread.initialized)
|
||||||
ss_dassert(pInfo);
|
{
|
||||||
|
QcSqliteInfo* pInfo = this_thread.pInfo;
|
||||||
|
ss_dassert(pInfo);
|
||||||
|
|
||||||
rc = pInfo->mxs_sqlite3Select(pParse, p, pDest);
|
pInfo->mxs_sqlite3Select(pParse, p, pDest);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rc = exposed_sqlite3Select(pParse, p, pDest);
|
||||||
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -3681,10 +3746,17 @@ void mxs_sqlite3StartTable(Parse *pParse, /* Parser context */
|
|||||||
{
|
{
|
||||||
QC_TRACE();
|
QC_TRACE();
|
||||||
|
|
||||||
QcSqliteInfo* pInfo = this_thread.pInfo;
|
if (this_thread.initialized)
|
||||||
ss_dassert(pInfo);
|
{
|
||||||
|
QcSqliteInfo* pInfo = this_thread.pInfo;
|
||||||
|
ss_dassert(pInfo);
|
||||||
|
|
||||||
pInfo->mxs_sqlite3StartTable(pParse, pName1, pName2, isTemp, isView, isVirtual, noErr);
|
pInfo->mxs_sqlite3StartTable(pParse, pName1, pName2, isTemp, isView, isVirtual, noErr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
exposed_sqlite3StartTable(pParse, pName1, pName2, isTemp, isView, isVirtual, noErr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void mxs_sqlite3Update(Parse* pParse, SrcList* pTabList, ExprList* pChanges, Expr* pWhere, int onError)
|
void mxs_sqlite3Update(Parse* pParse, SrcList* pTabList, ExprList* pChanges, Expr* pWhere, int onError)
|
||||||
|
Reference in New Issue
Block a user