MXS-1787 Provide alias map when parsing an expression list

A statement like "CALL p1((SELECT f1()), ?);" needs an collection
for storing aliases when being parsed.
This commit is contained in:
Johan Wikman 2018-04-13 11:24:52 +03:00
parent 94af85b948
commit 3d8d2beaaa

View File

@ -1074,7 +1074,8 @@ public:
if (pExpr->flags & EP_xIsSelect)
{
update_field_infos_from_subselect(pAliases, pExpr->x.pSelect, pExclude);
ss_dassert(pAliases);
update_field_infos_from_subselect(*pAliases, pExpr->x.pSelect, pExclude);
if (zName)
@ -1299,7 +1300,7 @@ public:
while (pPrior)
{
update_field_infos_from_subselect(&aliases, pPrior, pExclude,
update_field_infos_from_subselect(aliases, pPrior, pExclude,
IGNORE_COMPOUND_SELECTS);
pPrior = pPrior->pPrior;
}
@ -1307,12 +1308,12 @@ public:
}
}
void update_field_infos_from_subselect(QcAliases* pAliases,
void update_field_infos_from_subselect(const QcAliases& existing_aliases,
const Select* pSelect,
const ExprList* pExclude,
compound_approach_t compound_approach = ANALYZE_COMPOUND_SELECTS)
{
QcAliases aliases(*pAliases);
QcAliases aliases(existing_aliases);
update_field_infos_from_select(aliases, pSelect, pExclude, compound_approach);
}
@ -1325,7 +1326,8 @@ public:
if (pCte->pSelect)
{
update_field_infos_from_subselect(pAliases, pCte->pSelect, NULL);
ss_dassert(pAliases);
update_field_infos_from_subselect(*pAliases, pCte->pSelect, NULL);
}
}
}
@ -2064,7 +2066,8 @@ public:
if (pExprList)
{
update_field_infos_from_exprlist(NULL, pExprList, NULL);
QcAliases aliases;
update_field_infos_from_exprlist(&aliases, pExprList, NULL);
}
exposed_sqlite3SrcListDelete(pParse->db, pName);