From 78c4d5931c94e014b106607abeee17fd46df460c Mon Sep 17 00:00:00 2001 From: Eureka Date: Mon, 2 Sep 2024 19:37:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=97=E5=AD=98=E8=A1=A8?= =?UTF-8?q?=20select=20(t).*=20from=20t;=E8=AF=AD=E5=8F=A5=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=8D=E8=AF=86=E5=88=AB=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/backend/parser/parse_target.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/common/backend/parser/parse_target.cpp b/src/common/backend/parser/parse_target.cpp index 5c3f68364..69d0ed13c 100644 --- a/src/common/backend/parser/parse_target.cpp +++ b/src/common/backend/parser/parse_target.cpp @@ -1288,7 +1288,13 @@ static List* ExpandRowReference(ParseState* pstate, Node* expr, bool targetlist) if (IsA(expr, Var) && ((Var*)expr)->vartype == RECORDOID) { tupleDesc = expandRecordVariable(pstate, (Var*)expr, 0); } else if (get_expr_result_type(expr, NULL, &tupleDesc) != TYPEFUNC_COMPOSITE) { - tupleDesc = lookup_rowtype_tupdesc_copy(exprType(expr), exprTypmod(expr)); + if (IsA(expr, RowExpr) && ((RowExpr*)expr)->row_typeid == RECORDOID) { + RowExpr* rowexpr = (RowExpr*)expr; + tupleDesc = ExecTypeFromExprList(rowexpr->args, rowexpr->colnames); + BlessTupleDesc(tupleDesc); + } else { + tupleDesc = lookup_rowtype_tupdesc_copy(exprType(expr), exprTypmod(expr)); + } } if (unlikely(tupleDesc == NULL)) {