diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-02-08 20:20:55 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-02-08 20:20:55 +0000 |
commit | c15a4c2aef3ca78a530778b735d43aa04d103ea6 (patch) | |
tree | 3106de03d9476a891c6e85cbf5dd477c8661f087 /src/backend/parser/parse_clause.c | |
parent | 893678eda7de9db57beccfd2755836c1bea39112 (diff) | |
download | postgresql-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.c | 14 |
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"); /* |