1 /*-------------------------------------------------------------------------
2  *
3  * geqo.h
4  *	  prototypes for various files in optimizer/geqo
5  *
6  * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  * src/include/optimizer/geqo.h
10  *
11  *-------------------------------------------------------------------------
12  */
13 
14 /* contributed by:
15    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
16    *  Martin Utesch				 * Institute of Automatic Control	   *
17    =							 = University of Mining and Technology =
18    *  utesch@aut.tu-freiberg.de  * Freiberg, Germany				   *
19    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
20  */
21 
22 #ifndef GEQO_H
23 #define GEQO_H
24 
25 #include "nodes/pathnodes.h"
26 #include "optimizer/geqo_gene.h"
27 
28 
29 /* GEQO debug flag */
30 /*
31  #define GEQO_DEBUG
32  */
33 
34 /* choose one recombination mechanism here */
35 /*
36  #define ERX
37  #define PMX
38  #define CX
39  #define PX
40  #define OX1
41  #define OX2
42  */
43 #define ERX
44 
45 
46 /*
47  * Configuration options
48  *
49  * If you change these, update backend/utils/misc/postgresql.conf.sample
50  */
51 extern int	Geqo_effort;		/* 1 .. 10, knob for adjustment of defaults */
52 
53 #define DEFAULT_GEQO_EFFORT 5
54 #define MIN_GEQO_EFFORT 1
55 #define MAX_GEQO_EFFORT 10
56 
57 extern int	Geqo_pool_size;		/* 2 .. inf, or 0 to use default */
58 
59 extern int	Geqo_generations;	/* 1 .. inf, or 0 to use default */
60 
61 extern double Geqo_selection_bias;
62 
63 #define DEFAULT_GEQO_SELECTION_BIAS 2.0
64 #define MIN_GEQO_SELECTION_BIAS 1.5
65 #define MAX_GEQO_SELECTION_BIAS 2.0
66 
67 extern double Geqo_seed;		/* 0 .. 1 */
68 
69 
70 /*
71  * Private state for a GEQO run --- accessible via root->join_search_private
72  */
73 typedef struct
74 {
75 	List	   *initial_rels;	/* the base relations we are joining */
76 	unsigned short random_state[3]; /* state for pg_erand48() */
77 } GeqoPrivateData;
78 
79 
80 /* routines in geqo_main.c */
81 extern RelOptInfo *geqo(PlannerInfo *root,
82 						int number_of_rels, List *initial_rels);
83 
84 /* routines in geqo_eval.c */
85 extern Cost geqo_eval(PlannerInfo *root, Gene *tour, int num_gene);
86 extern RelOptInfo *gimme_tree(PlannerInfo *root, Gene *tour, int num_gene);
87 
88 #endif							/* GEQO_H */
89