mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
Add a reverse-translation column number array to struct AppendRelInfo.
This provides for cheaper mapping of child columns back to parent columns. The one existing use-case in examine_simple_variable() would hardly justify this by itself; but an upcoming bug fix will make use of this array in a mainstream code path, and it seems likely that we'll find other uses for it as we continue to build out the partitioning infrastructure. Discussion: https://postgr.es/m/12424.1575168015@sss.pgh.pa.us
This commit is contained in:
@ -4769,29 +4769,17 @@ examine_simple_variable(PlannerInfo *root, Var *var,
|
||||
root)->rtekind == RTE_RELATION)
|
||||
{
|
||||
int parent_varattno;
|
||||
ListCell *l;
|
||||
|
||||
parent_varattno = 1;
|
||||
found = false;
|
||||
foreach(l, appinfo->translated_vars)
|
||||
{
|
||||
Var *childvar = lfirst_node(Var, l);
|
||||
|
||||
/* Ignore dropped attributes of the parent. */
|
||||
if (childvar != NULL &&
|
||||
varattno == childvar->varattno)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
parent_varattno++;
|
||||
}
|
||||
|
||||
if (!found)
|
||||
break;
|
||||
if (varattno <= 0 || varattno > appinfo->num_child_cols)
|
||||
break; /* safety check */
|
||||
parent_varattno = appinfo->parent_colnos[varattno - 1];
|
||||
if (parent_varattno == 0)
|
||||
break; /* Var is local to child */
|
||||
|
||||
varno = appinfo->parent_relid;
|
||||
varattno = parent_varattno;
|
||||
found = true;
|
||||
|
||||
/* If the parent is itself a child, continue up. */
|
||||
appinfo = root->append_rel_array[varno];
|
||||
|
Reference in New Issue
Block a user