From 3a0d95d181e9ec72b17f2efd17316573a50d6c59 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 11 May 2004 22:43:55 +0000 Subject: [PATCH] Yawn ... still another place not quite ready for zero-column tables. --- src/backend/optimizer/prep/prepunion.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index b703bf2b86..25dfc2611e 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -14,7 +14,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepunion.c,v 1.109 2004/04/07 18:17:25 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepunion.c,v 1.110 2004/05/11 22:43:55 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -264,8 +264,11 @@ generate_union_plan(SetOperationStmt *op, Query *parse, List *sortList; sortList = addAllTargetsToSortList(NULL, NIL, tlist, false); - plan = (Plan *) make_sort_from_sortclauses(parse, sortList, plan); - plan = (Plan *) make_unique(plan, sortList); + if (sortList) + { + plan = (Plan *) make_sort_from_sortclauses(parse, sortList, plan); + plan = (Plan *) make_unique(plan, sortList); + } *sortClauses = sortList; } else @@ -324,6 +327,13 @@ generate_nonunion_plan(SetOperationStmt *op, Query *parse, * correct output. */ sortList = addAllTargetsToSortList(NULL, NIL, tlist, false); + + if (sortList == NIL) /* nothing to sort on? */ + { + *sortClauses = NIL; + return plan; + } + plan = (Plan *) make_sort_from_sortclauses(parse, sortList, plan); switch (op->op) { @@ -519,9 +529,9 @@ generate_append_tlist(List *colTypes, bool flag, * First extract typmods to use. * * If the inputs all agree on type and typmod of a particular column, use - * that typmod; else use -1. + * that typmod; else use -1. (+1 here in case of zero columns.) */ - colTypmods = (int32 *) palloc(length(colTypes) * sizeof(int32)); + colTypmods = (int32 *) palloc(length(colTypes) * sizeof(int32) + 1); foreach(planl, input_plans) { -- 2.40.0