From f61e4467e30d15668779caaa4df7e23adc6fa8cd Mon Sep 17 00:00:00 2001 From: Pavan Deolasee Date: Wed, 26 Oct 2016 11:28:42 +0530 Subject: [PATCH] Fix tablesample handling which was broken during the merge --- src/backend/nodes/outfuncs.c | 24 ++++++++++++++++++++++++ src/backend/nodes/readfuncs.c | 24 ++++++++++++++++++++++++ src/backend/pgxc/pool/execRemote.c | 1 + 3 files changed, 49 insertions(+) diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 6458e7596c..7d0196a512 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -719,6 +719,16 @@ _outSeqScan(StringInfo str, const SeqScan *node) _outScanInfo(str, (const Scan *) node); } +static void +_outSampleScan(StringInfo str, const SampleScan *node) +{ + WRITE_NODE_TYPE("SAMPLESCAN"); + + _outScanInfo(str, (const Scan *) node); + + WRITE_NODE_FIELD(tablesample); +} + static void _outIndexScan(StringInfo str, const IndexScan *node) { @@ -3661,7 +3671,18 @@ _outTableSampleClause(StringInfo str, const TableSampleClause *node) { WRITE_NODE_TYPE("TABLESAMPLECLAUSE"); +#ifdef XCP + if (portable_output) + { + WRITE_FUNCID_FIELD(tsmhandler); + } + else + { +#endif WRITE_OID_FIELD(tsmhandler); +#ifdef XCP + } +#endif WRITE_NODE_FIELD(args); WRITE_NODE_FIELD(repeatable); } @@ -4091,6 +4112,9 @@ _outNode(StringInfo str, const void *obj) _outRemoteQuery(str, obj); break; #endif + case T_SampleScan: + _outSampleScan(str, obj); + break; case T_IndexScan: _outIndexScan(str, obj); break; diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 8da2516518..b32f16d7ff 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -2050,7 +2050,18 @@ _readTableSampleClause(void) { READ_LOCALS(TableSampleClause); +#ifdef XCP + if (portable_input) + { + READ_FUNCID_FIELD(tsmhandler); + } + else + { +#endif READ_OID_FIELD(tsmhandler); +#ifdef XCP + } +#endif READ_NODE_FIELD(args); READ_NODE_FIELD(repeatable); @@ -2325,6 +2336,17 @@ _readSeqScan(void) READ_DONE(); } +/* + * _readSampleScan + */ +static SampleScan * +_readSampleScan(void) +{ + READ_SCAN_FIELDS(SampleScan); + READ_NODE_FIELD(tablesample); + + READ_DONE(); +} /* * _readIndexScan @@ -3546,6 +3568,8 @@ parseNodeString(void) return_value = _readScan(); else if (MATCH("SEQSCAN", 7)) return_value = _readSeqScan(); + else if (MATCH("SAMPLESCAN", 10)) + return_value = _readSampleScan(); else if (MATCH("INDEXSCAN", 9)) return_value = _readIndexScan(); else if (MATCH("INDEXONLYSCAN", 13)) diff --git a/src/backend/pgxc/pool/execRemote.c b/src/backend/pgxc/pool/execRemote.c index 31568660f0..105b4ebf05 100644 --- a/src/backend/pgxc/pool/execRemote.c +++ b/src/backend/pgxc/pool/execRemote.c @@ -4986,6 +4986,7 @@ determine_param_types(Plan *plan, struct find_params_context *context) break; case T_SeqScan: + case T_SampleScan: break; case T_IndexScan: -- 2.39.5