summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rw-r--r--src/include/nodes/primnodes.h23
-rw-r--r--src/include/parser/parse_clause.h9
-rw-r--r--src/include/parser/parse_node.h18
-rw-r--r--src/include/parser/parse_relation.h13
-rw-r--r--src/include/utils/builtins.h5
5 files changed, 42 insertions, 26 deletions
diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h
index 2ca40e8ceca..f5cd6ea461d 100644
--- a/src/include/nodes/primnodes.h
+++ b/src/include/nodes/primnodes.h
@@ -10,7 +10,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: primnodes.h,v 1.51 2001/01/24 19:43:26 momjian Exp $
+ * $Id: primnodes.h,v 1.52 2001/02/14 21:35:05 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -29,7 +29,7 @@ typedef struct FunctionCache *FunctionCachePtr;
* ----------------------------------------------------------------
*/
-/*
+/*--------------------
* Resdom (Result Domain)
*
* Notes:
@@ -50,7 +50,7 @@ typedef struct FunctionCache *FunctionCachePtr;
*
* Both reskey and reskeyop are typically zero during parse/plan stages.
* The executor does not pay any attention to ressortgroupref.
- *
+ *--------------------
*/
typedef struct Resdom
{
@@ -129,7 +129,6 @@ typedef struct Expr
* list. But varnoold/varoattno continue to hold the original values.
* The code doesn't really need varnoold/varoattno, but they are very useful
* for debugging and interpreting completed plans, so we keep them around.
- * ----------------
*/
#define INNER 65000
#define OUTER 65001
@@ -153,7 +152,7 @@ typedef struct Var
AttrNumber varoattno; /* original value of varattno */
} Var;
-/*
+/*--------------------
* Oper
*
* NOTE: in the good old days 'opno' used to be both (or either, or
@@ -169,7 +168,7 @@ typedef struct Var
* Note also that opid is not necessarily filled in immediately on creation
* of the node. The planner makes sure it is valid before passing the node
* tree to the executor, but during parsing/planning opid is typically 0.
- *
+ *--------------------
*/
typedef struct Oper
{
@@ -499,10 +498,14 @@ typedef struct RangeTblRef
* are not equivalent to ON() since they also affect the output column list.
*
* alias is an Attr node representing the AS alias-clause attached to the
- * join expression, or NULL if no clause. During parse analysis, colnames
- * is filled with a list of String nodes giving the column names (real or
- * alias) of the output of the join, and colvars is filled with a list of
- * expressions that can be copied to reference the output columns.
+ * join expression, or NULL if no clause. NB: presence or absence of the
+ * alias has a critical impact on semantics, because a join with an alias
+ * restricts visibility of the tables/columns inside it.
+ *
+ * During parse analysis, colnames is filled with a list of String nodes
+ * giving the column names (real or alias) of the output of the join,
+ * and colvars is filled with a list of expressions that can be copied to
+ * reference the output columns.
*----------
*/
typedef struct JoinExpr
diff --git a/src/include/parser/parse_clause.h b/src/include/parser/parse_clause.h
index 8f760ca38b3..31d5542efc2 100644
--- a/src/include/parser/parse_clause.h
+++ b/src/include/parser/parse_clause.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: parse_clause.h,v 1.22 2001/01/24 19:43:27 momjian Exp $
+ * $Id: parse_clause.h,v 1.23 2001/02/14 21:35:05 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -16,10 +16,9 @@
#include "parser/parse_node.h"
-extern void makeRangeTable(ParseState *pstate, List *frmList);
-extern void lockTargetTable(ParseState *pstate, char *relname);
-extern void setTargetTable(ParseState *pstate, char *relname,
- bool inh, bool inJoinSet);
+extern void transformFromClause(ParseState *pstate, List *frmList);
+extern int setTargetTable(ParseState *pstate, char *relname,
+ bool inh, bool alsoSource);
extern bool interpretInhOption(InhOption inhOpt);
extern Node *transformWhereClause(ParseState *pstate, Node *where);
extern List *transformGroupClause(ParseState *pstate, List *grouplist,
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);
diff --git a/src/include/parser/parse_relation.h b/src/include/parser/parse_relation.h
index bfdf7e8c2af..274de9e8895 100644
--- a/src/include/parser/parse_relation.h
+++ b/src/include/parser/parse_relation.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: parse_relation.h,v 1.21 2001/01/24 19:43:27 momjian Exp $
+ * $Id: parse_relation.h,v 1.22 2001/02/14 21:35:06 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -19,15 +19,11 @@
extern Node *refnameRangeOrJoinEntry(ParseState *pstate,
char *refname,
int *sublevels_up);
-extern RangeTblEntry *refnameRangeTableEntry(ParseState *pstate,
- char *refname);
-extern int refnameRangeTablePosn(ParseState *pstate,
- char *refname,
- int *sublevels_up);
+extern void checkNameSpaceConflicts(ParseState *pstate, Node *namespace1,
+ Node *namespace2);
extern int RTERangeTablePosn(ParseState *pstate,
RangeTblEntry *rte,
int *sublevels_up);
-extern JoinExpr *scanJoinListForRefname(Node *jtnode, char *refname);
extern Node *colnameToVar(ParseState *pstate, char *colname);
extern Node *qualifiedNameToVar(ParseState *pstate, char *refname,
char *colname, bool implicitRTEOK);
@@ -40,7 +36,8 @@ extern RangeTblEntry *addRangeTableEntryForSubquery(ParseState *pstate,
Query *subquery,
Attr *alias,
bool inFromCl);
-extern void addRTEtoJoinList(ParseState *pstate, RangeTblEntry *rte);
+extern void addRTEtoQuery(ParseState *pstate, RangeTblEntry *rte,
+ bool addToJoinList, bool addToNameSpace);
extern RangeTblEntry *addImplicitRTE(ParseState *pstate, char *relname);
extern void expandRTE(ParseState *pstate, RangeTblEntry *rte,
List **colnames, List **colvars);
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h
index 28cb478189a..dcc923a36de 100644
--- a/src/include/utils/builtins.h
+++ b/src/include/utils/builtins.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: builtins.h,v 1.146 2001/01/24 19:43:28 momjian Exp $
+ * $Id: builtins.h,v 1.147 2001/02/14 21:35:06 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -325,8 +325,9 @@ extern Datum pg_get_ruledef(PG_FUNCTION_ARGS);
extern Datum pg_get_viewdef(PG_FUNCTION_ARGS);
extern Datum pg_get_indexdef(PG_FUNCTION_ARGS);
extern Datum pg_get_userbyid(PG_FUNCTION_ARGS);
-extern char *deparse_expression(Node *expr, List *rangetables,
+extern char *deparse_expression(Node *expr, List *dpcontext,
bool forceprefix);
+extern List *deparse_context_for(char *relname, Oid relid);
/* selfuncs.c */
extern Datum eqsel(PG_FUNCTION_ARGS);