From fc5894bf779e6d0b96dcb8d5b8fb22994de48f92 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed, 26 Oct 2005 19:21:55 +0000
Subject: [PATCH] Adjust parser so that POSTQUEL-style implicit RTEs are stored
 with inFromCl true, meaning that they will list out as explicit RTEs if they
 are in a view or rule.  Update comments about inFromCl to reflect the way
 it's now actually used.  Per recent discussion.

---
 doc/src/sgml/release.sgml           | 14 ++++++++++++--
 src/backend/parser/parse_relation.c | 10 ++++++++--
 src/include/nodes/parsenodes.h      | 16 +++++++---------
 3 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/doc/src/sgml/release.sgml b/doc/src/sgml/release.sgml
index 0a5a1098efc..023c9258d29 100644
--- a/doc/src/sgml/release.sgml
+++ b/doc/src/sgml/release.sgml
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.393 2005/10/25 17:54:30 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.394 2005/10/26 19:21:53 tgl Exp $
 
 Typical markup:
 
@@ -268,9 +268,19 @@ pg_[A-Za-z0-9_]                 <application>
       </para>
       <para>
        By default, we now generate an error if a table is used in a query
-       without a <command>FROM</> reference.  The old behavior is still
+       without a <literal>FROM</> reference.  The old behavior is still
        available, but the parameter must be set to 'true' to obtain it.
       </para>
+
+      <para>
+       It may be necessary to set <varname>add_missing_from</> to true
+       in order to load an existing dump file, if the dump contains any
+       views or rules created using the implicit-<literal>FROM</> syntax.
+       This should be a one-time annoyance, because
+       <productname>PostgreSQL</productname> 8.1 will convert
+       such views and rules to standard explicit-<literal>FROM</> syntax.
+       Subsequent dumps will therefore not have the problem.
+      </para>
      </listitem>
 
      <listitem>
diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c
index 61a0549ee0b..efa9b49931c 100644
--- a/src/backend/parser/parse_relation.c
+++ b/src/backend/parser/parse_relation.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/parser/parse_relation.c,v 1.115 2005/10/15 02:49:22 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/parser/parse_relation.c,v 1.116 2005/10/26 19:21:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1005,7 +1005,13 @@ addImplicitRTE(ParseState *pstate, RangeVar *relation)
 {
 	RangeTblEntry *rte;
 
-	rte = addRangeTableEntry(pstate, relation, NULL, false, false);
+	/*
+	 * Note that we set inFromCl true, so that the RTE will be listed
+	 * explicitly if the parsetree is ever decompiled by ruleutils.c.
+	 * This provides a migration path for views/rules that were originally
+	 * written with implicit-RTE syntax.
+	 */
+	rte = addRangeTableEntry(pstate, relation, NULL, false, true);
 	/* Add to joinlist and relnamespace, but not varnamespace */
 	addRTEtoQuery(pstate, rte, true, true, false);
 	warnAutoRange(pstate, relation);
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index 766076b7d6b..5adb79ef6bc 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.291 2005/10/15 02:49:45 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.292 2005/10/26 19:21:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -476,14 +476,12 @@ typedef struct LockingClause
  *	  RTEs other than RTE_RELATION entries.
  *
  *	  inFromCl marks those range variables that are listed in the FROM clause.
- *	  In SQL, the query can only refer to range variables listed in the
- *	  FROM clause, but POSTQUEL allows you to refer to tables not listed,
- *	  in which case a range table entry will be generated.	We still support
- *	  this POSTQUEL feature, although there is some doubt whether it's
- *	  convenient or merely confusing.  The flag is not actually needed
- *	  anymore during parsing, since the parser uses a separate "namespace"
- *	  data structure to control visibility, but it is needed by ruleutils.c
- *	  to determine whether RTEs should be included in decompiled queries.
+ *	  It's false for RTEs that are added to a query behind the scenes, such
+ *	  as the NEW and OLD variables for a rule, or the subqueries of a UNION.
+ *	  This flag is not used anymore during parsing, since the parser now uses
+ *	  a separate "namespace" data structure to control visibility, but it is
+ *	  needed by ruleutils.c to determine whether RTEs should be shown in
+ *	  decompiled queries.
  *
  *	  requiredPerms and checkAsUser specify run-time access permissions
  *	  checks to be performed at query startup.	The user must have *all*
-- 
GitLab