diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2001-02-14 21:35:07 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2001-02-14 21:35:07 +0000 |
commit | 4a66f9dd54694eb4d7ecce2c7e0f0c50dfde88cd (patch) | |
tree | 8810441569d5cf2e29f2a5c2b67ceb91d74deb2d /src/include/parser/parse_node.h | |
parent | d42d31e78e2f9db73edb0b0ed35cafb1c409bdbf (diff) | |
download | postgresql-4a66f9dd54694eb4d7ecce2c7e0f0c50dfde88cd.tar.gz postgresql-4a66f9dd54694eb4d7ecce2c7e0f0c50dfde88cd.zip |
Change scoping of table and join refnames to conform to SQL92: a JOIN
clause with an alias is a <subquery> and therefore hides table references
appearing within it, according to the spec. This is the same as the
preliminary patch I posted to pgsql-patches yesterday, plus some really
grotty code in ruleutils.c to reverse-list a query tree with the correct
alias name depending on context. I'd rather not have done that, but unless
we want to force another initdb for 7.1, there's no other way for now.
Diffstat (limited to 'src/include/parser/parse_node.h')
-rw-r--r-- | src/include/parser/parse_node.h | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/include/parser/parse_node.h b/src/include/parser/parse_node.h index d8fcd6ee907..bb0229abcd1 100644 --- a/src/include/parser/parse_node.h +++ b/src/include/parser/parse_node.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: parse_node.h,v 1.24 2001/01/24 19:43:27 momjian Exp $ + * $Id: parse_node.h,v 1.25 2001/02/14 21:35:05 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -18,6 +18,20 @@ /* * State information used during parse analysis + * + * p_rtable: list of RTEs that will become the rangetable of the query. + * Note that neither relname nor refname of these entries are necessarily + * unique; searching the rtable by name is a bad idea. + * + * p_joinlist: list of join items (RangeTblRef and JoinExpr nodes) that + * will become the fromlist of the query's top-level FromExpr node. + * + * p_namespace: list of join items that represents the current namespace + * for table and column lookup. This may be just a subset of the rtable + + * joinlist, and/or may contain entries that are not yet added to the main + * joinlist. Note that an RTE that is present in p_namespace, but does not + * have its inFromCl flag set, is accessible only with an explicit qualifier; + * lookups of unqualified column names should ignore it. */ typedef struct ParseState { @@ -25,6 +39,7 @@ typedef struct ParseState List *p_rtable; /* range table so far */ List *p_joinlist; /* join items so far (will become * FromExpr node's fromlist) */ + List *p_namespace; /* current lookup namespace (join items) */ int p_last_resno; /* last targetlist resno assigned */ List *p_forUpdate; /* FOR UPDATE clause, if any (see gram.y) */ bool p_hasAggs; @@ -42,6 +57,7 @@ extern Node *make_operand(char *opname, Node *tree, extern Var *make_var(ParseState *pstate, RangeTblEntry *rte, int attrno); extern ArrayRef *transformArraySubscripts(ParseState *pstate, Node *arrayBase, + Oid arrayType, List *indirection, bool forceSlice, Node *assignFrom); |