summaryrefslogtreecommitdiff
path: root/src/backend/optimizer/geqo/geqo_eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer/geqo/geqo_eval.c')
-rw-r--r--src/backend/optimizer/geqo/geqo_eval.c155
1 files changed, 0 insertions, 155 deletions
diff --git a/src/backend/optimizer/geqo/geqo_eval.c b/src/backend/optimizer/geqo/geqo_eval.c
deleted file mode 100644
index 3e915747da9..00000000000
--- a/src/backend/optimizer/geqo/geqo_eval.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/*------------------------------------------------------------------------
- *
- * geqo_eval.c
- * Routines to evaluate query trees
- *
- * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * $Id: geqo_eval.c,v 1.59 2002/06/20 20:29:29 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-
-/* contributed by:
- =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
- * Martin Utesch * Institute of Automatic Control *
- = = University of Mining and Technology =
- * utesch@aut.tu-freiberg.de * Freiberg, Germany *
- =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
- */
-
-#include "postgres.h"
-
-#include <math.h>
-#include <limits.h>
-
-#include "optimizer/geqo.h"
-#include "optimizer/pathnode.h"
-#include "optimizer/paths.h"
-#include "utils/memutils.h"
-
-
-/*
- * geqo_eval
- *
- * Returns cost of a query tree as an individual of the population.
- */
-Cost
-geqo_eval(Query *root, List *initial_rels, Gene *tour, int num_gene)
-{
- MemoryContext mycontext;
- MemoryContext oldcxt;
- RelOptInfo *joinrel;
- Cost fitness;
- List *savelist;
-
- /*
- * Create a private memory context that will hold all temp storage
- * allocated inside gimme_tree().
- *
- * Since geqo_eval() will be called many times, we can't afford to let
- * all that memory go unreclaimed until end of statement. Note we
- * make the temp context a child of TransactionCommandContext, so that
- * it will be freed even if we abort via elog(ERROR).
- */
- mycontext = AllocSetContextCreate(TransactionCommandContext,
- "GEQO",
- ALLOCSET_DEFAULT_MINSIZE,
- ALLOCSET_DEFAULT_INITSIZE,
- ALLOCSET_DEFAULT_MAXSIZE);
- oldcxt = MemoryContextSwitchTo(mycontext);
-
- /* preserve root->join_rel_list, which gimme_tree changes */
- savelist = root->join_rel_list;
-
- /* construct the best path for the given combination of relations */
- joinrel = gimme_tree(root, initial_rels, tour, num_gene, 0, NULL);
-
- /*
- * compute fitness
- *
- * XXX geqo does not currently support optimization for partial result
- * retrieval --- how to fix?
- */
- fitness = joinrel->cheapest_total_path->total_cost;
-
- /* restore join_rel_list */
- root->join_rel_list = savelist;
-
- /* release all the memory acquired within gimme_tree */
- MemoryContextSwitchTo(oldcxt);
- MemoryContextDelete(mycontext);
-
- return fitness;
-}
-
-/*
- * gimme_tree
- * this routine considers only LEFT-SIDED TREES!
- *
- * 'root' is the Query
- * 'initial_rels' is the list of initial relations (FROM-list items)
- * 'tour' is the proposed join order, of length 'num_gene'
- * 'rel_count' is number of initial_rels items already joined (initially 0)
- * 'old_rel' is the preceding join (initially NULL)
- *
- * Returns a new join relation incorporating all joins in a left-sided tree.
- */
-RelOptInfo *
-gimme_tree(Query *root, List *initial_rels,
- Gene *tour, int num_gene,
- int rel_count, RelOptInfo *old_rel)
-{
- RelOptInfo *inner_rel; /* current relation */
- int init_rel_index;
-
- if (rel_count < num_gene)
- {
- /* tree not yet finished */
- init_rel_index = (int) tour[rel_count];
-
- inner_rel = (RelOptInfo *) nth(init_rel_index - 1, initial_rels);
-
- if (rel_count == 0)
- {
- /* processing first join with init_rel_index = (int) tour[0] */
- rel_count++;
- return gimme_tree(root, initial_rels,
- tour, num_gene,
- rel_count, inner_rel);
- }
- else
- {
- /* tree main part */
- List *acceptable_rels = makeList1(inner_rel);
- List *new_rels;
- RelOptInfo *new_rel;
-
- new_rels = make_rels_by_clause_joins(root, old_rel,
- acceptable_rels);
- /* Shouldn't get more than one result */
- Assert(length(new_rels) <= 1);
- if (new_rels == NIL)
- {
- new_rels = make_rels_by_clauseless_joins(root, old_rel,
- acceptable_rels);
- Assert(length(new_rels) <= 1);
- if (new_rels == NIL)
- elog(ERROR, "gimme_tree: failed to construct join rel");
- }
- new_rel = (RelOptInfo *) lfirst(new_rels);
-
- /* Find and save the cheapest paths for this rel */
- set_cheapest(new_rel);
-
- /* and recurse... */
- rel_count++;
- return gimme_tree(root, initial_rels,
- tour, num_gene,
- rel_count, new_rel);
- }
- }
-
- return old_rel; /* tree finished ... */
-}