MXS-3535 Collect information from ON clause
In the case of qc_sqlite, it is done "precisely", while in the case of qc_mysqlembedded rather bluntly. Not time well spent to figure out exactly which pointer chains need to be walked.
This commit is contained in:
@ -1303,6 +1303,11 @@ public:
|
||||
pExclude);
|
||||
}
|
||||
|
||||
if (pSrc->a[i].pOn)
|
||||
{
|
||||
update_field_infos(&aliases, context, 0, pSrc->a[i].pOn, QC_TOKEN_MIDDLE, pExclude);
|
||||
}
|
||||
|
||||
#ifdef QC_COLLECT_NAMES_FROM_USING
|
||||
// With this enabled, the affected fields of
|
||||
// select * from (t1 as t2 left join t1 as t3 using (a)), t1;
|
||||
@ -1436,6 +1441,11 @@ public:
|
||||
{
|
||||
update_names_from_srclist(pAliases, pSrc->a[i].pSelect->pSrc);
|
||||
}
|
||||
|
||||
if (pSrc->a[i].pOn)
|
||||
{
|
||||
update_field_infos(pAliases, 0, 0, pSrc->a[i].pOn, QC_TOKEN_MIDDLE, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1615,12 +1615,16 @@ table_reference(A) ::= join_table(X). {
|
||||
join_opt ::= .
|
||||
join_opt ::= JOIN_KW.
|
||||
|
||||
join_table(A) ::= table_reference(X) join_opt JOIN table_reference(Y) join_condition. {
|
||||
%type join_condition {ExprSpan}
|
||||
%destructor join_condition {sqlite3ExprDelete(pParse->db, $$.pExpr);}
|
||||
|
||||
join_table(A) ::= table_reference(X) join_opt JOIN table_reference(Y) join_condition(Z). {
|
||||
Y->a[Y->nSrc - 1].pOn = Z.pExpr;
|
||||
A = sqlite3SrcListCat(pParse->db, X, Y);
|
||||
}
|
||||
|
||||
join_condition ::= ON expr(X). {
|
||||
sqlite3ExprDelete(pParse->db, X.pExpr);
|
||||
join_condition(A) ::= ON expr(X). {
|
||||
A = X;
|
||||
}
|
||||
|
||||
%type escaped_table_reference {SrcList*}
|
||||
|
||||
Reference in New Issue
Block a user