transition-tsr-v7a.diff

text/plain

Filename: transition-tsr-v7a.diff
Type: text/plain
Part: 0
Message: Re: delta relations in AFTER triggers

Patch

Format: unified
File+
src/backend/optimizer/path/costsize.c 1 1
src/backend/parser/parse_relation.c 6 1
src/include/parser/parse_node.h 1 1
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c
index 53bfd4b..2da841e 100644
--- a/src/backend/optimizer/path/costsize.c
+++ b/src/backend/optimizer/path/costsize.c
@@ -4512,7 +4512,7 @@ set_cte_size_estimates(PlannerInfo *root, RelOptInfo *rel, double cte_rows)
 void
 set_tuplestore_size_estimates(PlannerInfo *root, RelOptInfo *rel)
 {
-	RangeTblEntry *rte;
+	RangeTblEntry *rte PG_USED_FOR_ASSERTS_ONLY;
 
 	/* Should only be applied to base relations that are tuplestore references */
 	Assert(rel->relid > 0);
diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c
index 7c943c3..0b45139 100644
--- a/src/backend/parser/parse_relation.c
+++ b/src/backend/parser/parse_relation.c
@@ -1160,12 +1160,17 @@ parserOpenTable(ParseState *pstate, const RangeVar *relation, int lockmode)
 		else
 		{
 			/*
+			 * An unqualified name might be a tuplestore relation name.
+			 */
+			if (get_visible_tuplestore_metadata(pstate->p_tsrcache, relation->relname))
+				rel = NULL;
+			/*
 			 * An unqualified name might have been meant as a reference to
 			 * some not-yet-in-scope CTE.  The bare "does not exist" message
 			 * has proven remarkably unhelpful for figuring out such problems,
 			 * so we take pains to offer a specific hint.
 			 */
-			if (isFutureCTE(pstate, relation->relname))
+			else if (isFutureCTE(pstate, relation->relname))
 				ereport(ERROR,
 						(errcode(ERRCODE_UNDEFINED_TABLE),
 						 errmsg("relation \"%s\" does not exist",
diff --git a/src/include/parser/parse_node.h b/src/include/parser/parse_node.h
index a9f5d6e..57906c0 100644
--- a/src/include/parser/parse_node.h
+++ b/src/include/parser/parse_node.h
@@ -158,7 +158,7 @@ struct ParseState
 	bool		p_locked_from_parent;
 	Relation	p_target_relation;
 	RangeTblEntry *p_target_rangetblentry;
-	Tsrcache	*p_tsrcache;	/* visible named tuplestore relations */
+	Tsrcache   *p_tsrcache;	/* visible named tuplestore relations */
 
 	/*
 	 * Optional hook functions for parser callbacks.  These are null unless