Yawn ... still another place not quite ready for zero-column tables.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 11 May 2004 22:43:55 +0000 (22:43 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 11 May 2004 22:43:55 +0000 (22:43 +0000)
src/backend/optimizer/prep/prepunion.c

index b703bf2b86e095c81dcc95435f32e7f16334ca3e..25dfc2611e8ab9466ba31a2b750fd2d3c4f7d3b2 100644 (file)
@@ -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)
    {