From be87143fe90adf8862791aeddd76151e88ce5603 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 19 Jun 2015 11:41:45 -0400
Subject: [PATCH] Fix bogus range_table_mutator() logic for
 RangeTblEntry.tablesample.

Must make a copy of the TableSampleClause node; the previous coding
modified the input data structure in-place.

Petr Jelinek
---
 src/backend/nodes/nodeFuncs.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c
index a2bcca5b75a..b1e3e6e4893 100644
--- a/src/backend/nodes/nodeFuncs.c
+++ b/src/backend/nodes/nodeFuncs.c
@@ -2870,10 +2870,14 @@ range_table_mutator(List *rtable,
 			case RTE_RELATION:
 				if (rte->tablesample)
 				{
-					MUTATE(rte->tablesample->args, rte->tablesample->args,
+					CHECKFLATCOPY(newrte->tablesample, rte->tablesample,
+								  TableSampleClause);
+					MUTATE(newrte->tablesample->args,
+						   newrte->tablesample->args,
 						   List *);
-					MUTATE(rte->tablesample->repeatable,
-						   rte->tablesample->repeatable, Node *);
+					MUTATE(newrte->tablesample->repeatable,
+						   newrte->tablesample->repeatable,
+						   Node *);
 				}
 				break;
 			case RTE_CTE:
-- 
GitLab