Age Owner TLA Line data Source code
1 : /*-------------------------------------------------------------------------
2 : *
3 : * geqo.h
4 : * prototypes for various files in optimizer/geqo
5 : *
6 : * Portions Copyright (c) 1996-2025, 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 "common/pg_prng.h"
26 : #include "nodes/pathnodes.h"
27 : #include "optimizer/extendplan.h"
28 : #include "optimizer/geqo_gene.h"
29 :
30 :
31 : /* GEQO debug flag */
32 : /*
33 : #define GEQO_DEBUG
34 : */
35 :
36 : /* choose one recombination mechanism here */
37 : /*
38 : #define ERX
39 : #define PMX
40 : #define CX
41 : #define PX
42 : #define OX1
43 : #define OX2
44 : */
45 : #define ERX
46 :
47 :
48 : /*
49 : * Configuration options
50 : *
51 : * If you change these, update backend/utils/misc/postgresql.conf.sample
52 : */
53 : extern PGDLLIMPORT int Geqo_effort; /* 1 .. 10, knob for adjustment of
54 : * defaults */
55 :
56 : #define DEFAULT_GEQO_EFFORT 5
57 : #define MIN_GEQO_EFFORT 1
58 : #define MAX_GEQO_EFFORT 10
59 :
60 : extern PGDLLIMPORT int Geqo_pool_size; /* 2 .. inf, or 0 to use default */
61 :
62 : extern PGDLLIMPORT int Geqo_generations; /* 1 .. inf, or 0 to use default */
63 :
64 : extern PGDLLIMPORT double Geqo_selection_bias;
65 :
66 : extern PGDLLIMPORT int Geqo_planner_extension_id;
67 :
68 : #define DEFAULT_GEQO_SELECTION_BIAS 2.0
69 : #define MIN_GEQO_SELECTION_BIAS 1.5
70 : #define MAX_GEQO_SELECTION_BIAS 2.0
71 :
72 : extern PGDLLIMPORT double Geqo_seed; /* 0 .. 1 */
73 :
74 :
75 : /*
76 : * Private state for a GEQO run --- accessible via GetGeqoPrivateData
77 : */
78 : typedef struct
79 : {
80 : List *initial_rels; /* the base relations we are joining */
81 : pg_prng_state random_state; /* PRNG state */
82 : } GeqoPrivateData;
83 :
84 : static inline GeqoPrivateData *
68 rhaas@postgresql.org 85 GNC 7443 : GetGeqoPrivateData(PlannerInfo *root)
86 : {
87 : /* headers must be C++-compliant, so the cast is required here */
88 7443 : return (GeqoPrivateData *)
89 7443 : GetPlannerInfoExtensionState(root, Geqo_planner_extension_id);
90 : }
91 :
92 : /* routines in geqo_main.c */
93 : extern RelOptInfo *geqo(PlannerInfo *root,
94 : int number_of_rels, List *initial_rels);
95 :
96 : /* routines in geqo_eval.c */
97 : extern Cost geqo_eval(PlannerInfo *root, Gene *tour, int num_gene);
98 : extern RelOptInfo *gimme_tree(PlannerInfo *root, Gene *tour, int num_gene);
99 :
100 : #endif /* GEQO_H */
|