diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 69fd5b29805..93f1e2c4ebc 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -3003,7 +3003,7 @@ _outQuery(StringInfo str, const Query *node) WRITE_NODE_FIELD(rowMarks); WRITE_NODE_FIELD(setOperations); WRITE_NODE_FIELD(constraintDeps); - /* withCheckOptions intentionally omitted, see comment in parsenodes.h */ + WRITE_NODE_FIELD(withCheckOptions); WRITE_LOCATION_FIELD(stmt_location); WRITE_LOCATION_FIELD(stmt_len); } diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index ca5c21aac1e..81f568b3ee1 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -269,7 +269,7 @@ _readQuery(void) READ_NODE_FIELD(rowMarks); READ_NODE_FIELD(setOperations); READ_NODE_FIELD(constraintDeps); - /* withCheckOptions intentionally omitted, see comment in parsenodes.h */ + READ_NODE_FIELD(withCheckOptions); READ_LOCATION_FIELD(stmt_location); READ_LOCATION_FIELD(stmt_len); diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index c3f46a26c3a..688b3a1c396 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -586,10 +586,13 @@ inline_set_returning_functions(PlannerInfo *root) funcquery = inline_set_returning_function(root, rte); if (funcquery) { - /* Successful expansion, replace the rtable entry */ + /* Successful expansion, convert the RTE to a subquery */ rte->rtekind = RTE_SUBQUERY; rte->subquery = funcquery; + rte->security_barrier = false; + /* Clear fields that should not be set in a subquery RTE */ rte->functions = NIL; + rte->funcordinality = false; } } } diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index c601b6d40d1..c0206009559 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -1116,7 +1116,7 @@ BuildOnConflictExcludedTargetlist(Relation targetrel, * the Const claims to be. */ var = (Var *) makeNullConst(INT4OID, -1, InvalidOid); - name = ""; + name = NULL; } else { diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index d8305696418..327e5c33d7a 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -1582,15 +1582,18 @@ ApplyRetrieveRule(Query *parsetree, rule_action = fireRIRrules(rule_action, activeRIRs); /* - * Now, plug the view query in as a subselect, replacing the relation's - * original RTE. + * Now, plug the view query in as a subselect, converting the relation's + * original RTE to a subquery RTE. */ rte = rt_fetch(rt_index, parsetree->rtable); rte->rtekind = RTE_SUBQUERY; - rte->relid = InvalidOid; - rte->security_barrier = RelationIsSecurityView(relation); rte->subquery = rule_action; + rte->security_barrier = RelationIsSecurityView(relation); + /* Clear fields that should not be set in a subquery RTE */ + rte->relid = InvalidOid; + rte->relkind = 0; + rte->tablesample = NULL; rte->inh = false; /* must not be set for a subquery */ /* diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index f898a2225fe..30bf93f7c30 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 201809052 +#define CATALOG_VERSION_NO 201809181 #endif diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 9cd45a388a0..62209a8f102 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -168,9 +168,8 @@ typedef struct Query List *constraintDeps; /* a list of pg_constraint OIDs that the query * depends on to be semantically valid */ - List *withCheckOptions; /* a list of WithCheckOption's, which are - * only added during rewrite and therefore - * are not written out as part of Query. */ + List *withCheckOptions; /* a list of WithCheckOption's (added + * during rewrite) */ /* * The following two fields identify the portion of the source text string