mirror of
https://github.com/simtactics/niotso.git
synced 2025-07-15 10:36:42 -04:00
work in progress, cleaned up the directories and split them up into folder which make more sense, Still need to compile libvitaboy and all the tools
This commit is contained in:
parent
66ce473514
commit
948bd8474c
1786 changed files with 571812 additions and 15332 deletions
88
deps/libpq/include/optimizer/clauses.h
vendored
Normal file
88
deps/libpq/include/optimizer/clauses.h
vendored
Normal file
|
@ -0,0 +1,88 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* clauses.h
|
||||
* prototypes for clauses.c.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/clauses.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef CLAUSES_H
|
||||
#define CLAUSES_H
|
||||
|
||||
#include "nodes/relation.h"
|
||||
|
||||
|
||||
#define is_opclause(clause) ((clause) != NULL && IsA(clause, OpExpr))
|
||||
#define is_funcclause(clause) ((clause) != NULL && IsA(clause, FuncExpr))
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int numWindowFuncs; /* total number of WindowFuncs found */
|
||||
Index maxWinRef; /* windowFuncs[] is indexed 0 .. maxWinRef */
|
||||
List **windowFuncs; /* lists of WindowFuncs for each winref */
|
||||
} WindowFuncLists;
|
||||
|
||||
|
||||
extern Expr *make_opclause(Oid opno, Oid opresulttype, bool opretset,
|
||||
Expr *leftop, Expr *rightop,
|
||||
Oid opcollid, Oid inputcollid);
|
||||
extern Node *get_leftop(Expr *clause);
|
||||
extern Node *get_rightop(Expr *clause);
|
||||
|
||||
extern bool not_clause(Node *clause);
|
||||
extern Expr *make_notclause(Expr *notclause);
|
||||
extern Expr *get_notclausearg(Expr *notclause);
|
||||
|
||||
extern bool or_clause(Node *clause);
|
||||
extern Expr *make_orclause(List *orclauses);
|
||||
|
||||
extern bool and_clause(Node *clause);
|
||||
extern Expr *make_andclause(List *andclauses);
|
||||
extern Node *make_and_qual(Node *qual1, Node *qual2);
|
||||
extern Expr *make_ands_explicit(List *andclauses);
|
||||
extern List *make_ands_implicit(Expr *clause);
|
||||
|
||||
extern bool contain_agg_clause(Node *clause);
|
||||
extern void count_agg_clauses(PlannerInfo *root, Node *clause,
|
||||
AggClauseCosts *costs);
|
||||
|
||||
extern bool contain_window_function(Node *clause);
|
||||
extern WindowFuncLists *find_window_functions(Node *clause, Index maxWinRef);
|
||||
|
||||
extern double expression_returns_set_rows(Node *clause);
|
||||
|
||||
extern bool contain_subplans(Node *clause);
|
||||
|
||||
extern bool contain_mutable_functions(Node *clause);
|
||||
extern bool contain_volatile_functions(Node *clause);
|
||||
extern bool contain_nonstrict_functions(Node *clause);
|
||||
extern Relids find_nonnullable_rels(Node *clause);
|
||||
extern List *find_nonnullable_vars(Node *clause);
|
||||
extern List *find_forced_null_vars(Node *clause);
|
||||
extern Var *find_forced_null_var(Node *clause);
|
||||
|
||||
extern bool is_pseudo_constant_clause(Node *clause);
|
||||
extern bool is_pseudo_constant_clause_relids(Node *clause, Relids relids);
|
||||
|
||||
extern int NumRelids(Node *clause);
|
||||
|
||||
extern void CommuteOpExpr(OpExpr *clause);
|
||||
extern void CommuteRowCompareExpr(RowCompareExpr *clause);
|
||||
|
||||
extern Node *strip_implicit_coercions(Node *node);
|
||||
|
||||
extern void set_coercionform_dontcare(Node *node);
|
||||
|
||||
extern Node *eval_const_expressions(PlannerInfo *root, Node *node);
|
||||
|
||||
extern Node *estimate_expression_value(PlannerInfo *root, Node *node);
|
||||
|
||||
extern Query *inline_set_returning_function(PlannerInfo *root,
|
||||
RangeTblEntry *rte);
|
||||
|
||||
#endif /* CLAUSES_H */
|
147
deps/libpq/include/optimizer/cost.h
vendored
Normal file
147
deps/libpq/include/optimizer/cost.h
vendored
Normal file
|
@ -0,0 +1,147 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* cost.h
|
||||
* prototypes for costsize.c and clausesel.c.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/cost.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef COST_H
|
||||
#define COST_H
|
||||
|
||||
#include "nodes/plannodes.h"
|
||||
#include "nodes/relation.h"
|
||||
|
||||
|
||||
/* defaults for costsize.c's Cost parameters */
|
||||
/* NB: cost-estimation code should use the variables, not these constants! */
|
||||
/* If you change these, update backend/utils/misc/postgresql.sample.conf */
|
||||
#define DEFAULT_SEQ_PAGE_COST 1.0
|
||||
#define DEFAULT_RANDOM_PAGE_COST 4.0
|
||||
#define DEFAULT_CPU_TUPLE_COST 0.01
|
||||
#define DEFAULT_CPU_INDEX_TUPLE_COST 0.005
|
||||
#define DEFAULT_CPU_OPERATOR_COST 0.0025
|
||||
|
||||
#define DEFAULT_EFFECTIVE_CACHE_SIZE 16384 /* measured in pages */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CONSTRAINT_EXCLUSION_OFF, /* do not use c_e */
|
||||
CONSTRAINT_EXCLUSION_ON, /* apply c_e to all rels */
|
||||
CONSTRAINT_EXCLUSION_PARTITION /* apply c_e to otherrels only */
|
||||
} ConstraintExclusionType;
|
||||
|
||||
|
||||
/*
|
||||
* prototypes for costsize.c
|
||||
* routines to compute costs and sizes
|
||||
*/
|
||||
|
||||
/* parameter variables and flags */
|
||||
extern PGDLLIMPORT double seq_page_cost;
|
||||
extern PGDLLIMPORT double random_page_cost;
|
||||
extern PGDLLIMPORT double cpu_tuple_cost;
|
||||
extern PGDLLIMPORT double cpu_index_tuple_cost;
|
||||
extern PGDLLIMPORT double cpu_operator_cost;
|
||||
extern PGDLLIMPORT int effective_cache_size;
|
||||
extern Cost disable_cost;
|
||||
extern bool enable_seqscan;
|
||||
extern bool enable_indexscan;
|
||||
extern bool enable_bitmapscan;
|
||||
extern bool enable_tidscan;
|
||||
extern bool enable_sort;
|
||||
extern bool enable_hashagg;
|
||||
extern bool enable_nestloop;
|
||||
extern bool enable_material;
|
||||
extern bool enable_mergejoin;
|
||||
extern bool enable_hashjoin;
|
||||
extern int constraint_exclusion;
|
||||
|
||||
extern double clamp_row_est(double nrows);
|
||||
extern double index_pages_fetched(double tuples_fetched, BlockNumber pages,
|
||||
double index_pages, PlannerInfo *root);
|
||||
extern void cost_seqscan(Path *path, PlannerInfo *root, RelOptInfo *baserel);
|
||||
extern void cost_index(IndexPath *path, PlannerInfo *root, IndexOptInfo *index,
|
||||
List *indexQuals, List *indexOrderBys, RelOptInfo *outer_rel);
|
||||
extern void cost_bitmap_heap_scan(Path *path, PlannerInfo *root, RelOptInfo *baserel,
|
||||
Path *bitmapqual, RelOptInfo *outer_rel);
|
||||
extern void cost_bitmap_and_node(BitmapAndPath *path, PlannerInfo *root);
|
||||
extern void cost_bitmap_or_node(BitmapOrPath *path, PlannerInfo *root);
|
||||
extern void cost_bitmap_tree_node(Path *path, Cost *cost, Selectivity *selec);
|
||||
extern void cost_tidscan(Path *path, PlannerInfo *root,
|
||||
RelOptInfo *baserel, List *tidquals);
|
||||
extern void cost_subqueryscan(Path *path, RelOptInfo *baserel);
|
||||
extern void cost_functionscan(Path *path, PlannerInfo *root,
|
||||
RelOptInfo *baserel);
|
||||
extern void cost_valuesscan(Path *path, PlannerInfo *root,
|
||||
RelOptInfo *baserel);
|
||||
extern void cost_ctescan(Path *path, PlannerInfo *root, RelOptInfo *baserel);
|
||||
extern void cost_recursive_union(Plan *runion, Plan *nrterm, Plan *rterm);
|
||||
extern void cost_sort(Path *path, PlannerInfo *root,
|
||||
List *pathkeys, Cost input_cost, double tuples, int width,
|
||||
Cost comparison_cost, int sort_mem,
|
||||
double limit_tuples);
|
||||
extern void cost_merge_append(Path *path, PlannerInfo *root,
|
||||
List *pathkeys, int n_streams,
|
||||
Cost input_startup_cost, Cost input_total_cost,
|
||||
double tuples);
|
||||
extern void cost_material(Path *path,
|
||||
Cost input_startup_cost, Cost input_total_cost,
|
||||
double tuples, int width);
|
||||
extern void cost_agg(Path *path, PlannerInfo *root,
|
||||
AggStrategy aggstrategy, const AggClauseCosts *aggcosts,
|
||||
int numGroupCols, double numGroups,
|
||||
Cost input_startup_cost, Cost input_total_cost,
|
||||
double input_tuples);
|
||||
extern void cost_windowagg(Path *path, PlannerInfo *root,
|
||||
List *windowFuncs, int numPartCols, int numOrderCols,
|
||||
Cost input_startup_cost, Cost input_total_cost,
|
||||
double input_tuples);
|
||||
extern void cost_group(Path *path, PlannerInfo *root,
|
||||
int numGroupCols, double numGroups,
|
||||
Cost input_startup_cost, Cost input_total_cost,
|
||||
double input_tuples);
|
||||
extern void cost_nestloop(NestPath *path, PlannerInfo *root,
|
||||
SpecialJoinInfo *sjinfo);
|
||||
extern void cost_mergejoin(MergePath *path, PlannerInfo *root,
|
||||
SpecialJoinInfo *sjinfo);
|
||||
extern void cost_hashjoin(HashPath *path, PlannerInfo *root,
|
||||
SpecialJoinInfo *sjinfo);
|
||||
extern void cost_subplan(PlannerInfo *root, SubPlan *subplan, Plan *plan);
|
||||
extern void cost_qual_eval(QualCost *cost, List *quals, PlannerInfo *root);
|
||||
extern void cost_qual_eval_node(QualCost *cost, Node *qual, PlannerInfo *root);
|
||||
extern void set_baserel_size_estimates(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern void set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
|
||||
RelOptInfo *outer_rel,
|
||||
RelOptInfo *inner_rel,
|
||||
SpecialJoinInfo *sjinfo,
|
||||
List *restrictlist);
|
||||
extern void set_subquery_size_estimates(PlannerInfo *root, RelOptInfo *rel,
|
||||
PlannerInfo *subroot);
|
||||
extern void set_function_size_estimates(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern void set_values_size_estimates(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern void set_cte_size_estimates(PlannerInfo *root, RelOptInfo *rel,
|
||||
Plan *cteplan);
|
||||
extern void set_foreign_size_estimates(PlannerInfo *root, RelOptInfo *rel);
|
||||
|
||||
/*
|
||||
* prototypes for clausesel.c
|
||||
* routines to compute clause selectivities
|
||||
*/
|
||||
extern Selectivity clauselist_selectivity(PlannerInfo *root,
|
||||
List *clauses,
|
||||
int varRelid,
|
||||
JoinType jointype,
|
||||
SpecialJoinInfo *sjinfo);
|
||||
extern Selectivity clause_selectivity(PlannerInfo *root,
|
||||
Node *clause,
|
||||
int varRelid,
|
||||
JoinType jointype,
|
||||
SpecialJoinInfo *sjinfo);
|
||||
|
||||
#endif /* COST_H */
|
88
deps/libpq/include/optimizer/geqo.h
vendored
Normal file
88
deps/libpq/include/optimizer/geqo.h
vendored
Normal file
|
@ -0,0 +1,88 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* geqo.h
|
||||
* prototypes for various files in optimizer/geqo
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/geqo.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* contributed by:
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
* Martin Utesch * Institute of Automatic Control *
|
||||
= = University of Mining and Technology =
|
||||
* utesch@aut.tu-freiberg.de * Freiberg, Germany *
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
*/
|
||||
|
||||
#ifndef GEQO_H
|
||||
#define GEQO_H
|
||||
|
||||
#include "nodes/relation.h"
|
||||
#include "optimizer/geqo_gene.h"
|
||||
|
||||
|
||||
/* GEQO debug flag */
|
||||
/*
|
||||
#define GEQO_DEBUG
|
||||
*/
|
||||
|
||||
/* recombination mechanism */
|
||||
/*
|
||||
#define ERX
|
||||
#define PMX
|
||||
#define CX
|
||||
#define PX
|
||||
#define OX1
|
||||
#define OX2
|
||||
*/
|
||||
#define ERX
|
||||
|
||||
|
||||
/*
|
||||
* Configuration options
|
||||
*
|
||||
* If you change these, update backend/utils/misc/postgresql.conf.sample
|
||||
*/
|
||||
extern int Geqo_effort; /* 1 .. 10, knob for adjustment of defaults */
|
||||
|
||||
#define DEFAULT_GEQO_EFFORT 5
|
||||
#define MIN_GEQO_EFFORT 1
|
||||
#define MAX_GEQO_EFFORT 10
|
||||
|
||||
extern int Geqo_pool_size; /* 2 .. inf, or 0 to use default */
|
||||
|
||||
extern int Geqo_generations; /* 1 .. inf, or 0 to use default */
|
||||
|
||||
extern double Geqo_selection_bias;
|
||||
|
||||
#define DEFAULT_GEQO_SELECTION_BIAS 2.0
|
||||
#define MIN_GEQO_SELECTION_BIAS 1.5
|
||||
#define MAX_GEQO_SELECTION_BIAS 2.0
|
||||
|
||||
extern double Geqo_seed; /* 0 .. 1 */
|
||||
|
||||
|
||||
/*
|
||||
* Private state for a GEQO run --- accessible via root->join_search_private
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
List *initial_rels; /* the base relations we are joining */
|
||||
unsigned short random_state[3]; /* state for erand48() */
|
||||
} GeqoPrivateData;
|
||||
|
||||
|
||||
/* routines in geqo_main.c */
|
||||
extern RelOptInfo *geqo(PlannerInfo *root,
|
||||
int number_of_rels, List *initial_rels);
|
||||
|
||||
/* routines in geqo_eval.c */
|
||||
extern Cost geqo_eval(PlannerInfo *root, Gene *tour, int num_gene);
|
||||
extern RelOptInfo *gimme_tree(PlannerInfo *root, Gene *tour, int num_gene);
|
||||
|
||||
#endif /* GEQO_H */
|
30
deps/libpq/include/optimizer/geqo_copy.h
vendored
Normal file
30
deps/libpq/include/optimizer/geqo_copy.h
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* geqo_copy.h
|
||||
* prototypes for copy functions in optimizer/geqo
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/geqo_copy.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* contributed by:
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
* Martin Utesch * Institute of Automatic Control *
|
||||
= = University of Mining and Technology =
|
||||
* utesch@aut.tu-freiberg.de * Freiberg, Germany *
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
*/
|
||||
|
||||
#ifndef GEQO_COPY_H
|
||||
#define GEQO_COPY_H
|
||||
|
||||
#include "optimizer/geqo.h"
|
||||
|
||||
|
||||
extern void geqo_copy(PlannerInfo *root, Chromosome *chromo1, Chromosome *chromo2, int string_length);
|
||||
|
||||
#endif /* GEQO_COPY_H */
|
45
deps/libpq/include/optimizer/geqo_gene.h
vendored
Normal file
45
deps/libpq/include/optimizer/geqo_gene.h
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* geqo_gene.h
|
||||
* genome representation in optimizer/geqo
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/geqo_gene.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* contributed by:
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
* Martin Utesch * Institute of Automatic Control *
|
||||
= = University of Mining and Technology =
|
||||
* utesch@aut.tu-freiberg.de * Freiberg, Germany *
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GEQO_GENE_H
|
||||
#define GEQO_GENE_H
|
||||
|
||||
#include "nodes/nodes.h"
|
||||
|
||||
/* we presume that int instead of Relid
|
||||
is o.k. for Gene; so don't change it! */
|
||||
typedef int Gene;
|
||||
|
||||
typedef struct Chromosome
|
||||
{
|
||||
Gene *string;
|
||||
Cost worth;
|
||||
} Chromosome;
|
||||
|
||||
typedef struct Pool
|
||||
{
|
||||
Chromosome *data;
|
||||
int size;
|
||||
int string_length;
|
||||
} Pool;
|
||||
|
||||
#endif /* GEQO_GENE_H */
|
35
deps/libpq/include/optimizer/geqo_misc.h
vendored
Normal file
35
deps/libpq/include/optimizer/geqo_misc.h
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* geqo_misc.h
|
||||
* prototypes for printout routines in optimizer/geqo
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/geqo_misc.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* contributed by:
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
* Martin Utesch * Institute of Automatic Control *
|
||||
= = University of Mining and Technology =
|
||||
* utesch@aut.tu-freiberg.de * Freiberg, Germany *
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
*/
|
||||
|
||||
#ifndef GEQO_MISC_H
|
||||
#define GEQO_MISC_H
|
||||
|
||||
#include "optimizer/geqo.h"
|
||||
#include "optimizer/geqo_recombination.h"
|
||||
|
||||
#ifdef GEQO_DEBUG
|
||||
|
||||
extern void print_pool(FILE *fp, Pool *pool, int start, int stop);
|
||||
extern void print_gen(FILE *fp, Pool *pool, int generation);
|
||||
extern void print_edge_table(FILE *fp, Edge *edge_table, int num_gene);
|
||||
#endif /* GEQO_DEBUG */
|
||||
|
||||
#endif /* GEQO_MISC_H */
|
30
deps/libpq/include/optimizer/geqo_mutation.h
vendored
Normal file
30
deps/libpq/include/optimizer/geqo_mutation.h
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* geqo_mutation.h
|
||||
* prototypes for mutation functions in optimizer/geqo
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/geqo_mutation.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* contributed by:
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
* Martin Utesch * Institute of Automatic Control *
|
||||
= = University of Mining and Technology =
|
||||
* utesch@aut.tu-freiberg.de * Freiberg, Germany *
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
*/
|
||||
|
||||
#ifndef GEQO_MUTATION_H
|
||||
#define GEQO_MUTATION_H
|
||||
|
||||
#include "optimizer/geqo.h"
|
||||
|
||||
|
||||
extern void geqo_mutation(PlannerInfo *root, Gene *tour, int num_gene);
|
||||
|
||||
#endif /* GEQO_MUTATION_H */
|
40
deps/libpq/include/optimizer/geqo_pool.h
vendored
Normal file
40
deps/libpq/include/optimizer/geqo_pool.h
vendored
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* geqo_pool.h
|
||||
* pool representation in optimizer/geqo
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/geqo_pool.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* contributed by:
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
* Martin Utesch * Institute of Automatic Control *
|
||||
= = University of Mining and Technology =
|
||||
* utesch@aut.tu-freiberg.de * Freiberg, Germany *
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GEQO_POOL_H
|
||||
#define GEQO_POOL_H
|
||||
|
||||
#include "optimizer/geqo.h"
|
||||
|
||||
|
||||
extern Pool *alloc_pool(PlannerInfo *root, int pool_size, int string_length);
|
||||
extern void free_pool(PlannerInfo *root, Pool *pool);
|
||||
|
||||
extern void random_init_pool(PlannerInfo *root, Pool *pool);
|
||||
extern Chromosome *alloc_chromo(PlannerInfo *root, int string_length);
|
||||
extern void free_chromo(PlannerInfo *root, Chromosome *chromo);
|
||||
|
||||
extern void spread_chromo(PlannerInfo *root, Chromosome *chromo, Pool *pool);
|
||||
|
||||
extern void sort_pool(PlannerInfo *root, Pool *pool);
|
||||
|
||||
#endif /* GEQO_POOL_H */
|
41
deps/libpq/include/optimizer/geqo_random.h
vendored
Normal file
41
deps/libpq/include/optimizer/geqo_random.h
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* geqo_random.h
|
||||
* random number generator
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/geqo_random.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* contributed by:
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
* Martin Utesch * Institute of Automatic Control *
|
||||
= = University of Mining and Technology =
|
||||
* utesch@aut.tu-freiberg.de * Freiberg, Germany *
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
*/
|
||||
|
||||
/* -- parts of this are adapted from D. Whitley's Genitor algorithm -- */
|
||||
|
||||
#ifndef GEQO_RANDOM_H
|
||||
#define GEQO_RANDOM_H
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "optimizer/geqo.h"
|
||||
|
||||
|
||||
extern void geqo_set_seed(PlannerInfo *root, double seed);
|
||||
|
||||
/* geqo_rand returns a random float value between 0 and 1 inclusive */
|
||||
extern double geqo_rand(PlannerInfo *root);
|
||||
|
||||
/* geqo_randint returns integer value between lower and upper inclusive */
|
||||
#define geqo_randint(root, upper, lower) \
|
||||
( (int) floor( geqo_rand(root)*(((upper)-(lower))+0.999999) ) + (lower) )
|
||||
|
||||
#endif /* GEQO_RANDOM_H */
|
89
deps/libpq/include/optimizer/geqo_recombination.h
vendored
Normal file
89
deps/libpq/include/optimizer/geqo_recombination.h
vendored
Normal file
|
@ -0,0 +1,89 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* geqo_recombination.h
|
||||
* prototypes for recombination in the genetic query optimizer
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/geqo_recombination.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* contributed by:
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
* Martin Utesch * Institute of Automatic Control *
|
||||
= = University of Mining and Technology =
|
||||
* utesch@aut.tu-freiberg.de * Freiberg, Germany *
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
*/
|
||||
|
||||
/* -- parts of this are adapted from D. Whitley's Genitor algorithm -- */
|
||||
|
||||
#ifndef GEQO_RECOMBINATION_H
|
||||
#define GEQO_RECOMBINATION_H
|
||||
|
||||
#include "optimizer/geqo.h"
|
||||
|
||||
|
||||
extern void init_tour(PlannerInfo *root, Gene *tour, int num_gene);
|
||||
|
||||
|
||||
/* edge recombination crossover [ERX] */
|
||||
|
||||
typedef struct Edge
|
||||
{
|
||||
Gene edge_list[4]; /* list of edges */
|
||||
int total_edges;
|
||||
int unused_edges;
|
||||
} Edge;
|
||||
|
||||
extern Edge *alloc_edge_table(PlannerInfo *root, int num_gene);
|
||||
extern void free_edge_table(PlannerInfo *root, Edge *edge_table);
|
||||
|
||||
extern float gimme_edge_table(PlannerInfo *root, Gene *tour1, Gene *tour2,
|
||||
int num_gene, Edge *edge_table);
|
||||
|
||||
extern int gimme_tour(PlannerInfo *root, Edge *edge_table, Gene *new_gene,
|
||||
int num_gene);
|
||||
|
||||
|
||||
/* partially matched crossover [PMX] */
|
||||
|
||||
#define DAD 1 /* indicator for gene from dad */
|
||||
#define MOM 0 /* indicator for gene from mom */
|
||||
|
||||
extern void pmx(PlannerInfo *root,
|
||||
Gene *tour1, Gene *tour2,
|
||||
Gene *offspring, int num_gene);
|
||||
|
||||
|
||||
typedef struct City
|
||||
{
|
||||
int tour2_position;
|
||||
int tour1_position;
|
||||
int used;
|
||||
int select_list;
|
||||
} City;
|
||||
|
||||
extern City *alloc_city_table(PlannerInfo *root, int num_gene);
|
||||
extern void free_city_table(PlannerInfo *root, City *city_table);
|
||||
|
||||
/* cycle crossover [CX] */
|
||||
extern int cx(PlannerInfo *root, Gene *tour1, Gene *tour2,
|
||||
Gene *offspring, int num_gene, City *city_table);
|
||||
|
||||
/* position crossover [PX] */
|
||||
extern void px(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring,
|
||||
int num_gene, City *city_table);
|
||||
|
||||
/* order crossover [OX1] according to Davis */
|
||||
extern void ox1(PlannerInfo *root, Gene *mom, Gene *dad, Gene *offspring,
|
||||
int num_gene, City *city_table);
|
||||
|
||||
/* order crossover [OX2] according to Syswerda */
|
||||
extern void ox2(PlannerInfo *root, Gene *mom, Gene *dad, Gene *offspring,
|
||||
int num_gene, City *city_table);
|
||||
|
||||
#endif /* GEQO_RECOMBINATION_H */
|
33
deps/libpq/include/optimizer/geqo_selection.h
vendored
Normal file
33
deps/libpq/include/optimizer/geqo_selection.h
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* geqo_selection.h
|
||||
* prototypes for selection routines in optimizer/geqo
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/geqo_selection.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* contributed by:
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
* Martin Utesch * Institute of Automatic Control *
|
||||
= = University of Mining and Technology =
|
||||
* utesch@aut.tu-freiberg.de * Freiberg, Germany *
|
||||
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GEQO_SELECTION_H
|
||||
#define GEQO_SELECTION_H
|
||||
|
||||
#include "optimizer/geqo.h"
|
||||
|
||||
|
||||
extern void geqo_selection(PlannerInfo *root,
|
||||
Chromosome *momma, Chromosome *daddy,
|
||||
Pool *pool, double bias);
|
||||
|
||||
#endif /* GEQO_SELECTION_H */
|
30
deps/libpq/include/optimizer/joininfo.h
vendored
Normal file
30
deps/libpq/include/optimizer/joininfo.h
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* joininfo.h
|
||||
* prototypes for joininfo.c.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/joininfo.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef JOININFO_H
|
||||
#define JOININFO_H
|
||||
|
||||
#include "nodes/relation.h"
|
||||
|
||||
|
||||
extern bool have_relevant_joinclause(PlannerInfo *root,
|
||||
RelOptInfo *rel1, RelOptInfo *rel2);
|
||||
|
||||
extern void add_join_clause_to_rels(PlannerInfo *root,
|
||||
RestrictInfo *restrictinfo,
|
||||
Relids join_relids);
|
||||
extern void remove_join_clause_from_rels(PlannerInfo *root,
|
||||
RestrictInfo *restrictinfo,
|
||||
Relids join_relids);
|
||||
|
||||
#endif /* JOININFO_H */
|
110
deps/libpq/include/optimizer/pathnode.h
vendored
Normal file
110
deps/libpq/include/optimizer/pathnode.h
vendored
Normal file
|
@ -0,0 +1,110 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* pathnode.h
|
||||
* prototypes for pathnode.c, relnode.c.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/pathnode.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef PATHNODE_H
|
||||
#define PATHNODE_H
|
||||
|
||||
#include "nodes/relation.h"
|
||||
|
||||
|
||||
/*
|
||||
* prototypes for pathnode.c
|
||||
*/
|
||||
extern int compare_path_costs(Path *path1, Path *path2,
|
||||
CostSelector criterion);
|
||||
extern int compare_fractional_path_costs(Path *path1, Path *path2,
|
||||
double fraction);
|
||||
extern void set_cheapest(RelOptInfo *parent_rel);
|
||||
extern void add_path(RelOptInfo *parent_rel, Path *new_path);
|
||||
|
||||
extern Path *create_seqscan_path(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern IndexPath *create_index_path(PlannerInfo *root,
|
||||
IndexOptInfo *index,
|
||||
List *clause_groups,
|
||||
List *indexorderbys,
|
||||
List *pathkeys,
|
||||
ScanDirection indexscandir,
|
||||
RelOptInfo *outer_rel);
|
||||
extern BitmapHeapPath *create_bitmap_heap_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
Path *bitmapqual,
|
||||
RelOptInfo *outer_rel);
|
||||
extern BitmapAndPath *create_bitmap_and_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
List *bitmapquals);
|
||||
extern BitmapOrPath *create_bitmap_or_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
List *bitmapquals);
|
||||
extern TidPath *create_tidscan_path(PlannerInfo *root, RelOptInfo *rel,
|
||||
List *tidquals);
|
||||
extern AppendPath *create_append_path(RelOptInfo *rel, List *subpaths);
|
||||
extern MergeAppendPath *create_merge_append_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
List *subpaths,
|
||||
List *pathkeys);
|
||||
extern ResultPath *create_result_path(List *quals);
|
||||
extern MaterialPath *create_material_path(RelOptInfo *rel, Path *subpath);
|
||||
extern UniquePath *create_unique_path(PlannerInfo *root, RelOptInfo *rel,
|
||||
Path *subpath, SpecialJoinInfo *sjinfo);
|
||||
extern Path *create_subqueryscan_path(RelOptInfo *rel, List *pathkeys);
|
||||
extern Path *create_functionscan_path(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern Path *create_valuesscan_path(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern Path *create_ctescan_path(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern Path *create_worktablescan_path(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern ForeignPath *create_foreignscan_path(PlannerInfo *root, RelOptInfo *rel);
|
||||
|
||||
extern NestPath *create_nestloop_path(PlannerInfo *root,
|
||||
RelOptInfo *joinrel,
|
||||
JoinType jointype,
|
||||
SpecialJoinInfo *sjinfo,
|
||||
Path *outer_path,
|
||||
Path *inner_path,
|
||||
List *restrict_clauses,
|
||||
List *pathkeys);
|
||||
|
||||
extern MergePath *create_mergejoin_path(PlannerInfo *root,
|
||||
RelOptInfo *joinrel,
|
||||
JoinType jointype,
|
||||
SpecialJoinInfo *sjinfo,
|
||||
Path *outer_path,
|
||||
Path *inner_path,
|
||||
List *restrict_clauses,
|
||||
List *pathkeys,
|
||||
List *mergeclauses,
|
||||
List *outersortkeys,
|
||||
List *innersortkeys);
|
||||
|
||||
extern HashPath *create_hashjoin_path(PlannerInfo *root,
|
||||
RelOptInfo *joinrel,
|
||||
JoinType jointype,
|
||||
SpecialJoinInfo *sjinfo,
|
||||
Path *outer_path,
|
||||
Path *inner_path,
|
||||
List *restrict_clauses,
|
||||
List *hashclauses);
|
||||
|
||||
/*
|
||||
* prototypes for relnode.c
|
||||
*/
|
||||
extern RelOptInfo *build_simple_rel(PlannerInfo *root, int relid,
|
||||
RelOptKind reloptkind);
|
||||
extern RelOptInfo *find_base_rel(PlannerInfo *root, int relid);
|
||||
extern RelOptInfo *find_join_rel(PlannerInfo *root, Relids relids);
|
||||
extern RelOptInfo *build_join_rel(PlannerInfo *root,
|
||||
Relids joinrelids,
|
||||
RelOptInfo *outer_rel,
|
||||
RelOptInfo *inner_rel,
|
||||
SpecialJoinInfo *sjinfo,
|
||||
List **restrictlist_ptr);
|
||||
|
||||
#endif /* PATHNODE_H */
|
186
deps/libpq/include/optimizer/paths.h
vendored
Normal file
186
deps/libpq/include/optimizer/paths.h
vendored
Normal file
|
@ -0,0 +1,186 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* paths.h
|
||||
* prototypes for various files in optimizer/path
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/paths.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef PATHS_H
|
||||
#define PATHS_H
|
||||
|
||||
#include "nodes/relation.h"
|
||||
|
||||
|
||||
/*
|
||||
* allpaths.c
|
||||
*/
|
||||
extern bool enable_geqo;
|
||||
extern int geqo_threshold;
|
||||
|
||||
/* Hook for plugins to replace standard_join_search() */
|
||||
typedef RelOptInfo *(*join_search_hook_type) (PlannerInfo *root,
|
||||
int levels_needed,
|
||||
List *initial_rels);
|
||||
extern PGDLLIMPORT join_search_hook_type join_search_hook;
|
||||
|
||||
|
||||
extern RelOptInfo *make_one_rel(PlannerInfo *root, List *joinlist);
|
||||
extern RelOptInfo *standard_join_search(PlannerInfo *root, int levels_needed,
|
||||
List *initial_rels);
|
||||
|
||||
#ifdef OPTIMIZER_DEBUG
|
||||
extern void debug_print_rel(PlannerInfo *root, RelOptInfo *rel);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* indxpath.c
|
||||
* routines to generate index paths
|
||||
*/
|
||||
extern void create_index_paths(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern List *generate_bitmap_or_paths(PlannerInfo *root, RelOptInfo *rel,
|
||||
List *clauses, List *outer_clauses,
|
||||
RelOptInfo *outer_rel);
|
||||
extern void best_inner_indexscan(PlannerInfo *root, RelOptInfo *rel,
|
||||
RelOptInfo *outer_rel, JoinType jointype,
|
||||
Path **cheapest_startup, Path **cheapest_total);
|
||||
extern bool relation_has_unique_index_for(PlannerInfo *root, RelOptInfo *rel,
|
||||
List *restrictlist);
|
||||
extern bool eclass_matches_any_index(EquivalenceClass *ec,
|
||||
EquivalenceMember *em,
|
||||
RelOptInfo *rel);
|
||||
extern bool match_index_to_operand(Node *operand, int indexcol,
|
||||
IndexOptInfo *index);
|
||||
extern List *expand_indexqual_conditions(IndexOptInfo *index,
|
||||
List *clausegroups);
|
||||
extern void check_partial_indexes(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern List *flatten_clausegroups_list(List *clausegroups);
|
||||
|
||||
/*
|
||||
* orindxpath.c
|
||||
* additional routines for indexable OR clauses
|
||||
*/
|
||||
extern bool create_or_index_quals(PlannerInfo *root, RelOptInfo *rel);
|
||||
|
||||
/*
|
||||
* tidpath.h
|
||||
* routines to generate tid paths
|
||||
*/
|
||||
extern void create_tidscan_paths(PlannerInfo *root, RelOptInfo *rel);
|
||||
|
||||
/*
|
||||
* joinpath.c
|
||||
* routines to create join paths
|
||||
*/
|
||||
extern void add_paths_to_joinrel(PlannerInfo *root, RelOptInfo *joinrel,
|
||||
RelOptInfo *outerrel, RelOptInfo *innerrel,
|
||||
JoinType jointype, SpecialJoinInfo *sjinfo,
|
||||
List *restrictlist);
|
||||
|
||||
/*
|
||||
* joinrels.c
|
||||
* routines to determine which relations to join
|
||||
*/
|
||||
extern void join_search_one_level(PlannerInfo *root, int level);
|
||||
extern RelOptInfo *make_join_rel(PlannerInfo *root,
|
||||
RelOptInfo *rel1, RelOptInfo *rel2);
|
||||
extern bool have_join_order_restriction(PlannerInfo *root,
|
||||
RelOptInfo *rel1, RelOptInfo *rel2);
|
||||
|
||||
/*
|
||||
* equivclass.c
|
||||
* routines for managing EquivalenceClasses
|
||||
*/
|
||||
extern bool process_equivalence(PlannerInfo *root, RestrictInfo *restrictinfo,
|
||||
bool below_outer_join);
|
||||
extern Expr *canonicalize_ec_expression(Expr *expr,
|
||||
Oid req_type, Oid req_collation);
|
||||
extern void reconsider_outer_join_clauses(PlannerInfo *root);
|
||||
extern EquivalenceClass *get_eclass_for_sort_expr(PlannerInfo *root,
|
||||
Expr *expr,
|
||||
List *opfamilies,
|
||||
Oid opcintype,
|
||||
Oid collation,
|
||||
Index sortref,
|
||||
Relids rel,
|
||||
bool create_it);
|
||||
extern void generate_base_implied_equalities(PlannerInfo *root);
|
||||
extern List *generate_join_implied_equalities(PlannerInfo *root,
|
||||
RelOptInfo *joinrel,
|
||||
RelOptInfo *outer_rel,
|
||||
RelOptInfo *inner_rel);
|
||||
extern bool exprs_known_equal(PlannerInfo *root, Node *item1, Node *item2);
|
||||
extern void add_child_rel_equivalences(PlannerInfo *root,
|
||||
AppendRelInfo *appinfo,
|
||||
RelOptInfo *parent_rel,
|
||||
RelOptInfo *child_rel);
|
||||
extern void mutate_eclass_expressions(PlannerInfo *root,
|
||||
Node *(*mutator) (),
|
||||
void *context);
|
||||
extern List *find_eclass_clauses_for_index_join(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
Relids outer_relids);
|
||||
extern bool have_relevant_eclass_joinclause(PlannerInfo *root,
|
||||
RelOptInfo *rel1, RelOptInfo *rel2);
|
||||
extern bool has_relevant_eclass_joinclause(PlannerInfo *root,
|
||||
RelOptInfo *rel1);
|
||||
extern bool eclass_useful_for_merging(EquivalenceClass *eclass,
|
||||
RelOptInfo *rel);
|
||||
|
||||
/*
|
||||
* pathkeys.c
|
||||
* utilities for matching and building path keys
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
PATHKEYS_EQUAL, /* pathkeys are identical */
|
||||
PATHKEYS_BETTER1, /* pathkey 1 is a superset of pathkey 2 */
|
||||
PATHKEYS_BETTER2, /* vice versa */
|
||||
PATHKEYS_DIFFERENT /* neither pathkey includes the other */
|
||||
} PathKeysComparison;
|
||||
|
||||
extern List *canonicalize_pathkeys(PlannerInfo *root, List *pathkeys);
|
||||
extern PathKeysComparison compare_pathkeys(List *keys1, List *keys2);
|
||||
extern bool pathkeys_contained_in(List *keys1, List *keys2);
|
||||
extern Path *get_cheapest_path_for_pathkeys(List *paths, List *pathkeys,
|
||||
CostSelector cost_criterion);
|
||||
extern Path *get_cheapest_fractional_path_for_pathkeys(List *paths,
|
||||
List *pathkeys,
|
||||
double fraction);
|
||||
extern List *build_index_pathkeys(PlannerInfo *root, IndexOptInfo *index,
|
||||
ScanDirection scandir);
|
||||
extern List *convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel,
|
||||
List *subquery_pathkeys);
|
||||
extern List *build_join_pathkeys(PlannerInfo *root,
|
||||
RelOptInfo *joinrel,
|
||||
JoinType jointype,
|
||||
List *outer_pathkeys);
|
||||
extern List *make_pathkeys_for_sortclauses(PlannerInfo *root,
|
||||
List *sortclauses,
|
||||
List *tlist,
|
||||
bool canonicalize);
|
||||
extern void initialize_mergeclause_eclasses(PlannerInfo *root,
|
||||
RestrictInfo *restrictinfo);
|
||||
extern void update_mergeclause_eclasses(PlannerInfo *root,
|
||||
RestrictInfo *restrictinfo);
|
||||
extern List *find_mergeclauses_for_pathkeys(PlannerInfo *root,
|
||||
List *pathkeys,
|
||||
bool outer_keys,
|
||||
List *restrictinfos);
|
||||
extern List *select_outer_pathkeys_for_merge(PlannerInfo *root,
|
||||
List *mergeclauses,
|
||||
RelOptInfo *joinrel);
|
||||
extern List *make_inner_pathkeys_for_merge(PlannerInfo *root,
|
||||
List *mergeclauses,
|
||||
List *outer_pathkeys);
|
||||
extern List *truncate_useless_pathkeys(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
List *pathkeys);
|
||||
extern bool has_useful_pathkeys(PlannerInfo *root, RelOptInfo *rel);
|
||||
|
||||
#endif /* PATHS_H */
|
34
deps/libpq/include/optimizer/placeholder.h
vendored
Normal file
34
deps/libpq/include/optimizer/placeholder.h
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* placeholder.h
|
||||
* prototypes for optimizer/util/placeholder.c.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/placeholder.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef PLACEHOLDER_H
|
||||
#define PLACEHOLDER_H
|
||||
|
||||
#include "nodes/relation.h"
|
||||
|
||||
|
||||
extern PlaceHolderVar *make_placeholder_expr(PlannerInfo *root, Expr *expr,
|
||||
Relids phrels);
|
||||
extern PlaceHolderInfo *find_placeholder_info(PlannerInfo *root,
|
||||
PlaceHolderVar *phv, bool create_new_ph);
|
||||
extern void find_placeholders_in_jointree(PlannerInfo *root);
|
||||
extern void mark_placeholder_maybe_needed(PlannerInfo *root,
|
||||
PlaceHolderInfo *phinfo, Relids relids);
|
||||
extern void update_placeholder_eval_levels(PlannerInfo *root,
|
||||
SpecialJoinInfo *new_sjinfo);
|
||||
extern void fix_placeholder_input_needed_levels(PlannerInfo *root);
|
||||
extern void add_placeholders_to_base_rels(PlannerInfo *root);
|
||||
extern void add_placeholders_to_joinrel(PlannerInfo *root,
|
||||
RelOptInfo *joinrel);
|
||||
|
||||
#endif /* PLACEHOLDER_H */
|
54
deps/libpq/include/optimizer/plancat.h
vendored
Normal file
54
deps/libpq/include/optimizer/plancat.h
vendored
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* plancat.h
|
||||
* prototypes for plancat.c.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/plancat.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef PLANCAT_H
|
||||
#define PLANCAT_H
|
||||
|
||||
#include "nodes/relation.h"
|
||||
#include "utils/relcache.h"
|
||||
|
||||
/* Hook for plugins to get control in get_relation_info() */
|
||||
typedef void (*get_relation_info_hook_type) (PlannerInfo *root,
|
||||
Oid relationObjectId,
|
||||
bool inhparent,
|
||||
RelOptInfo *rel);
|
||||
extern PGDLLIMPORT get_relation_info_hook_type get_relation_info_hook;
|
||||
|
||||
|
||||
extern void get_relation_info(PlannerInfo *root, Oid relationObjectId,
|
||||
bool inhparent, RelOptInfo *rel);
|
||||
|
||||
extern void estimate_rel_size(Relation rel, int32 *attr_widths,
|
||||
BlockNumber *pages, double *tuples);
|
||||
|
||||
extern int32 get_relation_data_width(Oid relid, int32 *attr_widths);
|
||||
|
||||
extern bool relation_excluded_by_constraints(PlannerInfo *root,
|
||||
RelOptInfo *rel, RangeTblEntry *rte);
|
||||
|
||||
extern List *build_physical_tlist(PlannerInfo *root, RelOptInfo *rel);
|
||||
|
||||
extern bool has_unique_index(RelOptInfo *rel, AttrNumber attno);
|
||||
|
||||
extern Selectivity restriction_selectivity(PlannerInfo *root,
|
||||
Oid operatorid,
|
||||
List *args,
|
||||
int varRelid);
|
||||
|
||||
extern Selectivity join_selectivity(PlannerInfo *root,
|
||||
Oid operatorid,
|
||||
List *args,
|
||||
JoinType jointype,
|
||||
SpecialJoinInfo *sjinfo);
|
||||
|
||||
#endif /* PLANCAT_H */
|
133
deps/libpq/include/optimizer/planmain.h
vendored
Normal file
133
deps/libpq/include/optimizer/planmain.h
vendored
Normal file
|
@ -0,0 +1,133 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* planmain.h
|
||||
* prototypes for various files in optimizer/plan
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/planmain.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef PLANMAIN_H
|
||||
#define PLANMAIN_H
|
||||
|
||||
#include "nodes/plannodes.h"
|
||||
#include "nodes/relation.h"
|
||||
|
||||
/* GUC parameters */
|
||||
#define DEFAULT_CURSOR_TUPLE_FRACTION 0.1
|
||||
extern double cursor_tuple_fraction;
|
||||
|
||||
/*
|
||||
* prototypes for plan/planmain.c
|
||||
*/
|
||||
extern void query_planner(PlannerInfo *root, List *tlist,
|
||||
double tuple_fraction, double limit_tuples,
|
||||
Path **cheapest_path, Path **sorted_path,
|
||||
double *num_groups);
|
||||
|
||||
/*
|
||||
* prototypes for plan/planagg.c
|
||||
*/
|
||||
extern void preprocess_minmax_aggregates(PlannerInfo *root, List *tlist);
|
||||
extern Plan *optimize_minmax_aggregates(PlannerInfo *root, List *tlist,
|
||||
const AggClauseCosts *aggcosts, Path *best_path);
|
||||
|
||||
/*
|
||||
* prototypes for plan/createplan.c
|
||||
*/
|
||||
extern Plan *create_plan(PlannerInfo *root, Path *best_path);
|
||||
extern SubqueryScan *make_subqueryscan(List *qptlist, List *qpqual,
|
||||
Index scanrelid, Plan *subplan,
|
||||
List *subrtable, List *subrowmark);
|
||||
extern Append *make_append(List *appendplans, List *tlist);
|
||||
extern RecursiveUnion *make_recursive_union(List *tlist,
|
||||
Plan *lefttree, Plan *righttree, int wtParam,
|
||||
List *distinctList, long numGroups);
|
||||
extern Sort *make_sort_from_pathkeys(PlannerInfo *root, Plan *lefttree,
|
||||
List *pathkeys, double limit_tuples);
|
||||
extern Sort *make_sort_from_sortclauses(PlannerInfo *root, List *sortcls,
|
||||
Plan *lefttree);
|
||||
extern Sort *make_sort_from_groupcols(PlannerInfo *root, List *groupcls,
|
||||
AttrNumber *grpColIdx, Plan *lefttree);
|
||||
extern Agg *make_agg(PlannerInfo *root, List *tlist, List *qual,
|
||||
AggStrategy aggstrategy, const AggClauseCosts *aggcosts,
|
||||
int numGroupCols, AttrNumber *grpColIdx, Oid *grpOperators,
|
||||
long numGroups,
|
||||
Plan *lefttree);
|
||||
extern WindowAgg *make_windowagg(PlannerInfo *root, List *tlist,
|
||||
List *windowFuncs, Index winref,
|
||||
int partNumCols, AttrNumber *partColIdx, Oid *partOperators,
|
||||
int ordNumCols, AttrNumber *ordColIdx, Oid *ordOperators,
|
||||
int frameOptions, Node *startOffset, Node *endOffset,
|
||||
Plan *lefttree);
|
||||
extern Group *make_group(PlannerInfo *root, List *tlist, List *qual,
|
||||
int numGroupCols, AttrNumber *grpColIdx, Oid *grpOperators,
|
||||
double numGroups,
|
||||
Plan *lefttree);
|
||||
extern Plan *materialize_finished_plan(Plan *subplan);
|
||||
extern Unique *make_unique(Plan *lefttree, List *distinctList);
|
||||
extern LockRows *make_lockrows(Plan *lefttree, List *rowMarks, int epqParam);
|
||||
extern Limit *make_limit(Plan *lefttree, Node *limitOffset, Node *limitCount,
|
||||
int64 offset_est, int64 count_est);
|
||||
extern SetOp *make_setop(SetOpCmd cmd, SetOpStrategy strategy, Plan *lefttree,
|
||||
List *distinctList, AttrNumber flagColIdx, int firstFlag,
|
||||
long numGroups, double outputRows);
|
||||
extern Result *make_result(PlannerInfo *root, List *tlist,
|
||||
Node *resconstantqual, Plan *subplan);
|
||||
extern ModifyTable *make_modifytable(CmdType operation, bool canSetTag,
|
||||
List *resultRelations, List *subplans, List *returningLists,
|
||||
List *rowMarks, int epqParam);
|
||||
extern bool is_projection_capable_plan(Plan *plan);
|
||||
|
||||
/*
|
||||
* prototypes for plan/initsplan.c
|
||||
*/
|
||||
extern int from_collapse_limit;
|
||||
extern int join_collapse_limit;
|
||||
|
||||
extern void add_base_rels_to_query(PlannerInfo *root, Node *jtnode);
|
||||
extern void build_base_rel_tlists(PlannerInfo *root, List *final_tlist);
|
||||
extern void add_vars_to_targetlist(PlannerInfo *root, List *vars,
|
||||
Relids where_needed, bool create_new_ph);
|
||||
extern List *deconstruct_jointree(PlannerInfo *root);
|
||||
extern void distribute_restrictinfo_to_rels(PlannerInfo *root,
|
||||
RestrictInfo *restrictinfo);
|
||||
extern void process_implied_equality(PlannerInfo *root,
|
||||
Oid opno,
|
||||
Oid collation,
|
||||
Expr *item1,
|
||||
Expr *item2,
|
||||
Relids qualscope,
|
||||
bool below_outer_join,
|
||||
bool both_const);
|
||||
extern RestrictInfo *build_implied_join_equality(Oid opno,
|
||||
Oid collation,
|
||||
Expr *item1,
|
||||
Expr *item2,
|
||||
Relids qualscope);
|
||||
|
||||
/*
|
||||
* prototypes for plan/analyzejoins.c
|
||||
*/
|
||||
extern List *remove_useless_joins(PlannerInfo *root, List *joinlist);
|
||||
|
||||
/*
|
||||
* prototypes for plan/setrefs.c
|
||||
*/
|
||||
extern Plan *set_plan_references(PlannerGlobal *glob,
|
||||
Plan *plan,
|
||||
List *rtable,
|
||||
List *rowmarks);
|
||||
extern void fix_opfuncids(Node *node);
|
||||
extern void set_opfuncid(OpExpr *opexpr);
|
||||
extern void set_sa_opfuncid(ScalarArrayOpExpr *opexpr);
|
||||
extern void record_plan_function_dependency(PlannerGlobal *glob, Oid funcid);
|
||||
extern void extract_query_dependencies(Node *query,
|
||||
List **relationOids,
|
||||
List **invalItems);
|
||||
|
||||
#endif /* PLANMAIN_H */
|
42
deps/libpq/include/optimizer/planner.h
vendored
Normal file
42
deps/libpq/include/optimizer/planner.h
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* planner.h
|
||||
* prototypes for planner.c.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/planner.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef PLANNER_H
|
||||
#define PLANNER_H
|
||||
|
||||
#include "nodes/plannodes.h"
|
||||
#include "nodes/relation.h"
|
||||
|
||||
|
||||
/* Hook for plugins to get control in planner() */
|
||||
typedef PlannedStmt *(*planner_hook_type) (Query *parse,
|
||||
int cursorOptions,
|
||||
ParamListInfo boundParams);
|
||||
extern PGDLLIMPORT planner_hook_type planner_hook;
|
||||
|
||||
|
||||
extern PlannedStmt *planner(Query *parse, int cursorOptions,
|
||||
ParamListInfo boundParams);
|
||||
extern PlannedStmt *standard_planner(Query *parse, int cursorOptions,
|
||||
ParamListInfo boundParams);
|
||||
|
||||
extern Plan *subquery_planner(PlannerGlobal *glob, Query *parse,
|
||||
PlannerInfo *parent_root,
|
||||
bool hasRecursion, double tuple_fraction,
|
||||
PlannerInfo **subroot);
|
||||
|
||||
extern Expr *expression_planner(Expr *expr);
|
||||
|
||||
extern bool plan_cluster_use_sort(Oid tableOid, Oid indexOid);
|
||||
|
||||
#endif /* PLANNER_H */
|
25
deps/libpq/include/optimizer/predtest.h
vendored
Normal file
25
deps/libpq/include/optimizer/predtest.h
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* predtest.h
|
||||
* prototypes for predtest.c
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/predtest.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef PREDTEST_H
|
||||
#define PREDTEST_H
|
||||
|
||||
#include "nodes/primnodes.h"
|
||||
|
||||
|
||||
extern bool predicate_implied_by(List *predicate_list,
|
||||
List *restrictinfo_list);
|
||||
extern bool predicate_refuted_by(List *predicate_list,
|
||||
List *restrictinfo_list);
|
||||
|
||||
#endif /* PREDTEST_H */
|
57
deps/libpq/include/optimizer/prep.h
vendored
Normal file
57
deps/libpq/include/optimizer/prep.h
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* prep.h
|
||||
* prototypes for files in optimizer/prep/
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/prep.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef PREP_H
|
||||
#define PREP_H
|
||||
|
||||
#include "nodes/plannodes.h"
|
||||
#include "nodes/relation.h"
|
||||
|
||||
|
||||
/*
|
||||
* prototypes for prepjointree.c
|
||||
*/
|
||||
extern void pull_up_sublinks(PlannerInfo *root);
|
||||
extern void inline_set_returning_functions(PlannerInfo *root);
|
||||
extern Node *pull_up_subqueries(PlannerInfo *root, Node *jtnode,
|
||||
JoinExpr *lowest_outer_join,
|
||||
AppendRelInfo *containing_appendrel);
|
||||
extern void flatten_simple_union_all(PlannerInfo *root);
|
||||
extern void reduce_outer_joins(PlannerInfo *root);
|
||||
extern Relids get_relids_in_jointree(Node *jtnode, bool include_joins);
|
||||
extern Relids get_relids_for_join(PlannerInfo *root, int joinrelid);
|
||||
|
||||
/*
|
||||
* prototypes for prepqual.c
|
||||
*/
|
||||
extern Node *negate_clause(Node *node);
|
||||
extern Expr *canonicalize_qual(Expr *qual);
|
||||
|
||||
/*
|
||||
* prototypes for preptlist.c
|
||||
*/
|
||||
extern List *preprocess_targetlist(PlannerInfo *root, List *tlist);
|
||||
|
||||
extern PlanRowMark *get_plan_rowmark(List *rowmarks, Index rtindex);
|
||||
|
||||
/*
|
||||
* prototypes for prepunion.c
|
||||
*/
|
||||
extern Plan *plan_set_operations(PlannerInfo *root, double tuple_fraction,
|
||||
List **sortClauses);
|
||||
|
||||
extern void expand_inherited_tables(PlannerInfo *root);
|
||||
|
||||
extern Node *adjust_appendrel_attrs(Node *node, AppendRelInfo *appinfo);
|
||||
|
||||
#endif /* PREP_H */
|
47
deps/libpq/include/optimizer/restrictinfo.h
vendored
Normal file
47
deps/libpq/include/optimizer/restrictinfo.h
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* restrictinfo.h
|
||||
* prototypes for restrictinfo.c.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/restrictinfo.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef RESTRICTINFO_H
|
||||
#define RESTRICTINFO_H
|
||||
|
||||
#include "nodes/relation.h"
|
||||
|
||||
|
||||
/* Convenience macro for the common case of a valid-everywhere qual */
|
||||
#define make_simple_restrictinfo(clause) \
|
||||
make_restrictinfo(clause, true, false, false, NULL, NULL)
|
||||
|
||||
extern RestrictInfo *make_restrictinfo(Expr *clause,
|
||||
bool is_pushed_down,
|
||||
bool outerjoin_delayed,
|
||||
bool pseudoconstant,
|
||||
Relids required_relids,
|
||||
Relids nullable_relids);
|
||||
extern List *make_restrictinfo_from_bitmapqual(Path *bitmapqual,
|
||||
bool is_pushed_down,
|
||||
bool include_predicates);
|
||||
extern List *make_restrictinfos_from_actual_clauses(PlannerInfo *root,
|
||||
List *clause_list);
|
||||
extern bool restriction_is_or_clause(RestrictInfo *restrictinfo);
|
||||
extern List *get_actual_clauses(List *restrictinfo_list);
|
||||
extern List *get_all_actual_clauses(List *restrictinfo_list);
|
||||
extern List *extract_actual_clauses(List *restrictinfo_list,
|
||||
bool pseudoconstant);
|
||||
extern void extract_actual_join_clauses(List *restrictinfo_list,
|
||||
List **joinquals,
|
||||
List **otherquals);
|
||||
extern List *select_nonredundant_join_clauses(PlannerInfo *root,
|
||||
List *restrictinfo_list,
|
||||
Path *inner_path);
|
||||
|
||||
#endif /* RESTRICTINFO_H */
|
37
deps/libpq/include/optimizer/subselect.h
vendored
Normal file
37
deps/libpq/include/optimizer/subselect.h
vendored
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* subselect.h
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/subselect.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef SUBSELECT_H
|
||||
#define SUBSELECT_H
|
||||
|
||||
#include "nodes/plannodes.h"
|
||||
#include "nodes/relation.h"
|
||||
|
||||
extern void SS_process_ctes(PlannerInfo *root);
|
||||
extern JoinExpr *convert_ANY_sublink_to_join(PlannerInfo *root,
|
||||
SubLink *sublink,
|
||||
Relids available_rels);
|
||||
extern JoinExpr *convert_EXISTS_sublink_to_join(PlannerInfo *root,
|
||||
SubLink *sublink,
|
||||
bool under_not,
|
||||
Relids available_rels);
|
||||
extern Node *SS_replace_correlation_vars(PlannerInfo *root, Node *expr);
|
||||
extern Node *SS_process_sublinks(PlannerInfo *root, Node *expr, bool isQual);
|
||||
extern void SS_finalize_plan(PlannerInfo *root, Plan *plan,
|
||||
bool attach_initplans);
|
||||
extern Param *SS_make_initplan_from_plan(PlannerInfo *root, Plan *plan,
|
||||
Oid resulttype, int32 resulttypmod, Oid resultcollation);
|
||||
extern Param *assign_nestloop_param_var(PlannerInfo *root, Var *var);
|
||||
extern Param *assign_nestloop_param_placeholdervar(PlannerInfo *root,
|
||||
PlaceHolderVar *phv);
|
||||
extern int SS_assign_special_param(PlannerInfo *root);
|
||||
|
||||
#endif /* SUBSELECT_H */
|
45
deps/libpq/include/optimizer/tlist.h
vendored
Normal file
45
deps/libpq/include/optimizer/tlist.h
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* tlist.h
|
||||
* prototypes for tlist.c.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/tlist.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef TLIST_H
|
||||
#define TLIST_H
|
||||
|
||||
#include "optimizer/var.h"
|
||||
|
||||
|
||||
extern TargetEntry *tlist_member(Node *node, List *targetlist);
|
||||
extern TargetEntry *tlist_member_ignore_relabel(Node *node, List *targetlist);
|
||||
|
||||
extern List *flatten_tlist(List *tlist, PVCAggregateBehavior aggbehavior,
|
||||
PVCPlaceHolderBehavior phbehavior);
|
||||
extern List *add_to_flat_tlist(List *tlist, List *exprs);
|
||||
|
||||
extern List *get_tlist_exprs(List *tlist, bool includeJunk);
|
||||
extern bool tlist_same_datatypes(List *tlist, List *colTypes, bool junkOK);
|
||||
extern bool tlist_same_collations(List *tlist, List *colCollations, bool junkOK);
|
||||
|
||||
extern TargetEntry *get_sortgroupref_tle(Index sortref,
|
||||
List *targetList);
|
||||
extern TargetEntry *get_sortgroupclause_tle(SortGroupClause *sgClause,
|
||||
List *targetList);
|
||||
extern Node *get_sortgroupclause_expr(SortGroupClause *sgClause,
|
||||
List *targetList);
|
||||
extern List *get_sortgrouplist_exprs(List *sgClauses,
|
||||
List *targetList);
|
||||
|
||||
extern Oid *extract_grouping_ops(List *groupClause);
|
||||
extern AttrNumber *extract_grouping_cols(List *groupClause, List *tlist);
|
||||
extern bool grouping_is_sortable(List *groupClause);
|
||||
extern bool grouping_is_hashable(List *groupClause);
|
||||
|
||||
#endif /* TLIST_H */
|
44
deps/libpq/include/optimizer/var.h
vendored
Normal file
44
deps/libpq/include/optimizer/var.h
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* var.h
|
||||
* prototypes for optimizer/util/var.c.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/optimizer/var.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef VAR_H
|
||||
#define VAR_H
|
||||
|
||||
#include "nodes/relation.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
PVC_REJECT_AGGREGATES, /* throw error if Aggref found */
|
||||
PVC_INCLUDE_AGGREGATES, /* include Aggrefs in output list */
|
||||
PVC_RECURSE_AGGREGATES /* recurse into Aggref arguments */
|
||||
} PVCAggregateBehavior;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
PVC_REJECT_PLACEHOLDERS, /* throw error if PlaceHolderVar found */
|
||||
PVC_INCLUDE_PLACEHOLDERS, /* include PlaceHolderVars in output list */
|
||||
PVC_RECURSE_PLACEHOLDERS /* recurse into PlaceHolderVar arguments */
|
||||
} PVCPlaceHolderBehavior;
|
||||
|
||||
extern Relids pull_varnos(Node *node);
|
||||
extern void pull_varattnos(Node *node, Bitmapset **varattnos);
|
||||
extern bool contain_var_clause(Node *node);
|
||||
extern bool contain_vars_of_level(Node *node, int levelsup);
|
||||
extern int locate_var_of_level(Node *node, int levelsup);
|
||||
extern int locate_var_of_relation(Node *node, int relid, int levelsup);
|
||||
extern int find_minimum_var_level(Node *node);
|
||||
extern List *pull_var_clause(Node *node, PVCAggregateBehavior aggbehavior,
|
||||
PVCPlaceHolderBehavior phbehavior);
|
||||
extern Node *flatten_join_alias_vars(PlannerInfo *root, Node *node);
|
||||
|
||||
#endif /* VAR_H */
|
Loading…
Add table
Add a link
Reference in a new issue