aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/path/mergeutils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer/path/mergeutils.c')
-rw-r--r--src/backend/optimizer/path/mergeutils.c131
1 files changed, 0 insertions, 131 deletions
diff --git a/src/backend/optimizer/path/mergeutils.c b/src/backend/optimizer/path/mergeutils.c
deleted file mode 100644
index 1cc19693f8d..00000000000
--- a/src/backend/optimizer/path/mergeutils.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * mergeutils.c
- * Utilities for finding applicable merge clauses and pathkeys
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- *
- * IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/mergeutils.c,v 1.24 1999/07/16 04:59:15 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-#include "postgres.h"
-
-
-#include "optimizer/clauses.h"
-#include "optimizer/ordering.h"
-#include "optimizer/paths.h"
-
-/*
- * group_clauses_by_order
- * If a join clause node in 'restrictinfo_list' is mergejoinable, store
- * it within a mergeinfo node containing other clause nodes with the same
- * mergejoin ordering.
- *
- * XXX This is completely braindead: there is no reason anymore to segregate
- * mergejoin clauses by join operator, since the executor can handle mergejoin
- * clause sets with different operators in them. Instead, we ought to be
- * building a MergeInfo for each potentially useful ordering of the input
- * relations. But right now the optimizer's internal data structures do not
- * support that (MergeInfo can only store one MergeOrder for a set of clauses).
- * Something to fix next time...
- *
- * 'restrictinfo_list' is the list of restrictinfo nodes
- * 'inner_relids' is the list of relids in the inner join relation
- * (used to determine whether a join var is inner or outer)
- *
- * Returns the new list of mergeinfo nodes.
- *
- */
-List *
-group_clauses_by_order(List *restrictinfo_list,
- Relids inner_relids)
-{
- List *mergeinfo_list = NIL;
- List *xrestrictinfo;
-
- foreach(xrestrictinfo, restrictinfo_list)
- {
- RestrictInfo *restrictinfo = (RestrictInfo *) lfirst(xrestrictinfo);
- MergeOrder *merge_ordering = restrictinfo->mergejoinorder;
-
- if (merge_ordering)
- {
-
- /*
- * Create a new mergeinfo node and add it to 'mergeinfo_list'
- * if one does not yet exist for this merge ordering.
- */
- Expr *clause = restrictinfo->clause;
- Var *leftop = get_leftop(clause);
- Var *rightop = get_rightop(clause);
- PathOrder *pathorder;
- MergeInfo *xmergeinfo;
- JoinKey *jmkeys;
-
- pathorder = makeNode(PathOrder);
- pathorder->ordtype = MERGE_ORDER;
- pathorder->ord.merge = merge_ordering;
- xmergeinfo = match_order_mergeinfo(pathorder, mergeinfo_list);
- jmkeys = makeNode(JoinKey);
- if (intMember(leftop->varno, inner_relids))
- {
- jmkeys->outer = rightop;
- jmkeys->inner = leftop;
- }
- else
- {
- jmkeys->outer = leftop;
- jmkeys->inner = rightop;
- }
-
- if (xmergeinfo == NULL)
- {
- xmergeinfo = makeNode(MergeInfo);
- xmergeinfo->m_ordering = merge_ordering;
- mergeinfo_list = lcons(xmergeinfo, mergeinfo_list);
- }
-
- xmergeinfo->jmethod.clauses = lcons(clause,
- xmergeinfo->jmethod.clauses);
- xmergeinfo->jmethod.jmkeys = lcons(jmkeys,
- xmergeinfo->jmethod.jmkeys);
- }
- }
- return mergeinfo_list;
-}
-
-
-/*
- * match_order_mergeinfo
- * Searches the list 'mergeinfo_list' for a mergeinfo node whose order
- * field equals 'ordering'.
- *
- * Returns the node if it exists.
- *
- */
-MergeInfo *
-match_order_mergeinfo(PathOrder *ordering, List *mergeinfo_list)
-{
- MergeOrder *xmergeorder;
- List *xmergeinfo = NIL;
-
- foreach(xmergeinfo, mergeinfo_list)
- {
- MergeInfo *mergeinfo = (MergeInfo *) lfirst(xmergeinfo);
-
- xmergeorder = mergeinfo->m_ordering;
-
- if ((ordering->ordtype == MERGE_ORDER &&
- equal_merge_ordering(ordering->ord.merge, xmergeorder)) ||
- (ordering->ordtype == SORTOP_ORDER &&
- equal_path_merge_ordering(ordering->ord.sortop, xmergeorder)))
- {
-
- return mergeinfo;
- }
- }
- return (MergeInfo *) NIL;
-}