
to simplify constant expressions and expand SubLink nodes into SubPlans is done in a separate routine subquery_planner() that calls union_planner(). We formerly did most of this work in query_planner(), but that's the wrong place because it may never see the real targetlist. Splitting union_planner into two routines also allows us to avoid redundant work when union_planner is invoked recursively for UNION and inheritance cases. Upshot is that it is now possible to do something like select float8(count(*)) / (select count(*) from int4_tbl) from int4_tbl group by f1; which has never worked before.
29 lines
756 B
C
29 lines
756 B
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* planner.h
|
|
* prototypes for planner.c.
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $Id: planner.h,v 1.15 2000/03/21 05:11:51 tgl Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PLANNER_H
|
|
#define PLANNER_H
|
|
|
|
/*
|
|
*/
|
|
|
|
#include "nodes/parsenodes.h"
|
|
#include "nodes/plannodes.h"
|
|
|
|
extern Plan *planner(Query *parse);
|
|
extern Plan *subquery_planner(Query *parse, double tuple_fraction);
|
|
extern Plan *union_planner(Query *parse, double tuple_fraction);
|
|
extern void pg_checkretval(Oid rettype, List *querytree_list);
|
|
|
|
#endif /* PLANNER_H */
|