Commit cc144155 authored by Robert Haas's avatar Robert Haas

Avoid some code duplication in map_partition_varattnos().

Code to map attribute numbers in map_partition_varattnos() duplicates
what convert_tuples_by_name_map() does.  Avoid that.

Amit Langote, per a report from Álvaro Herrera.

Discussion: http://postgr.es/m/9ce97382-54c8-deb3-9ee9-a2ec271d866b%40lab.ntt.co.jp
parent 8a8afe2f
...@@ -917,32 +917,19 @@ List * ...@@ -917,32 +917,19 @@ List *
map_partition_varattnos(List *expr, int target_varno, map_partition_varattnos(List *expr, int target_varno,
Relation partrel, Relation parent) Relation partrel, Relation parent)
{ {
TupleDesc tupdesc = RelationGetDescr(parent);
AttrNumber attno;
AttrNumber *part_attnos; AttrNumber *part_attnos;
bool found_whole_row; bool found_whole_row;
if (expr == NIL) if (expr == NIL)
return NIL; return NIL;
part_attnos = (AttrNumber *) palloc0(tupdesc->natts * sizeof(AttrNumber)); part_attnos = convert_tuples_by_name_map(RelationGetDescr(partrel),
for (attno = 1; attno <= tupdesc->natts; attno++) RelationGetDescr(parent),
{ gettext_noop("could not convert row type"));
Form_pg_attribute attribute = tupdesc->attrs[attno - 1];
char *attname = NameStr(attribute->attname);
AttrNumber part_attno;
if (attribute->attisdropped)
continue;
part_attno = get_attnum(RelationGetRelid(partrel), attname);
part_attnos[attno - 1] = part_attno;
}
expr = (List *) map_variable_attnos((Node *) expr, expr = (List *) map_variable_attnos((Node *) expr,
target_varno, 0, target_varno, 0,
part_attnos, part_attnos,
tupdesc->natts, RelationGetDescr(parent)->natts,
&found_whole_row); &found_whole_row);
/* There can never be a whole-row reference here */ /* There can never be a whole-row reference here */
if (found_whole_row) if (found_whole_row)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment