aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_clause.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-02-08 20:20:55 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-02-08 20:20:55 +0000
commitc15a4c2aef3ca78a530778b735d43aa04d103ea6 (patch)
tree3106de03d9476a891c6e85cbf5dd477c8661f087 /src/backend/parser/parse_clause.c
parent893678eda7de9db57beccfd2755836c1bea39112 (diff)
downloadpostgresql-c15a4c2aef3ca78a530778b735d43aa04d103ea6.tar.gz
postgresql-c15a4c2aef3ca78a530778b735d43aa04d103ea6.zip
Replace planner's representation of relation sets, per pghackers discussion.
Instead of Lists of integers, we now store variable-length bitmap sets. This should be faster as well as less error-prone.
Diffstat (limited to 'src/backend/parser/parse_clause.c')
-rw-r--r--src/backend/parser/parse_clause.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c
index 5d729216751..93bde2ae472 100644
--- a/src/backend/parser/parse_clause.c
+++ b/src/backend/parser/parse_clause.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.103 2002/12/16 18:39:22 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.104 2003/02/08 20:20:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -301,8 +301,8 @@ transformJoinOnClause(ParseState *pstate, JoinExpr *j,
{
Node *result;
List *save_namespace;
- List *clause_varnos,
- *l;
+ Relids clause_varnos;
+ int varno;
/*
* This is a tad tricky, for two reasons. First, the namespace that
@@ -333,17 +333,15 @@ transformJoinOnClause(ParseState *pstate, JoinExpr *j,
* here.)
*/
clause_varnos = pull_varnos(result);
- foreach(l, clause_varnos)
+ while ((varno = bms_first_member(clause_varnos)) >= 0)
{
- int varno = lfirsti(l);
-
if (!intMember(varno, containedRels))
{
elog(ERROR, "JOIN/ON clause refers to \"%s\", which is not part of JOIN",
rt_fetch(varno, pstate->p_rtable)->eref->aliasname);
}
}
- freeList(clause_varnos);
+ bms_free(clause_varnos);
return result;
}
@@ -490,7 +488,7 @@ transformRangeFunction(ParseState *pstate, RangeFunction *r)
* no local Var references in the transformed expression. (Outer
* references are OK, and are ignored here.)
*/
- if (pull_varnos(funcexpr) != NIL)
+ if (!bms_is_empty(pull_varnos(funcexpr)))
elog(ERROR, "FROM function expression may not refer to other relations of same query level");
/*