aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/execTuples.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/executor/execTuples.c')
-rw-r--r--src/backend/executor/execTuples.c19
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);