From 5fd79ff82b0be209410cdab038c749a4bc4210ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Sat, 13 Jul 2019 00:32:20 +0000 Subject: [PATCH] Update MakeSingleTupleTableSlotCompat to take 2nd param This gets us past CREATE EXTENSION, but citus--5.0 uses WITH OIDS --- .../commands/create_distributed_table.c | 2 +- src/backend/distributed/commands/multi_copy.c | 2 +- .../distributed/executor/multi_router_executor.c | 3 ++- .../distributed/planner/deparse_shard_query.c | 2 +- .../distributed/planner/multi_logical_planner.c | 14 ++++++++------ .../distributed/planner/query_pushdown_planning.c | 4 ++-- .../distributed/planner/recursive_planning.c | 3 ++- src/backend/distributed/progress/multi_progress.c | 3 ++- src/backend/distributed/utils/metadata_cache.c | 3 ++- src/include/distributed/version_compat.h | 8 ++++---- 10 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/backend/distributed/commands/create_distributed_table.c b/src/backend/distributed/commands/create_distributed_table.c index a7e2d9a77..61c6b1ff3 100644 --- a/src/backend/distributed/commands/create_distributed_table.c +++ b/src/backend/distributed/commands/create_distributed_table.c @@ -1237,7 +1237,7 @@ CopyLocalDataIntoShards(Oid distributedRelationId) /* get the table columns */ tupleDescriptor = RelationGetDescr(distributedRelation); - slot = MakeSingleTupleTableSlotCompat(tupleDescriptor); + slot = MakeSingleTupleTableSlotCompat(tupleDescriptor, &TTSOpsHeapTuple); columnNameList = TupleDescColumnNameList(tupleDescriptor); /* determine the partition column in the tuple descriptor */ diff --git a/src/backend/distributed/commands/multi_copy.c b/src/backend/distributed/commands/multi_copy.c index 5a4963bc2..30bc0d60b 100644 --- a/src/backend/distributed/commands/multi_copy.c +++ b/src/backend/distributed/commands/multi_copy.c @@ -463,7 +463,7 @@ CopyToExistingShards(CopyStmt *copyStatement, char *completionTag) columnNulls = palloc0(columnCount * sizeof(bool)); /* set up a virtual tuple table slot */ - tupleTableSlot = MakeSingleTupleTableSlotCompat(tupleDescriptor); + tupleTableSlot = MakeSingleTupleTableSlotCompat(tupleDescriptor, &TTSOpsVirtual); tupleTableSlot->tts_nvalid = columnCount; tupleTableSlot->tts_values = columnValues; tupleTableSlot->tts_isnull = columnNulls; diff --git a/src/backend/distributed/executor/multi_router_executor.c b/src/backend/distributed/executor/multi_router_executor.c index 10f7979fd..936035d44 100644 --- a/src/backend/distributed/executor/multi_router_executor.c +++ b/src/backend/distributed/executor/multi_router_executor.c @@ -704,7 +704,8 @@ SortTupleStore(CitusScanState *scanState) /* iterate over all the sorted tuples, add them to original tuplestore */ while (true) { - TupleTableSlot *newSlot = MakeSingleTupleTableSlotCompat(tupleDescriptor); + TupleTableSlot *newSlot = MakeSingleTupleTableSlotCompat(tupleDescriptor, + &TTSOpsMinimalTuple); bool found = tuplesort_gettupleslot(tuplesortstate, true, false, newSlot, NULL); if (!found) diff --git a/src/backend/distributed/planner/deparse_shard_query.c b/src/backend/distributed/planner/deparse_shard_query.c index 1f906fb26..197e727f8 100644 --- a/src/backend/distributed/planner/deparse_shard_query.c +++ b/src/backend/distributed/planner/deparse_shard_query.c @@ -202,7 +202,7 @@ UpdateRelationToShardNames(Node *node, List *relationShardList) if (IsA(node, Query)) { return query_tree_walker((Query *) node, UpdateRelationToShardNames, - relationShardList, QTW_EXAMINE_RTES); + relationShardList, QTW_EXAMINE_RTES_BEFORE); } if (!IsA(node, RangeTblEntry)) diff --git a/src/backend/distributed/planner/multi_logical_planner.c b/src/backend/distributed/planner/multi_logical_planner.c index b0391ed01..ddd89ffb5 100644 --- a/src/backend/distributed/planner/multi_logical_planner.c +++ b/src/backend/distributed/planner/multi_logical_planner.c @@ -150,7 +150,7 @@ MultiLogicalPlanCreate(Query *originalQuery, Query *queryTree, * FindNodeCheck finds a node for which the check function returns true. * * To call this function directly with an RTE, use: - * range_table_walker(rte, FindNodeCheck, check, QTW_EXAMINE_RTES) + * range_table_walker(rte, FindNodeCheck, check, QTW_EXAMINE_RTES_BEFORE) */ bool FindNodeCheck(Node *node, bool (*check)(Node *)) @@ -172,7 +172,8 @@ FindNodeCheck(Node *node, bool (*check)(Node *)) } else if (IsA(node, Query)) { - return query_tree_walker((Query *) node, FindNodeCheck, check, QTW_EXAMINE_RTES); + return query_tree_walker((Query *) node, FindNodeCheck, check, + QTW_EXAMINE_RTES_BEFORE); } return expression_tree_walker(node, FindNodeCheck, check); @@ -380,7 +381,7 @@ AllTargetExpressionsAreColumnReferences(List *targetEntryList) bool FindNodeCheckInRangeTableList(List *rtable, bool (*check)(Node *)) { - return range_table_walker(rtable, FindNodeCheck, check, QTW_EXAMINE_RTES); + return range_table_walker(rtable, FindNodeCheck, check, QTW_EXAMINE_RTES_BEFORE); } @@ -1992,7 +1993,8 @@ ExtractRangeTableRelationWalker(Node *node, List **rangeTableRelationList) { walkIsComplete = query_tree_walker((Query *) node, ExtractRangeTableRelationWalker, - rangeTableRelationList, QTW_EXAMINE_RTES); + rangeTableRelationList, + QTW_EXAMINE_RTES_BEFORE); } else { @@ -2040,7 +2042,7 @@ ExtractRangeTableEntryWalker(Node *node, List **rangeTableList) walkIsComplete = query_tree_walker((Query *) node, ExtractRangeTableEntryWalker, rangeTableList, - QTW_EXAMINE_RTES); + QTW_EXAMINE_RTES_BEFORE); } else { @@ -2048,7 +2050,7 @@ ExtractRangeTableEntryWalker(Node *node, List **rangeTableList) walkIsComplete = range_table_walker(query->rtable, ExtractRangeTableEntryWalker, rangeTableList, - QTW_EXAMINE_RTES); + QTW_EXAMINE_RTES_BEFORE); } } else diff --git a/src/backend/distributed/planner/query_pushdown_planning.c b/src/backend/distributed/planner/query_pushdown_planning.c index be3c16dff..f3ab5a026 100644 --- a/src/backend/distributed/planner/query_pushdown_planning.c +++ b/src/backend/distributed/planner/query_pushdown_planning.c @@ -1336,7 +1336,7 @@ static bool IsRecurringRangeTable(List *rangeTable, RecurringTuplesType *recurType) { return range_table_walker(rangeTable, HasRecurringTuples, recurType, - QTW_EXAMINE_RTES); + QTW_EXAMINE_RTES_BEFORE); } @@ -1411,7 +1411,7 @@ HasRecurringTuples(Node *node, RecurringTuplesType *recurType) } return query_tree_walker((Query *) node, HasRecurringTuples, - recurType, QTW_EXAMINE_RTES); + recurType, QTW_EXAMINE_RTES_BEFORE); } return expression_tree_walker(node, HasRecurringTuples, recurType); diff --git a/src/backend/distributed/planner/recursive_planning.c b/src/backend/distributed/planner/recursive_planning.c index 97bd24570..41ab41fd3 100644 --- a/src/backend/distributed/planner/recursive_planning.c +++ b/src/backend/distributed/planner/recursive_planning.c @@ -1218,7 +1218,8 @@ CteReferenceListWalker(Node *node, CteReferenceWalkerContext *context) Query *query = (Query *) node; context->level += 1; - query_tree_walker(query, CteReferenceListWalker, context, QTW_EXAMINE_RTES); + query_tree_walker(query, CteReferenceListWalker, context, + QTW_EXAMINE_RTES_BEFORE); context->level -= 1; return false; diff --git a/src/backend/distributed/progress/multi_progress.c b/src/backend/distributed/progress/multi_progress.c index 015ebc8ac..62e0b3abd 100644 --- a/src/backend/distributed/progress/multi_progress.c +++ b/src/backend/distributed/progress/multi_progress.c @@ -156,7 +156,8 @@ ProgressMonitorList(uint64 commandTypeMagicNumber, List **attachedDSMSegments) getProgressInfoFunctionOid, commandTypeDatum); - tupleTableSlot = MakeSingleTupleTableSlotCompat(progressResultSet->setDesc); + tupleTableSlot = MakeSingleTupleTableSlotCompat(progressResultSet->setDesc, + &TTSOpsMinimalTuple); /* iterate over tuples in tuple store, and send them to destination */ for (;;) diff --git a/src/backend/distributed/utils/metadata_cache.c b/src/backend/distributed/utils/metadata_cache.c index 39b659908..a27911bb0 100644 --- a/src/backend/distributed/utils/metadata_cache.c +++ b/src/backend/distributed/utils/metadata_cache.c @@ -1641,7 +1641,8 @@ AvailableExtensionVersion(void) /* pg_available_extensions returns result set containing all available extensions */ (*pg_available_extensions)(fcinfo); - tupleTableSlot = MakeSingleTupleTableSlotCompat(extensionsResultSet->setDesc); + tupleTableSlot = MakeSingleTupleTableSlotCompat(extensionsResultSet->setDesc, + &TTSOpsMinimalTuple); hasTuple = tuplestore_gettupleslot(extensionsResultSet->setResult, goForward, doCopy, tupleTableSlot); while (hasTuple) diff --git a/src/include/distributed/version_compat.h b/src/include/distributed/version_compat.h index a12d9f3c2..e56f91875 100644 --- a/src/include/distributed/version_compat.h +++ b/src/include/distributed/version_compat.h @@ -247,13 +247,11 @@ RangeVarGetRelidInternal(const RangeVar *relation, LOCKMODE lockmode, uint32 fla #if PG_VERSION_NUM >= 120000 #define NextCopyLastParam -#define MakeSingleTupleTableSlotCompat(tupleDesc) \ - MakeSingleTupleTableSlot(tupleDesc, &TTSOpsHeapTuple) +#define MakeSingleTupleTableSlotCompat MakeSingleTupleTableSlot #define AllocSetContextCreateExtended AllocSetContextCreateInternal #define ExecStoreTuple(tuple, slot, buffer, shouldFree) \ ExecStoreHeapTuple(tuple, slot, shouldFree) #define NextCopyFromCompat NextCopyFrom -#define QTW_EXAMINE_RTES QTW_EXAMINE_RTES_BEFORE #define ArrayRef SubscriptingRef #define T_ArrayRef T_SubscriptingRef #define or_clause is_orclause @@ -272,7 +270,9 @@ RangeVarGetRelidInternal(const RangeVar *relation, LOCKMODE lockmode, uint32 fla #define InitFunctionCallInfoDataCompat InitFunctionCallInfoData #else /* pre PG12 */ -#define MakeSingleTupleTableSlotCompat MakeSingleTupleTableSlot +#define QTW_EXAMINE_RTES_BEFORE QTW_EXAMINE_RTES +#define MakeSingleTupleTableSlotCompat(tupleDesc, tts_opts) \ + MakeSingleTupleTableSlot(tupleDesc) #define NextCopyFromCompat(cstate, econtext, values, nulls) \ NextCopyFrom(cstate, econtext, values, nulls, NULL) #define GetSysCacheOid1Compat(cacheId, oidcol, key1) \