diff --git a/doc/src/sgml/ref/set.sgml b/doc/src/sgml/ref/set.sgml
index 9627c1f354c..ac3c225267a 100644
--- a/doc/src/sgml/ref/set.sgml
+++ b/doc/src/sgml/ref/set.sgml
@@ -406,7 +406,7 @@ SET TIME ZONE { 'timezone' | LOCAL
This algorithm is on by default, which used GEQO for
- statements of six or more tables.
+ statements of six or more tables and indexes.
(See the chapter on GEQO in the Programmer's Guide
for more information).
@@ -676,6 +676,11 @@ SET TIME ZONE { 'timezone' | LOCAL
--
SET DATESTYLE TO 'ISO';
+
+ --Enable GEQO for queries with 4 or more tables and indexes
+ --
+ SET GEQO ON=4;
+
--Set GEQO to default:
--
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index 8de364a04af..4e5ab10094d 100644
--- a/src/backend/optimizer/path/allpaths.c
+++ b/src/backend/optimizer/path/allpaths.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.23 1998/09/01 04:29:27 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.24 1999/02/02 20:30:05 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -78,7 +78,6 @@ find_paths(Query *root, List *rels)
if (levels_needed <= 1)
{
-
/*
* Unsorted single relation, no more processing is required.
*/
@@ -86,7 +85,6 @@ find_paths(Query *root, List *rels)
}
else
{
-
/*
* this means that joins or sorts are required. set selectivities
* of clauses that have not been set by an index.
@@ -123,7 +121,7 @@ find_rel_paths(Query *root, List *rels)
rel_index_scan_list = find_index_paths(root,
rel,
- find_relation_indices(root, rel),
+ find_relation_indices(root, rel),
rel->clauseinfo,
rel->joininfo);
@@ -182,18 +180,27 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
* genetic query optimizer entry point *
* *
*******************************************/
+ {
+ List *temp;
+ int paths_to_consider = 0;
- if ((_use_geqo_) && length(root->base_rel_list) >= _use_geqo_rels_)
- return lcons(geqo(root), NIL); /* returns *one* RelOptInfo, so
- * lcons it */
+ foreach(temp, outer_rels)
+ {
+ RelOptInfo *rel = (RelOptInfo *) lfirst(temp);
+ paths_to_consider += length(rel->pathlist);
+ }
+ if ((_use_geqo_) && paths_to_consider >= _use_geqo_rels_)
+ /* returns _one_ RelOptInfo, so lcons it */
+ return lcons(geqo(root), NIL);
+ }
+
/*******************************************
* rest will be deprecated in case of GEQO *
*******************************************/
while (--levels_needed)
{
-
/*
* Determine all possible pairs of relations to be joined at this
* level. Determine paths for joining these relation pairs and
@@ -207,7 +214,6 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
prune_joinrels(new_rels);
#if 0
-
/*
* * for each expensive predicate in each path in each distinct
* rel, * consider doing pullup -- JMH
@@ -247,7 +253,6 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed)
if (BushyPlanFlag)
{
-
/*
* prune rels that have been completely incorporated into new
* join rels
diff --git a/src/backend/parser/gram.c b/src/backend/parser/gram.c
index 8ae45f764fe..2081b741f9e 100644
--- a/src/backend/parser/gram.c
+++ b/src/backend/parser/gram.c
@@ -240,7 +240,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.66 1999/02/02 03:44:34 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.67 1999/02/02 20:30:07 momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -11450,11 +11450,17 @@ static Node *makeIndexable(char *opname, Node *lexpr, Node *rexpr)
least->val.val.str = match_least;
most->val.type = T_String;
most->val.val.str = match_most;
+#ifdef USE_LOCALE
+ result = makeA_Expr(AND, NULL,
+ makeA_Expr(OP, "~", lexpr, rexpr),
+ makeA_Expr(OP, ">=", lexpr, (Node *)least));
+#else
result = makeA_Expr(AND, NULL,
makeA_Expr(OP, "~", lexpr, rexpr),
makeA_Expr(AND, NULL,
makeA_Expr(OP, ">=", lexpr, (Node *)least),
makeA_Expr(OP, "<=", lexpr, (Node *)most)));
+#endif
}
}
}
@@ -11497,11 +11503,17 @@ static Node *makeIndexable(char *opname, Node *lexpr, Node *rexpr)
least->val.val.str = match_least;
most->val.type = T_String;
most->val.val.str = match_most;
+#ifdef USE_LOCALE
+ result = makeA_Expr(AND, NULL,
+ makeA_Expr(OP, "~~", lexpr, rexpr),
+ makeA_Expr(OP, ">=", lexpr, (Node *)least));
+#else
result = makeA_Expr(AND, NULL,
makeA_Expr(OP, "~~", lexpr, rexpr),
makeA_Expr(AND, NULL,
makeA_Expr(OP, ">=", lexpr, (Node *)least),
makeA_Expr(OP, "<=", lexpr, (Node *)most)));
+#endif
}
}
}
diff --git a/src/man/set.l b/src/man/set.l
index 3ce8896cd47..d3e5f53bf32 100644
--- a/src/man/set.l
+++ b/src/man/set.l
@@ -1,6 +1,6 @@
.\" This is -*-nroff-*-
.\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/set.l,v 1.12 1999/02/02 03:45:33 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/set.l,v 1.13 1999/02/02 20:30:18 momjian Exp $
.TH SET SQL 05/14/97 PostgreSQL PostgreSQL
.SH NAME
set - set run-time parameters for session
@@ -44,7 +44,7 @@ determines the output format for the date and time data types.
.IR GEQO
enables or disables the genetic optimizer algorithm. This algorithm is
.IR on
-by default, which used GEQO for statements of six or more tables.
+by default, which used GEQO for statements of six or more tables and indexes.
Set the
.IR Programmer's Guide
for more information.
@@ -101,7 +101,7 @@ set DateStyle to 'SQL,European'
.PP
.nf
--
---Use GEQO for statements with 4 or more tables
+--Use GEQO for statements with 4 or more tables and indexes
--
set GEQO to 'on=4'
--