
inheritance trees on-the-fly, which pretty well constrained us to considering only one way of planning inheritance, expand inheritance sets during the planner prep phase, and build a side data structure that can be consulted later to find which RTEs are members of which inheritance sets. As proof of concept, use the data structure to plan joins against inheritance sets more efficiently: we can now use indexes on the set members in inner-indexscan joins. (The generated plans could be improved further, but it'll take some executor changes.) This data structure will also support handling UNION ALL subqueries in the same way as inheritance sets, but that aspect of it isn't finished yet.
64 lines
1.8 KiB
C
64 lines
1.8 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* prep.h
|
|
* prototypes for files in optimizer/prep/
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $PostgreSQL: pgsql/src/include/optimizer/prep.h,v 1.54 2006/01/31 21:39:25 tgl Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PREP_H
|
|
#define PREP_H
|
|
|
|
#include "nodes/plannodes.h"
|
|
#include "nodes/relation.h"
|
|
|
|
|
|
/*
|
|
* prototypes for prepjointree.c
|
|
*/
|
|
extern Node *pull_up_IN_clauses(PlannerInfo *root, Node *node);
|
|
extern Node *pull_up_subqueries(PlannerInfo *root, Node *jtnode,
|
|
bool below_outer_join);
|
|
extern void reduce_outer_joins(PlannerInfo *root);
|
|
extern Relids get_relids_in_jointree(Node *jtnode);
|
|
extern Relids get_relids_for_join(PlannerInfo *root, int joinrelid);
|
|
|
|
/*
|
|
* prototypes for prepqual.c
|
|
*/
|
|
extern Expr *canonicalize_qual(Expr *qual);
|
|
|
|
/*
|
|
* prototypes for preptlist.c
|
|
*/
|
|
extern List *preprocess_targetlist(PlannerInfo *root, List *tlist);
|
|
|
|
/*
|
|
* prototypes for prepunion.c
|
|
*/
|
|
extern Plan *plan_set_operations(PlannerInfo *root, double tuple_fraction,
|
|
List **sortClauses);
|
|
|
|
extern List *find_all_inheritors(Oid parentrel);
|
|
|
|
extern void expand_inherited_tables(PlannerInfo *root);
|
|
|
|
extern Node *adjust_appendrel_attrs(Node *node, AppendRelInfo *appinfo);
|
|
|
|
extern Relids *adjust_appendrel_attr_needed(RelOptInfo *oldrel,
|
|
AppendRelInfo *appinfo,
|
|
AttrNumber new_min_attr,
|
|
AttrNumber new_max_attr);
|
|
|
|
extern Relids *adjust_other_rel_attr_needed(RelOptInfo *oldrel,
|
|
AppendRelInfo *appinfo,
|
|
AttrNumber new_min_attr,
|
|
AttrNumber new_max_attr);
|
|
|
|
#endif /* PREP_H */
|