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,
qc_token_position_t pos,
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,
const char* name,
uint32_t usage);
@ -778,6 +765,32 @@ public:
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,
const Select* pSelect,
uint32_t usage,
@ -819,7 +832,7 @@ public:
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)
@ -831,7 +844,7 @@ public:
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);
}
@ -847,7 +860,7 @@ public:
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)
@ -866,6 +879,36 @@ public:
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
//
@ -883,7 +926,7 @@ public:
{
ss_dassert(this_thread.initialized);
update_names_from_srclist(this, NULL, pSrcList);
update_names_from_srclist(NULL, pSrcList);
exposed_sqlite3SrcListDelete(pParse->db, pSrcList);
}
@ -895,7 +938,7 @@ public:
m_status = QC_QUERY_PARSED;
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);
}
@ -972,7 +1015,7 @@ public:
if (pTblName)
{
update_names_from_srclist(this, NULL, pTblName);
update_names_from_srclist(NULL, pTblName);
}
else if (pParse->pNewTable)
{
@ -1088,7 +1131,7 @@ public:
}
else
{
update_names_from_srclist(this, &aliases, pTabList);
update_names_from_srclist(&aliases, pTabList);
}
if (pWhere)
@ -1110,7 +1153,7 @@ public:
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT);
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, pTable);
@ -1131,7 +1174,7 @@ public:
{
m_is_drop_table = true;
}
update_names_from_srclist(this, NULL, pName);
update_names_from_srclist(NULL, pName);
exposed_sqlite3SrcListDelete(pParse->db, pName);
}
@ -1152,7 +1195,7 @@ public:
}
else if (pOldTable)
{
update_names_from_srclist(this, NULL, pOldTable);
update_names_from_srclist(NULL, pOldTable);
exposed_sqlite3SrcListDelete(pParse->db, pOldTable);
}
}
@ -1177,11 +1220,11 @@ public:
QcAliases aliases;
update_names_from_srclist(this, &aliases, pTabList);
update_names_from_srclist(&aliases, pTabList);
if (pColumns)
{
update_field_infos_from_idlist(this, &aliases, pColumns, 0, NULL);
update_field_infos_from_idlist(&aliases, pColumns, 0, NULL);
}
if (pSelect)
@ -1202,7 +1245,7 @@ public:
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_operation = QUERY_OP_UPDATE;
update_names_from_srclist(this, &aliases, pTabList);
update_names_from_srclist(&aliases, pTabList);
m_has_clause = (pWhere ? true : false);
if (pChanges)
@ -1377,15 +1420,15 @@ public:
switch (command)
{
case MXS_ALTER_DISABLE_KEYS:
update_names_from_srclist(this, NULL, pSrc);
update_names_from_srclist(NULL, pSrc);
break;
case MXS_ALTER_ENABLE_KEYS:
update_names_from_srclist(this, NULL, pSrc);
update_names_from_srclist(NULL, pSrc);
break;
case MXS_ALTER_RENAME:
update_names_from_srclist(this, NULL, pSrc);
update_names_from_srclist(NULL, pSrc);
break;
default:
@ -1404,7 +1447,7 @@ public:
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);
@ -1418,7 +1461,7 @@ public:
m_status = QC_QUERY_PARSED;
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);
}
@ -1674,7 +1717,7 @@ public:
if (pFullName)
{
update_names_from_srclist(this, NULL, pFullName);
update_names_from_srclist(NULL, pFullName);
exposed_sqlite3SrcListDelete(pParse->db, pFullName);
}
@ -1689,7 +1732,7 @@ public:
if (pTables)
{
update_names_from_srclist(this, NULL, pTables);
update_names_from_srclist(NULL, 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)
{
switch (token)
@ -3502,7 +3530,7 @@ static void update_field_infos(QcSqliteInfo* info,
case TK_FUNCTION:
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;
@ -3519,7 +3547,7 @@ static void update_field_infos(QcSqliteInfo* info,
}
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;
}
@ -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