summaryrefslogtreecommitdiff
path: root/src/backend/optimizer/util/tlist.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer/util/tlist.c')
-rw-r--r--src/backend/optimizer/util/tlist.c257
1 files changed, 0 insertions, 257 deletions
diff --git a/src/backend/optimizer/util/tlist.c b/src/backend/optimizer/util/tlist.c
deleted file mode 100644
index fa8c89862f4..00000000000
--- a/src/backend/optimizer/util/tlist.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * tlist.c
- * Target list manipulation routines
- *
- * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- *
- * IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/util/tlist.c,v 1.52 2002/06/20 20:29:31 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-#include "postgres.h"
-
-#include "nodes/makefuncs.h"
-#include "optimizer/tlist.h"
-#include "optimizer/var.h"
-
-
-/*****************************************************************************
- * ---------- RELATION node target list routines ----------
- *****************************************************************************/
-
-/*
- * tlistentry_member
- * Finds the (first) member of the given tlist whose expression is
- * equal() to the given expression. Result is NULL if no such member.
- */
-TargetEntry *
-tlistentry_member(Node *node, List *targetlist)
-{
- List *temp;
-
- foreach(temp, targetlist)
- {
- TargetEntry *tlentry = (TargetEntry *) lfirst(temp);
-
- if (equal(node, tlentry->expr))
- return tlentry;
- }
- return NULL;
-}
-
-#ifdef NOT_USED
-/*
- * matching_tlist_expr
- * Same as tlistentry_member(), except returns the tlist expression
- * rather than its parent TargetEntry node.
- */
-Node *
-matching_tlist_expr(Node *node, List *targetlist)
-{
- TargetEntry *tlentry;
-
- tlentry = tlistentry_member(node, targetlist);
- if (tlentry)
- return tlentry->expr;
-
- return (Node *) NULL;
-}
-#endif
-
-/*
- * tlist_member
- * Same as tlistentry_member(), except returns the Resdom node
- * rather than its parent TargetEntry node.
- */
-Resdom *
-tlist_member(Node *node, List *targetlist)
-{
- TargetEntry *tlentry;
-
- tlentry = tlistentry_member(node, targetlist);
- if (tlentry)
- return tlentry->resdom;
-
- return (Resdom *) NULL;
-}
-
-/*
- * add_var_to_tlist
- * Creates a targetlist entry corresponding to the supplied var node
- * 'var' and adds the new targetlist entry to the targetlist field of
- * 'rel'. No entry is created if 'var' is already in the tlist.
- */
-void
-add_var_to_tlist(RelOptInfo *rel, Var *var)
-{
- if (!tlistentry_member((Node *) var, rel->targetlist))
- {
- /* XXX is copyObject necessary here? */
- rel->targetlist = lappend(rel->targetlist,
- create_tl_element((Var *) copyObject(var),
- length(rel->targetlist) + 1));
- }
-}
-
-/*
- * create_tl_element
- * Creates a target list entry node and its associated (resdom var) pair
- * with its resdom number equal to 'resdomno'.
- */
-TargetEntry *
-create_tl_element(Var *var, int resdomno)
-{
- return makeTargetEntry(makeResdom(resdomno,
- var->vartype,
- var->vartypmod,
- NULL,
- false),
- (Node *) var);
-}
-
-/*****************************************************************************
- * ---------- GENERAL target list routines ----------
- *****************************************************************************/
-
-/*
- * new_unsorted_tlist
- * Creates a copy of a target list by creating new resdom nodes
- * without sort information.
- *
- * 'targetlist' is the target list to be copied.
- *
- * Returns the resulting target list.
- *
- */
-List *
-new_unsorted_tlist(List *targetlist)
-{
- List *new_targetlist = (List *) copyObject((Node *) targetlist);
- List *x;
-
- foreach(x, new_targetlist)
- {
- TargetEntry *tle = (TargetEntry *) lfirst(x);
-
- tle->resdom->reskey = 0;
- tle->resdom->reskeyop = (Oid) 0;
- }
- return new_targetlist;
-}
-
-/*
- * flatten_tlist
- * Create a target list that only contains unique variables.
- *
- * Note that Vars with varlevelsup > 0 are not included in the output
- * tlist. We expect that those will eventually be replaced with Params,
- * but that probably has not happened at the time this routine is called.
- *
- * 'tlist' is the current target list
- *
- * Returns the "flattened" new target list.
- *
- * The result is entirely new structure sharing no nodes with the original.
- * Copying the Var nodes is probably overkill, but be safe for now.
- */
-List *
-flatten_tlist(List *tlist)
-{
- List *vlist = pull_var_clause((Node *) tlist, false);
- List *new_tlist;
-
- new_tlist = add_to_flat_tlist(NIL, vlist);
- freeList(vlist);
- return new_tlist;
-}
-
-/*
- * add_to_flat_tlist
- * Add more vars to a flattened tlist (if they're not already in it)
- *
- * 'tlist' is the flattened tlist
- * 'vars' is a list of var nodes
- *
- * Returns the extended tlist.
- */
-List *
-add_to_flat_tlist(List *tlist, List *vars)
-{
- int next_resdomno = length(tlist) + 1;
- List *v;
-
- foreach(v, vars)
- {
- Var *var = lfirst(v);
-
- if (!tlistentry_member((Node *) var, tlist))
- {
- Resdom *r;
-
- r = makeResdom(next_resdomno++,
- var->vartype,
- var->vartypmod,
- NULL,
- false);
- tlist = lappend(tlist,
- makeTargetEntry(r, copyObject(var)));
- }
- }
- return tlist;
-}
-
-Var *
-get_expr(TargetEntry *tle)
-{
- Assert(tle != NULL);
- Assert(tle->expr != NULL);
-
- return (Var *) tle->expr;
-}
-
-/*
- * get_sortgroupclause_tle
- * Find the targetlist entry matching the given SortClause
- * (or GroupClause) by ressortgroupref, and return it.
- *
- * Because GroupClause is typedef'd as SortClause, either kind of
- * node can be passed without casting.
- */
-TargetEntry *
-get_sortgroupclause_tle(SortClause *sortClause,
- List *targetList)
-{
- Index refnumber = sortClause->tleSortGroupRef;
- List *l;
-
- foreach(l, targetList)
- {
- TargetEntry *tle = (TargetEntry *) lfirst(l);
-
- if (tle->resdom->ressortgroupref == refnumber)
- return tle;
- }
-
- elog(ERROR, "get_sortgroupclause_tle: ORDER/GROUP BY expression not found in targetlist");
- return NULL; /* keep compiler quiet */
-}
-
-/*
- * get_sortgroupclause_expr
- * Find the targetlist entry matching the given SortClause
- * (or GroupClause) by ressortgroupref, and return its expression.
- *
- * Because GroupClause is typedef'd as SortClause, either kind of
- * node can be passed without casting.
- */
-Node *
-get_sortgroupclause_expr(SortClause *sortClause, List *targetList)
-{
- TargetEntry *tle = get_sortgroupclause_tle(sortClause, targetList);
-
- return tle->expr;
-}