From 80f583ffe930b21d6e5c47be4342356e57851a9a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 30 May 2017 11:32:41 -0400 Subject: [PATCH] Fix omission of locations in outfuncs/readfuncs partitioning node support. We could have limped along without this for v10, which was my intention when I annotated the bug in commit 76a3df6e5. But consensus is that it's better to fix it now and take the cost of a post-beta1 initdb (which is needed because these node types are stored in pg_class.relpartbound). Since we're forcing initdb anyway, take the opportunity to make the node type identification strings match the node struct names, instead of being randomly different from them. Discussion: https://postgr.es/m/E1dFBEX-0004wt-8t@gemulon.postgresql.org --- src/backend/nodes/outfuncs.c | 10 +++++----- src/backend/nodes/readfuncs.c | 10 ++++------ src/include/catalog/catversion.h | 2 +- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 9189c8d43f..c348bdcde3 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -3530,7 +3530,7 @@ _outPartitionElem(StringInfo str, const PartitionElem *node) static void _outPartitionSpec(StringInfo str, const PartitionSpec *node) { - WRITE_NODE_TYPE("PARTITIONBY"); + WRITE_NODE_TYPE("PARTITIONSPEC"); WRITE_STRING_FIELD(strategy); WRITE_NODE_FIELD(partParams); @@ -3540,23 +3540,23 @@ _outPartitionSpec(StringInfo str, const PartitionSpec *node) static void _outPartitionBoundSpec(StringInfo str, const PartitionBoundSpec *node) { - WRITE_NODE_TYPE("PARTITIONBOUND"); + WRITE_NODE_TYPE("PARTITIONBOUNDSPEC"); WRITE_CHAR_FIELD(strategy); WRITE_NODE_FIELD(listdatums); WRITE_NODE_FIELD(lowerdatums); WRITE_NODE_FIELD(upperdatums); - /* XXX somebody forgot location field; too late to change for v10 */ + WRITE_LOCATION_FIELD(location); } static void _outPartitionRangeDatum(StringInfo str, const PartitionRangeDatum *node) { - WRITE_NODE_TYPE("PARTRANGEDATUM"); + WRITE_NODE_TYPE("PARTITIONRANGEDATUM"); WRITE_BOOL_FIELD(infinite); WRITE_NODE_FIELD(value); - /* XXX somebody forgot location field; too late to change for v10 */ + WRITE_LOCATION_FIELD(location); } /* diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index b59ebd63ec..81ddfc3271 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -2376,8 +2376,7 @@ _readPartitionBoundSpec(void) READ_NODE_FIELD(listdatums); READ_NODE_FIELD(lowerdatums); READ_NODE_FIELD(upperdatums); - /* XXX somebody forgot location field; too late to change for v10 */ - local_node->location = -1; + READ_LOCATION_FIELD(location); READ_DONE(); } @@ -2392,8 +2391,7 @@ _readPartitionRangeDatum(void) READ_BOOL_FIELD(infinite); READ_NODE_FIELD(value); - /* XXX somebody forgot location field; too late to change for v10 */ - local_node->location = -1; + READ_LOCATION_FIELD(location); READ_DONE(); } @@ -2638,9 +2636,9 @@ parseNodeString(void) return_value = _readAlternativeSubPlan(); else if (MATCH("EXTENSIBLENODE", 14)) return_value = _readExtensibleNode(); - else if (MATCH("PARTITIONBOUND", 14)) + else if (MATCH("PARTITIONBOUNDSPEC", 18)) return_value = _readPartitionBoundSpec(); - else if (MATCH("PARTRANGEDATUM", 14)) + else if (MATCH("PARTITIONRANGEDATUM", 19)) return_value = _readPartitionRangeDatum(); else { diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 06fff799af..00b835834b 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 201705141 +#define CATALOG_VERSION_NO 201705301 #endif