MXS-1337 Moved functions to QcSqliteInfo

This commit is contained in:
Johan Wikman
2017-08-10 15:57:48 +03:00
parent 54a75a1752
commit 8ce5147d39

View File

@ -187,19 +187,6 @@ static void update_field_infos(QcSqliteInfo* info,
uint32_t usage, uint32_t usage,
qc_token_position_t pos, qc_token_position_t pos,
const ExprList* pExclude); const ExprList* pExclude);
static void update_field_infos_from_exprlist(QcSqliteInfo* info,
QcAliases* pAliases,
const ExprList* pEList,
uint32_t usage,
const ExprList* pExclude);
static void update_field_infos_from_idlist(QcSqliteInfo* info,
QcAliases* pAliases,
const IdList* pIds,
uint32_t usage,
const ExprList* pExclude);
static void update_field_infos_from_with(QcSqliteInfo* info,
QcAliases* pAliases,
const With* pWith);
static void update_function_info(QcSqliteInfo* info, static void update_function_info(QcSqliteInfo* info,
const char* name, const char* name,
uint32_t usage); uint32_t usage);
@ -778,6 +765,32 @@ public:
return truth; return truth;
} }
void update_field_infos_from_exprlist(QcAliases* pAliases,
const ExprList* pEList,
uint32_t usage,
const ExprList* pExclude)
{
for (int i = 0; i < pEList->nExpr; ++i)
{
ExprList::ExprList_item* pItem = &pEList->a[i];
update_field_infos(this, pAliases, 0, pItem->pExpr, usage, QC_TOKEN_MIDDLE, pExclude);
}
}
void update_field_infos_from_idlist(QcAliases* pAliases,
const IdList* pIds,
uint32_t usage,
const ExprList* pExclude)
{
for (int i = 0; i < pIds->nId; ++i)
{
IdList::IdList_item* pItem = &pIds->a[i];
update_field_info(pAliases, NULL, NULL, pItem->zName, usage, pExclude);
}
}
void update_field_infos_from_select(QcAliases& aliases, void update_field_infos_from_select(QcAliases& aliases,
const Select* pSelect, const Select* pSelect,
uint32_t usage, uint32_t usage,
@ -819,7 +832,7 @@ public:
if (pSelect->pEList) if (pSelect->pEList)
{ {
update_field_infos_from_exprlist(this, &aliases, pSelect->pEList, usage, NULL); update_field_infos_from_exprlist(&aliases, pSelect->pEList, usage, NULL);
} }
if (pSelect->pWhere) if (pSelect->pWhere)
@ -831,7 +844,7 @@ public:
if (pSelect->pGroupBy) if (pSelect->pGroupBy)
{ {
update_field_infos_from_exprlist(this, &aliases, update_field_infos_from_exprlist(&aliases,
pSelect->pGroupBy, QC_USED_IN_GROUP_BY, pSelect->pEList); pSelect->pGroupBy, QC_USED_IN_GROUP_BY, pSelect->pEList);
} }
@ -847,7 +860,7 @@ public:
if (pSelect->pWith) if (pSelect->pWith)
{ {
update_field_infos_from_with(this, &aliases, pSelect->pWith); update_field_infos_from_with(&aliases, pSelect->pWith);
} }
if (((pSelect->op == TK_UNION) || (pSelect->op == TK_ALL)) && pSelect->pPrior) if (((pSelect->op == TK_UNION) || (pSelect->op == TK_ALL)) && pSelect->pPrior)
@ -866,6 +879,36 @@ public:
update_field_infos_from_select(aliases, pSelect, usage, pExclude); update_field_infos_from_select(aliases, pSelect, usage, pExclude);
} }
void update_field_infos_from_with(QcAliases* pAliases, const With* pWith)
{
for (int i = 0; i < pWith->nCte; ++i)
{
const With::Cte* pCte = &pWith->a[i];
if (pCte->pSelect)
{
update_field_infos_from_subselect(pAliases, pCte->pSelect, QC_USED_IN_SUBSELECT, NULL);
}
}
}
void update_names_from_srclist(QcAliases* pAliases,
const SrcList* pSrc)
{
for (int i = 0; i < pSrc->nSrc; ++i)
{
if (pSrc->a[i].zName)
{
update_names(pSrc->a[i].zDatabase, pSrc->a[i].zName, pSrc->a[i].zAlias, pAliases);
}
if (pSrc->a[i].pSelect && pSrc->a[i].pSelect->pSrc)
{
update_names_from_srclist(pAliases, pSrc->a[i].pSelect->pSrc);
}
}
}
// //
// sqlite3 callbacks // sqlite3 callbacks
// //
@ -883,7 +926,7 @@ public:
{ {
ss_dassert(this_thread.initialized); ss_dassert(this_thread.initialized);
update_names_from_srclist(this, NULL, pSrcList); update_names_from_srclist(NULL, pSrcList);
exposed_sqlite3SrcListDelete(pParse->db, pSrcList); exposed_sqlite3SrcListDelete(pParse->db, pSrcList);
} }
@ -895,7 +938,7 @@ public:
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);
update_names_from_srclist(this, NULL, pSrcList); update_names_from_srclist(NULL, pSrcList);
exposed_sqlite3SrcListDelete(pParse->db, pSrcList); exposed_sqlite3SrcListDelete(pParse->db, pSrcList);
} }
@ -972,7 +1015,7 @@ public:
if (pTblName) if (pTblName)
{ {
update_names_from_srclist(this, NULL, pTblName); update_names_from_srclist(NULL, pTblName);
} }
else if (pParse->pNewTable) else if (pParse->pNewTable)
{ {
@ -1088,7 +1131,7 @@ public:
} }
else else
{ {
update_names_from_srclist(this, &aliases, pTabList); update_names_from_srclist(&aliases, pTabList);
} }
if (pWhere) if (pWhere)
@ -1110,7 +1153,7 @@ public:
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;
update_names_from_srclist(this, NULL, pTable); update_names_from_srclist(NULL, pTable);
exposed_sqlite3SrcListDelete(pParse->db, pName); exposed_sqlite3SrcListDelete(pParse->db, pName);
exposed_sqlite3SrcListDelete(pParse->db, pTable); exposed_sqlite3SrcListDelete(pParse->db, pTable);
@ -1131,7 +1174,7 @@ public:
{ {
m_is_drop_table = true; m_is_drop_table = true;
} }
update_names_from_srclist(this, NULL, pName); update_names_from_srclist(NULL, pName);
exposed_sqlite3SrcListDelete(pParse->db, pName); exposed_sqlite3SrcListDelete(pParse->db, pName);
} }
@ -1152,7 +1195,7 @@ public:
} }
else if (pOldTable) else if (pOldTable)
{ {
update_names_from_srclist(this, NULL, pOldTable); update_names_from_srclist(NULL, pOldTable);
exposed_sqlite3SrcListDelete(pParse->db, pOldTable); exposed_sqlite3SrcListDelete(pParse->db, pOldTable);
} }
} }
@ -1177,11 +1220,11 @@ public:
QcAliases aliases; QcAliases aliases;
update_names_from_srclist(this, &aliases, pTabList); update_names_from_srclist(&aliases, pTabList);
if (pColumns) if (pColumns)
{ {
update_field_infos_from_idlist(this, &aliases, pColumns, 0, NULL); update_field_infos_from_idlist(&aliases, pColumns, 0, NULL);
} }
if (pSelect) if (pSelect)
@ -1202,7 +1245,7 @@ public:
if (pSet) if (pSet)
{ {
update_field_infos_from_exprlist(this, &aliases, pSet, 0, NULL); update_field_infos_from_exprlist(&aliases, pSet, 0, NULL);
} }
} }
@ -1307,7 +1350,7 @@ public:
m_type_mask = QUERY_TYPE_WRITE; m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_UPDATE; m_operation = QUERY_OP_UPDATE;
update_names_from_srclist(this, &aliases, pTabList); update_names_from_srclist(&aliases, pTabList);
m_has_clause = (pWhere ? true : false); m_has_clause = (pWhere ? true : false);
if (pChanges) if (pChanges)
@ -1377,15 +1420,15 @@ public:
switch (command) switch (command)
{ {
case MXS_ALTER_DISABLE_KEYS: case MXS_ALTER_DISABLE_KEYS:
update_names_from_srclist(this, NULL, pSrc); update_names_from_srclist(NULL, pSrc);
break; break;
case MXS_ALTER_ENABLE_KEYS: case MXS_ALTER_ENABLE_KEYS:
update_names_from_srclist(this, NULL, pSrc); update_names_from_srclist(NULL, pSrc);
break; break;
case MXS_ALTER_RENAME: case MXS_ALTER_RENAME:
update_names_from_srclist(this, NULL, pSrc); update_names_from_srclist(NULL, pSrc);
break; break;
default: default:
@ -1404,7 +1447,7 @@ public:
if (pExprList) if (pExprList)
{ {
update_field_infos_from_exprlist(this, NULL, pExprList, 0, NULL); update_field_infos_from_exprlist(NULL, pExprList, 0, NULL);
} }
exposed_sqlite3SrcListDelete(pParse->db, pName); exposed_sqlite3SrcListDelete(pParse->db, pName);
@ -1418,7 +1461,7 @@ public:
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);
update_names_from_srclist(this, NULL, pTables); update_names_from_srclist(NULL, pTables);
exposed_sqlite3SrcListDelete(pParse->db, pTables); exposed_sqlite3SrcListDelete(pParse->db, pTables);
} }
@ -1674,7 +1717,7 @@ public:
if (pFullName) if (pFullName)
{ {
update_names_from_srclist(this, NULL, pFullName); update_names_from_srclist(NULL, pFullName);
exposed_sqlite3SrcListDelete(pParse->db, pFullName); exposed_sqlite3SrcListDelete(pParse->db, pFullName);
} }
@ -1689,7 +1732,7 @@ public:
if (pTables) if (pTables)
{ {
update_names_from_srclist(this, NULL, pTables); update_names_from_srclist(NULL, pTables);
exposed_sqlite3SrcListDelete(pParse->db, pTables); exposed_sqlite3SrcListDelete(pParse->db, pTables);
} }
@ -3206,21 +3249,6 @@ static void update_field_infos_from_expr(QcSqliteInfo* info,
} }
} }
static void update_field_infos_from_with(QcSqliteInfo* pInfo,
QcAliases* pAliases,
const With* pWith)
{
for (int i = 0; i < pWith->nCte; ++i)
{
const With::Cte* pCte = &pWith->a[i];
if (pCte->pSelect)
{
pInfo->update_field_infos_from_subselect(pAliases, pCte->pSelect, QC_USED_IN_SUBSELECT, NULL);
}
}
}
static const char* get_token_symbol(int token) static const char* get_token_symbol(int token)
{ {
switch (token) switch (token)
@ -3502,7 +3530,7 @@ static void update_field_infos(QcSqliteInfo* info,
case TK_FUNCTION: case TK_FUNCTION:
if (!ignore_exprlist) if (!ignore_exprlist)
{ {
update_field_infos_from_exprlist(info, pAliases, pExpr->x.pList, usage, pExclude); info->update_field_infos_from_exprlist(pAliases, pExpr->x.pList, usage, pExclude);
} }
break; break;
@ -3519,7 +3547,7 @@ static void update_field_infos(QcSqliteInfo* info,
} }
else else
{ {
update_field_infos_from_exprlist(info, pAliases, pExpr->x.pList, usage, pExclude); info->update_field_infos_from_exprlist(pAliases, pExpr->x.pList, usage, pExclude);
} }
break; break;
} }
@ -3528,52 +3556,6 @@ static void update_field_infos(QcSqliteInfo* info,
} }
} }
static void update_field_infos_from_exprlist(QcSqliteInfo* info,
QcAliases* pAliases,
const ExprList* pEList,
uint32_t usage,
const ExprList* pExclude)
{
for (int i = 0; i < pEList->nExpr; ++i)
{
ExprList::ExprList_item* pItem = &pEList->a[i];
update_field_infos(info, pAliases, 0, pItem->pExpr, usage, QC_TOKEN_MIDDLE, pExclude);
}
}
static void update_field_infos_from_idlist(QcSqliteInfo* info,
QcAliases* pAliases,
const IdList* pIds,
uint32_t usage,
const ExprList* pExclude)
{
for (int i = 0; i < pIds->nId; ++i)
{
IdList::IdList_item* pItem = &pIds->a[i];
info->update_field_info(pAliases, NULL, NULL, pItem->zName, usage, pExclude);
}
}
static void update_names_from_srclist(QcSqliteInfo* pInfo,
QcAliases* pAliases,
const SrcList* pSrc)
{
for (int i = 0; i < pSrc->nSrc; ++i)
{
if (pSrc->a[i].zName)
{
pInfo->update_names(pSrc->a[i].zDatabase, pSrc->a[i].zName, pSrc->a[i].zAlias, pAliases);
}
if (pSrc->a[i].pSelect && pSrc->a[i].pSelect->pSrc)
{
update_names_from_srclist(pInfo, pAliases, pSrc->a[i].pSelect->pSrc);
}
}
}
/** /**
* *
* SQLITE * SQLITE