mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-06 06:49:20 +02:00
now. Here some tested features, (examples included in the patch): 1.1) Subselects in the having clause 1.2) Double nested subselects 1.3) Subselects used in the where clause and in the having clause simultaneously 1.4) Union Selects using having 1.5) Indexes on the base relations are used correctly 1.6) Unallowed Queries are prevented (e.g. qualifications in the having clause that belong to the where clause) 1.7) Insert into as select 2) Queries using the having clause on view relations also work but there are some restrictions: 2.1) Create View as Select ... Having ...; using base tables in the select 2.1.1) The Query rewrite system: 2.1.2) Why are only simple queries allowed against a view from 2.1) ? 2.2) Select ... from testview1, testview2, ... having...; 3) Bug in ExecMergeJoin ?? Regards Stefan
72 lines
2.1 KiB
C
72 lines
2.1 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* planmain.h--
|
|
* prototypes for various files in optimizer/plan
|
|
*
|
|
*
|
|
* Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $Id: planmain.h,v 1.13 1998/07/19 05:49:25 momjian Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PLANMAIN_H
|
|
#define PLANMAIN_H
|
|
|
|
#include "nodes/nodes.h"
|
|
#include "nodes/plannodes.h"
|
|
#include "nodes/parsenodes.h"
|
|
#include "nodes/relation.h"
|
|
|
|
/*
|
|
* prototypes for plan/planmain.c
|
|
*/
|
|
extern Plan *
|
|
query_planner(Query *root,
|
|
int command_type, List *tlist, List *qual);
|
|
|
|
|
|
/*
|
|
* prototypes for plan/createplan.c
|
|
*/
|
|
extern Plan *create_plan(Path *best_path);
|
|
extern SeqScan *
|
|
make_seqscan(List *qptlist, List *qpqual, Index scanrelid,
|
|
Plan *lefttree);
|
|
extern Sort *
|
|
make_sort(List *tlist, Oid tempid, Plan *lefttree,
|
|
int keycount);
|
|
extern Agg *make_agg(List *tlist, Plan *lefttree);
|
|
extern Group *
|
|
make_group(List *tlist, bool tuplePerGroup, int ngrp,
|
|
AttrNumber *grpColIdx, Sort *lefttree);
|
|
extern Unique *make_unique(List *tlist, Plan *lefttree, char *uniqueAttr);
|
|
|
|
/*
|
|
* prototypes for plan/initsplan.c
|
|
*/
|
|
extern void initialize_base_rels_list(Query *root, List *tlist);
|
|
extern void initialize_base_rels_jinfo(Query *root, List *clauses);
|
|
extern void initialize_join_clause_info(List *rel_list);
|
|
extern void add_missing_vars_to_base_rels(Query *root, List *tlist);
|
|
|
|
/*
|
|
* prototypes for plan/setrefs.c
|
|
*/
|
|
extern void set_tlist_references(Plan *plan);
|
|
extern List *
|
|
join_references(List *clauses, List *outer_tlist,
|
|
List *inner_tlist);
|
|
extern List *
|
|
index_outerjoin_references(List *inner_indxqual,
|
|
List *outer_tlist, Index inner_relid);
|
|
extern void set_result_tlist_references(Result *resultNode);
|
|
extern List *set_agg_tlist_references(Agg *aggNode);
|
|
extern void set_agg_agglist_references(Agg *aggNode);
|
|
extern void del_agg_tlist_references(List *tlist);
|
|
extern List *check_having_qual_for_aggs(Node *clause,
|
|
List *subplanTargetList, List *groupClause);
|
|
extern List *check_having_qual_for_vars(Node *clause, List *targetlist_so_far);
|
|
|
|
#endif /* PLANMAIN_H */
|