1
0
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:
Tom Lane
2019-12-02 18:05:29 -05:00
parent 4526951d56
commit ce76c0ba53
8 changed files with 61 additions and 39 deletions

View File

@ -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];