diff options
Diffstat (limited to 'src/backend/executor/execTuples.c')
-rw-r--r-- | src/backend/executor/execTuples.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/backend/executor/execTuples.c b/src/backend/executor/execTuples.c index 3a9471e462f..e755e7c4f07 100644 --- a/src/backend/executor/execTuples.c +++ b/src/backend/executor/execTuples.c @@ -954,27 +954,28 @@ ExecTypeFromTLInternal(List *targetList, bool hasoid, bool skipjunk) /* * ExecTypeFromExprList - build a tuple descriptor from a list of Exprs * - * Here we must make up an arbitrary set of field names. + * Caller must also supply a list of field names (String nodes). */ TupleDesc -ExecTypeFromExprList(List *exprList) +ExecTypeFromExprList(List *exprList, List *namesList) { TupleDesc typeInfo; - ListCell *l; + ListCell *le; + ListCell *ln; int cur_resno = 1; - char fldname[NAMEDATALEN]; + + Assert(list_length(exprList) == list_length(namesList)); typeInfo = CreateTemplateTupleDesc(list_length(exprList), false); - foreach(l, exprList) + forboth(le, exprList, ln, namesList) { - Node *e = lfirst(l); - - sprintf(fldname, "f%d", cur_resno); + Node *e = lfirst(le); + char *n = strVal(lfirst(ln)); TupleDescInitEntry(typeInfo, cur_resno, - fldname, + n, exprType(e), exprTypmod(e), 0); |