diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 33bba98d5c5..59d9544e598 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -103,6 +103,18 @@ RUN mkdir .pgenv-staging/ RUN cp -r .pgenv/src .pgenv/pgsql-* .pgenv/config .pgenv-staging/ RUN rm .pgenv-staging/config/default.conf +FROM base AS pg17 +RUN MAKEFLAGS="-j $(nproc)" pgenv build 17beta2 +RUN rm .pgenv/src/*.tar* +RUN make -C .pgenv/src/postgresql-*/ clean +RUN make -C .pgenv/src/postgresql-*/src/include install + +# create a staging directory with all files we want to copy from our pgenv build +# we will copy the contents of the staged folder into the final image at once +RUN mkdir .pgenv-staging/ +RUN cp -r .pgenv/src .pgenv/pgsql-* .pgenv/config .pgenv-staging/ +RUN rm .pgenv-staging/config/default.conf + FROM base AS uncrustify-builder RUN sudo apt update && sudo apt install -y cmake tree diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 70bc0bcb9a6..21fa19fa07c 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -32,11 +32,12 @@ jobs: style_checker_image_name: "ghcr.io/citusdata/stylechecker" style_checker_tools_version: "0.8.18" sql_snapshot_pg_version: "16.3" - image_suffix: "-v13fd57c" + image_suffix: "-dev-16d4616" pg14_version: '{ "major": "14", "full": "14.12" }' pg15_version: '{ "major": "15", "full": "15.7" }' pg16_version: '{ "major": "16", "full": "16.3" }' - upgrade_pg_versions: "14.12-15.7-16.3" + pg17_version: '{ "major": "17", "full": "17beta2" }' + upgrade_pg_versions: "14.12-15.7-16.3-17beta2" steps: # Since GHA jobs needs at least one step we use a noop step here. - name: Set up parameters @@ -113,6 +114,7 @@ jobs: - ${{ needs.params.outputs.pg14_version }} - ${{ needs.params.outputs.pg15_version }} - ${{ needs.params.outputs.pg16_version }} + - ${{ needs.params.outputs.pg17_version }} runs-on: ubuntu-20.04 container: image: "${{ matrix.image_name }}:${{ fromJson(matrix.pg_version).full }}${{ matrix.image_suffix }}" diff --git a/configure b/configure index a0c978deaad..e4ea28d7d86 100755 --- a/configure +++ b/configure @@ -2588,7 +2588,7 @@ fi if test "$with_pg_version_check" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: building against PostgreSQL $version_num (skipped compatibility check)" >&5 $as_echo "$as_me: building against PostgreSQL $version_num (skipped compatibility check)" >&6;} -elif test "$version_num" != '14' -a "$version_num" != '15' -a "$version_num" != '16'; then +elif test "$version_num" != '14' -a "$version_num" != '15' -a "$version_num" != '16' -a "$version_num" != '17'; then as_fn_error $? "Citus is not compatible with the detected PostgreSQL version ${version_num}." "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: building against PostgreSQL $version_num" >&5 diff --git a/configure.ac b/configure.ac index 2a4c7a21ae8..1f4633ccaaa 100644 --- a/configure.ac +++ b/configure.ac @@ -80,7 +80,7 @@ AC_SUBST(with_pg_version_check) if test "$with_pg_version_check" = no; then AC_MSG_NOTICE([building against PostgreSQL $version_num (skipped compatibility check)]) -elif test "$version_num" != '14' -a "$version_num" != '15' -a "$version_num" != '16'; then +elif test "$version_num" != '14' -a "$version_num" != '15' -a "$version_num" != '16' -a "$version_num" != '17'; then AC_MSG_ERROR([Citus is not compatible with the detected PostgreSQL version ${version_num}.]) else AC_MSG_NOTICE([building against PostgreSQL $version_num]) diff --git a/src/backend/columnar/columnar_customscan.c b/src/backend/columnar/columnar_customscan.c index 9ed82a5bfec..5288b8096b7 100644 --- a/src/backend/columnar/columnar_customscan.c +++ b/src/backend/columnar/columnar_customscan.c @@ -363,7 +363,7 @@ ColumnarGetRelationInfoHook(PlannerInfo *root, Oid relationObjectId, /* disable index-only scan */ IndexOptInfo *indexOptInfo = NULL; - foreach_ptr(indexOptInfo, rel->indexlist) + foreach_declared_ptr(indexOptInfo, rel->indexlist) { memset(indexOptInfo->canreturn, false, indexOptInfo->ncolumns * sizeof(bool)); } @@ -381,7 +381,7 @@ RemovePathsByPredicate(RelOptInfo *rel, PathPredicate removePathPredicate) List *filteredPathList = NIL; Path *path = NULL; - foreach_ptr(path, rel->pathlist) + foreach_declared_ptr(path, rel->pathlist) { if (!removePathPredicate(path)) { @@ -428,7 +428,7 @@ static void CostColumnarPaths(PlannerInfo *root, RelOptInfo *rel, Oid relationId) { Path *path = NULL; - foreach_ptr(path, rel->pathlist) + foreach_declared_ptr(path, rel->pathlist) { if (IsA(path, IndexPath)) { @@ -783,7 +783,7 @@ ExtractPushdownClause(PlannerInfo *root, RelOptInfo *rel, Node *node) List *pushdownableArgs = NIL; Node *boolExprArg = NULL; - foreach_ptr(boolExprArg, boolExpr->args) + foreach_declared_ptr(boolExprArg, boolExpr->args) { Expr *pushdownableArg = ExtractPushdownClause(root, rel, (Node *) boolExprArg); @@ -1550,7 +1550,7 @@ ColumnarPerStripeScanCost(RelOptInfo *rel, Oid relationId, int numberOfColumnsRe uint32 maxColumnCount = 0; uint64 totalStripeSize = 0; StripeMetadata *stripeMetadata = NULL; - foreach_ptr(stripeMetadata, stripeList) + foreach_declared_ptr(stripeMetadata, stripeList) { totalStripeSize += stripeMetadata->dataLength; maxColumnCount = Max(maxColumnCount, stripeMetadata->columnCount); @@ -1924,11 +1924,6 @@ ColumnarScan_EndCustomScan(CustomScanState *node) */ TableScanDesc scanDesc = node->ss.ss_currentScanDesc; - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - /* * clean out the tuple table */ diff --git a/src/backend/columnar/columnar_metadata.c b/src/backend/columnar/columnar_metadata.c index 215f9609109..192c4cc4bac 100644 --- a/src/backend/columnar/columnar_metadata.c +++ b/src/backend/columnar/columnar_metadata.c @@ -2041,7 +2041,7 @@ GetHighestUsedRowNumber(uint64 storageId) List *stripeMetadataList = ReadDataFileStripeList(storageId, GetTransactionSnapshot()); StripeMetadata *stripeMetadata = NULL; - foreach_ptr(stripeMetadata, stripeMetadataList) + foreach_declared_ptr(stripeMetadata, stripeMetadataList) { highestRowNumber = Max(highestRowNumber, StripeGetHighestRowNumber(stripeMetadata)); diff --git a/src/backend/columnar/columnar_reader.c b/src/backend/columnar/columnar_reader.c index 7ef0d15d7da..65ef27617d8 100644 --- a/src/backend/columnar/columnar_reader.c +++ b/src/backend/columnar/columnar_reader.c @@ -880,7 +880,7 @@ ReadChunkGroupNextRow(ChunkGroupReadState *chunkGroupReadState, Datum *columnVal memset(columnNulls, true, sizeof(bool) * chunkGroupReadState->columnCount); int attno; - foreach_int(attno, chunkGroupReadState->projectedColumnList) + foreach_declared_int(attno, chunkGroupReadState->projectedColumnList) { const ChunkData *chunkGroupData = chunkGroupReadState->chunkGroupData; const int rowIndex = chunkGroupReadState->currentRow; @@ -1489,7 +1489,7 @@ ProjectedColumnMask(uint32 columnCount, List *projectedColumnList) bool *projectedColumnMask = palloc0(columnCount * sizeof(bool)); int attno; - foreach_int(attno, projectedColumnList) + foreach_declared_int(attno, projectedColumnList) { /* attno is 1-indexed; projectedColumnMask is 0-indexed */ int columnIndex = attno - 1; diff --git a/src/backend/columnar/columnar_tableam.c b/src/backend/columnar/columnar_tableam.c index ca3a5f4c4aa..0e6c423c2d6 100644 --- a/src/backend/columnar/columnar_tableam.c +++ b/src/backend/columnar/columnar_tableam.c @@ -1424,8 +1424,13 @@ ConditionalLockRelationWithTimeout(Relation rel, LOCKMODE lockMode, int timeout, static bool -columnar_scan_analyze_next_block(TableScanDesc scan, BlockNumber blockno, +columnar_scan_analyze_next_block(TableScanDesc scan, +#if PG_VERSION_NUM >= PG_VERSION_17 + ReadStream *stream) +#else + BlockNumber blockno, BufferAccessStrategy bstrategy) +#endif { /* * Our access method is not pages based, i.e. tuples are not confined @@ -3083,7 +3088,7 @@ DefElem * GetExtensionOption(List *extensionOptions, const char *defname) { DefElem *defElement = NULL; - foreach_ptr(defElement, extensionOptions) + foreach_declared_ptr(defElement, extensionOptions) { if (IsA(defElement, DefElem) && strncmp(defElement->defname, defname, NAMEDATALEN) == 0) diff --git a/src/backend/distributed/cdc/cdc_decoder.c b/src/backend/distributed/cdc/cdc_decoder.c index cf9f4963b72..1e71a82a1c1 100644 --- a/src/backend/distributed/cdc/cdc_decoder.c +++ b/src/backend/distributed/cdc/cdc_decoder.c @@ -22,6 +22,8 @@ #include "utils/rel.h" #include "utils/typcache.h" +#include "pg_version_constants.h" + PG_MODULE_MAGIC; extern void _PG_output_plugin_init(OutputPluginCallbacks *cb); @@ -435,6 +437,74 @@ TranslateChangesIfSchemaChanged(Relation sourceRelation, Relation targetRelation return; } +#if PG_VERSION_NUM >= PG_VERSION_17 + + /* Check the ReorderBufferChange's action type and handle them accordingly.*/ + switch (change->action) + { + case REORDER_BUFFER_CHANGE_INSERT: + { + /* For insert action, only new tuple should always be translated*/ + HeapTuple sourceRelationNewTuple = change->data.tp.newtuple; + HeapTuple targetRelationNewTuple = GetTupleForTargetSchemaForCdc( + sourceRelationNewTuple, sourceRelationDesc, targetRelationDesc); + change->data.tp.newtuple = targetRelationNewTuple; + break; + } + + /* + * For update changes both old and new tuples need to be translated for target relation + * if the REPLICA IDENTITY is set to FULL. Otherwise, only the new tuple needs to be + * translated for target relation. + */ + case REORDER_BUFFER_CHANGE_UPDATE: + { + /* For update action, new tuple should always be translated*/ + /* Get the new tuple from the ReorderBufferChange, and translate it to target relation. */ + HeapTuple sourceRelationNewTuple = change->data.tp.newtuple; + HeapTuple targetRelationNewTuple = GetTupleForTargetSchemaForCdc( + sourceRelationNewTuple, sourceRelationDesc, targetRelationDesc); + change->data.tp.newtuple = targetRelationNewTuple; + + /* + * Format oldtuple according to the target relation. If the column values of replica + * identiy change, then the old tuple is non-null and needs to be formatted according + * to the target relation schema. + */ + if (change->data.tp.oldtuple != NULL) + { + HeapTuple sourceRelationOldTuple = change->data.tp.oldtuple; + HeapTuple targetRelationOldTuple = GetTupleForTargetSchemaForCdc( + sourceRelationOldTuple, + sourceRelationDesc, + targetRelationDesc); + + change->data.tp.oldtuple = targetRelationOldTuple; + } + break; + } + + case REORDER_BUFFER_CHANGE_DELETE: + { + /* For delete action, only old tuple should be translated*/ + HeapTuple sourceRelationOldTuple = change->data.tp.oldtuple; + HeapTuple targetRelationOldTuple = GetTupleForTargetSchemaForCdc( + sourceRelationOldTuple, + sourceRelationDesc, + targetRelationDesc); + + change->data.tp.oldtuple = targetRelationOldTuple; + break; + } + + default: + { + /* Do nothing for other action types. */ + break; + } + } +#else + /* Check the ReorderBufferChange's action type and handle them accordingly.*/ switch (change->action) { @@ -499,4 +569,5 @@ TranslateChangesIfSchemaChanged(Relation sourceRelation, Relation targetRelation break; } } +#endif } diff --git a/src/backend/distributed/clock/causal_clock.c b/src/backend/distributed/clock/causal_clock.c index eb4b8d9d362..e2f12b79c48 100644 --- a/src/backend/distributed/clock/causal_clock.c +++ b/src/backend/distributed/clock/causal_clock.c @@ -328,7 +328,7 @@ GetHighestClockInTransaction(List *nodeConnectionList) { MultiConnection *connection = NULL; - foreach_ptr(connection, nodeConnectionList) + foreach_declared_ptr(connection, nodeConnectionList) { int querySent = SendRemoteCommand(connection, "SELECT citus_get_node_clock();"); @@ -349,7 +349,7 @@ GetHighestClockInTransaction(List *nodeConnectionList) globalClockValue->counter))); /* fetch the results and pick the highest clock value of all the nodes */ - foreach_ptr(connection, nodeConnectionList) + foreach_declared_ptr(connection, nodeConnectionList) { bool raiseInterrupts = true; diff --git a/src/backend/distributed/commands/alter_table.c b/src/backend/distributed/commands/alter_table.c index 030dbbe7869..d2f8348dadb 100644 --- a/src/backend/distributed/commands/alter_table.c +++ b/src/backend/distributed/commands/alter_table.c @@ -414,7 +414,7 @@ UndistributeTables(List *relationIdList) */ List *originalForeignKeyRecreationCommands = NIL; Oid relationId = InvalidOid; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { List *fkeyCommandsForRelation = GetFKeyCreationCommandsRelationInvolvedWithTableType(relationId, @@ -802,7 +802,7 @@ ConvertTableInternal(TableConversionState *con) List *partitionList = PartitionList(con->relationId); Oid partitionRelationId = InvalidOid; - foreach_oid(partitionRelationId, partitionList) + foreach_declared_oid(partitionRelationId, partitionList) { char *tableQualifiedName = generate_qualified_relation_name( partitionRelationId); @@ -873,7 +873,7 @@ ConvertTableInternal(TableConversionState *con) } TableDDLCommand *tableCreationCommand = NULL; - foreach_ptr(tableCreationCommand, preLoadCommands) + foreach_declared_ptr(tableCreationCommand, preLoadCommands) { Assert(CitusIsA(tableCreationCommand, TableDDLCommand)); @@ -947,7 +947,7 @@ ConvertTableInternal(TableConversionState *con) con->suppressNoticeMessages); TableDDLCommand *tableConstructionCommand = NULL; - foreach_ptr(tableConstructionCommand, postLoadCommands) + foreach_declared_ptr(tableConstructionCommand, postLoadCommands) { Assert(CitusIsA(tableConstructionCommand, TableDDLCommand)); char *tableConstructionSQL = GetTableDDLCommand(tableConstructionCommand); @@ -965,7 +965,7 @@ ConvertTableInternal(TableConversionState *con) MemoryContext oldContext = MemoryContextSwitchTo(citusPerPartitionContext); char *attachPartitionCommand = NULL; - foreach_ptr(attachPartitionCommand, attachPartitionCommands) + foreach_declared_ptr(attachPartitionCommand, attachPartitionCommands) { MemoryContextReset(citusPerPartitionContext); @@ -990,7 +990,7 @@ ConvertTableInternal(TableConversionState *con) /* For now we only support cascade to colocation for alter_distributed_table UDF */ Assert(con->conversionType == ALTER_DISTRIBUTED_TABLE); - foreach_oid(colocatedTableId, con->colocatedTableList) + foreach_declared_oid(colocatedTableId, con->colocatedTableList) { if (colocatedTableId == con->relationId) { @@ -1018,7 +1018,7 @@ ConvertTableInternal(TableConversionState *con) if (con->cascadeToColocated != CASCADE_TO_COLOCATED_NO_ALREADY_CASCADED) { char *foreignKeyCommand = NULL; - foreach_ptr(foreignKeyCommand, foreignKeyCommands) + foreach_declared_ptr(foreignKeyCommand, foreignKeyCommands) { ExecuteQueryViaSPI(foreignKeyCommand, SPI_OK_UTILITY); } @@ -1054,7 +1054,7 @@ CopyTableConversionReturnIntoCurrentContext(TableConversionReturn *tableConversi tableConversionReturnCopy = palloc0(sizeof(TableConversionReturn)); List *copyForeignKeyCommands = NIL; char *foreignKeyCommand = NULL; - foreach_ptr(foreignKeyCommand, tableConversionReturn->foreignKeyCommands) + foreach_declared_ptr(foreignKeyCommand, tableConversionReturn->foreignKeyCommands) { char *copyForeignKeyCommand = MemoryContextStrdup(CurrentMemoryContext, foreignKeyCommand); @@ -1129,7 +1129,7 @@ DropIndexesNotSupportedByColumnar(Oid relationId, bool suppressNoticeMessages) RelationClose(columnarRelation); Oid indexId = InvalidOid; - foreach_oid(indexId, indexIdList) + foreach_declared_oid(indexId, indexIdList) { char *indexAmName = GetIndexAccessMethodName(indexId); if (extern_ColumnarSupportsIndexAM(indexAmName)) @@ -1389,7 +1389,7 @@ CreateTableConversion(TableConversionParameters *params) * since they will be handled separately. */ Oid colocatedTableId = InvalidOid; - foreach_oid(colocatedTableId, colocatedTableList) + foreach_declared_oid(colocatedTableId, colocatedTableList) { if (PartitionTable(colocatedTableId)) { @@ -1605,7 +1605,7 @@ DoesCascadeDropUnsupportedObject(Oid classId, Oid objectId, HTAB *nodeMap) targetObjectId); HeapTuple depTup = NULL; - foreach_ptr(depTup, dependencyTupleList) + foreach_declared_ptr(depTup, dependencyTupleList) { Form_pg_depend pg_depend = (Form_pg_depend) GETSTRUCT(depTup); @@ -1645,7 +1645,7 @@ GetViewCreationCommandsOfTable(Oid relationId) List *commands = NIL; Oid viewOid = InvalidOid; - foreach_oid(viewOid, views) + foreach_declared_oid(viewOid, views) { StringInfo query = makeStringInfo(); @@ -1683,7 +1683,7 @@ WrapTableDDLCommands(List *commandStrings) List *tableDDLCommands = NIL; char *command = NULL; - foreach_ptr(command, commandStrings) + foreach_declared_ptr(command, commandStrings) { tableDDLCommands = lappend(tableDDLCommands, makeTableDDLCommandString(command)); } @@ -1840,7 +1840,7 @@ ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands, */ List *ownedSequences = getOwnedSequences_internal(sourceId, 0, DEPENDENCY_AUTO); Oid sequenceOid = InvalidOid; - foreach_oid(sequenceOid, ownedSequences) + foreach_declared_oid(sequenceOid, ownedSequences) { changeDependencyFor(RelationRelationId, sequenceOid, RelationRelationId, sourceId, targetId); @@ -1873,7 +1873,7 @@ ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands, } char *justBeforeDropCommand = NULL; - foreach_ptr(justBeforeDropCommand, justBeforeDropCommands) + foreach_declared_ptr(justBeforeDropCommand, justBeforeDropCommands) { ExecuteQueryViaSPI(justBeforeDropCommand, SPI_OK_UTILITY); } @@ -1987,7 +1987,7 @@ CheckAlterDistributedTableConversionParameters(TableConversionState *con) Oid colocatedTableOid = InvalidOid; text *colocateWithText = cstring_to_text(con->colocateWith); Oid colocateWithTableOid = ResolveRelationId(colocateWithText, false); - foreach_oid(colocatedTableOid, con->colocatedTableList) + foreach_declared_oid(colocatedTableOid, con->colocatedTableList) { if (colocateWithTableOid == colocatedTableOid) { @@ -2214,7 +2214,7 @@ WillRecreateForeignKeyToReferenceTable(Oid relationId, { List *colocatedTableList = ColocatedTableList(relationId); Oid colocatedTableOid = InvalidOid; - foreach_oid(colocatedTableOid, colocatedTableList) + foreach_declared_oid(colocatedTableOid, colocatedTableList) { if (HasForeignKeyToReferenceTable(colocatedTableOid)) { @@ -2242,7 +2242,7 @@ WarningsForDroppingForeignKeysWithDistributedTables(Oid relationId) List *foreignKeys = list_concat(referencingForeingKeys, referencedForeignKeys); Oid foreignKeyOid = InvalidOid; - foreach_oid(foreignKeyOid, foreignKeys) + foreach_declared_oid(foreignKeyOid, foreignKeys) { ereport(WARNING, (errmsg("foreign key %s will be dropped", get_constraint_name(foreignKeyOid)))); diff --git a/src/backend/distributed/commands/begin.c b/src/backend/distributed/commands/begin.c index b19b044849d..3b5728868f2 100644 --- a/src/backend/distributed/commands/begin.c +++ b/src/backend/distributed/commands/begin.c @@ -33,7 +33,7 @@ SaveBeginCommandProperties(TransactionStmt *transactionStmt) * * While BEGIN can be quite frequent it will rarely have options set. */ - foreach_ptr(item, transactionStmt->options) + foreach_declared_ptr(item, transactionStmt->options) { A_Const *constant = (A_Const *) item->arg; diff --git a/src/backend/distributed/commands/cascade_table_operation_for_connected_relations.c b/src/backend/distributed/commands/cascade_table_operation_for_connected_relations.c index c88367462bd..02b175960ad 100644 --- a/src/backend/distributed/commands/cascade_table_operation_for_connected_relations.c +++ b/src/backend/distributed/commands/cascade_table_operation_for_connected_relations.c @@ -168,7 +168,7 @@ GetPartitionRelationIds(List *relationIdList) List *partitionRelationIdList = NIL; Oid relationId = InvalidOid; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { if (PartitionTable(relationId)) { @@ -189,7 +189,7 @@ LockRelationsWithLockMode(List *relationIdList, LOCKMODE lockMode) { Oid relationId; relationIdList = SortList(relationIdList, CompareOids); - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { LockRelationOid(relationId, lockMode); } @@ -207,7 +207,7 @@ static void ErrorIfConvertingMultiLevelPartitionedTable(List *relationIdList) { Oid relationId; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { if (PartitionedTable(relationId) && PartitionTable(relationId)) { @@ -236,7 +236,7 @@ void ErrorIfAnyPartitionRelationInvolvedInNonInheritedFKey(List *relationIdList) { Oid relationId = InvalidOid; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { if (!PartitionTable(relationId)) { @@ -300,7 +300,7 @@ bool RelationIdListHasReferenceTable(List *relationIdList) { Oid relationId = InvalidOid; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { if (IsCitusTableType(relationId, REFERENCE_TABLE)) { @@ -322,7 +322,7 @@ GetFKeyCreationCommandsForRelationIdList(List *relationIdList) List *fKeyCreationCommands = NIL; Oid relationId = InvalidOid; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { List *relationFKeyCreationCommands = GetReferencingForeignConstaintCommands(relationId); @@ -342,7 +342,7 @@ static void DropRelationIdListForeignKeys(List *relationIdList, int fKeyFlags) { Oid relationId = InvalidOid; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { DropRelationForeignKeys(relationId, fKeyFlags); } @@ -399,7 +399,7 @@ GetRelationDropFkeyCommands(Oid relationId, int fKeyFlags) List *relationFKeyIdList = GetForeignKeyOids(relationId, fKeyFlags); Oid foreignKeyId; - foreach_oid(foreignKeyId, relationFKeyIdList) + foreach_declared_oid(foreignKeyId, relationFKeyIdList) { char *dropFkeyCascadeCommand = GetDropFkeyCascadeCommand(foreignKeyId); dropFkeyCascadeCommandList = lappend(dropFkeyCascadeCommandList, @@ -450,7 +450,7 @@ ExecuteCascadeOperationForRelationIdList(List *relationIdList, cascadeOperationType) { Oid relationId = InvalidOid; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { /* * The reason behind skipping certain table types in below loop is @@ -531,7 +531,7 @@ ExecuteAndLogUtilityCommandListInTableTypeConversionViaSPI(List *utilityCommandL PG_TRY(); { char *utilityCommand = NULL; - foreach_ptr(utilityCommand, utilityCommandList) + foreach_declared_ptr(utilityCommand, utilityCommandList) { /* * CREATE MATERIALIZED VIEW commands need to be parsed/transformed, @@ -569,7 +569,7 @@ void ExecuteAndLogUtilityCommandList(List *utilityCommandList) { char *utilityCommand = NULL; - foreach_ptr(utilityCommand, utilityCommandList) + foreach_declared_ptr(utilityCommand, utilityCommandList) { ExecuteAndLogUtilityCommand(utilityCommand); } @@ -597,7 +597,7 @@ void ExecuteForeignKeyCreateCommandList(List *ddlCommandList, bool skip_validation) { char *ddlCommand = NULL; - foreach_ptr(ddlCommand, ddlCommandList) + foreach_declared_ptr(ddlCommand, ddlCommandList) { ExecuteForeignKeyCreateCommand(ddlCommand, skip_validation); } diff --git a/src/backend/distributed/commands/citus_add_local_table_to_metadata.c b/src/backend/distributed/commands/citus_add_local_table_to_metadata.c index 93f1e7d28ec..dfc57f096ae 100644 --- a/src/backend/distributed/commands/citus_add_local_table_to_metadata.c +++ b/src/backend/distributed/commands/citus_add_local_table_to_metadata.c @@ -588,7 +588,7 @@ ErrorIfOptionListHasNoTableName(List *optionList) { char *table_nameString = "table_name"; DefElem *option = NULL; - foreach_ptr(option, optionList) + foreach_declared_ptr(option, optionList) { char *optionName = option->defname; if (strcmp(optionName, table_nameString) == 0) @@ -613,7 +613,7 @@ ForeignTableDropsTableNameOption(List *optionList) { char *table_nameString = "table_name"; DefElem *option = NULL; - foreach_ptr(option, optionList) + foreach_declared_ptr(option, optionList) { char *optionName = option->defname; DefElemAction optionAction = option->defaction; @@ -732,7 +732,7 @@ UpdateAutoConvertedForConnectedRelations(List *relationIds, bool autoConverted) List *relationIdList = NIL; Oid relid = InvalidOid; - foreach_oid(relid, relationIds) + foreach_declared_oid(relid, relationIds) { List *connectedRelations = GetForeignKeyConnectedRelationIdList(relid); relationIdList = list_concat_unique_oid(relationIdList, connectedRelations); @@ -740,7 +740,7 @@ UpdateAutoConvertedForConnectedRelations(List *relationIds, bool autoConverted) relationIdList = SortList(relationIdList, CompareOids); - foreach_oid(relid, relationIdList) + foreach_declared_oid(relid, relationIdList) { UpdatePgDistPartitionAutoConverted(relid, autoConverted); } @@ -776,7 +776,7 @@ GetShellTableDDLEventsForCitusLocalTable(Oid relationId) List *shellTableDDLEvents = NIL; TableDDLCommand *tableDDLCommand = NULL; - foreach_ptr(tableDDLCommand, tableDDLCommands) + foreach_declared_ptr(tableDDLCommand, tableDDLCommands) { Assert(CitusIsA(tableDDLCommand, TableDDLCommand)); shellTableDDLEvents = lappend(shellTableDDLEvents, @@ -863,7 +863,7 @@ RenameShardRelationConstraints(Oid shardRelationId, uint64 shardId) List *constraintNameList = GetConstraintNameList(shardRelationId); char *constraintName = NULL; - foreach_ptr(constraintName, constraintNameList) + foreach_declared_ptr(constraintName, constraintNameList) { const char *commandString = GetRenameShardConstraintCommand(shardRelationId, constraintName, shardId); @@ -958,7 +958,7 @@ RenameShardRelationIndexes(Oid shardRelationId, uint64 shardId) List *indexOidList = GetExplicitIndexOidList(shardRelationId); Oid indexOid = InvalidOid; - foreach_oid(indexOid, indexOidList) + foreach_declared_oid(indexOid, indexOidList) { const char *commandString = GetRenameShardIndexCommand(indexOid, shardId); ExecuteAndLogUtilityCommand(commandString); @@ -1008,7 +1008,7 @@ RenameShardRelationStatistics(Oid shardRelationId, uint64 shardId) List *statsCommandList = GetRenameStatsCommandList(statsOidList, shardId); char *command = NULL; - foreach_ptr(command, statsCommandList) + foreach_declared_ptr(command, statsCommandList) { ExecuteAndLogUtilityCommand(command); } @@ -1044,7 +1044,7 @@ RenameShardRelationNonTruncateTriggers(Oid shardRelationId, uint64 shardId) List *triggerIdList = GetExplicitTriggerIdList(shardRelationId); Oid triggerId = InvalidOid; - foreach_oid(triggerId, triggerIdList) + foreach_declared_oid(triggerId, triggerIdList) { bool missingOk = false; HeapTuple triggerTuple = GetTriggerTupleById(triggerId, missingOk); @@ -1097,7 +1097,7 @@ DropRelationTruncateTriggers(Oid relationId) List *triggerIdList = GetExplicitTriggerIdList(relationId); Oid triggerId = InvalidOid; - foreach_oid(triggerId, triggerIdList) + foreach_declared_oid(triggerId, triggerIdList) { bool missingOk = false; HeapTuple triggerTuple = GetTriggerTupleById(triggerId, missingOk); @@ -1175,7 +1175,7 @@ DropIdentitiesOnTable(Oid relationId) relation_close(relation, NoLock); char *dropCommand = NULL; - foreach_ptr(dropCommand, dropCommandList) + foreach_declared_ptr(dropCommand, dropCommandList) { /* * We need to disable/enable ddl propagation for this command, to prevent @@ -1218,7 +1218,7 @@ DropViewsOnTable(Oid relationId) List *reverseOrderedViews = ReversedOidList(views); Oid viewId = InvalidOid; - foreach_oid(viewId, reverseOrderedViews) + foreach_declared_oid(viewId, reverseOrderedViews) { char *qualifiedViewName = generate_qualified_relation_name(viewId); @@ -1241,7 +1241,7 @@ ReversedOidList(List *oidList) { List *reversed = NIL; Oid oid = InvalidOid; - foreach_oid(oid, oidList) + foreach_declared_oid(oid, oidList) { reversed = lcons_oid(oid, reversed); } @@ -1293,7 +1293,7 @@ GetRenameStatsCommandList(List *statsOidList, uint64 shardId) { List *statsCommandList = NIL; Oid statsOid; - foreach_oid(statsOid, statsOidList) + foreach_declared_oid(statsOid, statsOidList) { HeapTuple tup = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(statsOid)); diff --git a/src/backend/distributed/commands/cluster.c b/src/backend/distributed/commands/cluster.c index 7a1dac30256..44a1b610919 100644 --- a/src/backend/distributed/commands/cluster.c +++ b/src/backend/distributed/commands/cluster.c @@ -115,7 +115,7 @@ static bool IsClusterStmtVerbose_compat(ClusterStmt *clusterStmt) { DefElem *opt = NULL; - foreach_ptr(opt, clusterStmt->params) + foreach_declared_ptr(opt, clusterStmt->params) { if (strcmp(opt->defname, "verbose") == 0) { diff --git a/src/backend/distributed/commands/common.c b/src/backend/distributed/commands/common.c index 347a99e8af4..de05efe45ca 100644 --- a/src/backend/distributed/commands/common.c +++ b/src/backend/distributed/commands/common.c @@ -235,7 +235,7 @@ PreprocessDropDistributedObjectStmt(Node *node, const char *queryString, List *distributedObjects = NIL; List *distributedObjectAddresses = NIL; Node *object = NULL; - foreach_ptr(object, stmt->objects) + foreach_declared_ptr(object, stmt->objects) { /* TODO understand if the lock should be sth else */ Relation rel = NULL; /* not used, but required to pass to get_object_address */ @@ -267,7 +267,7 @@ PreprocessDropDistributedObjectStmt(Node *node, const char *queryString, * remove the entries for the distributed objects on dropping */ ObjectAddress *address = NULL; - foreach_ptr(address, distributedObjectAddresses) + foreach_declared_ptr(address, distributedObjectAddresses) { UnmarkObjectDistributed(address); } @@ -303,7 +303,7 @@ DropTextSearchDictObjectAddress(Node *node, bool missing_ok, bool isPostprocess) List *objectAddresses = NIL; List *objNameList = NIL; - foreach_ptr(objNameList, stmt->objects) + foreach_declared_ptr(objNameList, stmt->objects) { Oid tsdictOid = get_ts_dict_oid(objNameList, missing_ok); @@ -328,7 +328,7 @@ DropTextSearchConfigObjectAddress(Node *node, bool missing_ok, bool isPostproces List *objectAddresses = NIL; List *objNameList = NIL; - foreach_ptr(objNameList, stmt->objects) + foreach_declared_ptr(objNameList, stmt->objects) { Oid tsconfigOid = get_ts_config_oid(objNameList, missing_ok); diff --git a/src/backend/distributed/commands/create_distributed_table.c b/src/backend/distributed/commands/create_distributed_table.c index 8c59aa19908..7af6f2dd0da 100644 --- a/src/backend/distributed/commands/create_distributed_table.c +++ b/src/backend/distributed/commands/create_distributed_table.c @@ -834,7 +834,7 @@ HashSplitPointsForShardList(List *shardList) List *splitPointList = NIL; ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardList) + foreach_declared_ptr(shardInterval, shardList) { int32 shardMaxValue = DatumGetInt32(shardInterval->maxValue); @@ -890,7 +890,7 @@ WorkerNodesForShardList(List *shardList) List *nodeIdList = NIL; ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardList) + foreach_declared_ptr(shardInterval, shardList) { WorkerNode *workerNode = ActiveShardPlacementWorkerNode(shardInterval->shardId); nodeIdList = lappend_int(nodeIdList, workerNode->nodeId); @@ -1337,7 +1337,7 @@ CreateCitusTable(Oid relationId, CitusTableType tableType, ALLOCSET_DEFAULT_SIZES); MemoryContext oldContext = MemoryContextSwitchTo(citusPartitionContext); - foreach_oid(partitionRelationId, partitionList) + foreach_declared_oid(partitionRelationId, partitionList) { MemoryContextReset(citusPartitionContext); @@ -1551,7 +1551,7 @@ ConvertCitusLocalTableToTableType(Oid relationId, CitusTableType tableType, MemoryContext oldContext = MemoryContextSwitchTo(citusPartitionContext); Oid partitionRelationId = InvalidOid; - foreach_oid(partitionRelationId, partitionList) + foreach_declared_oid(partitionRelationId, partitionList) { MemoryContextReset(citusPartitionContext); @@ -1701,7 +1701,7 @@ EnsureSequenceTypeSupported(Oid seqOid, Oid attributeTypeId, Oid ownerRelationId Oid attrDefOid; List *attrDefOids = GetAttrDefsFromSequence(seqOid); - foreach_oid(attrDefOid, attrDefOids) + foreach_declared_oid(attrDefOid, attrDefOids) { ObjectAddress columnAddress = GetAttrDefaultColumnAddress(attrDefOid); @@ -1783,7 +1783,7 @@ static void EnsureDistributedSequencesHaveOneType(Oid relationId, List *seqInfoList) { SequenceInfo *seqInfo = NULL; - foreach_ptr(seqInfo, seqInfoList) + foreach_declared_ptr(seqInfo, seqInfoList) { if (!seqInfo->isNextValDefault) { diff --git a/src/backend/distributed/commands/database.c b/src/backend/distributed/commands/database.c index 5479a59edcf..d916b16a0bc 100644 --- a/src/backend/distributed/commands/database.c +++ b/src/backend/distributed/commands/database.c @@ -235,7 +235,7 @@ FilterDistributedDatabases(List *databases) { List *distributedDatabases = NIL; String *databaseName = NULL; - foreach_ptr(databaseName, databases) + foreach_declared_ptr(databaseName, databases) { bool missingOk = true; ObjectAddress *dbAddress = @@ -258,7 +258,7 @@ static bool IsSetTablespaceStatement(AlterDatabaseStmt *stmt) { DefElem *def = NULL; - foreach_ptr(def, stmt->options) + foreach_declared_ptr(def, stmt->options) { if (strcmp(def->defname, "tablespace") == 0) { @@ -510,7 +510,7 @@ PreprocessCreateDatabaseStmt(Node *node, const char *queryString, List *remoteNodes = TargetWorkerSetNodeList(ALL_SHARD_NODES, RowShareLock); WorkerNode *remoteNode = NULL; - foreach_ptr(remoteNode, remoteNodes) + foreach_declared_ptr(remoteNode, remoteNodes) { InsertCleanupRecordOutsideTransaction( CLEANUP_OBJECT_DATABASE, @@ -733,7 +733,7 @@ void EnsureSupportedCreateDatabaseCommand(CreatedbStmt *stmt) { DefElem *option = NULL; - foreach_ptr(option, stmt->options) + foreach_declared_ptr(option, stmt->options) { if (strcmp(option->defname, "oid") == 0) { diff --git a/src/backend/distributed/commands/dependencies.c b/src/backend/distributed/commands/dependencies.c index c7de5d874b7..e1e77a7eb62 100644 --- a/src/backend/distributed/commands/dependencies.c +++ b/src/backend/distributed/commands/dependencies.c @@ -162,7 +162,7 @@ EnsureRequiredObjectSetExistOnAllNodes(const ObjectAddress *target, } ObjectAddress *object = NULL; - foreach_ptr(object, objectsToBeCreated) + foreach_declared_ptr(object, objectsToBeCreated) { List *dependencyCommands = GetDependencyCreateDDLCommands(object); ddlCommands = list_concat(ddlCommands, dependencyCommands); @@ -201,7 +201,7 @@ EnsureRequiredObjectSetExistOnAllNodes(const ObjectAddress *target, */ List *addressSortedDependencies = SortList(objectsWithCommands, ObjectAddressComparator); - foreach_ptr(object, addressSortedDependencies) + foreach_declared_ptr(object, addressSortedDependencies) { LockDatabaseObject(object->classId, object->objectId, object->objectSubId, ExclusiveLock); @@ -240,7 +240,7 @@ EnsureRequiredObjectSetExistOnAllNodes(const ObjectAddress *target, else { WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, remoteNodeList) + foreach_declared_ptr(workerNode, remoteNodeList) { const char *nodeName = workerNode->workerName; uint32 nodePort = workerNode->workerPort; @@ -256,7 +256,7 @@ EnsureRequiredObjectSetExistOnAllNodes(const ObjectAddress *target, * that objects have been created on remote nodes before marking them * distributed, so MarkObjectDistributed wouldn't fail. */ - foreach_ptr(object, objectsWithCommands) + foreach_declared_ptr(object, objectsWithCommands) { /* * pg_dist_object entries must be propagated with the super user, since @@ -279,7 +279,7 @@ void EnsureAllObjectDependenciesExistOnAllNodes(const List *targets) { ObjectAddress *target = NULL; - foreach_ptr(target, targets) + foreach_declared_ptr(target, targets) { EnsureDependenciesExistOnAllNodes(target); } @@ -336,7 +336,7 @@ DeferErrorIfCircularDependencyExists(const ObjectAddress *objectAddress) List *dependencies = GetAllDependenciesForObject(objectAddress); ObjectAddress *dependency = NULL; - foreach_ptr(dependency, dependencies) + foreach_declared_ptr(dependency, dependencies) { if (dependency->classId == objectAddress->classId && dependency->objectId == objectAddress->objectId && @@ -424,7 +424,7 @@ GetDistributableDependenciesForObject(const ObjectAddress *target) /* filter the ones that can be distributed */ ObjectAddress *dependency = NULL; - foreach_ptr(dependency, dependencies) + foreach_declared_ptr(dependency, dependencies) { /* * TODO: maybe we can optimize the logic applied in below line. Actually we @@ -508,7 +508,7 @@ GetDependencyCreateDDLCommands(const ObjectAddress *dependency) INCLUDE_IDENTITY, creatingShellTableOnRemoteNode); TableDDLCommand *tableDDLCommand = NULL; - foreach_ptr(tableDDLCommand, tableDDLCommands) + foreach_declared_ptr(tableDDLCommand, tableDDLCommands) { Assert(CitusIsA(tableDDLCommand, TableDDLCommand)); commandList = lappend(commandList, GetTableDDLCommand( @@ -683,7 +683,7 @@ GetAllDependencyCreateDDLCommands(const List *dependencies) List *commands = NIL; ObjectAddress *dependency = NULL; - foreach_ptr(dependency, dependencies) + foreach_declared_ptr(dependency, dependencies) { commands = list_concat(commands, GetDependencyCreateDDLCommands(dependency)); } @@ -831,7 +831,7 @@ bool ShouldPropagateAnyObject(List *addresses) { ObjectAddress *address = NULL; - foreach_ptr(address, addresses) + foreach_declared_ptr(address, addresses) { if (ShouldPropagateObject(address)) { @@ -853,7 +853,7 @@ FilterObjectAddressListByPredicate(List *objectAddressList, AddressPredicate pre List *result = NIL; ObjectAddress *address = NULL; - foreach_ptr(address, objectAddressList) + foreach_declared_ptr(address, objectAddressList) { if (predicate(address)) { diff --git a/src/backend/distributed/commands/domain.c b/src/backend/distributed/commands/domain.c index 82ef80c0f4b..d62428ce439 100644 --- a/src/backend/distributed/commands/domain.c +++ b/src/backend/distributed/commands/domain.c @@ -210,7 +210,7 @@ MakeCollateClauseFromOid(Oid collationOid) getObjectIdentityParts(&collateAddress, &objName, &objArgs, false); char *name = NULL; - foreach_ptr(name, objName) + foreach_declared_ptr(name, objName) { collateClause->collname = lappend(collateClause->collname, makeString(name)); } diff --git a/src/backend/distributed/commands/extension.c b/src/backend/distributed/commands/extension.c index 8d4c6431b77..17f9ff57512 100644 --- a/src/backend/distributed/commands/extension.c +++ b/src/backend/distributed/commands/extension.c @@ -274,7 +274,7 @@ PreprocessDropExtensionStmt(Node *node, const char *queryString, /* unmark each distributed extension */ ObjectAddress *address = NULL; - foreach_ptr(address, distributedExtensionAddresses) + foreach_declared_ptr(address, distributedExtensionAddresses) { UnmarkObjectDistributed(address); } @@ -313,7 +313,7 @@ FilterDistributedExtensions(List *extensionObjectList) List *extensionNameList = NIL; String *objectName = NULL; - foreach_ptr(objectName, extensionObjectList) + foreach_declared_ptr(objectName, extensionObjectList) { const char *extensionName = strVal(objectName); const bool missingOk = true; @@ -351,7 +351,7 @@ ExtensionNameListToObjectAddressList(List *extensionObjectList) List *extensionObjectAddressList = NIL; String *objectName; - foreach_ptr(objectName, extensionObjectList) + foreach_declared_ptr(objectName, extensionObjectList) { /* * We set missingOk to false as we assume all the objects in @@ -527,7 +527,7 @@ MarkExistingObjectDependenciesDistributedIfSupported() List *citusTableIdList = CitusTableTypeIdList(ANY_CITUS_TABLE_TYPE); Oid citusTableId = InvalidOid; - foreach_oid(citusTableId, citusTableIdList) + foreach_declared_oid(citusTableId, citusTableIdList) { if (!ShouldMarkRelationDistributed(citusTableId)) { @@ -571,7 +571,7 @@ MarkExistingObjectDependenciesDistributedIfSupported() */ List *viewList = GetAllViews(); Oid viewOid = InvalidOid; - foreach_oid(viewOid, viewList) + foreach_declared_oid(viewOid, viewList) { if (!ShouldMarkRelationDistributed(viewOid)) { @@ -605,7 +605,7 @@ MarkExistingObjectDependenciesDistributedIfSupported() List *distributedObjectAddressList = GetDistributedObjectAddressList(); ObjectAddress *distributedObjectAddress = NULL; - foreach_ptr(distributedObjectAddress, distributedObjectAddressList) + foreach_declared_ptr(distributedObjectAddress, distributedObjectAddressList) { List *distributableDependencyObjectAddresses = GetDistributableDependenciesForObject(distributedObjectAddress); @@ -627,7 +627,7 @@ MarkExistingObjectDependenciesDistributedIfSupported() SetLocalEnableMetadataSync(false); ObjectAddress *objectAddress = NULL; - foreach_ptr(objectAddress, uniqueObjectAddresses) + foreach_declared_ptr(objectAddress, uniqueObjectAddresses) { MarkObjectDistributed(objectAddress); } @@ -831,7 +831,7 @@ IsDropCitusExtensionStmt(Node *parseTree) /* now that we have a DropStmt, check if citus extension is among the objects to dropped */ String *objectName; - foreach_ptr(objectName, dropStmt->objects) + foreach_declared_ptr(objectName, dropStmt->objects) { const char *extensionName = strVal(objectName); @@ -1061,7 +1061,7 @@ GenerateGrantCommandsOnExtensionDependentFDWs(Oid extensionId) List *FDWOids = GetDependentFDWsToExtension(extensionId); Oid FDWOid = InvalidOid; - foreach_oid(FDWOid, FDWOids) + foreach_declared_oid(FDWOid, FDWOids) { Acl *aclEntry = GetPrivilegesForFDW(FDWOid); diff --git a/src/backend/distributed/commands/foreign_constraint.c b/src/backend/distributed/commands/foreign_constraint.c index 2f60c3fb11f..b7162b1a493 100644 --- a/src/backend/distributed/commands/foreign_constraint.c +++ b/src/backend/distributed/commands/foreign_constraint.c @@ -202,7 +202,7 @@ ErrorIfUnsupportedForeignConstraintExists(Relation relation, char referencingDis List *foreignKeyOids = GetForeignKeyOids(referencingTableId, flags); Oid foreignKeyOid = InvalidOid; - foreach_oid(foreignKeyOid, foreignKeyOids) + foreach_declared_oid(foreignKeyOid, foreignKeyOids) { HeapTuple heapTuple = SearchSysCache1(CONSTROID, ObjectIdGetDatum(foreignKeyOid)); @@ -414,7 +414,7 @@ ForeignKeySetsNextValColumnToDefault(HeapTuple pgConstraintTuple) List *setDefaultAttrs = ForeignKeyGetDefaultingAttrs(pgConstraintTuple); AttrNumber setDefaultAttr = InvalidAttrNumber; - foreach_int(setDefaultAttr, setDefaultAttrs) + foreach_declared_int(setDefaultAttr, setDefaultAttrs) { if (ColumnDefaultsToNextVal(pgConstraintForm->conrelid, setDefaultAttr)) { @@ -727,7 +727,7 @@ ColumnAppearsInForeignKeyToReferenceTable(char *columnName, Oid relationId) GetForeignKeyIdsForColumn(columnName, relationId, searchForeignKeyColumnFlags); Oid foreignKeyId = InvalidOid; - foreach_oid(foreignKeyId, foreignKeyIdsColumnAppeared) + foreach_declared_oid(foreignKeyId, foreignKeyIdsColumnAppeared) { Oid referencedTableId = GetReferencedTableId(foreignKeyId); if (IsCitusTableType(referencedTableId, REFERENCE_TABLE)) @@ -901,7 +901,7 @@ GetForeignConstraintCommandsInternal(Oid relationId, int flags) int saveNestLevel = PushEmptySearchPath(); Oid foreignKeyOid = InvalidOid; - foreach_oid(foreignKeyOid, foreignKeyOids) + foreach_declared_oid(foreignKeyOid, foreignKeyOids) { char *statementDef = pg_get_constraintdef_command(foreignKeyOid); @@ -1157,7 +1157,7 @@ static Oid FindForeignKeyOidWithName(List *foreignKeyOids, const char *inputConstraintName) { Oid foreignKeyOid = InvalidOid; - foreach_oid(foreignKeyOid, foreignKeyOids) + foreach_declared_oid(foreignKeyOid, foreignKeyOids) { char *constraintName = get_constraint_name(foreignKeyOid); @@ -1472,7 +1472,7 @@ RelationInvolvedInAnyNonInheritedForeignKeys(Oid relationId) List *foreignKeysRelationInvolved = list_concat(referencingForeignKeys, referencedForeignKeys); Oid foreignKeyId = InvalidOid; - foreach_oid(foreignKeyId, foreignKeysRelationInvolved) + foreach_declared_oid(foreignKeyId, foreignKeysRelationInvolved) { HeapTuple heapTuple = SearchSysCache1(CONSTROID, ObjectIdGetDatum(foreignKeyId)); if (!HeapTupleIsValid(heapTuple)) diff --git a/src/backend/distributed/commands/foreign_data_wrapper.c b/src/backend/distributed/commands/foreign_data_wrapper.c index a181e63a733..e095f9894c4 100644 --- a/src/backend/distributed/commands/foreign_data_wrapper.c +++ b/src/backend/distributed/commands/foreign_data_wrapper.c @@ -86,7 +86,7 @@ static bool NameListHasFDWOwnedByDistributedExtension(List *FDWNames) { String *FDWValue = NULL; - foreach_ptr(FDWValue, FDWNames) + foreach_declared_ptr(FDWValue, FDWNames) { /* captures the extension address during lookup */ ObjectAddress *extensionAddress = palloc0(sizeof(ObjectAddress)); diff --git a/src/backend/distributed/commands/foreign_server.c b/src/backend/distributed/commands/foreign_server.c index d2e5755643d..096690e2b04 100644 --- a/src/backend/distributed/commands/foreign_server.c +++ b/src/backend/distributed/commands/foreign_server.c @@ -229,7 +229,7 @@ RecreateForeignServerStmt(Oid serverId) int location = -1; DefElem *option = NULL; - foreach_ptr(option, server->options) + foreach_declared_ptr(option, server->options) { DefElem *copyOption = makeDefElem(option->defname, option->arg, location); createStmt->options = lappend(createStmt->options, copyOption); @@ -247,7 +247,7 @@ static bool NameListHasDistributedServer(List *serverNames) { String *serverValue = NULL; - foreach_ptr(serverValue, serverNames) + foreach_declared_ptr(serverValue, serverNames) { List *addresses = GetObjectAddressByServerName(strVal(serverValue), false); diff --git a/src/backend/distributed/commands/function.c b/src/backend/distributed/commands/function.c index 6d2dd0ba975..b2b3484e6f4 100644 --- a/src/backend/distributed/commands/function.c +++ b/src/backend/distributed/commands/function.c @@ -256,7 +256,7 @@ create_distributed_function(PG_FUNCTION_ARGS) createFunctionSQL, alterFunctionOwnerSQL); List *grantDDLCommands = GrantOnFunctionDDLCommands(funcOid); char *grantOnFunctionSQL = NULL; - foreach_ptr(grantOnFunctionSQL, grantDDLCommands) + foreach_declared_ptr(grantOnFunctionSQL, grantDDLCommands) { appendStringInfo(&ddlCommand, ";%s", grantOnFunctionSQL); } @@ -370,7 +370,7 @@ ErrorIfAnyNodeDoesNotHaveMetadata(void) ActivePrimaryNonCoordinatorNodeList(ShareLock); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { if (!workerNode->hasMetadata) { @@ -1476,7 +1476,7 @@ CreateFunctionStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess) objectWithArgs->objname = stmt->funcname; FunctionParameter *funcParam = NULL; - foreach_ptr(funcParam, stmt->parameters) + foreach_declared_ptr(funcParam, stmt->parameters) { if (ShouldAddFunctionSignature(funcParam->mode)) { @@ -1519,7 +1519,7 @@ DefineAggregateStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess if (stmt->args != NIL) { FunctionParameter *funcParam = NULL; - foreach_ptr(funcParam, linitial(stmt->args)) + foreach_declared_ptr(funcParam, linitial(stmt->args)) { objectWithArgs->objargs = lappend(objectWithArgs->objargs, funcParam->argType); @@ -1528,7 +1528,7 @@ DefineAggregateStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess else { DefElem *defItem = NULL; - foreach_ptr(defItem, stmt->definition) + foreach_declared_ptr(defItem, stmt->definition) { /* * If no explicit args are given, pg includes basetype in the signature. @@ -1933,7 +1933,7 @@ static void ErrorIfUnsupportedAlterFunctionStmt(AlterFunctionStmt *stmt) { DefElem *action = NULL; - foreach_ptr(action, stmt->actions) + foreach_declared_ptr(action, stmt->actions) { if (strcmp(action->defname, "set") == 0) { @@ -2040,7 +2040,7 @@ PreprocessGrantOnFunctionStmt(Node *node, const char *queryString, List *grantFunctionList = NIL; ObjectAddress *functionAddress = NULL; - foreach_ptr(functionAddress, distributedFunctions) + foreach_declared_ptr(functionAddress, distributedFunctions) { ObjectWithArgs *distFunction = ObjectWithArgsFromOid( functionAddress->objectId); @@ -2083,7 +2083,7 @@ PostprocessGrantOnFunctionStmt(Node *node, const char *queryString) } ObjectAddress *functionAddress = NULL; - foreach_ptr(functionAddress, distributedFunctions) + foreach_declared_ptr(functionAddress, distributedFunctions) { EnsureAllObjectDependenciesExistOnAllNodes(list_make1(functionAddress)); } @@ -2120,7 +2120,7 @@ FilterDistributedFunctions(GrantStmt *grantStmt) /* iterate over all namespace names provided to get their oid's */ String *namespaceValue = NULL; - foreach_ptr(namespaceValue, grantStmt->objects) + foreach_declared_ptr(namespaceValue, grantStmt->objects) { char *nspname = strVal(namespaceValue); bool missing_ok = false; @@ -2132,7 +2132,7 @@ FilterDistributedFunctions(GrantStmt *grantStmt) * iterate over all distributed functions to filter the ones * that belong to one of the namespaces from above */ - foreach_ptr(distributedFunction, distributedFunctionList) + foreach_declared_ptr(distributedFunction, distributedFunctionList) { Oid namespaceOid = get_func_namespace(distributedFunction->objectId); @@ -2151,7 +2151,7 @@ FilterDistributedFunctions(GrantStmt *grantStmt) { bool missingOk = false; ObjectWithArgs *objectWithArgs = NULL; - foreach_ptr(objectWithArgs, grantStmt->objects) + foreach_declared_ptr(objectWithArgs, grantStmt->objects) { ObjectAddress *functionAddress = palloc0(sizeof(ObjectAddress)); functionAddress->classId = ProcedureRelationId; diff --git a/src/backend/distributed/commands/index.c b/src/backend/distributed/commands/index.c index e97312df271..f4943ebde61 100644 --- a/src/backend/distributed/commands/index.c +++ b/src/backend/distributed/commands/index.c @@ -337,7 +337,7 @@ ExecuteFunctionOnEachTableIndex(Oid relationId, PGIndexProcessor pgIndexProcesso List *indexIdList = RelationGetIndexList(relation); Oid indexId = InvalidOid; - foreach_oid(indexId, indexIdList) + foreach_declared_oid(indexId, indexIdList) { HeapTuple indexTuple = SearchSysCache1(INDEXRELID, ObjectIdGetDatum(indexId)); if (!HeapTupleIsValid(indexTuple)) @@ -708,7 +708,7 @@ PreprocessDropIndexStmt(Node *node, const char *dropIndexCommand, /* check if any of the indexes being dropped belong to a distributed table */ List *objectNameList = NULL; - foreach_ptr(objectNameList, dropIndexStatement->objects) + foreach_declared_ptr(objectNameList, dropIndexStatement->objects) { struct DropRelationCallbackState state; uint32 rvrFlags = RVR_MISSING_OK; @@ -880,7 +880,7 @@ ErrorIfUnsupportedAlterIndexStmt(AlterTableStmt *alterTableStatement) /* error out if any of the subcommands are unsupported */ List *commandList = alterTableStatement->cmds; AlterTableCmd *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { AlterTableType alterTableType = command->subtype; @@ -932,7 +932,7 @@ CreateIndexTaskList(IndexStmt *indexStmt) LockShardListMetadata(shardIntervalList, ShareLock); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { uint64 shardId = shardInterval->shardId; @@ -977,7 +977,7 @@ CreateReindexTaskList(Oid relationId, ReindexStmt *reindexStmt) LockShardListMetadata(shardIntervalList, ShareLock); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { uint64 shardId = shardInterval->shardId; @@ -1226,7 +1226,7 @@ ErrorIfUnsupportedIndexStmt(IndexStmt *createIndexStatement) Var *partitionKey = DistPartitionKeyOrError(relationId); List *indexParameterList = createIndexStatement->indexParams; IndexElem *indexElement = NULL; - foreach_ptr(indexElement, indexParameterList) + foreach_declared_ptr(indexElement, indexParameterList) { const char *columnName = indexElement->name; @@ -1295,7 +1295,7 @@ DropIndexTaskList(Oid relationId, Oid indexId, DropStmt *dropStmt) LockShardListMetadata(shardIntervalList, ShareLock); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { uint64 shardId = shardInterval->shardId; char *shardIndexName = pstrdup(indexName); diff --git a/src/backend/distributed/commands/multi_copy.c b/src/backend/distributed/commands/multi_copy.c index cb64ef7f55a..573d49a324a 100644 --- a/src/backend/distributed/commands/multi_copy.c +++ b/src/backend/distributed/commands/multi_copy.c @@ -1957,7 +1957,7 @@ ShardIntervalListHasLocalPlacements(List *shardIntervalList) { int32 localGroupId = GetLocalGroupId(); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { if (ActiveShardPlacementOnGroup(localGroupId, shardInterval->shardId) != NULL) { @@ -2452,7 +2452,7 @@ ProcessAppendToShardOption(Oid relationId, CopyStmt *copyStatement) bool appendToShardSet = false; DefElem *defel = NULL; - foreach_ptr(defel, copyStatement->options) + foreach_declared_ptr(defel, copyStatement->options) { if (strncmp(defel->defname, APPEND_TO_SHARD_OPTION, NAMEDATALEN) == 0) { diff --git a/src/backend/distributed/commands/non_main_db_distribute_object_ops.c b/src/backend/distributed/commands/non_main_db_distribute_object_ops.c index b777936d3e4..fdd29b1e18a 100644 --- a/src/backend/distributed/commands/non_main_db_distribute_object_ops.c +++ b/src/backend/distributed/commands/non_main_db_distribute_object_ops.c @@ -255,7 +255,7 @@ static void DropRoleStmtUnmarkDistOnLocalMainDb(DropRoleStmt *dropRoleStmt) { RoleSpec *roleSpec = NULL; - foreach_ptr(roleSpec, dropRoleStmt->roles) + foreach_declared_ptr(roleSpec, dropRoleStmt->roles) { Oid roleOid = get_role_oid(roleSpec->rolename, dropRoleStmt->missing_ok); diff --git a/src/backend/distributed/commands/policy.c b/src/backend/distributed/commands/policy.c index a2a926b6677..97292e29d92 100644 --- a/src/backend/distributed/commands/policy.c +++ b/src/backend/distributed/commands/policy.c @@ -48,7 +48,7 @@ CreatePolicyCommands(Oid relationId) List *policyList = GetPolicyListForRelation(relationId); RowSecurityPolicy *policy; - foreach_ptr(policy, policyList) + foreach_declared_ptr(policy, policyList) { char *createPolicyCommand = CreatePolicyCommandForPolicy(relationId, policy); commands = lappend(commands, makeTableDDLCommandString(createPolicyCommand)); @@ -88,7 +88,7 @@ GetPolicyListForRelation(Oid relationId) List *policyList = NIL; RowSecurityPolicy *policy; - foreach_ptr(policy, relation->rd_rsdesc->policies) + foreach_declared_ptr(policy, relation->rd_rsdesc->policies) { policyList = lappend(policyList, policy); } @@ -310,7 +310,7 @@ GetPolicyByName(Oid relationId, const char *policyName) List *policyList = GetPolicyListForRelation(relationId); RowSecurityPolicy *policy = NULL; - foreach_ptr(policy, policyList) + foreach_declared_ptr(policy, policyList) { if (strncmp(policy->policy_name, policyName, NAMEDATALEN) == 0) { diff --git a/src/backend/distributed/commands/publication.c b/src/backend/distributed/commands/publication.c index c1cfd5e7732..16dbc9171bf 100644 --- a/src/backend/distributed/commands/publication.c +++ b/src/backend/distributed/commands/publication.c @@ -158,7 +158,7 @@ BuildCreatePublicationStmt(Oid publicationId) List *schemaIds = GetPublicationSchemas(publicationId); Oid schemaId = InvalidOid; - foreach_oid(schemaId, schemaIds) + foreach_declared_oid(schemaId, schemaIds) { char *schemaName = get_namespace_name(schemaId); @@ -181,7 +181,7 @@ BuildCreatePublicationStmt(Oid publicationId) /* mainly for consistent ordering in test output */ relationIds = SortList(relationIds, CompareOids); - foreach_oid(relationId, relationIds) + foreach_declared_oid(relationId, relationIds) { #if (PG_VERSION_NUM >= PG_VERSION_15) bool tableOnly = false; @@ -414,7 +414,7 @@ GetAlterPublicationDDLCommandsForTable(Oid relationId, bool isAdd) List *publicationIds = GetRelationPublications(relationId); Oid publicationId = InvalidOid; - foreach_oid(publicationId, publicationIds) + foreach_declared_oid(publicationId, publicationIds) { char *command = GetAlterPublicationTableDDLCommand(publicationId, relationId, isAdd); diff --git a/src/backend/distributed/commands/role.c b/src/backend/distributed/commands/role.c index 7f5f697f2b1..41cba74d063 100644 --- a/src/backend/distributed/commands/role.c +++ b/src/backend/distributed/commands/role.c @@ -74,7 +74,9 @@ static char * GetRoleNameFromDbRoleSetting(HeapTuple tuple, TupleDesc DbRoleSettingDescription); static char * GetDatabaseNameFromDbRoleSetting(HeapTuple tuple, TupleDesc DbRoleSettingDescription); +#if PG_VERSION_NUM < PG_VERSION_17 static Node * makeStringConst(char *str, int location); +#endif static Node * makeIntConst(int val, int location); static Node * makeFloatConst(char *str, int location); static const char * WrapQueryInAlterRoleIfExistsCall(const char *query, RoleSpec *role); @@ -163,7 +165,7 @@ PostprocessAlterRoleStmt(Node *node, const char *queryString) AlterRoleStmt *stmt = castNode(AlterRoleStmt, node); DefElem *option = NULL; - foreach_ptr(option, stmt->options) + foreach_declared_ptr(option, stmt->options) { if (strcasecmp(option->defname, "password") == 0) { @@ -564,7 +566,7 @@ GenerateCreateOrAlterRoleCommand(Oid roleOid) { List *grantRoleStmts = GenerateGrantRoleStmtsOfRole(roleOid); Node *stmt = NULL; - foreach_ptr(stmt, grantRoleStmts) + foreach_declared_ptr(stmt, grantRoleStmts) { completeRoleList = lappend(completeRoleList, DeparseTreeNode(stmt)); } @@ -578,7 +580,7 @@ GenerateCreateOrAlterRoleCommand(Oid roleOid) */ List *secLabelOnRoleStmts = GenerateSecLabelOnRoleStmts(roleOid, rolename); stmt = NULL; - foreach_ptr(stmt, secLabelOnRoleStmts) + foreach_declared_ptr(stmt, secLabelOnRoleStmts) { completeRoleList = lappend(completeRoleList, DeparseTreeNode(stmt)); } @@ -787,7 +789,7 @@ MakeSetStatementArguments(char *configurationName, char *configurationValue) } char *configuration = NULL; - foreach_ptr(configuration, configurationList) + foreach_declared_ptr(configuration, configurationList) { Node *arg = makeStringConst(configuration, -1); args = lappend(args, arg); @@ -823,7 +825,7 @@ GenerateGrantRoleStmtsFromOptions(RoleSpec *roleSpec, List *options) List *stmts = NIL; DefElem *option = NULL; - foreach_ptr(option, options) + foreach_declared_ptr(option, options) { if (strcmp(option->defname, "adminmembers") != 0 && strcmp(option->defname, "rolemembers") != 0 && @@ -1047,7 +1049,7 @@ PreprocessCreateRoleStmt(Node *node, const char *queryString, /* deparse all grant statements and add them to the commands list */ Node *stmt = NULL; - foreach_ptr(stmt, grantRoleStmts) + foreach_declared_ptr(stmt, grantRoleStmts) { commands = lappend(commands, DeparseTreeNode(stmt)); } @@ -1058,6 +1060,8 @@ PreprocessCreateRoleStmt(Node *node, const char *queryString, } +#if PG_VERSION_NUM < PG_VERSION_17 + /* * makeStringConst creates a Const Node that stores a given string * @@ -1081,6 +1085,9 @@ makeStringConst(char *str, int location) } +#endif + + /* * makeIntConst creates a Const Node that stores a given integer * @@ -1174,7 +1181,7 @@ void UnmarkRolesDistributed(List *roles) { Node *roleNode = NULL; - foreach_ptr(roleNode, roles) + foreach_declared_ptr(roleNode, roles) { RoleSpec *role = castNode(RoleSpec, roleNode); ObjectAddress roleAddress = { 0 }; @@ -1204,7 +1211,7 @@ FilterDistributedRoles(List *roles) { List *distributedRoles = NIL; Node *roleNode = NULL; - foreach_ptr(roleNode, roles) + foreach_declared_ptr(roleNode, roles) { RoleSpec *role = castNode(RoleSpec, roleNode); Oid roleOid = get_rolespec_oid(role, true); @@ -1282,7 +1289,7 @@ PostprocessGrantRoleStmt(Node *node, const char *queryString) GrantRoleStmt *stmt = castNode(GrantRoleStmt, node); RoleSpec *role = NULL; - foreach_ptr(role, stmt->grantee_roles) + foreach_declared_ptr(role, stmt->grantee_roles) { Oid roleOid = get_rolespec_oid(role, false); ObjectAddress *roleAddress = palloc0(sizeof(ObjectAddress)); diff --git a/src/backend/distributed/commands/schema.c b/src/backend/distributed/commands/schema.c index 7f79897faed..b079fe3f674 100644 --- a/src/backend/distributed/commands/schema.c +++ b/src/backend/distributed/commands/schema.c @@ -162,7 +162,7 @@ PreprocessDropSchemaStmt(Node *node, const char *queryString, EnsureSequentialMode(OBJECT_SCHEMA); String *schemaVal = NULL; - foreach_ptr(schemaVal, distributedSchemas) + foreach_declared_ptr(schemaVal, distributedSchemas) { if (SchemaHasDistributedTableWithFKey(strVal(schemaVal))) { @@ -322,7 +322,7 @@ FilterDistributedSchemas(List *schemas) List *distributedSchemas = NIL; String *schemaValue = NULL; - foreach_ptr(schemaValue, schemas) + foreach_declared_ptr(schemaValue, schemas) { const char *schemaName = strVal(schemaValue); Oid schemaOid = get_namespace_oid(schemaName, true); @@ -443,7 +443,7 @@ GetGrantCommandsFromCreateSchemaStmt(Node *node) CreateSchemaStmt *stmt = castNode(CreateSchemaStmt, node); Node *element = NULL; - foreach_ptr(element, stmt->schemaElts) + foreach_declared_ptr(element, stmt->schemaElts) { if (!IsA(element, GrantStmt)) { @@ -480,7 +480,7 @@ static bool CreateSchemaStmtCreatesTable(CreateSchemaStmt *stmt) { Node *element = NULL; - foreach_ptr(element, stmt->schemaElts) + foreach_declared_ptr(element, stmt->schemaElts) { /* * CREATE TABLE AS and CREATE FOREIGN TABLE commands cannot be diff --git a/src/backend/distributed/commands/schema_based_sharding.c b/src/backend/distributed/commands/schema_based_sharding.c index 7cde9698295..6635d6817a5 100644 --- a/src/backend/distributed/commands/schema_based_sharding.c +++ b/src/backend/distributed/commands/schema_based_sharding.c @@ -174,7 +174,7 @@ EnsureTableKindSupportedForTenantSchema(Oid relationId) List *partitionList = PartitionList(relationId); Oid partitionRelationId = InvalidOid; - foreach_oid(partitionRelationId, partitionList) + foreach_declared_oid(partitionRelationId, partitionList) { ErrorIfIllegalPartitioningInTenantSchema(relationId, partitionRelationId); } @@ -199,7 +199,7 @@ EnsureFKeysForTenantTable(Oid relationId) int fKeyReferencingFlags = INCLUDE_REFERENCING_CONSTRAINTS | INCLUDE_ALL_TABLE_TYPES; List *referencingForeignKeys = GetForeignKeyOids(relationId, fKeyReferencingFlags); Oid foreignKeyId = InvalidOid; - foreach_oid(foreignKeyId, referencingForeignKeys) + foreach_declared_oid(foreignKeyId, referencingForeignKeys) { Oid referencingTableId = GetReferencingTableId(foreignKeyId); Oid referencedTableId = GetReferencedTableId(foreignKeyId); @@ -232,7 +232,7 @@ EnsureFKeysForTenantTable(Oid relationId) int fKeyReferencedFlags = INCLUDE_REFERENCED_CONSTRAINTS | INCLUDE_ALL_TABLE_TYPES; List *referencedForeignKeys = GetForeignKeyOids(relationId, fKeyReferencedFlags); - foreach_oid(foreignKeyId, referencedForeignKeys) + foreach_declared_oid(foreignKeyId, referencedForeignKeys) { Oid referencingTableId = GetReferencingTableId(foreignKeyId); Oid referencedTableId = GetReferencedTableId(foreignKeyId); @@ -429,7 +429,7 @@ EnsureSchemaCanBeDistributed(Oid schemaId, List *schemaTableIdList) } Oid relationId = InvalidOid; - foreach_oid(relationId, schemaTableIdList) + foreach_declared_oid(relationId, schemaTableIdList) { EnsureTenantTable(relationId, "citus_schema_distribute"); } @@ -637,7 +637,7 @@ citus_schema_distribute(PG_FUNCTION_ARGS) List *tableIdListInSchema = SchemaGetNonShardTableIdList(schemaId); List *tableIdListToConvert = NIL; Oid relationId = InvalidOid; - foreach_oid(relationId, tableIdListInSchema) + foreach_declared_oid(relationId, tableIdListInSchema) { /* prevent concurrent drop of the relation */ LockRelationOid(relationId, AccessShareLock); @@ -675,7 +675,7 @@ citus_schema_distribute(PG_FUNCTION_ARGS) * tables. */ List *originalForeignKeyRecreationCommands = NIL; - foreach_oid(relationId, tableIdListToConvert) + foreach_declared_oid(relationId, tableIdListToConvert) { List *fkeyCommandsForRelation = GetFKeyCreationCommandsRelationInvolvedWithTableType(relationId, @@ -741,7 +741,7 @@ citus_schema_undistribute(PG_FUNCTION_ARGS) List *tableIdListInSchema = SchemaGetNonShardTableIdList(schemaId); List *tableIdListToConvert = NIL; Oid relationId = InvalidOid; - foreach_oid(relationId, tableIdListInSchema) + foreach_declared_oid(relationId, tableIdListInSchema) { /* prevent concurrent drop of the relation */ LockRelationOid(relationId, AccessShareLock); @@ -883,7 +883,7 @@ TenantSchemaPickAnchorShardId(Oid schemaId) } Oid relationId = InvalidOid; - foreach_oid(relationId, tablesInSchema) + foreach_declared_oid(relationId, tablesInSchema) { /* * Make sure the relation isn't dropped for the remainder of diff --git a/src/backend/distributed/commands/sequence.c b/src/backend/distributed/commands/sequence.c index cfb55faf740..4af4c4853a2 100644 --- a/src/backend/distributed/commands/sequence.c +++ b/src/backend/distributed/commands/sequence.c @@ -123,7 +123,7 @@ static bool OptionsSpecifyOwnedBy(List *optionList, Oid *ownedByTableId) { DefElem *defElem = NULL; - foreach_ptr(defElem, optionList) + foreach_declared_ptr(defElem, optionList) { if (strcmp(defElem->defname, "owned_by") == 0) { @@ -202,7 +202,7 @@ ExtractDefaultColumnsAndOwnedSequences(Oid relationId, List **columnNameList, } Oid ownedSequenceId = InvalidOid; - foreach_oid(ownedSequenceId, columnOwnedSequences) + foreach_declared_oid(ownedSequenceId, columnOwnedSequences) { /* * A column might have multiple sequences one via OWNED BY one another @@ -288,7 +288,7 @@ PreprocessDropSequenceStmt(Node *node, const char *queryString, */ List *deletingSequencesList = stmt->objects; List *objectNameList = NULL; - foreach_ptr(objectNameList, deletingSequencesList) + foreach_declared_ptr(objectNameList, deletingSequencesList) { RangeVar *seq = makeRangeVarFromNameList(objectNameList); @@ -322,7 +322,7 @@ PreprocessDropSequenceStmt(Node *node, const char *queryString, /* remove the entries for the distributed objects on dropping */ ObjectAddress *address = NULL; - foreach_ptr(address, distributedSequenceAddresses) + foreach_declared_ptr(address, distributedSequenceAddresses) { UnmarkObjectDistributed(address); } @@ -356,7 +356,7 @@ SequenceDropStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess) List *droppingSequencesList = dropSeqStmt->objects; List *objectNameList = NULL; - foreach_ptr(objectNameList, droppingSequencesList) + foreach_declared_ptr(objectNameList, droppingSequencesList) { RangeVar *seq = makeRangeVarFromNameList(objectNameList); @@ -476,7 +476,7 @@ PreprocessAlterSequenceStmt(Node *node, const char *queryString, { List *options = stmt->options; DefElem *defel = NULL; - foreach_ptr(defel, options) + foreach_declared_ptr(defel, options) { if (strcmp(defel->defname, "as") == 0) { @@ -511,7 +511,7 @@ SequenceUsedInDistributedTable(const ObjectAddress *sequenceAddress, char depTyp Oid relationId; List *relations = GetDependentRelationsWithSequence(sequenceAddress->objectId, depType); - foreach_oid(relationId, relations) + foreach_declared_oid(relationId, relations) { if (IsCitusTable(relationId)) { @@ -930,7 +930,7 @@ PostprocessGrantOnSequenceStmt(Node *node, const char *queryString) EnsureCoordinator(); RangeVar *sequence = NULL; - foreach_ptr(sequence, distributedSequences) + foreach_declared_ptr(sequence, distributedSequences) { ObjectAddress *sequenceAddress = palloc0(sizeof(ObjectAddress)); Oid sequenceOid = RangeVarGetRelid(sequence, NoLock, false); @@ -1014,7 +1014,7 @@ FilterDistributedSequences(GrantStmt *stmt) /* iterate over all namespace names provided to get their oid's */ List *namespaceOidList = NIL; String *namespaceValue = NULL; - foreach_ptr(namespaceValue, stmt->objects) + foreach_declared_ptr(namespaceValue, stmt->objects) { char *nspname = strVal(namespaceValue); bool missing_ok = false; @@ -1028,7 +1028,7 @@ FilterDistributedSequences(GrantStmt *stmt) */ List *distributedSequenceList = DistributedSequenceList(); ObjectAddress *sequenceAddress = NULL; - foreach_ptr(sequenceAddress, distributedSequenceList) + foreach_declared_ptr(sequenceAddress, distributedSequenceList) { Oid namespaceOid = get_rel_namespace(sequenceAddress->objectId); @@ -1052,7 +1052,7 @@ FilterDistributedSequences(GrantStmt *stmt) { bool missing_ok = false; RangeVar *sequenceRangeVar = NULL; - foreach_ptr(sequenceRangeVar, stmt->objects) + foreach_declared_ptr(sequenceRangeVar, stmt->objects) { Oid sequenceOid = RangeVarGetRelid(sequenceRangeVar, NoLock, missing_ok); ObjectAddress *sequenceAddress = palloc0(sizeof(ObjectAddress)); diff --git a/src/backend/distributed/commands/statistics.c b/src/backend/distributed/commands/statistics.c index 5fac767fd70..b43f6335ef4 100644 --- a/src/backend/distributed/commands/statistics.c +++ b/src/backend/distributed/commands/statistics.c @@ -184,7 +184,7 @@ PreprocessDropStatisticsStmt(Node *node, const char *queryString, List *ddlJobs = NIL; List *processedStatsOids = NIL; List *objectNameList = NULL; - foreach_ptr(objectNameList, dropStatisticsStmt->objects) + foreach_declared_ptr(objectNameList, dropStatisticsStmt->objects) { Oid statsOid = get_statistics_object_oid(objectNameList, dropStatisticsStmt->missing_ok); @@ -234,7 +234,7 @@ DropStatisticsObjectAddress(Node *node, bool missing_ok, bool isPostprocess) List *objectAddresses = NIL; List *objectNameList = NULL; - foreach_ptr(objectNameList, dropStatisticsStmt->objects) + foreach_declared_ptr(objectNameList, dropStatisticsStmt->objects) { Oid statsOid = get_statistics_object_oid(objectNameList, dropStatisticsStmt->missing_ok); @@ -535,7 +535,7 @@ GetExplicitStatisticsCommandList(Oid relationId) int saveNestLevel = PushEmptySearchPath(); Oid statisticsId = InvalidOid; - foreach_oid(statisticsId, statisticsIdList) + foreach_declared_oid(statisticsId, statisticsIdList) { /* we need create commands for already created stats before distribution */ Datum commandText = DirectFunctionCall1(pg_get_statisticsobjdef, @@ -606,7 +606,7 @@ GetExplicitStatisticsSchemaIdList(Oid relationId) RelationClose(relation); Oid statsId = InvalidOid; - foreach_oid(statsId, statsIdList) + foreach_declared_oid(statsId, statsIdList) { HeapTuple heapTuple = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(statsId)); if (!HeapTupleIsValid(heapTuple)) @@ -651,14 +651,15 @@ GetAlterIndexStatisticsCommands(Oid indexOid) } Form_pg_attribute targetAttr = (Form_pg_attribute) GETSTRUCT(attTuple); - if (targetAttr->attstattarget != DEFAULT_STATISTICS_TARGET) + int32 targetAttstattarget = getAttstattarget_compat(attTuple); + if (targetAttstattarget != DEFAULT_STATISTICS_TARGET) { char *indexNameWithSchema = generate_qualified_relation_name(indexOid); char *command = GenerateAlterIndexColumnSetStatsCommand(indexNameWithSchema, targetAttr->attnum, - targetAttr->attstattarget); + targetAttstattarget); alterIndexStatisticsCommandList = lappend(alterIndexStatisticsCommandList, @@ -773,9 +774,10 @@ CreateAlterCommandIfTargetNotDefault(Oid statsOid) } Form_pg_statistic_ext statisticsForm = (Form_pg_statistic_ext) GETSTRUCT(tup); + int16 currentStxstattarget = getStxstattarget_compat(tup); ReleaseSysCache(tup); - if (statisticsForm->stxstattarget == -1) + if (currentStxstattarget == -1) { return NULL; } @@ -785,7 +787,8 @@ CreateAlterCommandIfTargetNotDefault(Oid statsOid) char *schemaName = get_namespace_name(statisticsForm->stxnamespace); char *statName = NameStr(statisticsForm->stxname); - alterStatsStmt->stxstattarget = statisticsForm->stxstattarget; + alterStatsStmt->stxstattarget = getAlterStatsStxstattarget_compat( + currentStxstattarget); alterStatsStmt->defnames = list_make2(makeString(schemaName), makeString(statName)); return DeparseAlterStatisticsStmt((Node *) alterStatsStmt); diff --git a/src/backend/distributed/commands/table.c b/src/backend/distributed/commands/table.c index 30b028b79b1..e65f57961ba 100644 --- a/src/backend/distributed/commands/table.c +++ b/src/backend/distributed/commands/table.c @@ -154,7 +154,7 @@ PreprocessDropTableStmt(Node *node, const char *queryString, Assert(dropTableStatement->removeType == OBJECT_TABLE); List *tableNameList = NULL; - foreach_ptr(tableNameList, dropTableStatement->objects) + foreach_declared_ptr(tableNameList, dropTableStatement->objects) { RangeVar *tableRangeVar = makeRangeVarFromNameList(tableNameList); bool missingOK = true; @@ -202,7 +202,7 @@ PreprocessDropTableStmt(Node *node, const char *queryString, SendCommandToWorkersWithMetadata(DISABLE_DDL_PROPAGATION); Oid partitionRelationId = InvalidOid; - foreach_oid(partitionRelationId, partitionList) + foreach_declared_oid(partitionRelationId, partitionList) { char *detachPartitionCommand = GenerateDetachPartitionCommand(partitionRelationId); @@ -263,7 +263,7 @@ PostprocessCreateTableStmt(CreateStmt *createStatement, const char *queryString) } RangeVar *parentRelation = NULL; - foreach_ptr(parentRelation, createStatement->inhRelations) + foreach_declared_ptr(parentRelation, createStatement->inhRelations) { Oid parentRelationId = RangeVarGetRelid(parentRelation, NoLock, missingOk); @@ -480,7 +480,7 @@ PreprocessAlterTableStmtAttachPartition(AlterTableStmt *alterTableStatement, { List *commandList = alterTableStatement->cmds; AlterTableCmd *alterTableCommand = NULL; - foreach_ptr(alterTableCommand, commandList) + foreach_declared_ptr(alterTableCommand, commandList) { if (alterTableCommand->subtype == AT_AttachPartition) { @@ -792,7 +792,7 @@ ChooseForeignKeyConstraintNameAddition(List *columnNames) String *columnNameString = NULL; - foreach_ptr(columnNameString, columnNames) + foreach_declared_ptr(columnNameString, columnNames) { const char *name = strVal(columnNameString); @@ -1314,7 +1314,7 @@ PreprocessAlterTableStmt(Node *node, const char *alterTableCommand, AlterTableCmd *newCmd = makeNode(AlterTableCmd); AlterTableCmd *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { AlterTableType alterTableType = command->subtype; @@ -1418,7 +1418,7 @@ PreprocessAlterTableStmt(Node *node, const char *alterTableCommand, List *columnConstraints = columnDefinition->constraints; Constraint *constraint = NULL; - foreach_ptr(constraint, columnConstraints) + foreach_declared_ptr(constraint, columnConstraints) { if (constraint->contype == CONSTR_FOREIGN) { @@ -1442,7 +1442,7 @@ PreprocessAlterTableStmt(Node *node, const char *alterTableCommand, deparseAT = true; constraint = NULL; - foreach_ptr(constraint, columnConstraints) + foreach_declared_ptr(constraint, columnConstraints) { if (ConstrTypeCitusCanDefaultName(constraint->contype)) { @@ -1467,7 +1467,7 @@ PreprocessAlterTableStmt(Node *node, const char *alterTableCommand, */ constraint = NULL; int constraintIdx = 0; - foreach_ptr(constraint, columnConstraints) + foreach_declared_ptr(constraint, columnConstraints) { if (constraint->contype == CONSTR_DEFAULT) { @@ -1696,7 +1696,7 @@ DeparserSupportsAlterTableAddColumn(AlterTableStmt *alterTableStatement, { ColumnDef *columnDefinition = (ColumnDef *) addColumnSubCommand->def; Constraint *constraint = NULL; - foreach_ptr(constraint, columnDefinition->constraints) + foreach_declared_ptr(constraint, columnDefinition->constraints) { if (constraint->contype == CONSTR_CHECK) { @@ -1792,7 +1792,7 @@ static bool RelationIdListContainsCitusTableType(List *relationIdList, CitusTableType citusTableType) { Oid relationId = InvalidOid; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { if (IsCitusTableType(relationId, citusTableType)) { @@ -1812,7 +1812,7 @@ static bool RelationIdListContainsPostgresTable(List *relationIdList) { Oid relationId = InvalidOid; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { if (OidIsValid(relationId) && !IsCitusTable(relationId)) { @@ -1851,7 +1851,7 @@ ConvertPostgresLocalTablesToCitusLocalTables(AlterTableStmt *alterTableStatement * change in below loop due to CreateCitusLocalTable. */ RangeVar *relationRangeVar; - foreach_ptr(relationRangeVar, relationRangeVarList) + foreach_declared_ptr(relationRangeVar, relationRangeVarList) { List *commandList = alterTableStatement->cmds; LOCKMODE lockMode = AlterTableGetLockLevel(commandList); @@ -1979,7 +1979,7 @@ RangeVarListHasLocalRelationConvertedByUser(List *relationRangeVarList, AlterTableStmt *alterTableStatement) { RangeVar *relationRangeVar; - foreach_ptr(relationRangeVar, relationRangeVarList) + foreach_declared_ptr(relationRangeVar, relationRangeVarList) { /* * Here we iterate the relation list, and if at least one of the relations @@ -2076,7 +2076,7 @@ GetAlterTableAddFKeyConstraintList(AlterTableStmt *alterTableStatement) List *commandList = alterTableStatement->cmds; AlterTableCmd *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { List *commandForeignKeyConstraintList = GetAlterTableCommandFKeyConstraintList(command); @@ -2116,7 +2116,7 @@ GetAlterTableCommandFKeyConstraintList(AlterTableCmd *command) List *columnConstraints = columnDefinition->constraints; Constraint *constraint = NULL; - foreach_ptr(constraint, columnConstraints) + foreach_declared_ptr(constraint, columnConstraints) { if (constraint->contype == CONSTR_FOREIGN) { @@ -2139,7 +2139,7 @@ GetRangeVarListFromFKeyConstraintList(List *fKeyConstraintList) List *rightRelationRangeVarList = NIL; Constraint *fKeyConstraint = NULL; - foreach_ptr(fKeyConstraint, fKeyConstraintList) + foreach_declared_ptr(fKeyConstraint, fKeyConstraintList) { RangeVar *rightRelationRangeVar = fKeyConstraint->pktable; rightRelationRangeVarList = lappend(rightRelationRangeVarList, @@ -2160,7 +2160,7 @@ GetRelationIdListFromRangeVarList(List *rangeVarList, LOCKMODE lockMode, bool mi List *relationIdList = NIL; RangeVar *rangeVar = NULL; - foreach_ptr(rangeVar, rangeVarList) + foreach_declared_ptr(rangeVar, rangeVarList) { Oid rightRelationId = RangeVarGetRelid(rangeVar, lockMode, missingOk); relationIdList = lappend_oid(relationIdList, rightRelationId); @@ -2234,7 +2234,7 @@ AlterTableDropsForeignKey(AlterTableStmt *alterTableStatement) Oid relationId = AlterTableLookupRelation(alterTableStatement, lockmode); AlterTableCmd *command = NULL; - foreach_ptr(command, alterTableStatement->cmds) + foreach_declared_ptr(command, alterTableStatement->cmds) { AlterTableType alterTableType = command->subtype; @@ -2296,7 +2296,7 @@ AnyForeignKeyDependsOnIndex(Oid indexId) GetPgDependTuplesForDependingObjects(dependentObjectClassId, dependentObjectId); HeapTuple dependencyTuple = NULL; - foreach_ptr(dependencyTuple, dependencyTupleList) + foreach_declared_ptr(dependencyTuple, dependencyTupleList) { Form_pg_depend dependencyForm = (Form_pg_depend) GETSTRUCT(dependencyTuple); Oid dependingClassId = dependencyForm->classid; @@ -2484,7 +2484,7 @@ SkipForeignKeyValidationIfConstraintIsFkey(AlterTableStmt *alterTableStatement, * shards anyway. */ AlterTableCmd *command = NULL; - foreach_ptr(command, alterTableStatement->cmds) + foreach_declared_ptr(command, alterTableStatement->cmds) { AlterTableType alterTableType = command->subtype; @@ -2565,7 +2565,7 @@ ErrorIfAlterDropsPartitionColumn(AlterTableStmt *alterTableStatement) /* then check if any of subcommands drop partition column.*/ List *commandList = alterTableStatement->cmds; AlterTableCmd *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { AlterTableType alterTableType = command->subtype; if (alterTableType == AT_DropColumn) @@ -2634,7 +2634,7 @@ PostprocessAlterTableStmt(AlterTableStmt *alterTableStatement) List *commandList = alterTableStatement->cmds; AlterTableCmd *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { AlterTableType alterTableType = command->subtype; @@ -2670,7 +2670,7 @@ PostprocessAlterTableStmt(AlterTableStmt *alterTableStatement) } Constraint *constraint = NULL; - foreach_ptr(constraint, columnConstraints) + foreach_declared_ptr(constraint, columnConstraints) { if (constraint->conname == NULL && (constraint->contype == CONSTR_PRIMARY || @@ -2690,7 +2690,7 @@ PostprocessAlterTableStmt(AlterTableStmt *alterTableStatement) * that sequence is supported */ constraint = NULL; - foreach_ptr(constraint, columnConstraints) + foreach_declared_ptr(constraint, columnConstraints) { if (constraint->contype == CONSTR_DEFAULT) { @@ -2802,7 +2802,7 @@ FixAlterTableStmtIndexNames(AlterTableStmt *alterTableStatement) List *commandList = alterTableStatement->cmds; AlterTableCmd *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { AlterTableType alterTableType = command->subtype; @@ -3165,7 +3165,7 @@ ErrorIfUnsupportedConstraint(Relation relation, char distributionMethod, List *indexOidList = RelationGetIndexList(relation); Oid indexOid = InvalidOid; - foreach_oid(indexOid, indexOidList) + foreach_declared_oid(indexOid, indexOidList) { Relation indexDesc = index_open(indexOid, RowExclusiveLock); bool hasDistributionColumn = false; @@ -3310,7 +3310,7 @@ ErrorIfUnsupportedAlterTableStmt(AlterTableStmt *alterTableStatement) /* error out if any of the subcommands are unsupported */ AlterTableCmd *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { AlterTableType alterTableType = command->subtype; @@ -3385,7 +3385,7 @@ ErrorIfUnsupportedAlterTableStmt(AlterTableStmt *alterTableStatement) Constraint *columnConstraint = NULL; - foreach_ptr(columnConstraint, column->constraints) + foreach_declared_ptr(columnConstraint, column->constraints) { if (columnConstraint->contype == CONSTR_IDENTITY) { @@ -3417,7 +3417,7 @@ ErrorIfUnsupportedAlterTableStmt(AlterTableStmt *alterTableStatement) List *columnConstraints = column->constraints; Constraint *constraint = NULL; - foreach_ptr(constraint, columnConstraints) + foreach_declared_ptr(constraint, columnConstraints) { if (constraint->contype == CONSTR_DEFAULT) { @@ -3770,7 +3770,7 @@ SetupExecutionModeForAlterTable(Oid relationId, AlterTableCmd *command) List *columnConstraints = columnDefinition->constraints; Constraint *constraint = NULL; - foreach_ptr(constraint, columnConstraints) + foreach_declared_ptr(constraint, columnConstraints) { if (constraint->contype == CONSTR_FOREIGN) { @@ -3970,10 +3970,10 @@ SetInterShardDDLTaskPlacementList(Task *task, ShardInterval *leftShardInterval, List *intersectedPlacementList = NIL; ShardPlacement *leftShardPlacement = NULL; - foreach_ptr(leftShardPlacement, leftShardPlacementList) + foreach_declared_ptr(leftShardPlacement, leftShardPlacementList) { ShardPlacement *rightShardPlacement = NULL; - foreach_ptr(rightShardPlacement, rightShardPlacementList) + foreach_declared_ptr(rightShardPlacement, rightShardPlacementList) { if (leftShardPlacement->nodeId == rightShardPlacement->nodeId) { diff --git a/src/backend/distributed/commands/trigger.c b/src/backend/distributed/commands/trigger.c index 74cb6259ffb..01ee72d3154 100644 --- a/src/backend/distributed/commands/trigger.c +++ b/src/backend/distributed/commands/trigger.c @@ -81,7 +81,7 @@ GetExplicitTriggerCommandList(Oid relationId) List *triggerIdList = GetExplicitTriggerIdList(relationId); Oid triggerId = InvalidOid; - foreach_oid(triggerId, triggerIdList) + foreach_declared_oid(triggerId, triggerIdList) { bool prettyOutput = false; Datum commandText = DirectFunctionCall2(pg_get_triggerdef_ext, @@ -742,7 +742,7 @@ ErrorIfRelationHasUnsupportedTrigger(Oid relationId) List *relationTriggerList = GetExplicitTriggerIdList(relationId); Oid triggerId = InvalidOid; - foreach_oid(triggerId, relationTriggerList) + foreach_declared_oid(triggerId, relationTriggerList) { ObjectAddress triggerObjectAddress = InvalidObjectAddress; ObjectAddressSet(triggerObjectAddress, TriggerRelationId, triggerId); diff --git a/src/backend/distributed/commands/truncate.c b/src/backend/distributed/commands/truncate.c index 0eb43f529cd..46cf5e602a1 100644 --- a/src/backend/distributed/commands/truncate.c +++ b/src/backend/distributed/commands/truncate.c @@ -135,7 +135,7 @@ TruncateTaskList(Oid relationId) LockShardListMetadata(shardIntervalList, ShareLock); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { uint64 shardId = shardInterval->shardId; char *shardRelationName = pstrdup(relationName); @@ -264,7 +264,7 @@ ErrorIfUnsupportedTruncateStmt(TruncateStmt *truncateStatement) { List *relationList = truncateStatement->relations; RangeVar *rangeVar = NULL; - foreach_ptr(rangeVar, relationList) + foreach_declared_ptr(rangeVar, relationList) { Oid relationId = RangeVarGetRelid(rangeVar, NoLock, false); @@ -294,7 +294,7 @@ static void EnsurePartitionTableNotReplicatedForTruncate(TruncateStmt *truncateStatement) { RangeVar *rangeVar = NULL; - foreach_ptr(rangeVar, truncateStatement->relations) + foreach_declared_ptr(rangeVar, truncateStatement->relations) { Oid relationId = RangeVarGetRelid(rangeVar, NoLock, false); @@ -322,7 +322,7 @@ ExecuteTruncateStmtSequentialIfNecessary(TruncateStmt *command) bool failOK = false; RangeVar *rangeVar = NULL; - foreach_ptr(rangeVar, relationList) + foreach_declared_ptr(rangeVar, relationList) { Oid relationId = RangeVarGetRelid(rangeVar, NoLock, failOK); diff --git a/src/backend/distributed/commands/utility_hook.c b/src/backend/distributed/commands/utility_hook.c index 9426e13c0ea..4d297297b30 100644 --- a/src/backend/distributed/commands/utility_hook.c +++ b/src/backend/distributed/commands/utility_hook.c @@ -454,7 +454,7 @@ citus_ProcessUtilityInternal(PlannedStmt *pstmt, bool analyze = false; DefElem *option = NULL; - foreach_ptr(option, explainStmt->options) + foreach_declared_ptr(option, explainStmt->options) { if (strcmp(option->defname, "analyze") == 0) { @@ -695,7 +695,7 @@ citus_ProcessUtilityInternal(PlannedStmt *pstmt, { AlterTableStmt *alterTableStmt = (AlterTableStmt *) parsetree; AlterTableCmd *command = NULL; - foreach_ptr(command, alterTableStmt->cmds) + foreach_declared_ptr(command, alterTableStmt->cmds) { AlterTableType alterTableType = command->subtype; @@ -879,7 +879,7 @@ citus_ProcessUtilityInternal(PlannedStmt *pstmt, } DDLJob *ddlJob = NULL; - foreach_ptr(ddlJob, ddlJobs) + foreach_declared_ptr(ddlJob, ddlJobs) { ExecuteDistributedDDLJob(ddlJob); } @@ -939,7 +939,7 @@ citus_ProcessUtilityInternal(PlannedStmt *pstmt, { List *addresses = GetObjectAddressListFromParseTree(parsetree, false, true); ObjectAddress *address = NULL; - foreach_ptr(address, addresses) + foreach_declared_ptr(address, addresses) { MarkObjectDistributed(address); TrackPropagatedObject(address); @@ -962,7 +962,7 @@ UndistributeDisconnectedCitusLocalTables(void) citusLocalTableIdList = SortList(citusLocalTableIdList, CompareOids); Oid citusLocalTableId = InvalidOid; - foreach_oid(citusLocalTableId, citusLocalTableIdList) + foreach_declared_oid(citusLocalTableId, citusLocalTableIdList) { /* acquire ShareRowExclusiveLock to prevent concurrent foreign key creation */ LOCKMODE lockMode = ShareRowExclusiveLock; @@ -1349,7 +1349,7 @@ CurrentSearchPath(void) bool schemaAdded = false; Oid searchPathOid = InvalidOid; - foreach_oid(searchPathOid, searchPathList) + foreach_declared_oid(searchPathOid, searchPathList) { char *schemaName = get_namespace_name(searchPathOid); @@ -1483,7 +1483,7 @@ DDLTaskList(Oid relationId, const char *commandString) LockShardListMetadata(shardIntervalList, ShareLock); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { uint64 shardId = shardInterval->shardId; StringInfo applyCommand = makeStringInfo(); @@ -1525,10 +1525,10 @@ NontransactionalNodeDDLTaskList(TargetWorkerSet targets, List *commands, { List *ddlJobs = NodeDDLTaskList(targets, commands); DDLJob *ddlJob = NULL; - foreach_ptr(ddlJob, ddlJobs) + foreach_declared_ptr(ddlJob, ddlJobs) { Task *task = NULL; - foreach_ptr(task, ddlJob->taskList) + foreach_declared_ptr(task, ddlJob->taskList) { task->cannotBeExecutedInTransaction = true; } @@ -1564,7 +1564,7 @@ NodeDDLTaskList(TargetWorkerSet targets, List *commands) SetTaskQueryStringList(task, commands); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodes) + foreach_declared_ptr(workerNode, workerNodes) { ShardPlacement *targetPlacement = CitusMakeNode(ShardPlacement); targetPlacement->nodeName = workerNode->workerName; diff --git a/src/backend/distributed/commands/vacuum.c b/src/backend/distributed/commands/vacuum.c index 5988a447ddf..3bdabe4671c 100644 --- a/src/backend/distributed/commands/vacuum.c +++ b/src/backend/distributed/commands/vacuum.c @@ -135,7 +135,7 @@ VacuumRelationIdList(VacuumStmt *vacuumStmt, CitusVacuumParams vacuumParams) List *relationIdList = NIL; RangeVar *vacuumRelation = NULL; - foreach_ptr(vacuumRelation, vacuumRelationList) + foreach_declared_ptr(vacuumRelation, vacuumRelationList) { /* * If skip_locked option is enabled, we are skipping that relation @@ -164,7 +164,7 @@ static bool IsDistributedVacuumStmt(List *vacuumRelationIdList) { Oid relationId = InvalidOid; - foreach_oid(relationId, vacuumRelationIdList) + foreach_declared_oid(relationId, vacuumRelationIdList) { if (OidIsValid(relationId) && IsCitusTable(relationId)) { @@ -187,7 +187,7 @@ ExecuteVacuumOnDistributedTables(VacuumStmt *vacuumStmt, List *relationIdList, int relationIndex = 0; Oid relationId = InvalidOid; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { if (IsCitusTable(relationId)) { @@ -252,7 +252,7 @@ VacuumTaskList(Oid relationId, CitusVacuumParams vacuumParams, List *vacuumColum LockShardListMetadata(shardIntervalList, ShareLock); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { uint64 shardId = shardInterval->shardId; char *shardRelationName = pstrdup(relationName); @@ -473,7 +473,7 @@ DeparseVacuumColumnNames(List *columnNameList) appendStringInfoString(columnNames, " ("); String *columnName = NULL; - foreach_ptr(columnName, columnNameList) + foreach_declared_ptr(columnName, columnNameList) { appendStringInfo(columnNames, "%s,", strVal(columnName)); } @@ -508,7 +508,7 @@ ExtractVacuumTargetRels(VacuumStmt *vacuumStmt) List *vacuumList = NIL; VacuumRelation *vacuumRelation = NULL; - foreach_ptr(vacuumRelation, vacuumStmt->rels) + foreach_declared_ptr(vacuumRelation, vacuumStmt->rels) { vacuumList = lappend(vacuumList, vacuumRelation->relation); } @@ -552,7 +552,7 @@ VacuumStmtParams(VacuumStmt *vacstmt) /* Parse options list */ DefElem *opt = NULL; - foreach_ptr(opt, vacstmt->options) + foreach_declared_ptr(opt, vacstmt->options) { /* Parse common options for VACUUM and ANALYZE */ if (strcmp(opt->defname, "verbose") == 0) @@ -725,7 +725,7 @@ ExecuteUnqualifiedVacuumTasks(VacuumStmt *vacuumStmt, CitusVacuumParams vacuumPa int32 localNodeGroupId = GetLocalGroupId(); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodes) + foreach_declared_ptr(workerNode, workerNodes) { if (workerNode->groupId != localNodeGroupId) { diff --git a/src/backend/distributed/commands/view.c b/src/backend/distributed/commands/view.c index 9689b92679f..0ffd00ec406 100644 --- a/src/backend/distributed/commands/view.c +++ b/src/backend/distributed/commands/view.c @@ -69,7 +69,7 @@ ViewHasDistributedRelationDependency(ObjectAddress *viewObjectAddress) List *dependencies = GetAllDependenciesForObject(viewObjectAddress); ObjectAddress *dependency = NULL; - foreach_ptr(dependency, dependencies) + foreach_declared_ptr(dependency, dependencies) { if (dependency->classId == RelationRelationId && IsAnyObjectDistributed( list_make1(dependency))) @@ -304,7 +304,7 @@ DropViewStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess) List *objectAddresses = NIL; List *possiblyQualifiedViewName = NULL; - foreach_ptr(possiblyQualifiedViewName, dropStmt->objects) + foreach_declared_ptr(possiblyQualifiedViewName, dropStmt->objects) { RangeVar *viewRangeVar = makeRangeVarFromNameList(possiblyQualifiedViewName); Oid viewOid = RangeVarGetRelid(viewRangeVar, AccessShareLock, @@ -332,7 +332,7 @@ FilterNameListForDistributedViews(List *viewNamesList, bool missing_ok) List *distributedViewNames = NIL; List *possiblyQualifiedViewName = NULL; - foreach_ptr(possiblyQualifiedViewName, viewNamesList) + foreach_declared_ptr(possiblyQualifiedViewName, viewNamesList) { char *viewName = NULL; char *schemaName = NULL; diff --git a/src/backend/distributed/connection/connection_management.c b/src/backend/distributed/connection/connection_management.c index f8e4816ed7d..4787d8f2fd3 100644 --- a/src/backend/distributed/connection/connection_management.c +++ b/src/backend/distributed/connection/connection_management.c @@ -866,7 +866,8 @@ WaitEventSetFromMultiConnectionStates(List *connections, int *waitCount) *waitCount = 0; } - WaitEventSet *waitEventSet = CreateWaitEventSet(CurrentMemoryContext, eventSetSize); + WaitEventSet *waitEventSet = CreateWaitEventSet(WaitEventSetTracker_compat, + eventSetSize); EnsureReleaseResource((MemoryContextCallbackFunction) (&FreeWaitEventSet), waitEventSet); @@ -879,7 +880,7 @@ WaitEventSetFromMultiConnectionStates(List *connections, int *waitCount) numEventsAdded += 2; MultiConnectionPollState *connectionState = NULL; - foreach_ptr(connectionState, connections) + foreach_declared_ptr(connectionState, connections) { if (numEventsAdded >= eventSetSize) { @@ -961,7 +962,7 @@ FinishConnectionListEstablishment(List *multiConnectionList) int waitCount = 0; MultiConnection *connection = NULL; - foreach_ptr(connection, multiConnectionList) + foreach_declared_ptr(connection, multiConnectionList) { MultiConnectionPollState *connectionState = palloc0(sizeof(MultiConnectionPollState)); @@ -1160,7 +1161,7 @@ static void CloseNotReadyMultiConnectionStates(List *connectionStates) { MultiConnectionPollState *connectionState = NULL; - foreach_ptr(connectionState, connectionStates) + foreach_declared_ptr(connectionState, connectionStates) { MultiConnection *connection = connectionState->connection; diff --git a/src/backend/distributed/connection/locally_reserved_shared_connections.c b/src/backend/distributed/connection/locally_reserved_shared_connections.c index a64930b3296..4dfcc0a9812 100644 --- a/src/backend/distributed/connection/locally_reserved_shared_connections.c +++ b/src/backend/distributed/connection/locally_reserved_shared_connections.c @@ -360,7 +360,7 @@ EnsureConnectionPossibilityForNodeList(List *nodeList) nodeList = SortList(nodeList, CompareWorkerNodes); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, nodeList) + foreach_declared_ptr(workerNode, nodeList) { bool waitForConnection = true; EnsureConnectionPossibilityForNode(workerNode, waitForConnection); diff --git a/src/backend/distributed/connection/placement_connection.c b/src/backend/distributed/connection/placement_connection.c index 10c99bd8074..841deba08db 100644 --- a/src/backend/distributed/connection/placement_connection.c +++ b/src/backend/distributed/connection/placement_connection.c @@ -370,7 +370,7 @@ AssignPlacementListToConnection(List *placementAccessList, MultiConnection *conn const char *userName = connection->user; ShardPlacementAccess *placementAccess = NULL; - foreach_ptr(placementAccess, placementAccessList) + foreach_declared_ptr(placementAccess, placementAccessList) { ShardPlacement *placement = placementAccess->placement; ShardPlacementAccessType accessType = placementAccess->accessType; @@ -533,7 +533,7 @@ FindPlacementListConnection(int flags, List *placementAccessList, const char *us * suitable connection found for a placement in the placementAccessList. */ ShardPlacementAccess *placementAccess = NULL; - foreach_ptr(placementAccess, placementAccessList) + foreach_declared_ptr(placementAccess, placementAccessList) { ShardPlacement *placement = placementAccess->placement; ShardPlacementAccessType accessType = placementAccess->accessType; diff --git a/src/backend/distributed/connection/remote_commands.c b/src/backend/distributed/connection/remote_commands.c index cbd74ff51b1..c9860c06185 100644 --- a/src/backend/distributed/connection/remote_commands.c +++ b/src/backend/distributed/connection/remote_commands.c @@ -392,7 +392,7 @@ void ExecuteCriticalRemoteCommandList(MultiConnection *connection, List *commandList) { const char *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { ExecuteCriticalRemoteCommand(connection, command); } @@ -435,7 +435,7 @@ ExecuteRemoteCommandInConnectionList(List *nodeConnectionList, const char *comma { MultiConnection *connection = NULL; - foreach_ptr(connection, nodeConnectionList) + foreach_declared_ptr(connection, nodeConnectionList) { int querySent = SendRemoteCommand(connection, command); @@ -446,7 +446,7 @@ ExecuteRemoteCommandInConnectionList(List *nodeConnectionList, const char *comma } /* Process the result */ - foreach_ptr(connection, nodeConnectionList) + foreach_declared_ptr(connection, nodeConnectionList) { bool raiseInterrupts = true; PGresult *result = GetRemoteCommandResult(connection, raiseInterrupts); @@ -887,7 +887,7 @@ WaitForAllConnections(List *connectionList, bool raiseInterrupts) /* convert connection list to an array such that we can move items around */ MultiConnection *connectionItem = NULL; - foreach_ptr(connectionItem, connectionList) + foreach_declared_ptr(connectionItem, connectionList) { allConnections[connectionIndex] = connectionItem; connectionReady[connectionIndex] = false; @@ -1130,7 +1130,7 @@ BuildWaitEventSet(MultiConnection **allConnections, int totalConnectionCount, /* allocate pending connections + 2 for the signal latch and postmaster death */ /* (CreateWaitEventSet makes room for pgwin32_signal_event automatically) */ - WaitEventSet *waitEventSet = CreateWaitEventSet(CurrentMemoryContext, + WaitEventSet *waitEventSet = CreateWaitEventSet(WaitEventSetTracker_compat, pendingConnectionCount + 2); for (int connectionIndex = 0; connectionIndex < pendingConnectionCount; diff --git a/src/backend/distributed/deparser/citus_ruleutils.c b/src/backend/distributed/deparser/citus_ruleutils.c index f99462058d9..6e61564b80a 100644 --- a/src/backend/distributed/deparser/citus_ruleutils.c +++ b/src/backend/distributed/deparser/citus_ruleutils.c @@ -395,7 +395,8 @@ pg_get_tableschemadef_string(Oid tableRelationId, IncludeSequenceDefaults if (attributeForm->attidentity && includeIdentityDefaults) { bool missing_ok = false; - Oid seqOid = getIdentitySequence(RelationGetRelid(relation), + Oid seqOid = getIdentitySequence(identitySequenceRelation_compat( + relation), attributeForm->attnum, missing_ok); if (includeIdentityDefaults == INCLUDE_IDENTITY) @@ -738,7 +739,12 @@ pg_get_tablecolumnoptionsdef_string(Oid tableRelationId) * If the user changed the column's statistics target, create * alter statement and add statement to a list for later processing. */ - if (attributeForm->attstattarget >= 0) + HeapTuple tp = SearchSysCache2(ATTNUM, + ObjectIdGetDatum(tableRelationId), + Int16GetDatum(attributeForm->attnum)); + int32 targetAttstattarget = getAttstattarget_compat(tp); + ReleaseSysCache(tp); + if (targetAttstattarget >= 0) { StringInfoData statement = { NULL, 0, 0, 0 }; initStringInfo(&statement); @@ -746,7 +752,7 @@ pg_get_tablecolumnoptionsdef_string(Oid tableRelationId) appendStringInfo(&statement, "ALTER COLUMN %s ", quote_identifier(attributeName)); appendStringInfo(&statement, "SET STATISTICS %d", - attributeForm->attstattarget); + targetAttstattarget); columnOptionList = lappend(columnOptionList, statement.data); } @@ -938,7 +944,7 @@ bool IsReindexWithParam_compat(ReindexStmt *reindexStmt, char *param) { DefElem *opt = NULL; - foreach_ptr(opt, reindexStmt->params) + foreach_declared_ptr(opt, reindexStmt->params) { if (strcmp(opt->defname, param) == 0) { @@ -963,7 +969,7 @@ AddVacuumParams(ReindexStmt *reindexStmt, StringInfo buffer) char *tableSpaceName = NULL; DefElem *opt = NULL; - foreach_ptr(opt, reindexStmt->params) + foreach_declared_ptr(opt, reindexStmt->params) { if (strcmp(opt->defname, "tablespace") == 0) { diff --git a/src/backend/distributed/deparser/deparse.c b/src/backend/distributed/deparser/deparse.c index 8312d64075c..9963a84f21a 100644 --- a/src/backend/distributed/deparser/deparse.c +++ b/src/backend/distributed/deparser/deparse.c @@ -47,7 +47,7 @@ DeparseTreeNodes(List *stmts) { List *sqls = NIL; Node *stmt = NULL; - foreach_ptr(stmt, stmts) + foreach_declared_ptr(stmt, stmts) { sqls = lappend(sqls, DeparseTreeNode(stmt)); } diff --git a/src/backend/distributed/deparser/deparse_database_stmts.c b/src/backend/distributed/deparser/deparse_database_stmts.c index 66df5361e50..fb233ddfd68 100644 --- a/src/backend/distributed/deparser/deparse_database_stmts.c +++ b/src/backend/distributed/deparser/deparse_database_stmts.c @@ -174,7 +174,7 @@ static void AppendBasicAlterDatabaseOptions(StringInfo buf, AlterDatabaseStmt *stmt) { DefElem *def = NULL; - foreach_ptr(def, stmt->options) + foreach_declared_ptr(def, stmt->options) { DefElemOptionToStatement(buf, def, alterDatabaseOptionFormats, lengthof( alterDatabaseOptionFormats)); @@ -290,7 +290,7 @@ AppendCreateDatabaseStmt(StringInfo buf, CreatedbStmt *stmt) quote_identifier(stmt->dbname)); DefElem *option = NULL; - foreach_ptr(option, stmt->options) + foreach_declared_ptr(option, stmt->options) { DefElemOptionToStatement(buf, option, createDatabaseOptionFormats, lengthof(createDatabaseOptionFormats)); diff --git a/src/backend/distributed/deparser/deparse_domain_stmts.c b/src/backend/distributed/deparser/deparse_domain_stmts.c index e517074ecd4..9702eb3108e 100644 --- a/src/backend/distributed/deparser/deparse_domain_stmts.c +++ b/src/backend/distributed/deparser/deparse_domain_stmts.c @@ -70,7 +70,7 @@ DeparseCreateDomainStmt(Node *node) } Constraint *constraint = NULL; - foreach_ptr(constraint, stmt->constraints) + foreach_declared_ptr(constraint, stmt->constraints) { AppendConstraint(&buf, constraint, stmt->domainname, stmt->typeName); } @@ -117,7 +117,7 @@ DeparseDropDomainStmt(Node *node) TypeName *domainName = NULL; bool first = true; - foreach_ptr(domainName, stmt->objects) + foreach_declared_ptr(domainName, stmt->objects) { if (!first) { diff --git a/src/backend/distributed/deparser/deparse_extension_stmts.c b/src/backend/distributed/deparser/deparse_extension_stmts.c index 92d54602f06..256d22214ea 100644 --- a/src/backend/distributed/deparser/deparse_extension_stmts.c +++ b/src/backend/distributed/deparser/deparse_extension_stmts.c @@ -40,7 +40,7 @@ DefElem * GetExtensionOption(List *extensionOptions, const char *defname) { DefElem *defElement = NULL; - foreach_ptr(defElement, extensionOptions) + foreach_declared_ptr(defElement, extensionOptions) { if (IsA(defElement, DefElem) && strncmp(defElement->defname, defname, NAMEDATALEN) == 0) @@ -112,7 +112,7 @@ AppendCreateExtensionStmtOptions(StringInfo buf, List *options) /* Add the options to the statement */ DefElem *defElem = NULL; - foreach_ptr(defElem, options) + foreach_declared_ptr(defElem, options) { if (strcmp(defElem->defname, "schema") == 0) { @@ -181,7 +181,7 @@ AppendAlterExtensionStmt(StringInfo buf, AlterExtensionStmt *alterExtensionStmt) * the options. */ DefElem *option = NULL; - foreach_ptr(option, optionsList) + foreach_declared_ptr(option, optionsList) { if (strcmp(option->defname, "new_version") == 0) { diff --git a/src/backend/distributed/deparser/deparse_foreign_server_stmts.c b/src/backend/distributed/deparser/deparse_foreign_server_stmts.c index 9c708a771a7..6b278f757a7 100644 --- a/src/backend/distributed/deparser/deparse_foreign_server_stmts.c +++ b/src/backend/distributed/deparser/deparse_foreign_server_stmts.c @@ -176,7 +176,7 @@ AppendAlterForeignServerOptions(StringInfo buf, AlterForeignServerStmt *stmt) DefElemAction action = DEFELEM_UNSPEC; DefElem *def = NULL; - foreach_ptr(def, stmt->options) + foreach_declared_ptr(def, stmt->options) { if (def->defaction != DEFELEM_UNSPEC) { @@ -242,7 +242,7 @@ static void AppendServerNames(StringInfo buf, DropStmt *stmt) { String *serverValue = NULL; - foreach_ptr(serverValue, stmt->objects) + foreach_declared_ptr(serverValue, stmt->objects) { const char *serverString = quote_identifier(strVal(serverValue)); appendStringInfo(buf, "%s", serverString); diff --git a/src/backend/distributed/deparser/deparse_publication_stmts.c b/src/backend/distributed/deparser/deparse_publication_stmts.c index 8e311817199..35068266ecb 100644 --- a/src/backend/distributed/deparser/deparse_publication_stmts.c +++ b/src/backend/distributed/deparser/deparse_publication_stmts.c @@ -118,7 +118,7 @@ AppendCreatePublicationStmt(StringInfo buf, CreatePublicationStmt *stmt, * Check whether there are objects to propagate, mainly to know whether * we should include "FOR". */ - foreach_ptr(publicationObject, stmt->pubobjects) + foreach_declared_ptr(publicationObject, stmt->pubobjects) { if (publicationObject->pubobjtype == PUBLICATIONOBJ_TABLE) { @@ -156,7 +156,7 @@ AppendCreatePublicationStmt(StringInfo buf, CreatePublicationStmt *stmt, * Check whether there are tables to propagate, mainly to know whether * we should include "FOR". */ - foreach_ptr(rangeVar, stmt->tables) + foreach_declared_ptr(rangeVar, stmt->tables) { if (includeLocalTables || IsCitusTableRangeVar(rangeVar, NoLock, false)) { @@ -198,7 +198,7 @@ AppendPublicationObjects(StringInfo buf, List *publicationObjects, PublicationObjSpec *publicationObject = NULL; bool appendedObject = false; - foreach_ptr(publicationObject, publicationObjects) + foreach_declared_ptr(publicationObject, publicationObjects) { if (publicationObject->pubobjtype == PUBLICATIONOBJ_TABLE) { @@ -334,7 +334,7 @@ AppendTables(StringInfo buf, List *tables, bool includeLocalTables) RangeVar *rangeVar = NULL; bool appendedObject = false; - foreach_ptr(rangeVar, tables) + foreach_declared_ptr(rangeVar, tables) { if (!includeLocalTables && !IsCitusTableRangeVar(rangeVar, NoLock, false)) diff --git a/src/backend/distributed/deparser/deparse_role_stmts.c b/src/backend/distributed/deparser/deparse_role_stmts.c index a4a085026c9..61c0be24670 100644 --- a/src/backend/distributed/deparser/deparse_role_stmts.c +++ b/src/backend/distributed/deparser/deparse_role_stmts.c @@ -404,7 +404,7 @@ AppendRevokeAdminOptionFor(StringInfo buf, GrantRoleStmt *stmt) if (!stmt->is_grant) { DefElem *opt = NULL; - foreach_ptr(opt, stmt->opt) + foreach_declared_ptr(opt, stmt->opt) { if (strcmp(opt->defname, "admin") == 0) { @@ -440,7 +440,7 @@ AppendGrantWithAdminOption(StringInfo buf, GrantRoleStmt *stmt) #if PG_VERSION_NUM >= PG_VERSION_16 int opt_count = 0; DefElem *opt = NULL; - foreach_ptr(opt, stmt->opt) + foreach_declared_ptr(opt, stmt->opt) { char *optval = defGetString(opt); bool option_value = false; diff --git a/src/backend/distributed/deparser/deparse_schema_stmts.c b/src/backend/distributed/deparser/deparse_schema_stmts.c index 0a9c49801aa..50e3974c0f2 100644 --- a/src/backend/distributed/deparser/deparse_schema_stmts.c +++ b/src/backend/distributed/deparser/deparse_schema_stmts.c @@ -152,7 +152,7 @@ AppendDropSchemaStmt(StringInfo buf, DropStmt *stmt) } String *schemaValue = NULL; - foreach_ptr(schemaValue, stmt->objects) + foreach_declared_ptr(schemaValue, stmt->objects) { const char *schemaString = quote_identifier(strVal(schemaValue)); appendStringInfo(buf, "%s", schemaString); diff --git a/src/backend/distributed/deparser/deparse_statistics_stmts.c b/src/backend/distributed/deparser/deparse_statistics_stmts.c index 99b9d1c2ddf..79be835b93b 100644 --- a/src/backend/distributed/deparser/deparse_statistics_stmts.c +++ b/src/backend/distributed/deparser/deparse_statistics_stmts.c @@ -177,8 +177,9 @@ AppendAlterStatisticsSchemaStmt(StringInfo buf, AlterObjectSchemaStmt *stmt) static void AppendAlterStatisticsStmt(StringInfo buf, AlterStatsStmt *stmt) { - appendStringInfo(buf, "ALTER STATISTICS %s SET STATISTICS %d", NameListToQuotedString( - stmt->defnames), stmt->stxstattarget); + appendStringInfo(buf, "ALTER STATISTICS %s SET STATISTICS %d", + NameListToQuotedString(stmt->defnames), + getIntStxstattarget_compat(stmt->stxstattarget)); } @@ -216,7 +217,7 @@ AppendStatTypes(StringInfo buf, CreateStatsStmt *stmt) appendStringInfoString(buf, " ("); String *statType = NULL; - foreach_ptr(statType, stmt->stat_types) + foreach_declared_ptr(statType, stmt->stat_types) { appendStringInfoString(buf, strVal(statType)); @@ -235,7 +236,7 @@ AppendColumnNames(StringInfo buf, CreateStatsStmt *stmt) { StatsElem *column = NULL; - foreach_ptr(column, stmt->exprs) + foreach_declared_ptr(column, stmt->exprs) { if (!column->name) { diff --git a/src/backend/distributed/deparser/deparse_text_search.c b/src/backend/distributed/deparser/deparse_text_search.c index ab5498ad81a..2ca09b8efc5 100644 --- a/src/backend/distributed/deparser/deparse_text_search.c +++ b/src/backend/distributed/deparser/deparse_text_search.c @@ -86,7 +86,7 @@ AppendDefElemList(StringInfo buf, List *defelems, char *objectName) { DefElem *defelem = NULL; bool first = true; - foreach_ptr(defelem, defelems) + foreach_declared_ptr(defelem, defelems) { if (!first) { @@ -133,7 +133,7 @@ DeparseDropTextSearchConfigurationStmt(Node *node) appendStringInfoString(&buf, "DROP TEXT SEARCH CONFIGURATION "); List *nameList = NIL; bool first = true; - foreach_ptr(nameList, stmt->objects) + foreach_declared_ptr(nameList, stmt->objects) { if (!first) { @@ -171,7 +171,7 @@ DeparseDropTextSearchDictionaryStmt(Node *node) appendStringInfoString(&buf, "DROP TEXT SEARCH DICTIONARY "); List *nameList = NIL; bool first = true; - foreach_ptr(nameList, stmt->objects) + foreach_declared_ptr(nameList, stmt->objects) { if (!first) { @@ -404,7 +404,7 @@ AppendStringInfoTokentypeList(StringInfo buf, List *tokentypes) { String *tokentype = NULL; bool first = true; - foreach_ptr(tokentype, tokentypes) + foreach_declared_ptr(tokentype, tokentypes) { if (nodeTag(tokentype) != T_String) { @@ -432,7 +432,7 @@ AppendStringInfoDictnames(StringInfo buf, List *dicts) { List *dictNames = NIL; bool first = true; - foreach_ptr(dictNames, dicts) + foreach_declared_ptr(dictNames, dicts) { if (!first) { diff --git a/src/backend/distributed/deparser/deparse_view_stmts.c b/src/backend/distributed/deparser/deparse_view_stmts.c index 5592aec9d53..2e046c0994e 100644 --- a/src/backend/distributed/deparser/deparse_view_stmts.c +++ b/src/backend/distributed/deparser/deparse_view_stmts.c @@ -88,7 +88,7 @@ AppendViewNameList(StringInfo buf, List *viewNamesList) { bool isFirstView = true; List *qualifiedViewName = NULL; - foreach_ptr(qualifiedViewName, viewNamesList) + foreach_declared_ptr(qualifiedViewName, viewNamesList) { char *quotedQualifiedVieName = NameListToQuotedString(qualifiedViewName); if (!isFirstView) diff --git a/src/backend/distributed/deparser/qualify_collation_stmt.c b/src/backend/distributed/deparser/qualify_collation_stmt.c index dad3b7a0eca..36bde695766 100644 --- a/src/backend/distributed/deparser/qualify_collation_stmt.c +++ b/src/backend/distributed/deparser/qualify_collation_stmt.c @@ -83,7 +83,7 @@ QualifyDropCollationStmt(Node *node) List *names = NIL; List *name = NIL; - foreach_ptr(name, stmt->objects) + foreach_declared_ptr(name, stmt->objects) { names = lappend(names, QualifyCollationName(name)); } diff --git a/src/backend/distributed/deparser/qualify_domain.c b/src/backend/distributed/deparser/qualify_domain.c index 2e163dad072..acf48e6ffb0 100644 --- a/src/backend/distributed/deparser/qualify_domain.c +++ b/src/backend/distributed/deparser/qualify_domain.c @@ -67,7 +67,7 @@ QualifyDropDomainStmt(Node *node) DropStmt *stmt = castNode(DropStmt, node); TypeName *domainName = NULL; - foreach_ptr(domainName, stmt->objects) + foreach_declared_ptr(domainName, stmt->objects) { QualifyTypeName(domainName, stmt->missing_ok); } @@ -249,7 +249,7 @@ QualifyCollate(CollateClause *collClause, bool missing_ok) collClause->collname = NIL; char *name = NULL; - foreach_ptr(name, objName) + foreach_declared_ptr(name, objName) { collClause->collname = lappend(collClause->collname, makeString(name)); } diff --git a/src/backend/distributed/deparser/qualify_publication_stmt.c b/src/backend/distributed/deparser/qualify_publication_stmt.c index 73ffe3a3533..c47f52e159c 100644 --- a/src/backend/distributed/deparser/qualify_publication_stmt.c +++ b/src/backend/distributed/deparser/qualify_publication_stmt.c @@ -55,7 +55,7 @@ QualifyPublicationObjects(List *publicationObjects) { PublicationObjSpec *publicationObject = NULL; - foreach_ptr(publicationObject, publicationObjects) + foreach_declared_ptr(publicationObject, publicationObjects) { if (publicationObject->pubobjtype == PUBLICATIONOBJ_TABLE) { @@ -78,7 +78,7 @@ QualifyTables(List *tables) { RangeVar *rangeVar = NULL; - foreach_ptr(rangeVar, tables) + foreach_declared_ptr(rangeVar, tables) { QualifyPublicationRangeVar(rangeVar); } diff --git a/src/backend/distributed/deparser/qualify_sequence_stmt.c b/src/backend/distributed/deparser/qualify_sequence_stmt.c index 1a0ecc8319b..c56d0fda0bb 100644 --- a/src/backend/distributed/deparser/qualify_sequence_stmt.c +++ b/src/backend/distributed/deparser/qualify_sequence_stmt.c @@ -148,7 +148,7 @@ QualifyDropSequenceStmt(Node *node) List *objectNameListWithSchema = NIL; List *objectNameList = NULL; - foreach_ptr(objectNameList, stmt->objects) + foreach_declared_ptr(objectNameList, stmt->objects) { RangeVar *seq = makeRangeVarFromNameList(objectNameList); @@ -192,7 +192,7 @@ QualifyGrantOnSequenceStmt(Node *node) } List *qualifiedSequenceRangeVars = NIL; RangeVar *sequenceRangeVar = NULL; - foreach_ptr(sequenceRangeVar, stmt->objects) + foreach_declared_ptr(sequenceRangeVar, stmt->objects) { if (sequenceRangeVar->schemaname == NULL) { diff --git a/src/backend/distributed/deparser/qualify_statistics_stmt.c b/src/backend/distributed/deparser/qualify_statistics_stmt.c index ba8e8a76496..7a99e6dfad3 100644 --- a/src/backend/distributed/deparser/qualify_statistics_stmt.c +++ b/src/backend/distributed/deparser/qualify_statistics_stmt.c @@ -73,7 +73,7 @@ QualifyDropStatisticsStmt(Node *node) List *objectNameListWithSchema = NIL; List *objectNameList = NULL; - foreach_ptr(objectNameList, dropStatisticsStmt->objects) + foreach_declared_ptr(objectNameList, dropStatisticsStmt->objects) { RangeVar *stat = makeRangeVarFromNameList(objectNameList); diff --git a/src/backend/distributed/deparser/qualify_text_search_stmts.c b/src/backend/distributed/deparser/qualify_text_search_stmts.c index df1e140a421..451cb2fb06d 100644 --- a/src/backend/distributed/deparser/qualify_text_search_stmts.c +++ b/src/backend/distributed/deparser/qualify_text_search_stmts.c @@ -46,7 +46,7 @@ QualifyDropTextSearchConfigurationStmt(Node *node) List *qualifiedObjects = NIL; List *objName = NIL; - foreach_ptr(objName, stmt->objects) + foreach_declared_ptr(objName, stmt->objects) { char *schemaName = NULL; char *tsconfigName = NULL; @@ -87,7 +87,7 @@ QualifyDropTextSearchDictionaryStmt(Node *node) List *qualifiedObjects = NIL; List *objName = NIL; - foreach_ptr(objName, stmt->objects) + foreach_declared_ptr(objName, stmt->objects) { char *schemaName = NULL; char *tsdictName = NULL; @@ -141,7 +141,7 @@ QualifyAlterTextSearchConfigurationStmt(Node *node) bool useNewDicts = false; List *dicts = NULL; List *dictName = NIL; - foreach_ptr(dictName, stmt->dicts) + foreach_declared_ptr(dictName, stmt->dicts) { DeconstructQualifiedName(dictName, &schemaName, &objName); diff --git a/src/backend/distributed/deparser/qualify_view_stmt.c b/src/backend/distributed/deparser/qualify_view_stmt.c index af3fb280a8c..4f4daf71e8b 100644 --- a/src/backend/distributed/deparser/qualify_view_stmt.c +++ b/src/backend/distributed/deparser/qualify_view_stmt.c @@ -31,7 +31,7 @@ QualifyDropViewStmt(Node *node) List *qualifiedViewNames = NIL; List *possiblyQualifiedViewName = NULL; - foreach_ptr(possiblyQualifiedViewName, stmt->objects) + foreach_declared_ptr(possiblyQualifiedViewName, stmt->objects) { char *viewName = NULL; char *schemaName = NULL; diff --git a/src/backend/distributed/executor/adaptive_executor.c b/src/backend/distributed/executor/adaptive_executor.c index e912f418d6f..9f98ad9cf14 100644 --- a/src/backend/distributed/executor/adaptive_executor.c +++ b/src/backend/distributed/executor/adaptive_executor.c @@ -1430,7 +1430,7 @@ AssignTasksToConnectionsOrWorkerPool(DistributedExecution *execution) List *taskList = execution->remoteTaskList; Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { bool placementExecutionReady = true; int placementExecutionIndex = 0; @@ -1453,7 +1453,7 @@ AssignTasksToConnectionsOrWorkerPool(DistributedExecution *execution) SetAttributeInputMetadata(execution, shardCommandExecution); ShardPlacement *taskPlacement = NULL; - foreach_ptr(taskPlacement, task->taskPlacementList) + foreach_declared_ptr(taskPlacement, task->taskPlacementList) { int connectionFlags = 0; char *nodeName = NULL; @@ -1598,7 +1598,7 @@ AssignTasksToConnectionsOrWorkerPool(DistributedExecution *execution) * connection may be be returned multiple times by GetPlacementListConnectionIfCached. */ WorkerSession *session = NULL; - foreach_ptr(session, execution->sessionList) + foreach_declared_ptr(session, execution->sessionList) { MultiConnection *connection = session->connection; @@ -1721,7 +1721,7 @@ static WorkerPool * FindOrCreateWorkerPool(DistributedExecution *execution, char *nodeName, int nodePort) { WorkerPool *workerPool = NULL; - foreach_ptr(workerPool, execution->workerList) + foreach_declared_ptr(workerPool, execution->workerList) { if (strncmp(nodeName, workerPool->nodeName, WORKER_LENGTH) == 0 && nodePort == workerPool->nodePort) @@ -1768,7 +1768,7 @@ FindOrCreateWorkerSession(WorkerPool *workerPool, MultiConnection *connection) static uint64 sessionId = 1; WorkerSession *session = NULL; - foreach_ptr(session, workerPool->sessionList) + foreach_declared_ptr(session, workerPool->sessionList) { if (session->connection == connection) { @@ -1871,7 +1871,7 @@ SequentialRunDistributedExecution(DistributedExecution *execution) */ MultiShardConnectionType = SEQUENTIAL_CONNECTION; Task *taskToExecute = NULL; - foreach_ptr(taskToExecute, taskList) + foreach_declared_ptr(taskToExecute, taskList) { execution->remoteAndLocalTaskList = list_make1(taskToExecute); execution->remoteTaskList = list_make1(taskToExecute); @@ -1911,7 +1911,7 @@ RunDistributedExecution(DistributedExecution *execution) { /* Preemptively step state machines in case of immediate errors */ WorkerSession *session = NULL; - foreach_ptr(session, execution->sessionList) + foreach_declared_ptr(session, execution->sessionList) { ConnectionStateMachine(session); } @@ -1943,7 +1943,7 @@ RunDistributedExecution(DistributedExecution *execution) HasIncompleteConnectionEstablishment(execution))) { WorkerPool *workerPool = NULL; - foreach_ptr(workerPool, execution->workerList) + foreach_declared_ptr(workerPool, execution->workerList) { ManageWorkerPool(workerPool); } @@ -2028,7 +2028,7 @@ ProcessSessionsWithFailedWaitEventSetOperations(DistributedExecution *execution) { bool foundFailedSession = false; WorkerSession *session = NULL; - foreach_ptr(session, execution->sessionList) + foreach_declared_ptr(session, execution->sessionList) { if (session->waitEventSetIndex == WAIT_EVENT_SET_INDEX_FAILED) { @@ -2072,7 +2072,7 @@ HasIncompleteConnectionEstablishment(DistributedExecution *execution) } WorkerSession *session = NULL; - foreach_ptr(session, execution->sessionList) + foreach_declared_ptr(session, execution->sessionList) { MultiConnection *connection = session->connection; if (connection->connectionState == MULTI_CONNECTION_INITIAL || @@ -2550,7 +2550,7 @@ AvgTaskExecutionTimeApproximation(WorkerPool *workerPool) INSTR_TIME_SET_CURRENT(now); WorkerSession *session = NULL; - foreach_ptr(session, workerPool->sessionList) + foreach_declared_ptr(session, workerPool->sessionList) { /* * Involve the tasks that are currently running. We do this to @@ -2588,7 +2588,7 @@ AvgConnectionEstablishmentTime(WorkerPool *workerPool) int sessionCount = 0; WorkerSession *session = NULL; - foreach_ptr(session, workerPool->sessionList) + foreach_declared_ptr(session, workerPool->sessionList) { MultiConnection *connection = session->connection; @@ -2744,7 +2744,7 @@ OpenNewConnections(WorkerPool *workerPool, int newConnectionCount, #endif WorkerSession *session = NULL; - foreach_ptr(session, newSessionsList) + foreach_declared_ptr(session, newSessionsList) { /* immediately run the state machine to handle potential failure */ ConnectionStateMachine(session); @@ -2862,7 +2862,7 @@ static void MarkEstablishingSessionsTimedOut(WorkerPool *workerPool) { WorkerSession *session = NULL; - foreach_ptr(session, workerPool->sessionList) + foreach_declared_ptr(session, workerPool->sessionList) { MultiConnection *connection = session->connection; @@ -2914,7 +2914,7 @@ NextEventTimeout(DistributedExecution *execution) long eventTimeout = 1000; /* milliseconds */ WorkerPool *workerPool = NULL; - foreach_ptr(workerPool, execution->workerList) + foreach_declared_ptr(workerPool, execution->workerList) { if (workerPool->failureState == WORKER_POOL_FAILED) { @@ -4255,7 +4255,7 @@ WorkerPoolFailed(WorkerPool *workerPool) } WorkerSession *session = NULL; - foreach_ptr(session, workerPool->sessionList) + foreach_declared_ptr(session, workerPool->sessionList) { WorkerSessionFailed(session); } @@ -4280,7 +4280,7 @@ WorkerPoolFailed(WorkerPool *workerPool) List *workerList = workerPool->distributedExecution->workerList; WorkerPool *pool = NULL; - foreach_ptr(pool, workerList) + foreach_declared_ptr(pool, workerList) { /* failed pools or pools without any connection attempts ignored */ if (pool->failureState == WORKER_POOL_FAILED || @@ -4633,7 +4633,7 @@ PlacementExecutionReady(TaskPlacementExecution *placementExecution) /* wake up an idle connection by checking whether the connection is writeable */ WorkerSession *session = NULL; - foreach_ptr(session, workerPool->sessionList) + foreach_declared_ptr(session, workerPool->sessionList) { MultiConnection *connection = session->connection; RemoteTransaction *transaction = &(connection->remoteTransaction); @@ -4755,10 +4755,10 @@ BuildWaitEventSet(List *sessionList) int eventSetSize = GetEventSetSize(sessionList); WaitEventSet *waitEventSet = - CreateWaitEventSet(CurrentMemoryContext, eventSetSize); + CreateWaitEventSet(WaitEventSetTracker_compat, eventSetSize); WorkerSession *session = NULL; - foreach_ptr(session, sessionList) + foreach_declared_ptr(session, sessionList) { AddSessionToWaitEventSet(session, waitEventSet); } @@ -4856,7 +4856,7 @@ static void RebuildWaitEventSetFlags(WaitEventSet *waitEventSet, List *sessionList) { WorkerSession *session = NULL; - foreach_ptr(session, sessionList) + foreach_declared_ptr(session, sessionList) { MultiConnection *connection = session->connection; int waitEventSetIndex = session->waitEventSetIndex; @@ -4912,7 +4912,7 @@ CleanUpSessions(DistributedExecution *execution) /* always trigger wait event set in the first round */ WorkerSession *session = NULL; - foreach_ptr(session, sessionList) + foreach_declared_ptr(session, sessionList) { MultiConnection *connection = session->connection; @@ -4993,7 +4993,7 @@ static void UnclaimAllSessionConnections(List *sessionList) { WorkerSession *session = NULL; - foreach_ptr(session, sessionList) + foreach_declared_ptr(session, sessionList) { MultiConnection *connection = session->connection; diff --git a/src/backend/distributed/executor/citus_custom_scan.c b/src/backend/distributed/executor/citus_custom_scan.c index 34a2f3d90bd..e072ba0fa1a 100644 --- a/src/backend/distributed/executor/citus_custom_scan.c +++ b/src/backend/distributed/executor/citus_custom_scan.c @@ -524,7 +524,7 @@ static bool AnchorShardsInTaskListExist(List *taskList) { Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { if (!ShardExists(task->anchorShardId)) { diff --git a/src/backend/distributed/executor/directed_acyclic_graph_execution.c b/src/backend/distributed/executor/directed_acyclic_graph_execution.c index 15b0272ddaf..48e8fbb6458 100644 --- a/src/backend/distributed/executor/directed_acyclic_graph_execution.c +++ b/src/backend/distributed/executor/directed_acyclic_graph_execution.c @@ -94,7 +94,7 @@ FindExecutableTasks(List *allTasks, HTAB *completedTasks) List *curTasks = NIL; Task *task = NULL; - foreach_ptr(task, allTasks) + foreach_declared_ptr(task, allTasks) { if (IsAllDependencyCompleted(task, completedTasks) && !IsTaskAlreadyCompleted(task, completedTasks)) @@ -118,7 +118,7 @@ RemoveMergeTasks(List *taskList) List *prunedTaskList = NIL; Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { if (task->taskType != MERGE_TASK) { @@ -139,7 +139,7 @@ AddCompletedTasks(List *curCompletedTasks, HTAB *completedTasks) bool found; Task *task = NULL; - foreach_ptr(task, curCompletedTasks) + foreach_declared_ptr(task, curCompletedTasks) { TaskHashKey taskKey = { task->jobId, task->taskId }; hash_search(completedTasks, &taskKey, HASH_ENTER, &found); @@ -172,7 +172,7 @@ IsAllDependencyCompleted(Task *targetTask, HTAB *completedTasks) bool found = false; Task *task = NULL; - foreach_ptr(task, targetTask->dependentTaskList) + foreach_declared_ptr(task, targetTask->dependentTaskList) { TaskHashKey taskKey = { task->jobId, task->taskId }; diff --git a/src/backend/distributed/executor/distributed_execution_locks.c b/src/backend/distributed/executor/distributed_execution_locks.c index 4424accb712..9c9f09a4cab 100644 --- a/src/backend/distributed/executor/distributed_execution_locks.c +++ b/src/backend/distributed/executor/distributed_execution_locks.c @@ -198,7 +198,7 @@ AcquireExecutorShardLocksForExecution(RowModifyLevel modLevel, List *taskList) List *requiresConsistentSnapshotRelationShardList = NIL; Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { ShardInterval *anchorShardInterval = LoadShardInterval(task->anchorShardId); anchorShardIntervalList = lappend(anchorShardIntervalList, anchorShardInterval); @@ -344,7 +344,7 @@ AcquireMetadataLocks(List *taskList) */ Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { LockShardDistributionMetadata(task->anchorShardId, ShareLock); } @@ -379,7 +379,7 @@ AcquireExecutorShardLocksForRelationRowLockList(List *relationRowLockList) * them. */ RelationRowLock *relationRowLock = NULL; - foreach_ptr(relationRowLock, relationRowLockList) + foreach_declared_ptr(relationRowLock, relationRowLockList) { LockClauseStrength rowLockStrength = relationRowLock->rowLockStrength; Oid relationId = relationRowLock->relationId; @@ -412,7 +412,7 @@ void LockPartitionsInRelationList(List *relationIdList, LOCKMODE lockmode) { Oid relationId = InvalidOid; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { if (PartitionedTable(relationId)) { @@ -437,7 +437,7 @@ LockPartitionRelations(Oid relationId, LOCKMODE lockMode) */ List *partitionList = PartitionList(relationId); Oid partitionRelationId = InvalidOid; - foreach_oid(partitionRelationId, partitionList) + foreach_declared_oid(partitionRelationId, partitionList) { LockRelationOid(partitionRelationId, lockMode); } diff --git a/src/backend/distributed/executor/distributed_intermediate_results.c b/src/backend/distributed/executor/distributed_intermediate_results.c index c5ac27fb624..24e8ca8d806 100644 --- a/src/backend/distributed/executor/distributed_intermediate_results.c +++ b/src/backend/distributed/executor/distributed_intermediate_results.c @@ -206,7 +206,7 @@ WrapTasksForPartitioning(const char *resultIdPrefix, List *selectTaskList, intervalTypeMod); Task *selectTask = NULL; - foreach_ptr(selectTask, selectTaskList) + foreach_declared_ptr(selectTask, selectTaskList) { char *taskPrefix = SourceShardPrefix(resultIdPrefix, selectTask->anchorShardId); char *partitionMethodString = targetRelation->partitionMethod == 'h' ? @@ -490,7 +490,7 @@ ColocateFragmentsWithRelation(List *fragmentList, CitusTableCacheEntry *targetRe List **shardResultIdList = palloc0(shardCount * sizeof(List *)); DistributedResultFragment *sourceFragment = NULL; - foreach_ptr(sourceFragment, fragmentList) + foreach_declared_ptr(sourceFragment, fragmentList) { int shardIndex = sourceFragment->targetShardIndex; @@ -520,11 +520,11 @@ ColocationTransfers(List *fragmentList, CitusTableCacheEntry *targetRelation) HASH_ELEM | HASH_CONTEXT | HASH_BLOBS); DistributedResultFragment *fragment = NULL; - foreach_ptr(fragment, fragmentList) + foreach_declared_ptr(fragment, fragmentList) { List *placementList = ActiveShardPlacementList(fragment->targetShardId); ShardPlacement *placement = NULL; - foreach_ptr(placement, placementList) + foreach_declared_ptr(placement, placementList) { NodePair transferKey = { .sourceNodeId = fragment->nodeId, @@ -576,7 +576,7 @@ FragmentTransferTaskList(List *fragmentListTransfers) List *fetchTaskList = NIL; NodeToNodeFragmentsTransfer *fragmentsTransfer = NULL; - foreach_ptr(fragmentsTransfer, fragmentListTransfers) + foreach_declared_ptr(fragmentsTransfer, fragmentListTransfers) { uint32 targetNodeId = fragmentsTransfer->nodes.targetNodeId; @@ -629,7 +629,7 @@ QueryStringForFragmentsTransfer(NodeToNodeFragmentsTransfer *fragmentsTransfer) appendStringInfoString(fragmentNamesArrayString, "ARRAY["); DistributedResultFragment *fragment = NULL; - foreach_ptr(fragment, fragmentsTransfer->fragmentList) + foreach_declared_ptr(fragment, fragmentsTransfer->fragmentList) { const char *fragmentName = fragment->resultId; diff --git a/src/backend/distributed/executor/executor_util_tasks.c b/src/backend/distributed/executor/executor_util_tasks.c index 6a3eec8fc52..82a153b94f1 100644 --- a/src/backend/distributed/executor/executor_util_tasks.c +++ b/src/backend/distributed/executor/executor_util_tasks.c @@ -163,7 +163,7 @@ bool TaskListCannotBeExecutedInTransaction(List *taskList) { Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { if (task->cannotBeExecutedInTransaction) { @@ -190,7 +190,7 @@ SelectForUpdateOnReferenceTable(List *taskList) Task *task = (Task *) linitial(taskList); RelationRowLock *relationRowLock = NULL; - foreach_ptr(relationRowLock, task->relationRowLockList) + foreach_declared_ptr(relationRowLock, task->relationRowLockList) { Oid relationId = relationRowLock->relationId; @@ -239,7 +239,7 @@ bool ModifiedTableReplicated(List *taskList) { Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { int64 shardId = task->anchorShardId; diff --git a/src/backend/distributed/executor/insert_select_executor.c b/src/backend/distributed/executor/insert_select_executor.c index a8dc1fa5a44..76dde345f55 100644 --- a/src/backend/distributed/executor/insert_select_executor.c +++ b/src/backend/distributed/executor/insert_select_executor.c @@ -239,7 +239,7 @@ NonPushableInsertSelectExecScan(CustomScanState *node) * on shards with connections. */ Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { uint64 shardId = task->anchorShardId; bool shardModified = false; @@ -376,7 +376,7 @@ BuildColumnNameListFromTargetList(Oid targetRelationId, List *insertTargetList) /* build the list of column names for the COPY statement */ TargetEntry *insertTargetEntry = NULL; - foreach_ptr(insertTargetEntry, insertTargetList) + foreach_declared_ptr(insertTargetEntry, insertTargetList) { columnNameList = lappend(columnNameList, insertTargetEntry->resname); } @@ -397,7 +397,7 @@ PartitionColumnIndexFromColumnList(Oid relationId, List *columnNameList) int partitionColumnIndex = 0; const char *columnName = NULL; - foreach_ptr(columnName, columnNameList) + foreach_declared_ptr(columnName, columnNameList) { AttrNumber attrNumber = get_attnum(relationId, columnName); @@ -423,7 +423,7 @@ DistributionColumnIndex(List *insertTargetList, Var *distributionColumn) { TargetEntry *insertTargetEntry = NULL; int targetEntryIndex = 0; - foreach_ptr(insertTargetEntry, insertTargetList) + foreach_declared_ptr(insertTargetEntry, insertTargetList) { if (insertTargetEntry->resno == distributionColumn->varattno) { @@ -447,7 +447,7 @@ WrapTaskListForProjection(List *taskList, List *projectedTargetEntries) StringInfo projectedColumnsString = makeStringInfo(); int entryIndex = 0; TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, projectedTargetEntries) + foreach_declared_ptr(targetEntry, projectedTargetEntries) { if (entryIndex != 0) { @@ -462,7 +462,7 @@ WrapTaskListForProjection(List *taskList, List *projectedTargetEntries) } Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { StringInfo wrappedQuery = makeStringInfo(); appendStringInfo(wrappedQuery, "SELECT %s FROM (%s) subquery", diff --git a/src/backend/distributed/executor/intermediate_results.c b/src/backend/distributed/executor/intermediate_results.c index daf707b2462..ee1aafad2db 100644 --- a/src/backend/distributed/executor/intermediate_results.c +++ b/src/backend/distributed/executor/intermediate_results.c @@ -306,7 +306,7 @@ PrepareIntermediateResultBroadcast(RemoteFileDestReceiver *resultDest) } WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, initialNodeList) + foreach_declared_ptr(workerNode, initialNodeList) { int flags = 0; @@ -326,7 +326,7 @@ PrepareIntermediateResultBroadcast(RemoteFileDestReceiver *resultDest) RemoteTransactionsBeginIfNecessary(connectionList); MultiConnection *connection = NULL; - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { StringInfo copyCommand = ConstructCopyResultStatement(resultId); @@ -337,7 +337,7 @@ PrepareIntermediateResultBroadcast(RemoteFileDestReceiver *resultDest) } } - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { bool raiseInterrupts = true; @@ -516,7 +516,7 @@ static void BroadcastCopyData(StringInfo dataBuffer, List *connectionList) { MultiConnection *connection = NULL; - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { SendCopyDataOverConnection(dataBuffer, connection); } @@ -712,7 +712,7 @@ void RemoveIntermediateResultsDirectories(void) { char *directoryElement = NULL; - foreach_ptr(directoryElement, CreatedResultsDirectories) + foreach_declared_ptr(directoryElement, CreatedResultsDirectories) { /* * The shared directory is renamed before deleting it. Otherwise it diff --git a/src/backend/distributed/executor/local_executor.c b/src/backend/distributed/executor/local_executor.c index bedaa643e29..d824d8f3152 100644 --- a/src/backend/distributed/executor/local_executor.c +++ b/src/backend/distributed/executor/local_executor.c @@ -253,7 +253,7 @@ ExecuteLocalTaskListExtended(List *taskList, ALLOCSET_DEFAULT_SIZES); Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { MemoryContext oldContext = MemoryContextSwitchTo(loopContext); @@ -304,7 +304,7 @@ ExecuteLocalTaskListExtended(List *taskList, LOCKMODE lockMode = GetQueryLockMode(jobQuery); Oid relationId = InvalidOid; - foreach_oid(relationId, localPlan->relationOids) + foreach_declared_oid(relationId, localPlan->relationOids) { LockRelationOid(relationId, lockMode); } @@ -393,7 +393,7 @@ SetColocationIdAndPartitionKeyValueForTasks(List *taskList, Job *workerJob) if (workerJob->colocationId != INVALID_COLOCATION_ID) { Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { task->colocationId = workerJob->colocationId; task->partitionKeyValue = workerJob->partitionKeyValue; @@ -412,7 +412,7 @@ LocallyPlanAndExecuteMultipleQueries(List *queryStrings, TupleDestination *tuple { char *queryString = NULL; uint64 totalProcessedRows = 0; - foreach_ptr(queryString, queryStrings) + foreach_declared_ptr(queryString, queryStrings) { Query *shardQuery = ParseQueryString(queryString, NULL, @@ -490,7 +490,7 @@ ExecuteUtilityCommand(const char *taskQueryCommand) List *parseTreeList = pg_parse_query(taskQueryCommand); RawStmt *taskRawStmt = NULL; - foreach_ptr(taskRawStmt, parseTreeList) + foreach_declared_ptr(taskRawStmt, parseTreeList) { Node *taskRawParseTree = taskRawStmt->stmt; @@ -580,7 +580,7 @@ ExtractLocalAndRemoteTasks(bool readOnly, List *taskList, List **localTaskList, *localTaskList = NIL; Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { List *localTaskPlacementList = NULL; List *remoteTaskPlacementList = NULL; @@ -645,7 +645,7 @@ SplitLocalAndRemotePlacements(List *taskPlacementList, List **localTaskPlacement *remoteTaskPlacementList = NIL; ShardPlacement *taskPlacement = NULL; - foreach_ptr(taskPlacement, taskPlacementList) + foreach_declared_ptr(taskPlacement, taskPlacementList) { if (taskPlacement->groupId == localGroupId) { @@ -817,7 +817,7 @@ RecordNonDistTableAccessesForTask(Task *task) List *placementAccessList = PlacementAccessListForTask(task, taskPlacement); ShardPlacementAccess *placementAccess = NULL; - foreach_ptr(placementAccess, placementAccessList) + foreach_declared_ptr(placementAccess, placementAccessList) { uint64 placementAccessShardId = placementAccess->placement->shardId; if (placementAccessShardId == INVALID_SHARD_ID) @@ -968,7 +968,7 @@ AnyTaskAccessesLocalNode(List *taskList) { Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { if (TaskAccessesLocalNode(task)) { @@ -990,7 +990,7 @@ TaskAccessesLocalNode(Task *task) int32 localGroupId = GetLocalGroupId(); ShardPlacement *taskPlacement = NULL; - foreach_ptr(taskPlacement, task->taskPlacementList) + foreach_declared_ptr(taskPlacement, task->taskPlacementList) { if (taskPlacement->groupId == localGroupId) { diff --git a/src/backend/distributed/executor/merge_executor.c b/src/backend/distributed/executor/merge_executor.c index 969b03faf93..ce1eb007318 100644 --- a/src/backend/distributed/executor/merge_executor.c +++ b/src/backend/distributed/executor/merge_executor.c @@ -258,7 +258,7 @@ ExecuteSourceAtCoordAndRedistribution(CitusScanState *scanState) * on shards with connections. */ Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { uint64 shardId = task->anchorShardId; bool shardModified = false; diff --git a/src/backend/distributed/executor/multi_executor.c b/src/backend/distributed/executor/multi_executor.c index 386a278b4c7..e257b80c6be 100644 --- a/src/backend/distributed/executor/multi_executor.c +++ b/src/backend/distributed/executor/multi_executor.c @@ -224,7 +224,7 @@ CitusExecutorRun(QueryDesc *queryDesc, */ List *citusCustomScanStates = FindCitusCustomScanStates(queryDesc->planstate); CitusScanState *citusScanState = NULL; - foreach_ptr(citusScanState, citusCustomScanStates) + foreach_declared_ptr(citusScanState, citusCustomScanStates) { if (citusScanState->PreExecScan) { @@ -512,7 +512,7 @@ SortTupleStore(CitusScanState *scanState) * for sorting the tuples. */ TargetEntry *returningEntry = NULL; - foreach_ptr(returningEntry, targetList) + foreach_declared_ptr(returningEntry, targetList) { Oid sortop = InvalidOid; diff --git a/src/backend/distributed/executor/placement_access.c b/src/backend/distributed/executor/placement_access.c index a8573de7c08..1046ae53972 100644 --- a/src/backend/distributed/executor/placement_access.c +++ b/src/backend/distributed/executor/placement_access.c @@ -126,7 +126,7 @@ BuildPlacementAccessList(int32 groupId, List *relationShardList, List *placementAccessList = NIL; RelationShard *relationShard = NULL; - foreach_ptr(relationShard, relationShardList) + foreach_declared_ptr(relationShard, relationShardList) { ShardPlacement *placement = ActiveShardPlacementOnGroup(groupId, relationShard->shardId); diff --git a/src/backend/distributed/executor/query_stats.c b/src/backend/distributed/executor/query_stats.c index f37a99bbf72..ce6179b9617 100644 --- a/src/backend/distributed/executor/query_stats.c +++ b/src/backend/distributed/executor/query_stats.c @@ -759,9 +759,6 @@ citus_query_stats(PG_FUNCTION_ARGS) LWLockRelease(queryStats->lock); - /* clean up and return the tuplestore */ - tuplestore_donestoring(tupstore); - return (Datum) 0; } diff --git a/src/backend/distributed/executor/repartition_join_execution.c b/src/backend/distributed/executor/repartition_join_execution.c index 8dce1239034..d72e030b5f4 100644 --- a/src/backend/distributed/executor/repartition_join_execution.c +++ b/src/backend/distributed/executor/repartition_join_execution.c @@ -93,7 +93,7 @@ TraverseJobTree(Job *curJob, List **jobIds) *jobIds = lappend(*jobIds, jobIdPointer); Job *childJob = NULL; - foreach_ptr(childJob, curJob->dependentJobList) + foreach_declared_ptr(childJob, curJob->dependentJobList) { TraverseJobTree(childJob, jobIds); } diff --git a/src/backend/distributed/executor/subplan_execution.c b/src/backend/distributed/executor/subplan_execution.c index 4e81bb48680..ef283834339 100644 --- a/src/backend/distributed/executor/subplan_execution.c +++ b/src/backend/distributed/executor/subplan_execution.c @@ -59,7 +59,7 @@ ExecuteSubPlans(DistributedPlan *distributedPlan) UseCoordinatedTransaction(); DistributedSubPlan *subPlan = NULL; - foreach_ptr(subPlan, subPlanList) + foreach_declared_ptr(subPlan, subPlanList) { PlannedStmt *plannedStmt = subPlan->plan; uint32 subPlanId = subPlan->subPlanId; diff --git a/src/backend/distributed/metadata/dependency.c b/src/backend/distributed/metadata/dependency.c index 01653721ec3..2569b58fca8 100644 --- a/src/backend/distributed/metadata/dependency.c +++ b/src/backend/distributed/metadata/dependency.c @@ -207,7 +207,7 @@ GetUniqueDependenciesList(List *objectAddressesList) InitObjectAddressCollector(&objectAddressCollector); ObjectAddress *objectAddress = NULL; - foreach_ptr(objectAddress, objectAddressesList) + foreach_declared_ptr(objectAddress, objectAddressesList) { if (IsObjectAddressCollected(*objectAddress, &objectAddressCollector)) { @@ -334,7 +334,7 @@ OrderObjectAddressListInDependencyOrder(List *objectAddressList) InitObjectAddressCollector(&collector); ObjectAddress *objectAddress = NULL; - foreach_ptr(objectAddress, objectAddressList) + foreach_declared_ptr(objectAddress, objectAddressList) { if (IsObjectAddressCollected(*objectAddress, &collector)) { @@ -403,7 +403,7 @@ RecurseObjectDependencies(ObjectAddress target, expandFn expand, followFn follow /* iterate all entries and recurse depth first */ DependencyDefinition *dependencyDefinition = NULL; - foreach_ptr(dependencyDefinition, dependenyDefinitionList) + foreach_declared_ptr(dependencyDefinition, dependenyDefinitionList) { if (follow == NULL || !follow(collector, dependencyDefinition)) { @@ -869,7 +869,7 @@ bool ErrorOrWarnIfAnyObjectHasUnsupportedDependency(List *objectAddresses) { ObjectAddress *objectAddress = NULL; - foreach_ptr(objectAddress, objectAddresses) + foreach_declared_ptr(objectAddress, objectAddresses) { if (ErrorOrWarnIfObjectHasUnsupportedDependency(objectAddress)) { @@ -962,7 +962,7 @@ DeferErrorIfAnyObjectHasUnsupportedDependency(const List *objectAddresses) { DeferredErrorMessage *deferredErrorMessage = NULL; ObjectAddress *objectAddress = NULL; - foreach_ptr(objectAddress, objectAddresses) + foreach_declared_ptr(objectAddress, objectAddresses) { deferredErrorMessage = DeferErrorIfHasUnsupportedDependency(objectAddress); if (deferredErrorMessage) @@ -995,7 +995,7 @@ GetUndistributableDependency(const ObjectAddress *objectAddress) return NULL; } - foreach_ptr(dependency, dependencies) + foreach_declared_ptr(dependency, dependencies) { /* * Objects with the id smaller than FirstNormalObjectId should be created within @@ -1172,7 +1172,7 @@ IsAnyObjectAddressOwnedByExtension(const List *targets, ObjectAddress *extensionAddress) { ObjectAddress *target = NULL; - foreach_ptr(target, targets) + foreach_declared_ptr(target, targets) { if (IsObjectAddressOwnedByExtension(target, extensionAddress)) { @@ -1563,7 +1563,7 @@ ExpandCitusSupportedTypes(ObjectAddressCollector *collector, ObjectAddress targe List *FDWOids = GetDependentFDWsToExtension(extensionId); Oid FDWOid = InvalidOid; - foreach_oid(FDWOid, FDWOids) + foreach_declared_oid(FDWOid, FDWOids) { List *dependentRoleIds = GetDependentRoleIdsFDW(FDWOid); List *dependencies = @@ -1849,7 +1849,7 @@ GetViewRuleReferenceDependencyList(Oid viewId) List *nonInternalDependenciesOfDependingRules = NIL; HeapTuple depTup = NULL; - foreach_ptr(depTup, dependencyTupleList) + foreach_declared_ptr(depTup, dependencyTupleList) { Form_pg_depend pg_depend = (Form_pg_depend) GETSTRUCT(depTup); @@ -1872,7 +1872,7 @@ GetViewRuleReferenceDependencyList(Oid viewId) List *ruleDependencies = DependencyDefinitionFromPgDepend(ruleAddress); DependencyDefinition *dependencyDef = NULL; - foreach_ptr(dependencyDef, ruleDependencies) + foreach_declared_ptr(dependencyDef, ruleDependencies) { /* * Follow all dependencies of the internally dependent rule dependencies @@ -1907,7 +1907,7 @@ GetRelationSequenceDependencyList(Oid relationId) List *seqIdList = NIL; SequenceInfo *seqInfo = NULL; - foreach_ptr(seqInfo, seqInfoList) + foreach_declared_ptr(seqInfo, seqInfoList) { seqIdList = lappend_oid(seqIdList, seqInfo->sequenceOid); } @@ -1980,7 +1980,7 @@ GetRelationTriggerFunctionDependencyList(Oid relationId) List *triggerIdList = GetExplicitTriggerIdList(relationId); Oid triggerId = InvalidOid; - foreach_oid(triggerId, triggerIdList) + foreach_declared_oid(triggerId, triggerIdList) { Oid functionId = GetTriggerFunctionId(triggerId); DependencyDefinition *dependency = @@ -2005,7 +2005,7 @@ GetPublicationRelationsDependencyList(Oid publicationId) Oid relationId = InvalidOid; - foreach_oid(relationId, allRelationIds) + foreach_declared_oid(relationId, allRelationIds) { if (!IsCitusTable(relationId)) { @@ -2087,7 +2087,7 @@ CreateObjectAddressDependencyDefList(Oid classId, List *objectIdList) { List *dependencyList = NIL; Oid objectId = InvalidOid; - foreach_oid(objectId, objectIdList) + foreach_declared_oid(objectId, objectIdList) { DependencyDefinition *dependency = CreateObjectAddressDependencyDef(classId, objectId); @@ -2161,7 +2161,7 @@ BuildViewDependencyGraph(Oid relationId, HTAB *nodeMap) targetObjectId); HeapTuple depTup = NULL; - foreach_ptr(depTup, dependencyTupleList) + foreach_declared_ptr(depTup, dependencyTupleList) { Form_pg_depend pg_depend = (Form_pg_depend) GETSTRUCT(depTup); @@ -2240,7 +2240,7 @@ GetDependingViews(Oid relationId) foreach_ptr_append(node, nodeQueue) { ViewDependencyNode *dependingNode = NULL; - foreach_ptr(dependingNode, node->dependingNodes) + foreach_declared_ptr(dependingNode, node->dependingNodes) { ObjectAddress relationAddress = { 0 }; ObjectAddressSet(relationAddress, RelationRelationId, dependingNode->id); diff --git a/src/backend/distributed/metadata/distobject.c b/src/backend/distributed/metadata/distobject.c index ff5b2c7a954..daa51eb7576 100644 --- a/src/backend/distributed/metadata/distobject.c +++ b/src/backend/distributed/metadata/distobject.c @@ -554,7 +554,7 @@ bool IsAnyObjectDistributed(const List *addresses) { ObjectAddress *address = NULL; - foreach_ptr(address, addresses) + foreach_declared_ptr(address, addresses) { if (IsObjectDistributed(address)) { diff --git a/src/backend/distributed/metadata/metadata_cache.c b/src/backend/distributed/metadata/metadata_cache.c index 402dedb8a91..440e4d7c471 100644 --- a/src/backend/distributed/metadata/metadata_cache.c +++ b/src/backend/distributed/metadata/metadata_cache.c @@ -920,7 +920,7 @@ CitusTableList(void) List *citusTableIdList = CitusTableTypeIdList(ANY_CITUS_TABLE_TYPE); Oid relationId = InvalidOid; - foreach_oid(relationId, citusTableIdList) + foreach_declared_oid(relationId, citusTableIdList) { CitusTableCacheEntry *cacheEntry = GetCitusTableCacheEntry(relationId); @@ -1891,7 +1891,7 @@ BuildCachedShardList(CitusTableCacheEntry *cacheEntry) sizeof(int)); HeapTuple shardTuple = NULL; - foreach_ptr(shardTuple, distShardTupleList) + foreach_declared_ptr(shardTuple, distShardTupleList) { ShardInterval *shardInterval = TupleToShardInterval(shardTuple, distShardTupleDesc, @@ -2029,7 +2029,7 @@ BuildCachedShardList(CitusTableCacheEntry *cacheEntry) GroupShardPlacement *placementArray = palloc0(numberOfPlacements * sizeof(GroupShardPlacement)); GroupShardPlacement *srcPlacement = NULL; - foreach_ptr(srcPlacement, placementList) + foreach_declared_ptr(srcPlacement, placementList) { placementArray[placementOffset] = *srcPlacement; placementOffset++; @@ -4333,7 +4333,7 @@ InitializeWorkerNodeCache(void) /* iterate over the worker node list */ WorkerNode *currentNode = NULL; - foreach_ptr(currentNode, workerNodeList) + foreach_declared_ptr(currentNode, workerNodeList) { bool handleFound = false; @@ -4510,7 +4510,7 @@ GetLocalNodeId(void) List *workerNodeList = ReadDistNode(includeNodesFromOtherClusters); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { if (workerNode->groupId == localGroupId && workerNode->isActive) @@ -5098,7 +5098,7 @@ CitusTableCacheFlushInvalidatedEntries() if (DistTableCacheHash != NULL && DistTableCacheExpired != NIL) { CitusTableCacheEntry *cacheEntry = NULL; - foreach_ptr(cacheEntry, DistTableCacheExpired) + foreach_declared_ptr(cacheEntry, DistTableCacheExpired) { ResetCitusTableCacheEntry(cacheEntry); } diff --git a/src/backend/distributed/metadata/metadata_sync.c b/src/backend/distributed/metadata/metadata_sync.c index ef7c56dc752..0da56eb9e56 100644 --- a/src/backend/distributed/metadata/metadata_sync.c +++ b/src/backend/distributed/metadata/metadata_sync.c @@ -307,7 +307,7 @@ CreateDependingViewsOnWorkers(Oid relationId) SendCommandToWorkersWithMetadata(DISABLE_DDL_PROPAGATION); Oid viewOid = InvalidOid; - foreach_oid(viewOid, views) + foreach_declared_oid(viewOid, views) { if (!ShouldMarkRelationDistributed(viewOid)) { @@ -347,7 +347,7 @@ AddTableToPublications(Oid relationId) SendCommandToWorkersWithMetadata(DISABLE_DDL_PROPAGATION); - foreach_oid(publicationId, publicationIds) + foreach_declared_oid(publicationId, publicationIds) { ObjectAddress *publicationAddress = palloc0(sizeof(ObjectAddress)); ObjectAddressSet(*publicationAddress, PublicationRelationId, publicationId); @@ -818,7 +818,7 @@ NodeListInsertCommand(List *workerNodeList) /* iterate over the worker nodes, add the values */ WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { char *hasMetadataString = workerNode->hasMetadata ? "TRUE" : "FALSE"; char *metadataSyncedString = workerNode->metadataSynced ? "TRUE" : "FALSE"; @@ -946,7 +946,7 @@ MarkObjectsDistributedCreateCommand(List *addresses, char *name = NULL; bool firstInNameLoop = true; - foreach_ptr(name, names) + foreach_declared_ptr(name, names) { if (!firstInNameLoop) { @@ -961,7 +961,7 @@ MarkObjectsDistributedCreateCommand(List *addresses, char *arg; bool firstInArgLoop = true; - foreach_ptr(arg, args) + foreach_declared_ptr(arg, args) { if (!firstInArgLoop) { @@ -1217,13 +1217,13 @@ ShardListInsertCommand(List *shardIntervalList) ShardInterval *shardInterval = NULL; bool firstPlacementProcessed = false; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { uint64 shardId = shardInterval->shardId; List *shardPlacementList = ActiveShardPlacementList(shardId); ShardPlacement *placement = NULL; - foreach_ptr(placement, shardPlacementList) + foreach_declared_ptr(placement, shardPlacementList) { if (firstPlacementProcessed) { @@ -1257,7 +1257,7 @@ ShardListInsertCommand(List *shardIntervalList) "WITH shard_data(relationname, shardid, storagetype, " "shardminvalue, shardmaxvalue) AS (VALUES "); - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { uint64 shardId = shardInterval->shardId; Oid distributedRelationId = shardInterval->relationId; @@ -1694,7 +1694,7 @@ GetDependentRelationsWithSequence(Oid sequenceOid, char depType) Oid attrDefOid; List *attrDefOids = GetAttrDefsFromSequence(sequenceOid); - foreach_oid(attrDefOid, attrDefOids) + foreach_declared_oid(attrDefOid, attrDefOids) { ObjectAddress columnAddress = GetAttrDefaultColumnAddress(attrDefOid); relations = lappend_oid(relations, columnAddress.objectId); @@ -1890,7 +1890,7 @@ GetDependentFunctionsWithRelation(Oid relationId) table_close(depRel, AccessShareLock); ObjectAddress *referencingObject = NULL; - foreach_ptr(referencingObject, referencingObjects) + foreach_declared_ptr(referencingObject, referencingObjects) { functionOids = list_concat(functionOids, GetFunctionDependenciesForObjects(referencingObject)); @@ -2771,7 +2771,7 @@ HasMetadataWorkers(void) List *workerNodeList = ActiveReadableNonCoordinatorNodeList(); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { if (workerNode->hasMetadata) { @@ -2804,7 +2804,7 @@ CreateInterTableRelationshipOfRelationOnWorkers(Oid relationId) SendCommandToWorkersWithMetadata(DISABLE_DDL_PROPAGATION); const char *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { SendCommandToWorkersWithMetadata(command); } @@ -2857,14 +2857,14 @@ CreateShellTableOnWorkers(Oid relationId) creatingShellTableOnRemoteNode); TableDDLCommand *tableDDLCommand = NULL; - foreach_ptr(tableDDLCommand, tableDDLCommands) + foreach_declared_ptr(tableDDLCommand, tableDDLCommands) { Assert(CitusIsA(tableDDLCommand, TableDDLCommand)); commandList = lappend(commandList, GetTableDDLCommand(tableDDLCommand)); } const char *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { SendCommandToWorkersWithMetadata(command); } @@ -2888,7 +2888,7 @@ CreateTableMetadataOnWorkers(Oid relationId) /* send the commands one by one */ const char *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { SendCommandToWorkersWithMetadata(command); } @@ -2912,7 +2912,7 @@ DetachPartitionCommandList(void) /* we iterate over all distributed partitioned tables and DETACH their partitions */ CitusTableCacheEntry *cacheEntry = NULL; - foreach_ptr(cacheEntry, distributedTableList) + foreach_declared_ptr(cacheEntry, distributedTableList) { if (!PartitionedTable(cacheEntry->relationId)) { @@ -2976,7 +2976,7 @@ SyncNodeMetadataToNodesOptional(void) List *syncedWorkerList = NIL; List *workerList = ActivePrimaryNonCoordinatorNodeList(NoLock); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerList) + foreach_declared_ptr(workerNode, workerList) { if (workerNode->hasMetadata && !workerNode->metadataSynced) { @@ -2996,7 +2996,7 @@ SyncNodeMetadataToNodesOptional(void) } } - foreach_ptr(workerNode, syncedWorkerList) + foreach_declared_ptr(workerNode, syncedWorkerList) { SetWorkerColumnOptional(workerNode, Anum_pg_dist_node_metadatasynced, BoolGetDatum(true)); @@ -3041,7 +3041,7 @@ SyncNodeMetadataToNodes(void) List *workerList = ActivePrimaryNonCoordinatorNodeList(NoLock); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerList) + foreach_declared_ptr(workerNode, workerList) { if (workerNode->hasMetadata) { @@ -3280,7 +3280,7 @@ ShouldInitiateMetadataSync(bool *lockFailure) List *workerList = ActivePrimaryNonCoordinatorNodeList(NoLock); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerList) + foreach_declared_ptr(workerNode, workerList) { if (workerNode->hasMetadata && !workerNode->metadataSynced) { @@ -3638,7 +3638,7 @@ EnsureShardMetadataIsSane(Oid relationId, int64 shardId, char storageType, GetFunctionInfo(intervalTypeId, BTREE_AM_OID, BTORDER_PROC); HeapTuple shardTuple = NULL; - foreach_ptr(shardTuple, distShardTupleList) + foreach_declared_ptr(shardTuple, distShardTupleList) { ShardInterval *shardInterval = TupleToShardInterval(shardTuple, distShardTupleDesc, @@ -3934,7 +3934,7 @@ citus_internal_delete_shard_metadata(PG_FUNCTION_ARGS) List *shardPlacementList = ShardPlacementList(shardId); ShardPlacement *shardPlacement = NULL; - foreach_ptr(shardPlacement, shardPlacementList) + foreach_declared_ptr(shardPlacement, shardPlacementList) { DeleteShardPlacementRow(shardPlacement->placementId); } @@ -4503,7 +4503,7 @@ SetMetadataSyncNodesFromNodeList(MetadataSyncContext *context, List *nodeList) List *activatedWorkerNodeList = NIL; WorkerNode *node = NULL; - foreach_ptr(node, nodeList) + foreach_declared_ptr(node, nodeList) { if (NodeIsPrimary(node)) { @@ -4538,7 +4538,7 @@ EstablishAndSetMetadataSyncBareConnections(MetadataSyncContext *context) /* establish bare connections to activated worker nodes */ List *bareConnectionList = NIL; WorkerNode *node = NULL; - foreach_ptr(node, context->activatedWorkerNodeList) + foreach_declared_ptr(node, context->activatedWorkerNodeList) { MultiConnection *connection = GetNodeUserDatabaseConnection(connectionFlags, node->workerName, @@ -5147,7 +5147,7 @@ SendDependencyCreationCommands(MetadataSyncContext *context) ALLOCSET_DEFAULT_SIZES); MemoryContextSwitchTo(commandsContext); ObjectAddress *dependency = NULL; - foreach_ptr(dependency, dependencies) + foreach_declared_ptr(dependency, dependencies) { if (!MetadataSyncCollectsCommands(context)) { diff --git a/src/backend/distributed/metadata/metadata_utility.c b/src/backend/distributed/metadata/metadata_utility.c index 15e167008dd..fad263abd47 100644 --- a/src/backend/distributed/metadata/metadata_utility.c +++ b/src/backend/distributed/metadata/metadata_utility.c @@ -420,7 +420,7 @@ OpenConnectionToNodes(List *workerNodeList) { List *connectionList = NIL; WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { const char *nodeName = workerNode->workerName; int nodePort = workerNode->workerPort; @@ -444,7 +444,7 @@ GenerateShardStatisticsQueryList(List *workerNodeList, List *citusTableIds) { List *shardStatisticsQueryList = NIL; WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { char *shardStatisticsQuery = GenerateAllShardStatisticsQueryForNode(workerNode, citusTableIds); @@ -465,7 +465,7 @@ ReceiveShardIdAndSizeResults(List *connectionList, Tuplestorestate *tupleStore, TupleDesc tupleDescriptor) { MultiConnection *connection = NULL; - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { bool raiseInterrupts = true; Datum values[SHARD_SIZES_COLUMN_COUNT]; @@ -559,7 +559,7 @@ DistributedRelationSize(Oid relationId, SizeQueryType sizeQueryType, List *workerNodeList = ActiveReadableNodeList(); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { uint64 relationSizeOnNode = 0; @@ -780,7 +780,7 @@ GenerateSizeQueryOnMultiplePlacements(List *shardIntervalList, List *nonPartitionedShardNames = NIL; ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { if (optimizePartitionCalculations && PartitionTable(shardInterval->relationId)) { @@ -859,7 +859,7 @@ GenerateSizeQueryForRelationNameList(List *quotedShardNames, char *sizeFunction) bool addComma = false; char *quotedShardName = NULL; - foreach_ptr(quotedShardName, quotedShardNames) + foreach_declared_ptr(quotedShardName, quotedShardNames) { if (addComma) { @@ -960,7 +960,7 @@ GenerateAllShardStatisticsQueryForNode(WorkerNode *workerNode, List *citusTableI appendStringInfoString(allShardStatisticsQuery, " FROM (VALUES "); Oid relationId = InvalidOid; - foreach_oid(relationId, citusTableIds) + foreach_declared_oid(relationId, citusTableIds) { /* * Ensure the table still exists by trying to acquire a lock on it @@ -1007,7 +1007,7 @@ GenerateShardIdNameValuesForShardList(List *shardIntervalList, bool firstValue) StringInfo selectQuery = makeStringInfo(); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { if (!firstValue) { @@ -1147,7 +1147,7 @@ TableShardReplicationFactor(Oid relationId) List *shardIntervalList = LoadShardIntervalList(relationId); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { uint64 shardId = shardInterval->shardId; @@ -1238,7 +1238,7 @@ LoadUnsortedShardIntervalListViaCatalog(Oid relationId) &intervalTypeMod); HeapTuple distShardTuple = NULL; - foreach_ptr(distShardTuple, distShardTuples) + foreach_declared_ptr(distShardTuple, distShardTuples) { ShardInterval *interval = TupleToShardInterval(distShardTuple, distShardTupleDesc, @@ -1487,7 +1487,7 @@ FilterShardPlacementList(List *shardPlacementList, bool (*filter)(ShardPlacement List *filteredShardPlacementList = NIL; ShardPlacement *shardPlacement = NULL; - foreach_ptr(shardPlacement, shardPlacementList) + foreach_declared_ptr(shardPlacement, shardPlacementList) { if (filter(shardPlacement)) { @@ -1511,7 +1511,7 @@ FilterActiveShardPlacementListByNode(List *shardPlacementList, WorkerNode *worke List *filteredShardPlacementList = NIL; ShardPlacement *shardPlacement = NULL; - foreach_ptr(shardPlacement, activeShardPlacementList) + foreach_declared_ptr(shardPlacement, activeShardPlacementList) { if (IsPlacementOnWorkerNode(shardPlacement, workerNode)) { @@ -1535,7 +1535,7 @@ ActiveShardPlacementListOnGroup(uint64 shardId, int32 groupId) List *activePlacementList = ActiveShardPlacementList(shardId); ShardPlacement *shardPlacement = NULL; - foreach_ptr(shardPlacement, activePlacementList) + foreach_declared_ptr(shardPlacement, activePlacementList) { if (shardPlacement->groupId == groupId) { @@ -3331,7 +3331,7 @@ ResetRunningBackgroundTasks(void) /* there are tasks that need to release their lock before we can continue */ int64 *taskId = NULL; - foreach_ptr(taskId, taskIdsToWait) + foreach_declared_ptr(taskId, taskIdsToWait) { LOCKTAG locktag = { 0 }; SET_LOCKTAG_BACKGROUND_TASK(locktag, *taskId); diff --git a/src/backend/distributed/metadata/node_metadata.c b/src/backend/distributed/metadata/node_metadata.c index d93b133eaed..1fa268a7306 100644 --- a/src/backend/distributed/metadata/node_metadata.c +++ b/src/backend/distributed/metadata/node_metadata.c @@ -987,7 +987,7 @@ MarkNodesNotSyncedInLoopBackConnection(MetadataSyncContext *context, List *commandList = NIL; WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, context->activatedWorkerNodeList) + foreach_declared_ptr(workerNode, context->activatedWorkerNodeList) { /* * We need to prevent self deadlock when we access pg_dist_node using separate @@ -1020,7 +1020,7 @@ SetNodeMetadata(MetadataSyncContext *context, bool localOnly) List *updatedActivatedNodeList = NIL; WorkerNode *node = NULL; - foreach_ptr(node, context->activatedWorkerNodeList) + foreach_declared_ptr(node, context->activatedWorkerNodeList) { node = SetWorkerColumnLocalOnly(node, Anum_pg_dist_node_isactive, BoolGetDatum(true)); @@ -1039,7 +1039,7 @@ SetNodeMetadata(MetadataSyncContext *context, bool localOnly) if (!localOnly && EnableMetadataSync) { WorkerNode *node = NULL; - foreach_ptr(node, context->activatedWorkerNodeList) + foreach_declared_ptr(node, context->activatedWorkerNodeList) { SetNodeStateViaMetadataContext(context, node, BoolGetDatum(true)); } @@ -1844,7 +1844,7 @@ FindNodeAnyClusterByNodeId(uint32 nodeId) List *nodeList = ReadDistNode(includeNodesFromOtherClusters); WorkerNode *node = NULL; - foreach_ptr(node, nodeList) + foreach_declared_ptr(node, nodeList) { if (node->nodeId == nodeId) { @@ -1866,7 +1866,7 @@ FindNodeWithNodeId(int nodeId, bool missingOk) List *nodeList = ActiveReadableNodeList(); WorkerNode *node = NULL; - foreach_ptr(node, nodeList) + foreach_declared_ptr(node, nodeList) { if (node->nodeId == nodeId) { @@ -1894,7 +1894,7 @@ FindCoordinatorNodeId() List *nodeList = ReadDistNode(includeNodesFromOtherClusters); WorkerNode *node = NULL; - foreach_ptr(node, nodeList) + foreach_declared_ptr(node, nodeList) { if (NodeIsCoordinator(node)) { @@ -2024,7 +2024,7 @@ ErrorIfNodeContainsNonRemovablePlacements(WorkerNode *workerNode) shardPlacements = SortList(shardPlacements, CompareGroupShardPlacements); GroupShardPlacement *placement = NULL; - foreach_ptr(placement, shardPlacements) + foreach_declared_ptr(placement, shardPlacements) { if (!PlacementHasActivePlacementOnAnotherGroup(placement)) { @@ -2060,7 +2060,7 @@ PlacementHasActivePlacementOnAnotherGroup(GroupShardPlacement *sourcePlacement) bool foundActivePlacementOnAnotherGroup = false; ShardPlacement *activePlacement = NULL; - foreach_ptr(activePlacement, activePlacementList) + foreach_declared_ptr(activePlacement, activePlacementList) { if (activePlacement->groupId != sourcePlacement->groupId) { @@ -2411,7 +2411,7 @@ SetWorkerColumnOptional(WorkerNode *workerNode, int columnIndex, Datum value) /* open connections in parallel */ WorkerNode *worker = NULL; - foreach_ptr(worker, workerNodeList) + foreach_declared_ptr(worker, workerNodeList) { bool success = SendOptionalMetadataCommandListToWorkerInCoordinatedTransaction( worker->workerName, worker->workerPort, @@ -3144,7 +3144,7 @@ static void ErrorIfAnyNodeNotExist(List *nodeList) { WorkerNode *node = NULL; - foreach_ptr(node, nodeList) + foreach_declared_ptr(node, nodeList) { /* * First, locally mark the node is active, if everything goes well, @@ -3193,7 +3193,7 @@ static void SendDeletionCommandsForReplicatedTablePlacements(MetadataSyncContext *context) { WorkerNode *node = NULL; - foreach_ptr(node, context->activatedWorkerNodeList) + foreach_declared_ptr(node, context->activatedWorkerNodeList) { if (!node->isActive) { diff --git a/src/backend/distributed/operations/citus_create_restore_point.c b/src/backend/distributed/operations/citus_create_restore_point.c index 8a5e738e44b..18081b6e45b 100644 --- a/src/backend/distributed/operations/citus_create_restore_point.c +++ b/src/backend/distributed/operations/citus_create_restore_point.c @@ -122,7 +122,7 @@ OpenConnectionsToAllWorkerNodes(LOCKMODE lockMode) List *workerNodeList = ActivePrimaryNonCoordinatorNodeList(lockMode); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { MultiConnection *connection = StartNodeConnection(connectionFlags, workerNode->workerName, @@ -164,7 +164,7 @@ CreateRemoteRestorePoints(char *restoreName, List *connectionList) const char *parameterValues[1] = { restoreName }; MultiConnection *connection = NULL; - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { int querySent = SendRemoteCommandParams(connection, CREATE_RESTORE_POINT_COMMAND, parameterCount, parameterTypes, @@ -175,7 +175,7 @@ CreateRemoteRestorePoints(char *restoreName, List *connectionList) } } - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { PGresult *result = GetRemoteCommandResult(connection, true); if (!IsResponseOK(result)) diff --git a/src/backend/distributed/operations/create_shards.c b/src/backend/distributed/operations/create_shards.c index 96254705122..1553de92f33 100644 --- a/src/backend/distributed/operations/create_shards.c +++ b/src/backend/distributed/operations/create_shards.c @@ -200,7 +200,7 @@ CreateShardsWithRoundRobinPolicy(Oid distributedTableId, int32 shardCount, * each placement insertion. */ uint64 *shardIdPtr; - foreach_ptr(shardIdPtr, insertedShardIds) + foreach_declared_ptr(shardIdPtr, insertedShardIds) { List *placementsForShard = ShardPlacementList(*shardIdPtr); insertedShardPlacements = list_concat(insertedShardPlacements, @@ -258,7 +258,7 @@ CreateColocatedShards(Oid targetRelationId, Oid sourceRelationId, bool char targetShardStorageType = ShardStorageType(targetRelationId); ShardInterval *sourceShardInterval = NULL; - foreach_ptr(sourceShardInterval, sourceShardIntervalList) + foreach_declared_ptr(sourceShardInterval, sourceShardIntervalList) { uint64 sourceShardId = sourceShardInterval->shardId; uint64 *newShardIdPtr = (uint64 *) palloc0(sizeof(uint64)); @@ -286,7 +286,7 @@ CreateColocatedShards(Oid targetRelationId, Oid sourceRelationId, bool shardMinValueText, shardMaxValueText); ShardPlacement *sourcePlacement = NULL; - foreach_ptr(sourcePlacement, sourceShardPlacementList) + foreach_declared_ptr(sourcePlacement, sourceShardPlacementList) { int32 groupId = sourcePlacement->groupId; const uint64 shardSize = 0; @@ -304,7 +304,7 @@ CreateColocatedShards(Oid targetRelationId, Oid sourceRelationId, bool * each placement insertion. */ uint64 *shardIdPtr; - foreach_ptr(shardIdPtr, insertedShardIds) + foreach_declared_ptr(shardIdPtr, insertedShardIds) { List *placementsForShard = ShardPlacementList(*shardIdPtr); insertedShardPlacements = list_concat(insertedShardPlacements, diff --git a/src/backend/distributed/operations/delete_protocol.c b/src/backend/distributed/operations/delete_protocol.c index 39651715853..d73b74720d5 100644 --- a/src/backend/distributed/operations/delete_protocol.c +++ b/src/backend/distributed/operations/delete_protocol.c @@ -250,12 +250,12 @@ DropShards(Oid relationId, char *schemaName, char *relationName, bool shouldExecuteTasksLocally = ShouldExecuteTasksLocally(dropTaskList); Task *task = NULL; - foreach_ptr(task, dropTaskList) + foreach_declared_ptr(task, dropTaskList) { uint64 shardId = task->anchorShardId; ShardPlacement *shardPlacement = NULL; - foreach_ptr(shardPlacement, task->taskPlacementList) + foreach_declared_ptr(shardPlacement, task->taskPlacementList) { uint64 shardPlacementId = shardPlacement->placementId; int32 shardPlacementGroupId = shardPlacement->groupId; @@ -350,7 +350,7 @@ DropTaskList(Oid relationId, char *schemaName, char *relationName, int taskId = 1; ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, deletableShardIntervalList) + foreach_declared_ptr(shardInterval, deletableShardIntervalList) { Assert(shardInterval->relationId == relationId); diff --git a/src/backend/distributed/operations/health_check.c b/src/backend/distributed/operations/health_check.c index c908606c156..e54d80b7e65 100644 --- a/src/backend/distributed/operations/health_check.c +++ b/src/backend/distributed/operations/health_check.c @@ -119,11 +119,11 @@ StoreAllConnectivityChecks(Tuplestorestate *tupleStore, TupleDesc tupleDescripto /* * We iterate over the workerNodeList twice, for source and target worker nodes. This - * operation is safe for foreach_ptr macro, as long as we use different variables for + * operation is safe for foreach_declared_ptr macro, as long as we use different variables for * each iteration. */ WorkerNode *sourceWorkerNode = NULL; - foreach_ptr(sourceWorkerNode, workerNodeList) + foreach_declared_ptr(sourceWorkerNode, workerNodeList) { const char *sourceNodeName = sourceWorkerNode->workerName; const int sourceNodePort = sourceWorkerNode->workerPort; @@ -135,7 +135,7 @@ StoreAllConnectivityChecks(Tuplestorestate *tupleStore, TupleDesc tupleDescripto /* the second iteration over workerNodeList for the target worker nodes. */ WorkerNode *targetWorkerNode = NULL; - foreach_ptr(targetWorkerNode, workerNodeList) + foreach_declared_ptr(targetWorkerNode, workerNodeList) { const char *targetNodeName = targetWorkerNode->workerName; const int targetNodePort = targetWorkerNode->workerPort; diff --git a/src/backend/distributed/operations/node_protocol.c b/src/backend/distributed/operations/node_protocol.c index 52e44bea01c..8a633e3dce0 100644 --- a/src/backend/distributed/operations/node_protocol.c +++ b/src/backend/distributed/operations/node_protocol.c @@ -645,7 +645,7 @@ GetPreLoadTableCreationCommands(Oid relationId, if (tableACLList != NIL) { char *tableACLCommand = NULL; - foreach_ptr(tableACLCommand, tableACLList) + foreach_declared_ptr(tableACLCommand, tableACLList) { tableDDLEventList = lappend(tableDDLEventList, makeTableDDLCommandString(tableACLCommand)); @@ -822,7 +822,7 @@ GetTableRowLevelSecurityCommands(Oid relationId) List *rowLevelSecurityEnableCommands = pg_get_row_level_security_commands(relationId); char *rowLevelSecurityCommand = NULL; - foreach_ptr(rowLevelSecurityCommand, rowLevelSecurityEnableCommands) + foreach_declared_ptr(rowLevelSecurityCommand, rowLevelSecurityEnableCommands) { rowLevelSecurityCommandList = lappend( rowLevelSecurityCommandList, diff --git a/src/backend/distributed/operations/replicate_none_dist_table_shard.c b/src/backend/distributed/operations/replicate_none_dist_table_shard.c index 33a98ee4226..aa48b488a2f 100644 --- a/src/backend/distributed/operations/replicate_none_dist_table_shard.c +++ b/src/backend/distributed/operations/replicate_none_dist_table_shard.c @@ -63,7 +63,7 @@ NoneDistTableReplicateCoordinatorPlacement(Oid noneDistTableId, /* insert new placements to pg_dist_placement */ List *insertedPlacementList = NIL; WorkerNode *targetNode = NULL; - foreach_ptr(targetNode, targetNodeList) + foreach_declared_ptr(targetNode, targetNodeList) { ShardPlacement *shardPlacement = InsertShardPlacementRowGlobally(shardId, GetNextPlacementId(), @@ -215,7 +215,7 @@ CreateForeignKeysFromReferenceTablesOnShards(Oid noneDistTableId) List *taskList = NIL; char *command = NULL; - foreach_ptr(command, ddlCommandList) + foreach_declared_ptr(command, ddlCommandList) { List *commandTaskList = InterShardDDLTaskList( ForeignConstraintGetReferencingTableId(command), diff --git a/src/backend/distributed/operations/shard_cleaner.c b/src/backend/distributed/operations/shard_cleaner.c index 2efce9a7b09..f76476c15c2 100644 --- a/src/backend/distributed/operations/shard_cleaner.c +++ b/src/backend/distributed/operations/shard_cleaner.c @@ -259,7 +259,7 @@ DropOrphanedResourcesForCleanup() int failedResourceCountForCleanup = 0; CleanupRecord *record = NULL; - foreach_ptr(record, cleanupRecordList) + foreach_declared_ptr(record, cleanupRecordList) { if (!PrimaryNodeForGroup(record->nodeGroupId, NULL)) { @@ -369,7 +369,7 @@ FinalizeOperationNeedingCleanupOnSuccess(const char *operationName) int failedShardCountOnComplete = 0; CleanupRecord *record = NULL; - foreach_ptr(record, currentOperationRecordList) + foreach_declared_ptr(record, currentOperationRecordList) { if (record->policy == CLEANUP_ALWAYS) { @@ -932,7 +932,7 @@ TryDropDatabaseOutsideTransaction(char *databaseName, char *nodeName, int nodePo bool executeCommand = true; const char *commandString = NULL; - foreach_ptr(commandString, commandList) + foreach_declared_ptr(commandString, commandList) { /* * Cannot use SendOptionalCommandListToWorkerOutsideTransactionWithConnection() diff --git a/src/backend/distributed/operations/shard_rebalancer.c b/src/backend/distributed/operations/shard_rebalancer.c index 03dc4c1b84e..074f1bed00e 100644 --- a/src/backend/distributed/operations/shard_rebalancer.c +++ b/src/backend/distributed/operations/shard_rebalancer.c @@ -357,7 +357,7 @@ CheckRebalanceStateInvariants(const RebalanceState *state) Assert(state != NULL); Assert(list_length(state->fillStateListAsc) == list_length(state->fillStateListDesc)); - foreach_ptr(fillState, state->fillStateListAsc) + foreach_declared_ptr(fillState, state->fillStateListAsc) { float4 totalCost = 0; ShardCost *shardCost = NULL; @@ -376,7 +376,7 @@ CheckRebalanceStateInvariants(const RebalanceState *state) fillState); - foreach_ptr(shardCost, fillState->shardCostListDesc) + foreach_declared_ptr(shardCost, fillState->shardCostListDesc) { if (prevShardCost != NULL) { @@ -521,7 +521,7 @@ GetRebalanceSteps(RebalanceOptions *options) List *activeWorkerList = SortedActiveWorkers(); int shardAllowedNodeCount = 0; WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, activeWorkerList) + foreach_declared_ptr(workerNode, activeWorkerList) { if (workerNode->shouldHaveShards) { @@ -540,7 +540,7 @@ GetRebalanceSteps(RebalanceOptions *options) List *unbalancedShards = NIL; Oid relationId = InvalidOid; - foreach_oid(relationId, options->relationIdList) + foreach_declared_oid(relationId, options->relationIdList) { List *shardPlacementList = FullShardPlacementList(relationId, options->excludedShardArray); @@ -1336,7 +1336,7 @@ get_rebalance_progress(PG_FUNCTION_ARGS) &segmentList); ProgressMonitorData *monitor = NULL; - foreach_ptr(monitor, rebalanceMonitorList) + foreach_declared_ptr(monitor, rebalanceMonitorList) { PlacementUpdateEventProgress *placementUpdateEvents = ProgressMonitorSteps( monitor); @@ -1847,7 +1847,7 @@ NonColocatedDistRelationIdList(void) HTAB *alreadySelectedColocationIds = hash_create("RebalanceColocationIdSet", capacity, &info, flags); - foreach_oid(tableId, allCitusTablesList) + foreach_declared_oid(tableId, allCitusTablesList) { bool foundInSet = false; CitusTableCacheEntry *citusTableCacheEntry = GetCitusTableCacheEntry( @@ -1913,7 +1913,7 @@ RebalanceTableShards(RebalanceOptions *options, Oid shardReplicationModeOid) * is required for logical replication to replicate UPDATE and DELETE commands. */ PlacementUpdateEvent *placementUpdate = NULL; - foreach_ptr(placementUpdate, placementUpdateList) + foreach_declared_ptr(placementUpdate, placementUpdateList) { Oid relationId = RelationIdForShard(placementUpdate->shardId); List *colocatedTableList = ColocatedTableList(relationId); @@ -1948,7 +1948,7 @@ static void ErrorOnConcurrentRebalance(RebalanceOptions *options) { Oid relationId = InvalidOid; - foreach_oid(relationId, options->relationIdList) + foreach_declared_oid(relationId, options->relationIdList) { /* this provides the legacy error when the lock can't be acquired */ AcquireRebalanceColocationLock(relationId, options->operationName); @@ -2039,7 +2039,7 @@ GenerateTaskMoveDependencyList(PlacementUpdateEvent *move, int64 colocationId, if (found) { int64 *taskId = NULL; - foreach_ptr(taskId, shardMoveSourceNodeHashEntry->taskIds) + foreach_declared_ptr(taskId, shardMoveSourceNodeHashEntry->taskIds) { hash_search(dependsList, taskId, HASH_ENTER, NULL); } @@ -2123,13 +2123,13 @@ RebalanceTableShardsBackground(RebalanceOptions *options, Oid shardReplicationMo const char shardTransferMode = LookupShardTransferMode(shardReplicationModeOid); List *colocatedTableList = NIL; Oid relationId = InvalidOid; - foreach_oid(relationId, options->relationIdList) + foreach_declared_oid(relationId, options->relationIdList) { colocatedTableList = list_concat(colocatedTableList, ColocatedTableList(relationId)); } Oid colocatedTableId = InvalidOid; - foreach_oid(colocatedTableId, colocatedTableList) + foreach_declared_oid(colocatedTableId, colocatedTableList) { EnsureTableOwner(colocatedTableId); } @@ -2151,7 +2151,7 @@ RebalanceTableShardsBackground(RebalanceOptions *options, Oid shardReplicationMo * is required for logical replication to replicate UPDATE and DELETE commands. */ PlacementUpdateEvent *placementUpdate = NULL; - foreach_ptr(placementUpdate, placementUpdateList) + foreach_declared_ptr(placementUpdate, placementUpdateList) { relationId = RelationIdForShard(placementUpdate->shardId); List *colocatedTables = ColocatedTableList(relationId); @@ -2204,7 +2204,7 @@ RebalanceTableShardsBackground(RebalanceOptions *options, Oid shardReplicationMo ShardMoveDependencies shardMoveDependencies = InitializeShardMoveDependencies(); - foreach_ptr(move, placementUpdateList) + foreach_declared_ptr(move, placementUpdateList) { resetStringInfo(&buf); @@ -2361,7 +2361,7 @@ ExecuteRebalancerCommandInSeparateTransaction(char *command) List *setCommands = GetSetCommandListForNewConnections(); char *setCommand = NULL; - foreach_ptr(setCommand, setCommands) + foreach_declared_ptr(setCommand, setCommands) { commandList = lappend(commandList, setCommand); } @@ -2429,14 +2429,14 @@ RebalancePlacementUpdates(List *workerNodeList, List *activeShardPlacementListLi List *shardPlacementList = NIL; List *placementUpdateList = NIL; - foreach_ptr(shardPlacementList, activeShardPlacementListList) + foreach_declared_ptr(shardPlacementList, activeShardPlacementListList) { state = InitRebalanceState(workerNodeList, shardPlacementList, functions); rebalanceStates = lappend(rebalanceStates, state); } - foreach_ptr(state, rebalanceStates) + foreach_declared_ptr(state, rebalanceStates) { state->placementUpdateList = placementUpdateList; MoveShardsAwayFromDisallowedNodes(state); @@ -2445,7 +2445,7 @@ RebalancePlacementUpdates(List *workerNodeList, List *activeShardPlacementListLi if (!drainOnly) { - foreach_ptr(state, rebalanceStates) + foreach_declared_ptr(state, rebalanceStates) { state->placementUpdateList = placementUpdateList; @@ -2477,13 +2477,13 @@ RebalancePlacementUpdates(List *workerNodeList, List *activeShardPlacementListLi } } - foreach_ptr(state, rebalanceStates) + foreach_declared_ptr(state, rebalanceStates) { hash_destroy(state->placementsHash); } int64 ignoredMoves = 0; - foreach_ptr(state, rebalanceStates) + foreach_declared_ptr(state, rebalanceStates) { ignoredMoves += state->ignoredMoves; } @@ -2538,7 +2538,7 @@ InitRebalanceState(List *workerNodeList, List *shardPlacementList, state->placementsHash = ShardPlacementsListToHash(shardPlacementList); /* create empty fill state for all of the worker nodes */ - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { NodeFillState *fillState = palloc0(sizeof(NodeFillState)); fillState->node = workerNode; @@ -2621,7 +2621,7 @@ FindFillStateForPlacement(RebalanceState *state, ShardPlacement *placement) NodeFillState *fillState = NULL; /* Find the correct fill state to add the placement to and do that */ - foreach_ptr(fillState, state->fillStateListAsc) + foreach_declared_ptr(fillState, state->fillStateListAsc) { if (IsPlacementOnWorkerNode(placement, fillState->node)) { @@ -2733,7 +2733,7 @@ MoveShardsAwayFromDisallowedNodes(RebalanceState *state) CompareDisallowedPlacementDesc); /* Move shards off of nodes they are not allowed on */ - foreach_ptr(disallowedPlacement, state->disallowedPlacementList) + foreach_declared_ptr(disallowedPlacement, state->disallowedPlacementList) { NodeFillState *targetFillState = FindAllowedTargetFillState( state, disallowedPlacement->shardCost->shardId); @@ -2788,7 +2788,7 @@ static NodeFillState * FindAllowedTargetFillState(RebalanceState *state, uint64 shardId) { NodeFillState *targetFillState = NULL; - foreach_ptr(targetFillState, state->fillStateListAsc) + foreach_declared_ptr(targetFillState, state->fillStateListAsc) { bool hasShard = PlacementsHashFind( state->placementsHash, @@ -2914,7 +2914,7 @@ FindAndMoveShardCost(float4 utilizationLowerBound, * find a source node for the move, starting at the node with the highest * utilization */ - foreach_ptr(sourceFillState, state->fillStateListDesc) + foreach_declared_ptr(sourceFillState, state->fillStateListDesc) { /* Don't move shards away from nodes that are already too empty, we're * done searching */ @@ -2925,7 +2925,7 @@ FindAndMoveShardCost(float4 utilizationLowerBound, /* find a target node for the move, starting at the node with the * lowest utilization */ - foreach_ptr(targetFillState, state->fillStateListAsc) + foreach_declared_ptr(targetFillState, state->fillStateListAsc) { ShardCost *shardCost = NULL; @@ -2948,7 +2948,7 @@ FindAndMoveShardCost(float4 utilizationLowerBound, /* find a shardcost that can be moved between between nodes that * makes the cost distribution more equal */ - foreach_ptr(shardCost, sourceFillState->shardCostListDesc) + foreach_declared_ptr(shardCost, sourceFillState->shardCostListDesc) { bool targetHasShard = PlacementsHashFind(state->placementsHash, shardCost->shardId, diff --git a/src/backend/distributed/operations/shard_split.c b/src/backend/distributed/operations/shard_split.c index 4baf0fb241b..b1202e648c8 100644 --- a/src/backend/distributed/operations/shard_split.c +++ b/src/backend/distributed/operations/shard_split.c @@ -302,7 +302,7 @@ ErrorIfCannotSplitShardExtended(SplitOperation splitOperation, NullableDatum lastShardSplitPoint = { 0, true /*isnull*/ }; Datum shardSplitPoint; - foreach_int(shardSplitPoint, shardSplitPointsList) + foreach_declared_int(shardSplitPoint, shardSplitPointsList) { int32 shardSplitPointValue = DatumGetInt32(shardSplitPoint); @@ -399,7 +399,7 @@ GetWorkerNodesFromWorkerIds(List *nodeIdsForPlacementList) { List *workersForPlacementList = NIL; int32 nodeId; - foreach_int(nodeId, nodeIdsForPlacementList) + foreach_declared_int(nodeId, nodeIdsForPlacementList) { uint32 nodeIdValue = (uint32) nodeId; WorkerNode *workerNode = LookupNodeByNodeId(nodeIdValue); @@ -464,7 +464,7 @@ SplitShard(SplitMode splitMode, /* sort the tables to avoid deadlocks */ colocatedTableList = SortList(colocatedTableList, CompareOids); Oid colocatedTableId = InvalidOid; - foreach_oid(colocatedTableId, colocatedTableList) + foreach_declared_oid(colocatedTableId, colocatedTableList) { /* * Block concurrent DDL / TRUNCATE commands on the relation. Similarly, @@ -694,7 +694,7 @@ CreateSplitShardsForShardGroup(List *shardGroupSplitIntervalListList, * Iterate over all the shards in the shard group. */ List *shardIntervalList = NIL; - foreach_ptr(shardIntervalList, shardGroupSplitIntervalListList) + foreach_declared_ptr(shardIntervalList, shardGroupSplitIntervalListList) { ShardInterval *shardInterval = NULL; WorkerNode *workerPlacementNode = NULL; @@ -778,7 +778,7 @@ CreateAuxiliaryStructuresForShardGroup(List *shardGroupSplitIntervalListList, /* * Iterate over all the shards in the shard group. */ - foreach_ptr(shardIntervalList, shardGroupSplitIntervalListList) + foreach_declared_ptr(shardIntervalList, shardGroupSplitIntervalListList) { ShardInterval *shardInterval = NULL; WorkerNode *workerPlacementNode = NULL; @@ -1029,7 +1029,7 @@ CreateSplitIntervalsForShardGroup(List *sourceColocatedShardIntervalList, List *shardGroupSplitIntervalListList = NIL; ShardInterval *shardToSplitInterval = NULL; - foreach_ptr(shardToSplitInterval, sourceColocatedShardIntervalList) + foreach_declared_ptr(shardToSplitInterval, sourceColocatedShardIntervalList) { List *shardSplitIntervalList = NIL; CreateSplitIntervalsForShard(shardToSplitInterval, splitPointsForShard, @@ -1121,7 +1121,7 @@ UpdateDistributionColumnsForShardGroup(List *colocatedShardList, uint32 colocationId) { ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, colocatedShardList) + foreach_declared_ptr(shardInterval, colocatedShardList) { Oid relationId = shardInterval->relationId; Var *distributionColumn = GetDistributionColumnFromMap(distributionColumnMap, @@ -1162,7 +1162,7 @@ InsertSplitChildrenShardMetadata(List *shardGroupSplitIntervalListList, /* * Iterate over all the shards in the shard group. */ - foreach_ptr(shardIntervalList, shardGroupSplitIntervalListList) + foreach_declared_ptr(shardIntervalList, shardGroupSplitIntervalListList) { /* * Iterate on split shards list for a given shard and insert metadata. @@ -1195,7 +1195,7 @@ InsertSplitChildrenShardMetadata(List *shardGroupSplitIntervalListList, /* send commands to synced nodes one by one */ List *splitOffShardMetadataCommandList = ShardListInsertCommand(syncedShardList); char *command = NULL; - foreach_ptr(command, splitOffShardMetadataCommandList) + foreach_declared_ptr(command, splitOffShardMetadataCommandList) { SendCommandToWorkersWithMetadata(command); } @@ -1216,7 +1216,7 @@ CreatePartitioningHierarchyForBlockingSplit(List *shardGroupSplitIntervalListLis /* * Iterate over all the shards in the shard group. */ - foreach_ptr(shardIntervalList, shardGroupSplitIntervalListList) + foreach_declared_ptr(shardIntervalList, shardGroupSplitIntervalListList) { ShardInterval *shardInterval = NULL; WorkerNode *workerPlacementNode = NULL; @@ -1255,7 +1255,7 @@ CreateForeignKeyConstraints(List *shardGroupSplitIntervalListList, /* * Iterate over all the shards in the shard group. */ - foreach_ptr(shardIntervalList, shardGroupSplitIntervalListList) + foreach_declared_ptr(shardIntervalList, shardGroupSplitIntervalListList) { ShardInterval *shardInterval = NULL; WorkerNode *workerPlacementNode = NULL; @@ -1281,7 +1281,7 @@ CreateForeignKeyConstraints(List *shardGroupSplitIntervalListList, referenceTableForeignConstraintList); char *constraintCommand = NULL; - foreach_ptr(constraintCommand, constraintCommandList) + foreach_declared_ptr(constraintCommand, constraintCommandList) { SendCommandToWorker( workerPlacementNode->workerName, @@ -1685,7 +1685,7 @@ CreateDummyShardsForShardGroup(HTAB *mapOfPlacementToDummyShardList, } ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, sourceColocatedShardIntervalList) + foreach_declared_ptr(shardInterval, sourceColocatedShardIntervalList) { /* Populate list of commands necessary to create shard interval on destination */ List *splitShardCreationCommandList = GetPreLoadTableCreationCommands( @@ -1739,7 +1739,7 @@ CreateDummyShardsForShardGroup(HTAB *mapOfPlacementToDummyShardList, * If the target shard was created on source node as placement, skip it (See Note 2 from function description). */ List *shardIntervalList = NULL; - foreach_ptr(shardIntervalList, shardGroupSplitIntervalListList) + foreach_declared_ptr(shardIntervalList, shardGroupSplitIntervalListList) { ShardInterval *shardInterval = NULL; workerPlacementNode = NULL; @@ -1818,7 +1818,7 @@ CreateWorkerForPlacementSet(List *workersForPlacementList) hashFlags); WorkerNode *workerForPlacement = NULL; - foreach_ptr(workerForPlacement, workersForPlacementList) + foreach_declared_ptr(workerForPlacement, workersForPlacementList) { void *hashKey = (void *) workerForPlacement; hash_search(workerForPlacementSet, hashKey, HASH_ENTER, NULL); diff --git a/src/backend/distributed/operations/shard_transfer.c b/src/backend/distributed/operations/shard_transfer.c index 737086752d6..b7d07b2cfce 100644 --- a/src/backend/distributed/operations/shard_transfer.c +++ b/src/backend/distributed/operations/shard_transfer.c @@ -503,7 +503,7 @@ TransferShards(int64 shardId, char *sourceNodeName, DropOrphanedResourcesInSeparateTransaction(); ShardInterval *colocatedShard = NULL; - foreach_ptr(colocatedShard, colocatedShardList) + foreach_declared_ptr(colocatedShard, colocatedShardList) { /* * This is to prevent any race condition possibility among the shard moves. @@ -530,7 +530,7 @@ TransferShards(int64 shardId, char *sourceNodeName, * metadata workers. */ colocatedShard = NULL; - foreach_ptr(colocatedShard, colocatedShardList) + foreach_declared_ptr(colocatedShard, colocatedShardList) { uint64 colocatedShardId = colocatedShard->shardId; uint32 groupId = GroupForNode(targetNodeName, targetNodePort); @@ -623,7 +623,7 @@ InsertCleanupRecordsForShardPlacementsOnNode(List *shardIntervalList, int32 groupId) { ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { /* get shard name */ char *qualifiedShardName = ConstructQualifiedShardName(shardInterval); @@ -659,7 +659,7 @@ IsShardListOnNode(List *colocatedShardList, char *targetNodeName, uint32 targetN * We exhaustively search all co-located shards */ ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, colocatedShardList) + foreach_declared_ptr(shardInterval, colocatedShardList) { uint64 shardId = shardInterval->shardId; List *placementList = ActiveShardPlacementListOnGroup(shardId, @@ -682,7 +682,7 @@ static void LockColocatedRelationsForMove(List *colocatedTableList) { Oid colocatedTableId = InvalidOid; - foreach_oid(colocatedTableId, colocatedTableList) + foreach_declared_oid(colocatedTableId, colocatedTableList) { LockRelationOid(colocatedTableId, ShareUpdateExclusiveLock); } @@ -698,7 +698,7 @@ ErrorIfForeignTableForShardTransfer(List *colocatedTableList, ShardTransferType transferType) { Oid colocatedTableId = InvalidOid; - foreach_oid(colocatedTableId, colocatedTableList) + foreach_declared_oid(colocatedTableId, colocatedTableList) { if (IsForeignTable(colocatedTableId)) { @@ -724,7 +724,7 @@ EnsureAllShardsCanBeCopied(List *colocatedShardList, char *targetNodeName, uint32 targetNodePort) { ShardInterval *colocatedShard = NULL; - foreach_ptr(colocatedShard, colocatedShardList) + foreach_declared_ptr(colocatedShard, colocatedShardList) { uint64 colocatedShardId = colocatedShard->shardId; @@ -1124,7 +1124,7 @@ void BlockWritesToShardList(List *shardList) { ShardInterval *shard = NULL; - foreach_ptr(shard, shardList) + foreach_declared_ptr(shard, shardList) { /* * We need to lock the referenced reference table metadata to avoid @@ -1295,7 +1295,7 @@ static void EnsureTableListOwner(List *tableIdList) { Oid tableId = InvalidOid; - foreach_oid(tableId, tableIdList) + foreach_declared_oid(tableId, tableIdList) { EnsureTableOwner(tableId); } @@ -1310,7 +1310,7 @@ static void ErrorIfReplicatingDistributedTableWithFKeys(List *tableIdList) { Oid tableId = InvalidOid; - foreach_oid(tableId, tableIdList) + foreach_declared_oid(tableId, tableIdList) { List *foreignConstraintCommandList = GetReferencingForeignConstaintCommands(tableId); @@ -1381,7 +1381,7 @@ CopyShardTablesViaLogicalReplication(List *shardIntervalList, char *sourceNodeNa * target node. We do not create the indexes yet. */ ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { Oid relationId = shardInterval->relationId; uint64 shardId = shardInterval->shardId; @@ -1449,7 +1449,7 @@ CopyShardTablesViaBlockWrites(List *shardIntervalList, char *sourceNodeName, /* iterate through the colocated shards and copy each */ ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { /* * For each shard we first create the shard table in a separate @@ -1492,7 +1492,7 @@ CopyShardTablesViaBlockWrites(List *shardIntervalList, char *sourceNodeName, sourceNodePort, PLACEMENT_UPDATE_STATUS_CREATING_CONSTRAINTS); - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { List *ddlCommandList = PostLoadShardCreationCommandList(shardInterval, sourceNodeName, @@ -1509,7 +1509,7 @@ CopyShardTablesViaBlockWrites(List *shardIntervalList, char *sourceNodeName, * Create DDL commands to Attach child tables to their parents in a partitioning hierarchy. */ List *shardIntervalWithDDCommandsList = NIL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { if (PartitionTable(shardInterval->relationId)) { @@ -1534,7 +1534,7 @@ CopyShardTablesViaBlockWrites(List *shardIntervalList, char *sourceNodeName, * Iterate through the colocated shards and create DDL commamnds * to create the foreign constraints. */ - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { List *shardForeignConstraintCommandList = NIL; List *referenceTableForeignConstraintList = NIL; @@ -1553,7 +1553,7 @@ CopyShardTablesViaBlockWrites(List *shardIntervalList, char *sourceNodeName, /* Now execute the Partitioning & Foreign constraints creation commads. */ ShardCommandList *shardCommandList = NULL; - foreach_ptr(shardCommandList, shardIntervalWithDDCommandsList) + foreach_declared_ptr(shardCommandList, shardIntervalWithDDCommandsList) { char *tableOwner = TableOwner(shardCommandList->shardInterval->relationId); SendCommandListToWorkerOutsideTransaction(targetNodeName, targetNodePort, @@ -1583,7 +1583,7 @@ CopyShardsToNode(WorkerNode *sourceNode, WorkerNode *targetNode, List *shardInte int taskId = 0; List *copyTaskList = NIL; ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { /* * Skip copying data for partitioned tables, because they contain no @@ -1716,7 +1716,7 @@ SearchShardPlacementInList(List *shardPlacementList, const char *nodeName, uint32 nodePort) { ShardPlacement *shardPlacement = NULL; - foreach_ptr(shardPlacement, shardPlacementList) + foreach_declared_ptr(shardPlacement, shardPlacementList) { if (strncmp(nodeName, shardPlacement->nodeName, MAX_NODE_LENGTH) == 0 && nodePort == shardPlacement->nodePort) @@ -1837,7 +1837,7 @@ CopyShardForeignConstraintCommandListGrouped(ShardInterval *shardInterval, *referenceTableForeignConstraintList = NIL; const char *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { char *escapedCommand = quote_literal_cstr(command); @@ -2002,7 +2002,7 @@ DropShardPlacementsFromMetadata(List *shardList, char *nodeName, int32 nodePort) { ShardInterval *shardInverval = NULL; - foreach_ptr(shardInverval, shardList) + foreach_declared_ptr(shardInverval, shardList) { uint64 shardId = shardInverval->shardId; List *shardPlacementList = ShardPlacementList(shardId); @@ -2066,7 +2066,7 @@ WorkerApplyShardDDLCommandList(List *ddlCommandList, int64 shardId) List *applyDDLCommandList = NIL; TableDDLCommand *ddlCommand = NULL; - foreach_ptr(ddlCommand, ddlCommandList) + foreach_declared_ptr(ddlCommand, ddlCommandList) { Assert(CitusIsA(ddlCommand, TableDDLCommand)); char *applyDDLCommand = GetShardedTableDDLCommand(ddlCommand, shardId, NULL); @@ -2100,7 +2100,7 @@ UpdatePlacementUpdateStatusForShardIntervalList(List *shardIntervalList, } ProgressMonitorData *monitor = NULL; - foreach_ptr(monitor, rebalanceMonitorList) + foreach_declared_ptr(monitor, rebalanceMonitorList) { PlacementUpdateEventProgress *steps = ProgressMonitorSteps(monitor); @@ -2111,7 +2111,7 @@ UpdatePlacementUpdateStatusForShardIntervalList(List *shardIntervalList, bool foundInList = false; ShardInterval *candidateShard = NULL; - foreach_ptr(candidateShard, shardIntervalList) + foreach_declared_ptr(candidateShard, shardIntervalList) { if (candidateShard->shardId == currentShardId) { diff --git a/src/backend/distributed/operations/stage_protocol.c b/src/backend/distributed/operations/stage_protocol.c index 5770d648e21..9881d87752a 100644 --- a/src/backend/distributed/operations/stage_protocol.c +++ b/src/backend/distributed/operations/stage_protocol.c @@ -431,7 +431,7 @@ CreateShardsOnWorkers(Oid distributedRelationId, List *shardPlacements, int poolSize = 1; ShardPlacement *shardPlacement = NULL; - foreach_ptr(shardPlacement, shardPlacements) + foreach_declared_ptr(shardPlacement, shardPlacements) { uint64 shardId = shardPlacement->shardId; ShardInterval *shardInterval = LoadShardInterval(shardId); @@ -516,7 +516,7 @@ RelationShardListForShardCreate(ShardInterval *shardInterval) /* all foregin key constraint relations */ Oid fkeyRelationid = InvalidOid; - foreach_oid(fkeyRelationid, allForeignKeyRelations) + foreach_declared_oid(fkeyRelationid, allForeignKeyRelations) { uint64 fkeyShardId = INVALID_SHARD_ID; @@ -590,7 +590,7 @@ WorkerCreateShardCommandList(Oid relationId, uint64 shardId, char *schemaName = get_namespace_name(schemaId); TableDDLCommand *ddlCommand = NULL; - foreach_ptr(ddlCommand, ddlCommandList) + foreach_declared_ptr(ddlCommand, ddlCommandList) { Assert(CitusIsA(ddlCommand, TableDDLCommand)); char *applyDDLCommand = GetShardedTableDDLCommand(ddlCommand, shardId, @@ -645,7 +645,7 @@ UpdateShardStatistics(int64 shardId) /* get shard's statistics from a shard placement */ ShardPlacement *placement = NULL; - foreach_ptr(placement, shardPlacementList) + foreach_declared_ptr(placement, shardPlacementList) { statsOK = WorkerShardStats(placement, relationId, shardQualifiedName, &shardSize); @@ -713,7 +713,7 @@ ReceiveAndUpdateShardsSizes(List *connectionList) "oid visited hash set"); MultiConnection *connection = NULL; - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { if (PQstatus(connection->pgConn) != CONNECTION_OK) { @@ -809,7 +809,7 @@ UpdateShardSize(uint64 shardId, ShardInterval *shardInterval, Oid relationId, ShardPlacement *placement = NULL; /* update metadata for each shard placement */ - foreach_ptr(placement, shardPlacementList) + foreach_declared_ptr(placement, shardPlacementList) { uint64 placementId = placement->placementId; int32 groupId = placement->groupId; diff --git a/src/backend/distributed/operations/worker_node_manager.c b/src/backend/distributed/operations/worker_node_manager.c index ba622e4d7ab..8a4245ca0a0 100644 --- a/src/backend/distributed/operations/worker_node_manager.c +++ b/src/backend/distributed/operations/worker_node_manager.c @@ -421,7 +421,7 @@ GetFirstPrimaryWorkerNode(void) List *workerNodeList = ActivePrimaryNonCoordinatorNodeList(RowShareLock); WorkerNode *firstWorkerNode = NULL; WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { if (firstWorkerNode == NULL || CompareWorkerNodes(&workerNode, &firstWorkerNode) < 0) diff --git a/src/backend/distributed/operations/worker_split_copy_udf.c b/src/backend/distributed/operations/worker_split_copy_udf.c index 03354ea047b..eb97dab1a0f 100644 --- a/src/backend/distributed/operations/worker_split_copy_udf.c +++ b/src/backend/distributed/operations/worker_split_copy_udf.c @@ -146,7 +146,7 @@ TraceWorkerSplitCopyUdf(char *sourceShardToCopySchemaName, int index = 1; int splitWayCount = list_length(splitCopyInfoList); SplitCopyInfo *splitCopyInfo = NULL; - foreach_ptr(splitCopyInfo, splitCopyInfoList) + foreach_declared_ptr(splitCopyInfo, splitCopyInfoList) { char *shardNameCopy = pstrdup(sourceShardToCopyPrefix); AppendShardIdToName(&shardNameCopy, splitCopyInfo->destinationShardId); @@ -236,7 +236,7 @@ BuildMinMaxRangeArrays(List *splitCopyInfoList, ArrayType **minValueArray, SplitCopyInfo *splitCopyInfo = NULL; int index = 0; - foreach_ptr(splitCopyInfo, splitCopyInfoList) + foreach_declared_ptr(splitCopyInfo, splitCopyInfoList) { minValues[index] = splitCopyInfo->destinationShardMinHashValue; maxValues[index] = splitCopyInfo->destinationShardMaxHashValue; @@ -269,7 +269,7 @@ CreateShardCopyDestReceivers(EState *estate, ShardInterval *shardIntervalToSplit SplitCopyInfo *splitCopyInfo = NULL; int index = 0; char *sourceShardNamePrefix = get_rel_name(shardIntervalToSplitCopy->relationId); - foreach_ptr(splitCopyInfo, splitCopyInfoList) + foreach_declared_ptr(splitCopyInfo, splitCopyInfoList) { Oid destinationShardSchemaOid = get_rel_namespace( shardIntervalToSplitCopy->relationId); diff --git a/src/backend/distributed/operations/worker_split_shard_replication_setup_udf.c b/src/backend/distributed/operations/worker_split_shard_replication_setup_udf.c index d4775995c17..c65893fbc91 100644 --- a/src/backend/distributed/operations/worker_split_shard_replication_setup_udf.c +++ b/src/backend/distributed/operations/worker_split_shard_replication_setup_udf.c @@ -298,7 +298,7 @@ PopulateShardSplitInfoInSM(ShardSplitInfoSMHeader *shardSplitInfoSMHeader, List *shardSplitInfoList = entry->shardSplitInfoList; ShardSplitInfo *splitShardInfo = NULL; - foreach_ptr(splitShardInfo, shardSplitInfoList) + foreach_declared_ptr(splitShardInfo, shardSplitInfoList) { shardSplitInfoSMHeader->splitInfoArray[splitInfoIndex] = *splitShardInfo; strcpy_s(shardSplitInfoSMHeader->splitInfoArray[splitInfoIndex].slotName, diff --git a/src/backend/distributed/planner/combine_query_planner.c b/src/backend/distributed/planner/combine_query_planner.c index e3aa7b3e637..f81ade91c93 100644 --- a/src/backend/distributed/planner/combine_query_planner.c +++ b/src/backend/distributed/planner/combine_query_planner.c @@ -217,7 +217,7 @@ CitusCustomScanPathPlan(PlannerInfo *root, { TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, citusPath->remoteScan->custom_scan_tlist) + foreach_declared_ptr(targetEntry, citusPath->remoteScan->custom_scan_tlist) { /* we created this list, so we know it only contains Var */ Assert(IsA(targetEntry->expr, Var)); @@ -231,7 +231,7 @@ CitusCustomScanPathPlan(PlannerInfo *root, /* clauses might have been added by the planner, need to add them to our scan */ RestrictInfo *restrictInfo = NULL; List **quals = &citusPath->remoteScan->scan.plan.qual; - foreach_ptr(restrictInfo, clauses) + foreach_declared_ptr(restrictInfo, clauses) { *quals = lappend(*quals, restrictInfo->clause); } @@ -273,7 +273,7 @@ BuildSelectStatementViaStdPlanner(Query *combineQuery, List *remoteScanTargetLis /* extract column names from the remoteScanTargetList */ List *columnNameList = NIL; TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, remoteScanTargetList) + foreach_declared_ptr(targetEntry, remoteScanTargetList) { columnNameList = lappend(columnNameList, makeString(targetEntry->resname)); } diff --git a/src/backend/distributed/planner/deparse_shard_query.c b/src/backend/distributed/planner/deparse_shard_query.c index 43b5f14933a..6b8ad3fdeb0 100644 --- a/src/backend/distributed/planner/deparse_shard_query.c +++ b/src/backend/distributed/planner/deparse_shard_query.c @@ -67,7 +67,7 @@ RebuildQueryStrings(Job *workerJob) AddInsertAliasIfNeeded(originalQuery); } - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { Query *query = originalQuery; @@ -298,7 +298,7 @@ FindRelationShard(Oid inputRelationId, List *relationShardList) * some, otherwise this query wouldn't be eligible as a router query. * FIXME: We should probably use a hashtable here, to do efficient lookup. */ - foreach_ptr(relationShard, relationShardList) + foreach_declared_ptr(relationShard, relationShardList) { if (inputRelationId == relationShard->relationId) { diff --git a/src/backend/distributed/planner/distributed_planner.c b/src/backend/distributed/planner/distributed_planner.c index 1d6550afdb5..06f556c88a9 100644 --- a/src/backend/distributed/planner/distributed_planner.c +++ b/src/backend/distributed/planner/distributed_planner.c @@ -1547,7 +1547,7 @@ FinalizeRouterPlan(PlannedStmt *localPlan, CustomScan *customScan) /* extract the column names from the final targetlist*/ TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, customScan->scan.plan.targetlist) + foreach_declared_ptr(targetEntry, customScan->scan.plan.targetlist) { String *columnName = makeString(targetEntry->resname); columnNameList = lappend(columnNameList, columnName); @@ -1588,7 +1588,7 @@ makeCustomScanTargetlistFromExistingTargetList(List *existingTargetlist) /* build a targetlist to read from the custom scan output */ TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, existingTargetlist) + foreach_declared_ptr(targetEntry, existingTargetlist) { Assert(IsA(targetEntry, TargetEntry)); @@ -1638,7 +1638,7 @@ makeTargetListFromCustomScanList(List *custom_scan_tlist) List *targetList = NIL; TargetEntry *targetEntry = NULL; int resno = 1; - foreach_ptr(targetEntry, custom_scan_tlist) + foreach_declared_ptr(targetEntry, custom_scan_tlist) { /* * INDEX_VAR is used to reference back to the TargetEntry in custom_scan_tlist by @@ -2107,7 +2107,7 @@ TranslatedVars(PlannerInfo *root, int relationIndex) { /* postgres deletes translated_vars, hence we deep copy them here */ Node *targetNode = NULL; - foreach_ptr(targetNode, targetAppendRelInfo->translated_vars) + foreach_declared_ptr(targetNode, targetAppendRelInfo->translated_vars) { translatedVars = lappend(translatedVars, copyObject(targetNode)); @@ -2128,7 +2128,7 @@ FindTargetAppendRelInfo(PlannerInfo *root, int relationRteIndex) AppendRelInfo *appendRelInfo = NULL; /* iterate on the queries that are part of UNION ALL subselects */ - foreach_ptr(appendRelInfo, root->append_rel_list) + foreach_declared_ptr(appendRelInfo, root->append_rel_list) { /* * We're only interested in the child rel that is equal to the @@ -2451,7 +2451,7 @@ TranslatedVarsForRteIdentity(int rteIdentity) currentPlannerRestrictionContext->relationRestrictionContext-> relationRestrictionList; RelationRestriction *relationRestriction = NULL; - foreach_ptr(relationRestriction, relationRestrictionList) + foreach_declared_ptr(relationRestriction, relationRestrictionList) { if (GetRTEIdentity(relationRestriction->rte) == rteIdentity) { @@ -2621,7 +2621,7 @@ GetRTEListProperties(List *rangeTableList) RTEListProperties *rteListProperties = palloc0(sizeof(RTEListProperties)); RangeTblEntry *rangeTableEntry = NULL; - foreach_ptr(rangeTableEntry, rangeTableList) + foreach_declared_ptr(rangeTableEntry, rangeTableList) { if (rangeTableEntry->rtekind != RTE_RELATION) { @@ -2714,7 +2714,7 @@ WarnIfListHasForeignDistributedTable(List *rangeTableList) static bool DistributedForeignTableWarningPrompted = false; RangeTblEntry *rangeTableEntry = NULL; - foreach_ptr(rangeTableEntry, rangeTableList) + foreach_declared_ptr(rangeTableEntry, rangeTableList) { if (DistributedForeignTableWarningPrompted) { diff --git a/src/backend/distributed/planner/insert_select_planner.c b/src/backend/distributed/planner/insert_select_planner.c index 60d6ce466ca..178ea235d80 100644 --- a/src/backend/distributed/planner/insert_select_planner.c +++ b/src/backend/distributed/planner/insert_select_planner.c @@ -566,7 +566,7 @@ CreateCombineQueryForRouterPlan(DistributedPlan *distPlan) List *funcCollations = NIL; TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, dependentTargetList) + foreach_declared_ptr(targetEntry, dependentTargetList) { Node *expr = (Node *) targetEntry->expr; @@ -640,7 +640,7 @@ CreateTargetListForCombineQuery(List *targetList) /* iterate over original target entries */ TargetEntry *originalTargetEntry = NULL; - foreach_ptr(originalTargetEntry, targetList) + foreach_declared_ptr(originalTargetEntry, targetList) { TargetEntry *newTargetEntry = flatCopyTargetEntry(originalTargetEntry); @@ -1571,7 +1571,7 @@ WrapSubquery(Query *subquery) /* create a target list that matches the SELECT */ TargetEntry *selectTargetEntry = NULL; - foreach_ptr(selectTargetEntry, subquery->targetList) + foreach_declared_ptr(selectTargetEntry, subquery->targetList) { /* exactly 1 entry in FROM */ int indexInRangeTable = 1; @@ -1723,7 +1723,7 @@ AddInsertSelectCasts(List *insertTargetList, List *selectTargetList, selectTargetList = list_concat(projectedEntries, nonProjectedEntries); int entryResNo = 1; TargetEntry *selectTargetEntry = NULL; - foreach_ptr(selectTargetEntry, selectTargetList) + foreach_declared_ptr(selectTargetEntry, selectTargetList) { selectTargetEntry->resno = entryResNo++; } diff --git a/src/backend/distributed/planner/intermediate_result_pruning.c b/src/backend/distributed/planner/intermediate_result_pruning.c index 5c9ee6c4331..ab41faffb72 100644 --- a/src/backend/distributed/planner/intermediate_result_pruning.c +++ b/src/backend/distributed/planner/intermediate_result_pruning.c @@ -276,7 +276,7 @@ AppendAllWorkerNodes(IntermediateResultsHashEntry *entry) List *workerNodeList = ActiveReadableNodeList(); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { entry->nodeIdList = list_append_unique_int(entry->nodeIdList, workerNode->nodeId); @@ -420,7 +420,7 @@ LogIntermediateResultMulticastSummary(IntermediateResultsHashEntry *entry, } WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { elog(logLevel, "Subplan %s will be sent to %s:%d", resultId, workerNode->workerName, workerNode->workerPort); diff --git a/src/backend/distributed/planner/local_distributed_join_planner.c b/src/backend/distributed/planner/local_distributed_join_planner.c index a6502bf43c4..2760377bb9f 100644 --- a/src/backend/distributed/planner/local_distributed_join_planner.c +++ b/src/backend/distributed/planner/local_distributed_join_planner.c @@ -328,7 +328,7 @@ static void ConvertRTEsToSubquery(List *rangeTableEntryDetailsList, RecursivePlanningContext *context) { RangeTableEntryDetails *rangeTableEntryDetails = NULL; - foreach_ptr(rangeTableEntryDetails, rangeTableEntryDetailsList) + foreach_declared_ptr(rangeTableEntryDetails, rangeTableEntryDetailsList) { RangeTblEntry *rangeTableEntry = rangeTableEntryDetails->rangeTableEntry; List *requiredAttributeNumbers = rangeTableEntryDetails->requiredAttributeNumbers; @@ -351,7 +351,7 @@ static bool AllRangeTableEntriesHaveUniqueIndex(List *rangeTableEntryDetailsList) { RangeTableEntryDetails *rangeTableEntryDetails = NULL; - foreach_ptr(rangeTableEntryDetails, rangeTableEntryDetailsList) + foreach_declared_ptr(rangeTableEntryDetails, rangeTableEntryDetailsList) { if (!rangeTableEntryDetails->hasConstantFilterOnUniqueColumn) { @@ -420,7 +420,7 @@ HasConstantFilterOnUniqueColumn(RangeTblEntry *rangeTableEntry, AppendUniqueIndexColumnsToList, INCLUDE_INDEX_ALL_STATEMENTS); IndexColumns *indexColumns = NULL; - foreach_ptr(indexColumns, uniqueIndexColumnsList) + foreach_declared_ptr(indexColumns, uniqueIndexColumnsList) { List *uniqueIndexColumnNos = indexColumns->indexColumnNos; if (FirstIsSuperSetOfSecond(rteEqualityColumnsNos, @@ -441,7 +441,7 @@ static bool FirstIsSuperSetOfSecond(List *firstIntList, List *secondIntList) { int curInt = 0; - foreach_int(curInt, secondIntList) + foreach_declared_int(curInt, secondIntList) { if (!list_member_int(firstIntList, curInt)) { @@ -526,7 +526,7 @@ RequiredAttrNumbersForRelationInternal(Query *queryToProcess, int rteIndex) List *requiredAttrNumbers = NIL; Var *var = NULL; - foreach_ptr(var, allVarsInQuery) + foreach_declared_ptr(var, allVarsInQuery) { if (var->varno == rteIndex) { @@ -554,7 +554,7 @@ CreateConversionCandidates(PlannerRestrictionContext *plannerRestrictionContext, RangeTblEntry *rangeTableEntry = NULL; - foreach_ptr(rangeTableEntry, rangeTableList) + foreach_declared_ptr(rangeTableEntry, rangeTableList) { /* we're only interested in tables */ if (!IsRecursivelyPlannableRelation(rangeTableEntry)) diff --git a/src/backend/distributed/planner/local_plan_cache.c b/src/backend/distributed/planner/local_plan_cache.c index 2e5ca4e550a..443297df04a 100644 --- a/src/backend/distributed/planner/local_plan_cache.c +++ b/src/backend/distributed/planner/local_plan_cache.c @@ -244,7 +244,7 @@ GetCachedLocalPlan(Task *task, DistributedPlan *distributedPlan) int32 localGroupId = GetLocalGroupId(); - foreach_ptr(localPlannedStatement, cachedPlanList) + foreach_declared_ptr(localPlannedStatement, cachedPlanList) { if (localPlannedStatement->shardId == task->anchorShardId && localPlannedStatement->localGroupId == localGroupId) diff --git a/src/backend/distributed/planner/merge_planner.c b/src/backend/distributed/planner/merge_planner.c index 1f9d17c43fe..8048002e005 100644 --- a/src/backend/distributed/planner/merge_planner.c +++ b/src/backend/distributed/planner/merge_planner.c @@ -375,7 +375,7 @@ static void ErrorIfMergeHasUnsupportedTables(Oid targetRelationId, List *rangeTableList) { RangeTblEntry *rangeTableEntry = NULL; - foreach_ptr(rangeTableEntry, rangeTableList) + foreach_declared_ptr(rangeTableEntry, rangeTableList) { Oid relationId = rangeTableEntry->relid; @@ -734,7 +734,7 @@ ErrorIfRepartitionMergeNotSupported(Oid targetRelationId, Query *mergeQuery, } MergeAction *action = NULL; - foreach_ptr(action, mergeQuery->mergeActionList) + foreach_declared_ptr(action, mergeQuery->mergeActionList) { if (FindNodeMatchingCheckFunction((Node *) action, IsNodeSubquery)) { @@ -763,7 +763,7 @@ ConvertCteRTEIntoSubquery(Query *mergeQuery, RangeTblEntry *sourceRte) * Presently, CTEs are only permitted within the USING clause, and thus, * we search for the corresponding one */ - foreach_ptr(candidateCte, mergeQuery->cteList) + foreach_declared_ptr(candidateCte, mergeQuery->cteList) { if (strcmp(candidateCte->ctename, sourceRte->ctename) == 0) { @@ -1018,7 +1018,7 @@ DeferErrorIfRoutableMergeNotSupported(Query *query, List *rangeTableList, List *localTablesList = NIL; RangeTblEntry *rangeTableEntry = NULL; - foreach_ptr(rangeTableEntry, rangeTableList) + foreach_declared_ptr(rangeTableEntry, rangeTableList) { Oid relationId = rangeTableEntry->relid; @@ -1224,7 +1224,7 @@ ErrorIfMergeQueryQualAndTargetListNotSupported(Oid targetRelationId, Query *orig * within itself. Check each INSERT/UPDATE/DELETE individually. */ MergeAction *action = NULL; - foreach_ptr(action, originalQuery->mergeActionList) + foreach_declared_ptr(action, originalQuery->mergeActionList) { Assert(originalQuery->returningList == NULL); deferredError = MergeQualAndTargetListFunctionsSupported(targetRelationId, @@ -1472,10 +1472,10 @@ FetchAndValidateInsertVarIfExists(Oid targetRelationId, Query *query) bool foundDistributionColumn = false; MergeAction *action = NULL; uint32 targetRangeTableIndex = query->resultRelation; - foreach_ptr(action, query->mergeActionList) + foreach_declared_ptr(action, query->mergeActionList) { /* Skip MATCHED clause as INSERTS are not allowed in it */ - if (action->matched) + if (matched_compat(action)) { continue; } @@ -1502,7 +1502,7 @@ FetchAndValidateInsertVarIfExists(Oid targetRelationId, Query *query) PartitionColumn(targetRelationId, targetRangeTableIndex); TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, action->targetList) + foreach_declared_ptr(targetEntry, action->targetList) { AttrNumber originalAttrNo = targetEntry->resno; diff --git a/src/backend/distributed/planner/multi_explain.c b/src/backend/distributed/planner/multi_explain.c index 4584e774024..531b9b36257 100644 --- a/src/backend/distributed/planner/multi_explain.c +++ b/src/backend/distributed/planner/multi_explain.c @@ -373,6 +373,21 @@ ExplainSubPlans(DistributedPlan *distributedPlan, ExplainState *es) BufferUsage bufusage_start, bufusage; +#if PG_VERSION_NUM >= PG_VERSION_17 + MemoryContextCounters mem_counters; + MemoryContext planner_ctx = NULL; + MemoryContext saved_ctx = NULL; + + if (es->memory) + { + /* copy paste from postgres code */ + planner_ctx = AllocSetContextCreate(CurrentMemoryContext, + "explain analyze planner context", + ALLOCSET_DEFAULT_SIZES); + saved_ctx = MemoryContextSwitchTo(planner_ctx); + } +#endif + if (es->buffers) { bufusage_start = pgBufferUsage; @@ -430,8 +445,20 @@ ExplainSubPlans(DistributedPlan *distributedPlan, ExplainState *es) ExplainOpenGroup("PlannedStmt", "PlannedStmt", false, es); +#if PG_VERSION_NUM >= PG_VERSION_17 + if (es->memory) + { + MemoryContextSwitchTo(saved_ctx); + MemoryContextMemConsumed(planner_ctx, &mem_counters); + } + + ExplainOnePlan(plan, into, es, queryString, params, NULL, &planduration, + (es->buffers ? &bufusage : NULL), + (es->memory ? &mem_counters : NULL)); +#else ExplainOnePlan(plan, into, es, queryString, params, NULL, &planduration, (es->buffers ? &bufusage : NULL)); +#endif ExplainCloseGroup("PlannedStmt", "PlannedStmt", false, es); ExplainCloseGroup("Subplan", NULL, true, es); @@ -493,7 +520,7 @@ ExplainJob(CitusScanState *scanState, Job *job, ExplainState *es, { Task *task = NULL; uint64 totalReceivedTupleDataForAllTasks = 0; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { totalReceivedTupleDataForAllTasks += TaskReceivedTupleData(task); } @@ -671,7 +698,7 @@ ExplainTaskList(CitusScanState *scanState, List *taskList, ExplainState *es, } Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { RemoteExplainPlan *remoteExplain = RemoteExplain(task, es, params); remoteExplainList = lappend(remoteExplainList, remoteExplain); @@ -1251,6 +1278,21 @@ CitusExplainOneQuery(Query *query, int cursorOptions, IntoClause *into, BufferUsage bufusage_start, bufusage; +#if PG_VERSION_NUM >= PG_VERSION_17 + MemoryContextCounters mem_counters; + MemoryContext planner_ctx = NULL; + MemoryContext saved_ctx = NULL; + + if (es->memory) + { + /* copy paste from postgres code */ + planner_ctx = AllocSetContextCreate(CurrentMemoryContext, + "explain analyze planner context", + ALLOCSET_DEFAULT_SIZES); + saved_ctx = MemoryContextSwitchTo(planner_ctx); + } +#endif + if (es->buffers) { bufusage_start = pgBufferUsage; @@ -1284,9 +1326,23 @@ CitusExplainOneQuery(Query *query, int cursorOptions, IntoClause *into, BufferUsageAccumDiff(&bufusage, &pgBufferUsage, &bufusage_start); } +#if PG_VERSION_NUM >= PG_VERSION_17 + if (es->memory) + { + MemoryContextSwitchTo(saved_ctx); + MemoryContextMemConsumed(planner_ctx, &mem_counters); + } + + /* run it (if needed) and produce output */ + ExplainOnePlan(plan, into, es, queryString, params, queryEnv, + &planduration, (es->buffers ? &bufusage : NULL), + (es->memory ? &mem_counters : NULL)); +#else + /* run it (if needed) and produce output */ ExplainOnePlan(plan, into, es, queryString, params, queryEnv, &planduration, (es->buffers ? &bufusage : NULL)); +#endif } @@ -1398,7 +1454,7 @@ void ResetExplainAnalyzeData(List *taskList) { Task *task = NULL; - foreach_ptr(task, taskList) + foreach_declared_ptr(task, taskList) { if (task->fetchedExplainAnalyzePlan != NULL) { @@ -1461,7 +1517,7 @@ ExplainAnalyzeTaskList(List *originalTaskList, List *explainAnalyzeTaskList = NIL; Task *originalTask = NULL; - foreach_ptr(originalTask, originalTaskList) + foreach_declared_ptr(originalTask, originalTaskList) { if (originalTask->queryCount != 1) { @@ -1699,6 +1755,21 @@ ExplainOneQuery(Query *query, int cursorOptions, BufferUsage bufusage_start, bufusage; +#if PG_VERSION_NUM >= PG_VERSION_17 + MemoryContextCounters mem_counters; + MemoryContext planner_ctx = NULL; + MemoryContext saved_ctx = NULL; + + if (es->memory) + { + /* copy paste from postgres code */ + planner_ctx = AllocSetContextCreate(CurrentMemoryContext, + "explain analyze planner context", + ALLOCSET_DEFAULT_SIZES); + saved_ctx = MemoryContextSwitchTo(planner_ctx); + } +#endif + if (es->buffers) bufusage_start = pgBufferUsage; INSTR_TIME_SET_CURRENT(planstart); @@ -1716,9 +1787,21 @@ ExplainOneQuery(Query *query, int cursorOptions, BufferUsageAccumDiff(&bufusage, &pgBufferUsage, &bufusage_start); } +#if PG_VERSION_NUM >= PG_VERSION_17 + if (es->memory) + { + MemoryContextSwitchTo(saved_ctx); + MemoryContextMemConsumed(planner_ctx, &mem_counters); + } + /* run it (if needed) and produce output */ + ExplainOnePlan(plan, into, es, queryString, params, queryEnv, + &planduration, (es->buffers ? &bufusage : NULL), + (es->memory ? &mem_counters : NULL)); +#else /* run it (if needed) and produce output */ ExplainOnePlan(plan, into, es, queryString, params, queryEnv, &planduration, (es->buffers ? &bufusage : NULL)); +#endif } } diff --git a/src/backend/distributed/planner/multi_join_order.c b/src/backend/distributed/planner/multi_join_order.c index 908ed206ea6..7f25e08cc6e 100644 --- a/src/backend/distributed/planner/multi_join_order.c +++ b/src/backend/distributed/planner/multi_join_order.c @@ -224,10 +224,10 @@ JoinOnColumns(List *currentPartitionColumnList, Var *candidateColumn, } Var *currentColumn = NULL; - foreach_ptr(currentColumn, currentPartitionColumnList) + foreach_declared_ptr(currentColumn, currentPartitionColumnList) { Node *joinClause = NULL; - foreach_ptr(joinClause, joinClauseList) + foreach_declared_ptr(joinClause, joinClauseList) { if (!NodeIsEqualsOpExpr(joinClause)) { @@ -1094,10 +1094,10 @@ SinglePartitionJoinClause(List *partitionColumnList, List *applicableJoinClauses } Var *partitionColumn = NULL; - foreach_ptr(partitionColumn, partitionColumnList) + foreach_declared_ptr(partitionColumn, partitionColumnList) { Node *applicableJoinClause = NULL; - foreach_ptr(applicableJoinClause, applicableJoinClauses) + foreach_declared_ptr(applicableJoinClause, applicableJoinClauses) { if (!NodeIsEqualsOpExpr(applicableJoinClause)) { @@ -1177,7 +1177,7 @@ OpExpr * DualPartitionJoinClause(List *applicableJoinClauses) { Node *applicableJoinClause = NULL; - foreach_ptr(applicableJoinClause, applicableJoinClauses) + foreach_declared_ptr(applicableJoinClause, applicableJoinClauses) { if (!NodeIsEqualsOpExpr(applicableJoinClause)) { @@ -1262,7 +1262,7 @@ IsApplicableJoinClause(List *leftTableIdList, uint32 rightTableId, Node *joinCla List *varList = pull_var_clause_default(joinClause); Var *var = NULL; bool joinContainsRightTable = false; - foreach_ptr(var, varList) + foreach_declared_ptr(var, varList) { uint32 columnTableId = var->varno; if (rightTableId == columnTableId) @@ -1301,7 +1301,7 @@ ApplicableJoinClauses(List *leftTableIdList, uint32 rightTableId, List *joinClau joinClauseList = JoinClauseList(joinClauseList); Node *joinClause = NULL; - foreach_ptr(joinClause, joinClauseList) + foreach_declared_ptr(joinClause, joinClauseList) { if (IsApplicableJoinClause(leftTableIdList, rightTableId, joinClause)) { diff --git a/src/backend/distributed/planner/multi_logical_optimizer.c b/src/backend/distributed/planner/multi_logical_optimizer.c index 76e38237ad6..393a5a0d3e5 100644 --- a/src/backend/distributed/planner/multi_logical_optimizer.c +++ b/src/backend/distributed/planner/multi_logical_optimizer.c @@ -414,7 +414,7 @@ MultiLogicalPlanOptimize(MultiTreeRoot *multiLogicalPlan) /* pull up collect nodes and merge duplicate collects */ List *collectNodeList = FindNodesOfType(logicalPlanNode, T_MultiCollect); MultiCollect *collectNode = NULL; - foreach_ptr(collectNode, collectNodeList) + foreach_declared_ptr(collectNode, collectNodeList) { PullUpCollectLoop(collectNode); } @@ -436,7 +436,7 @@ MultiLogicalPlanOptimize(MultiTreeRoot *multiLogicalPlan) List *tableNodeList = FindNodesOfType(logicalPlanNode, T_MultiTable); MultiTable *tableNode = NULL; - foreach_ptr(tableNode, tableNodeList) + foreach_declared_ptr(tableNode, tableNodeList) { if (tableNode->relationId == SUBQUERY_RELATION_ID) { @@ -542,7 +542,7 @@ OrSelectClauseList(List *selectClauseList) List *orSelectClauseList = NIL; Node *selectClause = NULL; - foreach_ptr(selectClause, selectClauseList) + foreach_declared_ptr(selectClause, selectClauseList) { bool orClause = is_orclause(selectClause); if (orClause) @@ -968,7 +968,7 @@ SelectClauseTableIdList(List *selectClauseList) List *tableIdList = NIL; Node *selectClause = NULL; - foreach_ptr(selectClause, selectClauseList) + foreach_declared_ptr(selectClause, selectClauseList) { List *selectColumnList = pull_var_clause_default(selectClause); @@ -1077,7 +1077,7 @@ TableIdListColumns(List *tableIdList, List *columnList) List *tableColumnList = NIL; Var *column = NULL; - foreach_ptr(column, columnList) + foreach_declared_ptr(column, columnList) { int columnTableId = (int) column->varno; @@ -1103,7 +1103,7 @@ TableIdListSelectClauses(List *tableIdList, List *selectClauseList) List *tableSelectClauseList = NIL; Node *selectClause = NULL; - foreach_ptr(selectClause, selectClauseList) + foreach_declared_ptr(selectClause, selectClauseList) { List *selectColumnList = pull_var_clause_default(selectClause); if (list_length(selectColumnList) == 0) @@ -1425,7 +1425,7 @@ MasterExtendedOpNode(MultiExtendedOp *originalOpNode, /* iterate over original target entries */ TargetEntry *originalTargetEntry = NULL; - foreach_ptr(originalTargetEntry, targetEntryList) + foreach_declared_ptr(originalTargetEntry, targetEntryList) { TargetEntry *newTargetEntry = flatCopyTargetEntry(originalTargetEntry); Expr *originalExpression = originalTargetEntry->expr; @@ -1598,7 +1598,7 @@ MasterAggregateExpression(Aggref *originalAggregate, Aggref *aggregate = (Aggref *) copyObject(originalAggregate); TargetEntry *targetEntry; - foreach_ptr(targetEntry, aggregate->args) + foreach_declared_ptr(targetEntry, aggregate->args) { targetEntry->expr = (Expr *) makeVar(masterTableId, walkerContext->columnId, @@ -1611,7 +1611,7 @@ MasterAggregateExpression(Aggref *originalAggregate, aggregate->aggdirectargs = NIL; Expr *directarg; - foreach_ptr(directarg, originalAggregate->aggdirectargs) + foreach_declared_ptr(directarg, originalAggregate->aggdirectargs) { /* * Need to replace nodes that contain any Vars with Vars referring @@ -1662,7 +1662,7 @@ MasterAggregateExpression(Aggref *originalAggregate, /* determine unique vars that were placed in target list by worker */ Var *column = NULL; - foreach_ptr(column, varList) + foreach_declared_ptr(column, varList) { uniqueVarList = list_append_unique(uniqueVarList, copyObject(column)); } @@ -1672,12 +1672,12 @@ MasterAggregateExpression(Aggref *originalAggregate, * worker query target entry column index. */ Var *columnToUpdate = NULL; - foreach_ptr(columnToUpdate, varList) + foreach_declared_ptr(columnToUpdate, varList) { int columnIndex = 0; Var *currentVar = NULL; - foreach_ptr(currentVar, uniqueVarList) + foreach_declared_ptr(currentVar, uniqueVarList) { if (equal(columnToUpdate, currentVar)) { @@ -2526,7 +2526,7 @@ ProcessTargetListForWorkerQuery(List *targetEntryList, /* iterate over original target entries */ TargetEntry *originalTargetEntry = NULL; - foreach_ptr(originalTargetEntry, targetEntryList) + foreach_declared_ptr(originalTargetEntry, targetEntryList) { Expr *originalExpression = originalTargetEntry->expr; List *newExpressionList = NIL; @@ -2733,7 +2733,7 @@ ProcessWindowFunctionPullUpForWorkerQuery(List *windowClause, List *columnList = pull_var_clause_default((Node *) windowClause); Expr *newExpression = NULL; - foreach_ptr(newExpression, columnList) + foreach_declared_ptr(newExpression, columnList) { TargetEntry *newTargetEntry = makeNode(TargetEntry); @@ -2823,7 +2823,7 @@ bool TargetListHasAggregates(List *targetEntryList) { TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, targetEntryList) + foreach_declared_ptr(targetEntry, targetEntryList) { Expr *targetExpr = targetEntry->expr; bool hasAggregates = contain_aggs_of_level((Node *) targetExpr, 0); @@ -2867,7 +2867,7 @@ ExpandWorkerTargetEntry(List *expressionList, TargetEntry *originalTargetEntry, { /* now create target entries for each new expression */ Expr *newExpression = NULL; - foreach_ptr(newExpression, expressionList) + foreach_declared_ptr(newExpression, expressionList) { /* generate and add the new target entry to the target list */ TargetEntry *newTargetEntry = @@ -2904,7 +2904,7 @@ GetNextSortGroupRef(List *targetEntryList) /* find max of sort group ref index */ TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, targetEntryList) + foreach_declared_ptr(targetEntry, targetEntryList) { if (targetEntry->ressortgroupref > nextSortGroupRefIndex) { @@ -3060,13 +3060,13 @@ WorkerAggregateExpressionList(Aggref *originalAggregate, if (walkerContext->extendedOpNodeProperties->pullUpIntermediateRows) { TargetEntry *targetEntry; - foreach_ptr(targetEntry, originalAggregate->args) + foreach_declared_ptr(targetEntry, originalAggregate->args) { workerAggregateList = lappend(workerAggregateList, targetEntry->expr); } Expr *directarg; - foreach_ptr(directarg, originalAggregate->aggdirectargs) + foreach_declared_ptr(directarg, originalAggregate->aggdirectargs) { /* * The worker aggregation should execute any node that contains any @@ -3099,7 +3099,7 @@ WorkerAggregateExpressionList(Aggref *originalAggregate, List *columnList = pull_var_clause_default((Node *) aggregate); Var *column = NULL; - foreach_ptr(column, columnList) + foreach_declared_ptr(column, columnList) { workerAggregateList = list_append_unique(workerAggregateList, column); } @@ -3326,7 +3326,7 @@ WorkerAggregateExpressionList(Aggref *originalAggregate, rowExpr->colnames = NIL; TargetEntry *arg = NULL; - foreach_ptr(arg, originalAggregate->args) + foreach_declared_ptr(arg, originalAggregate->args) { rowExpr->args = lappend(rowExpr->args, copyObject(arg->expr)); } @@ -3830,7 +3830,7 @@ HasNonDistributableAggregates(MultiNode *logicalPlanNode) pull_var_clause(havingQual, PVC_INCLUDE_AGGREGATES)); Node *expression = NULL; - foreach_ptr(expression, expressionList) + foreach_declared_ptr(expression, expressionList) { /* only consider aggregate expressions */ if (!IsA(expression, Aggref)) @@ -3936,7 +3936,7 @@ DeferErrorIfHasNonDistributableAggregates(MultiNode *logicalPlanNode) pull_var_clause(havingQual, PVC_INCLUDE_AGGREGATES)); Node *expression = NULL; - foreach_ptr(expression, expressionList) + foreach_declared_ptr(expression, expressionList) { /* only consider aggregate expressions */ if (!IsA(expression, Aggref)) @@ -4079,7 +4079,7 @@ DeferErrorIfUnsupportedAggregateDistinct(Aggref *aggregateExpression, List *columnList = pull_var_clause_default(aggregateArgument); Var *column = NULL; - foreach_ptr(column, columnList) + foreach_declared_ptr(column, columnList) { if (column->varattno <= 0) { @@ -4095,7 +4095,7 @@ DeferErrorIfUnsupportedAggregateDistinct(Aggref *aggregateExpression, List *multiTableNodeList = FindNodesOfType(logicalPlanNode, T_MultiTable); MultiTable *multiTable = NULL; - foreach_ptr(multiTable, multiTableNodeList) + foreach_declared_ptr(multiTable, multiTableNodeList) { if (multiTable->relationId == SUBQUERY_RELATION_ID || multiTable->relationId == SUBQUERY_PUSHDOWN_RELATION_ID) @@ -4251,7 +4251,7 @@ TablePartitioningSupportsDistinct(List *tableNodeList, MultiExtendedOp *opNode, bool distinctSupported = true; MultiTable *tableNode = NULL; - foreach_ptr(tableNode, tableNodeList) + foreach_declared_ptr(tableNode, tableNodeList) { Oid relationId = tableNode->relationId; bool tableDistinctSupported = false; @@ -4327,7 +4327,7 @@ GroupedByColumn(List *groupClauseList, List *targetList, Var *column) } SortGroupClause *groupClause = NULL; - foreach_ptr(groupClause, groupClauseList) + foreach_declared_ptr(groupClause, groupClauseList) { TargetEntry *groupTargetEntry = get_sortgroupclause_tle(groupClause, targetList); @@ -4359,7 +4359,7 @@ SubqueryMultiTableList(MultiNode *multiNode) List *multiTableNodeList = FindNodesOfType(multiNode, T_MultiTable); MultiTable *multiTable = NULL; - foreach_ptr(multiTable, multiTableNodeList) + foreach_declared_ptr(multiTable, multiTableNodeList) { Query *subquery = multiTable->subquery; @@ -4383,7 +4383,7 @@ GroupTargetEntryList(List *groupClauseList, List *targetEntryList) List *groupTargetEntryList = NIL; SortGroupClause *groupClause = NULL; - foreach_ptr(groupClause, groupClauseList) + foreach_declared_ptr(groupClause, groupClauseList) { TargetEntry *groupTargetEntry = get_sortgroupclause_tle(groupClause, targetEntryList); @@ -4585,7 +4585,7 @@ FindReferencedTableColumn(Expr *columnExpression, List *parentQueryList, Query * } CommonTableExpr *candidateCte = NULL; - foreach_ptr(candidateCte, cteList) + foreach_declared_ptr(candidateCte, cteList) { if (strcmp(candidateCte->ctename, rangeTableEntry->ctename) == 0) { @@ -4878,7 +4878,7 @@ HasOrderByAggregate(List *sortClauseList, List *targetList) bool hasOrderByAggregate = false; SortGroupClause *sortClause = NULL; - foreach_ptr(sortClause, sortClauseList) + foreach_declared_ptr(sortClause, sortClauseList) { Node *sortExpression = get_sortgroupclause_expr(sortClause, targetList); @@ -4904,7 +4904,7 @@ HasOrderByNonCommutativeAggregate(List *sortClauseList, List *targetList) bool hasOrderByNonCommutativeAggregate = false; SortGroupClause *sortClause = NULL; - foreach_ptr(sortClause, sortClauseList) + foreach_declared_ptr(sortClause, sortClauseList) { Node *sortExpression = get_sortgroupclause_expr(sortClause, targetList); @@ -4944,7 +4944,7 @@ HasOrderByComplexExpression(List *sortClauseList, List *targetList) bool hasOrderByComplexExpression = false; SortGroupClause *sortClause = NULL; - foreach_ptr(sortClause, sortClauseList) + foreach_declared_ptr(sortClause, sortClauseList) { Node *sortExpression = get_sortgroupclause_expr(sortClause, targetList); @@ -4986,7 +4986,7 @@ HasOrderByHllType(List *sortClauseList, List *targetList) Oid hllTypeId = TypeOid(hllSchemaOid, HLL_TYPE_NAME); SortGroupClause *sortClause = NULL; - foreach_ptr(sortClause, sortClauseList) + foreach_declared_ptr(sortClause, sortClauseList) { Node *sortExpression = get_sortgroupclause_expr(sortClause, targetList); @@ -5070,12 +5070,12 @@ IsGroupBySubsetOfDistinct(List *groupClauses, List *distinctClauses) } SortGroupClause *groupClause = NULL; - foreach_ptr(groupClause, groupClauses) + foreach_declared_ptr(groupClause, groupClauses) { bool isFound = false; SortGroupClause *distinctClause = NULL; - foreach_ptr(distinctClause, distinctClauses) + foreach_declared_ptr(distinctClause, distinctClauses) { if (groupClause->tleSortGroupRef == distinctClause->tleSortGroupRef) { diff --git a/src/backend/distributed/planner/multi_logical_planner.c b/src/backend/distributed/planner/multi_logical_planner.c index 5201195c715..b7bee3aadcb 100644 --- a/src/backend/distributed/planner/multi_logical_planner.c +++ b/src/backend/distributed/planner/multi_logical_planner.c @@ -1414,7 +1414,7 @@ IsJoinClause(Node *clause) } Var *initialVar = castNode(Var, linitial(varList)); - foreach_ptr(var, varList) + foreach_declared_ptr(var, varList) { if (var->varno != initialVar->varno) { diff --git a/src/backend/distributed/planner/multi_physical_planner.c b/src/backend/distributed/planner/multi_physical_planner.c index fb7f844c7b4..dee3464cf14 100644 --- a/src/backend/distributed/planner/multi_physical_planner.c +++ b/src/backend/distributed/planner/multi_physical_planner.c @@ -547,7 +547,7 @@ BuildJobQuery(MultiNode *multiNode, List *dependentJobList) List *sortClauseList = NIL; Node *limitCount = NULL; Node *limitOffset = NULL; - LimitOption limitOption = LIMIT_OPTION_DEFAULT; + LimitOption limitOption = LIMIT_OPTION_COUNT; Node *havingQual = NULL; bool hasDistinctOn = false; List *distinctClause = NIL; @@ -895,7 +895,7 @@ WrapUngroupedVarsInAnyValueAggregate(Node *expression, List *groupClauseList, * subexpression equality check. */ TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, context.groupByTargetEntryList) + foreach_declared_ptr(targetEntry, context.groupByTargetEntryList) { if (!IsA(targetEntry->expr, Var)) { @@ -953,7 +953,7 @@ AddAnyValueAggregates(Node *node, AddAnyValueAggregatesContext *context) * Check whether this Var appears in the GROUP BY. */ TargetEntry *groupByTargetEntry = NULL; - foreach_ptr(groupByTargetEntry, context->groupByTargetEntryList) + foreach_declared_ptr(groupByTargetEntry, context->groupByTargetEntryList) { if (!IsA(groupByTargetEntry->expr, Var)) { @@ -996,7 +996,7 @@ AddAnyValueAggregates(Node *node, AddAnyValueAggregatesContext *context) * Otherwise, continue to descend into subexpressions. */ TargetEntry *groupByTargetEntry = NULL; - foreach_ptr(groupByTargetEntry, context->groupByTargetEntryList) + foreach_declared_ptr(groupByTargetEntry, context->groupByTargetEntryList) { if (equal(node, groupByTargetEntry->expr)) { @@ -1192,7 +1192,7 @@ QueryJoinTree(MultiNode *multiNode, List *dependentJobList, List **rangeTableLis List *funcCollations = NIL; TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, dependentTargetList) + foreach_declared_ptr(targetEntry, dependentTargetList) { Node *expr = (Node *) targetEntry->expr; @@ -2237,7 +2237,7 @@ QueryPushdownSqlTaskList(Query *query, uint64 jobId, } ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, prunedShardList) + foreach_declared_ptr(shardInterval, prunedShardList) { int shardIndex = shardInterval->shardIndex; @@ -2305,7 +2305,7 @@ static bool IsInnerTableOfOuterJoin(RelationRestriction *relationRestriction) { RestrictInfo *joinInfo = NULL; - foreach_ptr(joinInfo, relationRestriction->relOptInfo->joininfo) + foreach_declared_ptr(joinInfo, relationRestriction->relOptInfo->joininfo) { if (joinInfo->outer_relids == NULL) { @@ -3473,7 +3473,7 @@ FetchEqualityAttrNumsForList(List *nodeList) List *attributeNums = NIL; Node *node = NULL; bool hasAtLeastOneEquality = false; - foreach_ptr(node, nodeList) + foreach_declared_ptr(node, nodeList) { List *fetchedEqualityAttrNums = FetchEqualityAttrNumsForRTE(node); @@ -3531,7 +3531,7 @@ FetchEqualityAttrNumsForRTEBoolExpr(BoolExpr *boolExpr) List *attributeNums = NIL; bool hasEquality = true; Node *arg = NULL; - foreach_ptr(arg, boolExpr->args) + foreach_declared_ptr(arg, boolExpr->args) { List *attributeNumsInSubExpression = FetchEqualityAttrNumsForRTE(arg); if (boolExpr->boolop == AND_EXPR) @@ -3622,7 +3622,7 @@ JoinSequenceArray(List *rangeTableFragmentsList, Query *jobQuery, List *dependen * tables and this new one. */ Node *nextJoinClause = NULL; - foreach_ptr(nextJoinClause, nextJoinClauseList) + foreach_declared_ptr(nextJoinClause, nextJoinClauseList) { if (!NodeIsEqualsOpExpr(nextJoinClause)) { @@ -4183,7 +4183,7 @@ FetchTaskResultNameList(List *mapOutputFetchTaskList) List *resultNameList = NIL; Task *mapOutputFetchTask = NULL; - foreach_ptr(mapOutputFetchTask, mapOutputFetchTaskList) + foreach_declared_ptr(mapOutputFetchTask, mapOutputFetchTaskList) { Task *mapTask = linitial(mapOutputFetchTask->dependentTaskList); int partitionId = mapOutputFetchTask->partitionId; @@ -4344,7 +4344,7 @@ PartitionColumnIndex(Var *targetVar, List *targetList) { TargetEntry *targetEntry = NULL; int resNo = 1; - foreach_ptr(targetEntry, targetList) + foreach_declared_ptr(targetEntry, targetList) { if (IsA(targetEntry->expr, Var)) { @@ -4571,7 +4571,7 @@ RowModifyLevelForQuery(Query *query) { /* skip checking for INSERT as those CTEs are recursively planned */ CommonTableExpr *cte = NULL; - foreach_ptr(cte, query->cteList) + foreach_declared_ptr(cte, query->cteList) { Query *cteQuery = (Query *) cte->ctequery; diff --git a/src/backend/distributed/planner/multi_router_planner.c b/src/backend/distributed/planner/multi_router_planner.c index 44f955a3227..96a946a34f2 100644 --- a/src/backend/distributed/planner/multi_router_planner.c +++ b/src/backend/distributed/planner/multi_router_planner.c @@ -851,7 +851,7 @@ ModifiesLocalTableWithRemoteCitusLocalTable(List *rangeTableList) bool containsRemoteCitusLocalTable = false; RangeTblEntry *rangeTableEntry = NULL; - foreach_ptr(rangeTableEntry, rangeTableList) + foreach_declared_ptr(rangeTableEntry, rangeTableList) { if (!IsRecursivelyPlannableRelation(rangeTableEntry)) { @@ -982,7 +982,7 @@ ModifyQuerySupported(Query *queryTree, Query *originalQuery, bool multiShardQuer ContainsLocalTableDistributedTableJoin(queryTree->rtable); RangeTblEntry *rangeTableEntry = NULL; - foreach_ptr(rangeTableEntry, rangeTableList) + foreach_declared_ptr(rangeTableEntry, rangeTableList) { if (rangeTableEntry->rtekind == RTE_RELATION) { @@ -1744,7 +1744,7 @@ RouterInsertTaskList(Query *query, bool parametersInQueryResolved, } ModifyRoute *modifyRoute = NULL; - foreach_ptr(modifyRoute, modifyRouteList) + foreach_declared_ptr(modifyRoute, modifyRouteList) { Task *modifyTask = CreateTask(MODIFY_TASK); modifyTask->anchorShardId = modifyRoute->shardId; @@ -2137,7 +2137,7 @@ SingleShardTaskList(Query *query, uint64 jobId, List *relationShardList, /* assume ErrorIfQueryHasUnroutableModifyingCTE checked query already */ CommonTableExpr *cte = NULL; - foreach_ptr(cte, query->cteList) + foreach_declared_ptr(cte, query->cteList) { Query *cteQuery = (Query *) cte->ctequery; @@ -2466,7 +2466,7 @@ AllShardsColocated(List *relationShardList) int colocationId = -1; CitusTableType tableType = ANY_CITUS_TABLE_TYPE; - foreach_ptr(relationShard, relationShardList) + foreach_declared_ptr(relationShard, relationShardList) { Oid relationId = relationShard->relationId; uint64 shardId = relationShard->shardId; @@ -2591,7 +2591,7 @@ CreateTaskPlacementListForShardIntervals(List *shardIntervalListList, bool shard * If there is a local table, we only allow the local placement to * be used. If there is none, we disallow the query. */ - foreach_ptr(taskPlacement, shardPlacementList) + foreach_declared_ptr(taskPlacement, shardPlacementList) { if (taskPlacement->groupId == GetLocalGroupId()) { @@ -3008,7 +3008,7 @@ PlacementsForWorkersContainingAllShards(List *shardIntervalListList) List *currentPlacementList = NIL; List *shardIntervalList = NIL; - foreach_ptr(shardIntervalList, shardIntervalListList) + foreach_declared_ptr(shardIntervalList, shardIntervalListList) { if (shardIntervalList == NIL) { @@ -3907,7 +3907,7 @@ ErrorIfQueryHasUnroutableModifyingCTE(Query *queryTree) char replicationModel = 0; CommonTableExpr *cte = NULL; - foreach_ptr(cte, queryTree->cteList) + foreach_declared_ptr(cte, queryTree->cteList) { Query *cteQuery = (Query *) cte->ctequery; diff --git a/src/backend/distributed/planner/query_pushdown_planning.c b/src/backend/distributed/planner/query_pushdown_planning.c index 2eda4e42a76..65de8680ccb 100644 --- a/src/backend/distributed/planner/query_pushdown_planning.c +++ b/src/backend/distributed/planner/query_pushdown_planning.c @@ -1187,7 +1187,7 @@ DeferErrorIfUnsupportedTableCombination(Query *queryTree) ExtractRangeTableIndexWalker((Node *) queryTree->jointree, &joinTreeTableIndexList); - foreach_int(joinTreeTableIndex, joinTreeTableIndexList) + foreach_declared_int(joinTreeTableIndex, joinTreeTableIndexList) { /* * Join tree's range table index starts from 1 in the query tree. But, @@ -2010,7 +2010,7 @@ CreateSubqueryTargetListAndAdjustVars(List *columnList) Var *column = NULL; List *subqueryTargetEntryList = NIL; - foreach_ptr(column, columnList) + foreach_declared_ptr(column, columnList) { /* * To avoid adding the same column multiple times, we first check whether there @@ -2064,7 +2064,7 @@ static AttrNumber FindResnoForVarInTargetList(List *targetList, int varno, int varattno) { TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, targetList) + foreach_declared_ptr(targetEntry, targetList) { if (!IsA(targetEntry->expr, Var)) { @@ -2127,7 +2127,7 @@ PartitionColumnForPushedDownSubquery(Query *query) List *targetEntryList = query->targetList; TargetEntry *targetEntry = NULL; - foreach_ptr(targetEntry, targetEntryList) + foreach_declared_ptr(targetEntry, targetEntryList) { if (targetEntry->resjunk) { diff --git a/src/backend/distributed/planner/recursive_planning.c b/src/backend/distributed/planner/recursive_planning.c index 9f520fa5f51..9335b5ffc94 100644 --- a/src/backend/distributed/planner/recursive_planning.c +++ b/src/backend/distributed/planner/recursive_planning.c @@ -1736,7 +1736,7 @@ NodeContainsSubqueryReferencingOuterQuery(Node *node) ExtractSublinkWalker(node, &sublinks); SubLink *sublink; - foreach_ptr(sublink, sublinks) + foreach_declared_ptr(sublink, sublinks) { if (ContainsReferencesToOuterQuery(castNode(Query, sublink->subselect))) { @@ -1894,7 +1894,7 @@ GenerateRequiredColNamesFromTargetList(List *targetList) { TargetEntry *entry = NULL; List *innerSubqueryColNames = NIL; - foreach_ptr(entry, targetList) + foreach_declared_ptr(entry, targetList) { if (IsA(entry->expr, Var)) { @@ -1921,7 +1921,7 @@ UpdateVarNosInNode(Node *node, Index newVarNo) List *varList = pull_var_clause(node, PVC_RECURSE_AGGREGATES | PVC_RECURSE_PLACEHOLDERS); Var *var = NULL; - foreach_ptr(var, varList) + foreach_declared_ptr(var, varList) { var->varno = newVarNo; } @@ -1958,7 +1958,7 @@ ContainsLocalTableDistributedTableJoin(List *rangeTableList) bool containsDistributedTable = false; RangeTblEntry *rangeTableEntry = NULL; - foreach_ptr(rangeTableEntry, rangeTableList) + foreach_declared_ptr(rangeTableEntry, rangeTableList) { if (FindNodeMatchingCheckFunctionInRangeTableList(list_make1(rangeTableEntry), IsDistributedOrReferenceTableRTE)) diff --git a/src/backend/distributed/planner/relation_restriction_equivalence.c b/src/backend/distributed/planner/relation_restriction_equivalence.c index 83d7cbcdb77..89516640aa0 100644 --- a/src/backend/distributed/planner/relation_restriction_equivalence.c +++ b/src/backend/distributed/planner/relation_restriction_equivalence.c @@ -1516,7 +1516,7 @@ ParentCountPriorToAppendRel(List *appendRelList, AppendRelInfo *targetAppendRelI int targetParentIndex = targetAppendRelInfo->parent_relid; Bitmapset *parent_ids = NULL; AppendRelInfo *appendRelInfo = NULL; - foreach_ptr(appendRelInfo, appendRelList) + foreach_declared_ptr(appendRelInfo, appendRelList) { int curParentIndex = appendRelInfo->parent_relid; if (curParentIndex <= targetParentIndex) @@ -1962,7 +1962,7 @@ AllDistributedRelationsInRestrictionContextColocated( List *relationIdList = NIL; /* check whether all relations exists in the main restriction list */ - foreach_ptr(relationRestriction, restrictionContext->relationRestrictionList) + foreach_declared_ptr(relationRestriction, restrictionContext->relationRestrictionList) { relationIdList = lappend_oid(relationIdList, relationRestriction->relationId); } @@ -1981,7 +1981,7 @@ AllDistributedRelationsInRTEListColocated(List *rangeTableEntryList) RangeTblEntry *rangeTableEntry = NULL; List *relationIdList = NIL; - foreach_ptr(rangeTableEntry, rangeTableEntryList) + foreach_declared_ptr(rangeTableEntry, rangeTableEntryList) { relationIdList = lappend_oid(relationIdList, rangeTableEntry->relid); } @@ -2000,7 +2000,7 @@ AllDistributedRelationsInListColocated(List *relationList) int initialColocationId = INVALID_COLOCATION_ID; Oid relationId = InvalidOid; - foreach_oid(relationId, relationList) + foreach_declared_oid(relationId, relationList) { if (!IsCitusTable(relationId)) { @@ -2155,7 +2155,7 @@ GetRestrictInfoListForRelation(RangeTblEntry *rangeTblEntry, List *restrictExprList = NIL; RestrictInfo *restrictInfo = NULL; - foreach_ptr(restrictInfo, baseRestrictInfo) + foreach_declared_ptr(restrictInfo, baseRestrictInfo) { Expr *restrictionClause = restrictInfo->clause; @@ -2199,7 +2199,7 @@ GetRestrictInfoListForRelation(RangeTblEntry *rangeTblEntry, Expr *copyOfRestrictClause = (Expr *) copyObject((Node *) restrictionClause); List *varClauses = pull_var_clause_default((Node *) copyOfRestrictClause); Var *column = NULL; - foreach_ptr(column, varClauses) + foreach_declared_ptr(column, varClauses) { column->varno = SINGLE_RTE_INDEX; column->varnosyn = SINGLE_RTE_INDEX; diff --git a/src/backend/distributed/planner/shard_pruning.c b/src/backend/distributed/planner/shard_pruning.c index e68ac72b01c..2fd8ffdd625 100644 --- a/src/backend/distributed/planner/shard_pruning.c +++ b/src/backend/distributed/planner/shard_pruning.c @@ -1390,7 +1390,7 @@ DeepCopyShardIntervalList(List *originalShardIntervalList) List *copiedShardIntervalList = NIL; ShardInterval *originalShardInterval = NULL; - foreach_ptr(originalShardInterval, originalShardIntervalList) + foreach_declared_ptr(originalShardInterval, originalShardIntervalList) { ShardInterval *copiedShardInterval = CopyShardInterval(originalShardInterval); diff --git a/src/backend/distributed/progress/multi_progress.c b/src/backend/distributed/progress/multi_progress.c index 64e0a5b4762..5d1550ddda2 100644 --- a/src/backend/distributed/progress/multi_progress.c +++ b/src/backend/distributed/progress/multi_progress.c @@ -286,7 +286,7 @@ void DetachFromDSMSegments(List *dsmSegmentList) { dsm_segment *dsmSegment = NULL; - foreach_ptr(dsmSegment, dsmSegmentList) + foreach_declared_ptr(dsmSegment, dsmSegmentList) { dsm_detach(dsmSegment); } diff --git a/src/backend/distributed/relay/relay_event_utility.c b/src/backend/distributed/relay/relay_event_utility.c index d0267025bcc..630c783e544 100644 --- a/src/backend/distributed/relay/relay_event_utility.c +++ b/src/backend/distributed/relay/relay_event_utility.c @@ -150,7 +150,7 @@ RelayEventExtendNames(Node *parseTree, char *schemaName, uint64 shardId) AppendShardIdToName(relationName, shardId); AlterTableCmd *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { if (command->subtype == AT_AddConstraint) { @@ -162,7 +162,7 @@ RelayEventExtendNames(Node *parseTree, char *schemaName, uint64 shardId) { ColumnDef *columnDefinition = (ColumnDef *) command->def; Constraint *constraint = NULL; - foreach_ptr(constraint, columnDefinition->constraints) + foreach_declared_ptr(constraint, columnDefinition->constraints) { RelayEventExtendConstraintAndIndexNames(alterTableStmt, constraint, shardId); @@ -385,7 +385,7 @@ RelayEventExtendNames(Node *parseTree, char *schemaName, uint64 shardId) { List *shardStatisticsList = NIL; List *objectNameList = NULL; - foreach_ptr(objectNameList, dropStmt->objects) + foreach_declared_ptr(objectNameList, dropStmt->objects) { RangeVar *stat = makeRangeVarFromNameList(objectNameList); @@ -415,7 +415,7 @@ RelayEventExtendNames(Node *parseTree, char *schemaName, uint64 shardId) grantStmt->objtype == OBJECT_TABLE) { RangeVar *relation = NULL; - foreach_ptr(relation, grantStmt->objects) + foreach_declared_ptr(relation, grantStmt->objects) { char **relationName = &(relation->relname); char **relationSchemaName = &(relation->schemaname); @@ -673,7 +673,7 @@ RelayEventExtendNamesForInterShardCommands(Node *parseTree, uint64 leftShardId, List *commandList = alterTableStmt->cmds; AlterTableCmd *command = NULL; - foreach_ptr(command, commandList) + foreach_declared_ptr(command, commandList) { char **referencedTableName = NULL; char **relationSchemaName = NULL; @@ -693,7 +693,7 @@ RelayEventExtendNamesForInterShardCommands(Node *parseTree, uint64 leftShardId, List *columnConstraints = columnDefinition->constraints; Constraint *constraint = NULL; - foreach_ptr(constraint, columnConstraints) + foreach_declared_ptr(constraint, columnConstraints) { if (constraint->contype == CONSTR_FOREIGN) { diff --git a/src/backend/distributed/replication/multi_logical_replication.c b/src/backend/distributed/replication/multi_logical_replication.c index 08e6c557308..7189216d09e 100644 --- a/src/backend/distributed/replication/multi_logical_replication.c +++ b/src/backend/distributed/replication/multi_logical_replication.c @@ -282,7 +282,7 @@ CreateGroupedLogicalRepTargetsHash(List *logicalRepTargetList) { HTAB *logicalRepTargetsHash = CreateSimpleHash(uint32, GroupedLogicalRepTargets); LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { bool found = false; GroupedLogicalRepTargets *groupedLogicalRepTargets = @@ -413,7 +413,7 @@ CreateShardMovePublicationInfoHash(WorkerNode *targetNode, List *shardIntervals) { HTAB *publicationInfoHash = CreateSimpleHash(NodeAndOwner, PublicationInfo); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervals) + foreach_declared_ptr(shardInterval, shardIntervals) { NodeAndOwner key; key.nodeId = targetNode->nodeId; @@ -474,7 +474,7 @@ CreateShardMoveLogicalRepTargetList(HTAB *publicationInfoHash, List *shardList) } ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardList) + foreach_declared_ptr(shardInterval, shardList) { NodeAndOwner key; key.nodeId = nodeId; @@ -552,7 +552,7 @@ void CreateReplicaIdentities(List *logicalRepTargetList) { LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { MultiConnection *superuserConnection = target->superuserConnection; CreateReplicaIdentitiesOnNode( @@ -576,7 +576,7 @@ CreateReplicaIdentitiesOnNode(List *shardList, char *nodeName, int32 nodePort) MemoryContext oldContext = MemoryContextSwitchTo(localContext); ShardInterval *shardInterval; - foreach_ptr(shardInterval, shardList) + foreach_declared_ptr(shardInterval, shardList) { uint64 shardId = shardInterval->shardId; Oid relationId = shardInterval->relationId; @@ -725,10 +725,10 @@ ExecuteCreateIndexCommands(List *logicalRepTargetList) { List *taskList = NIL; LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, target->newShards) + foreach_declared_ptr(shardInterval, target->newShards) { Oid relationId = shardInterval->relationId; @@ -787,10 +787,10 @@ ExecuteCreateConstraintsBackedByIndexCommands(List *logicalRepTargetList) MemoryContext oldContext = MemoryContextSwitchTo(localContext); LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, target->newShards) + foreach_declared_ptr(shardInterval, target->newShards) { Oid relationId = shardInterval->relationId; @@ -873,10 +873,10 @@ ExecuteClusterOnCommands(List *logicalRepTargetList) { List *taskList = NIL; LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, target->newShards) + foreach_declared_ptr(shardInterval, target->newShards) { Oid relationId = shardInterval->relationId; @@ -925,10 +925,10 @@ ExecuteCreateIndexStatisticsCommands(List *logicalRepTargetList) MemoryContext oldContext = MemoryContextSwitchTo(localContext); LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, target->newShards) + foreach_declared_ptr(shardInterval, target->newShards) { Oid relationId = shardInterval->relationId; @@ -983,10 +983,10 @@ ExecuteRemainingPostLoadTableCommands(List *logicalRepTargetList) MemoryContext oldContext = MemoryContextSwitchTo(localContext); LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, target->newShards) + foreach_declared_ptr(shardInterval, target->newShards) { Oid relationId = shardInterval->relationId; @@ -1042,10 +1042,10 @@ CreatePartitioningHierarchy(List *logicalRepTargetList) MemoryContext oldContext = MemoryContextSwitchTo(localContext); LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, target->newShards) + foreach_declared_ptr(shardInterval, target->newShards) { if (PartitionTable(shardInterval->relationId)) { @@ -1100,14 +1100,14 @@ CreateUncheckedForeignKeyConstraints(List *logicalRepTargetList) * Iterate over all the shards in the shard group. */ LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { ShardInterval *shardInterval = NULL; /* * Iterate on split shards list for a given shard and create constraints. */ - foreach_ptr(shardInterval, target->newShards) + foreach_declared_ptr(shardInterval, target->newShards) { List *commandList = CopyShardForeignConstraintCommandList( shardInterval); @@ -1320,7 +1320,7 @@ CreatePublications(MultiConnection *connection, quote_identifier(entry->name)); ShardInterval *shard = NULL; - foreach_ptr(shard, entry->shardIntervals) + foreach_declared_ptr(shard, entry->shardIntervals) { char *shardName = ConstructQualifiedShardName(shard); @@ -1429,7 +1429,7 @@ CreateReplicationSlots(MultiConnection *sourceConnection, ReplicationSlotInfo *firstReplicationSlot = NULL; char *snapshot = NULL; LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { ReplicationSlotInfo *replicationSlot = target->replicationSlot; @@ -1481,7 +1481,7 @@ CreateSubscriptions(MultiConnection *sourceConnection, List *logicalRepTargetList) { LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { int ownerId = target->tableOwnerId; @@ -1603,7 +1603,7 @@ void EnableSubscriptions(List *logicalRepTargetList) { LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { ExecuteCriticalRemoteCommand(target->superuserConnection, psprintf( "ALTER SUBSCRIPTION %s ENABLE", @@ -1737,7 +1737,7 @@ CreateGroupedLogicalRepTargetsConnections(HTAB *groupedLogicalRepTargetsHash, groupedLogicalRepTargets->superuserConnection = superuserConnection; LogicalRepTarget *target = NULL; - foreach_ptr(target, groupedLogicalRepTargets->logicalRepTargetList) + foreach_declared_ptr(target, groupedLogicalRepTargets->logicalRepTargetList) { target->superuserConnection = superuserConnection; } @@ -1774,7 +1774,7 @@ SubscriptionNamesValueList(List *logicalRepTargetList) bool first = true; LogicalRepTarget *target = NULL; - foreach_ptr(target, logicalRepTargetList) + foreach_declared_ptr(target, logicalRepTargetList) { if (!first) { diff --git a/src/backend/distributed/shardsplit/shardsplit_decoder.c b/src/backend/distributed/shardsplit/shardsplit_decoder.c index f14f105576c..20dd01b0c76 100644 --- a/src/backend/distributed/shardsplit/shardsplit_decoder.c +++ b/src/backend/distributed/shardsplit/shardsplit_decoder.c @@ -14,6 +14,8 @@ #include "utils/lsyscache.h" #include "utils/typcache.h" +#include "pg_version_constants.h" + #include "distributed/listutils.h" #include "distributed/metadata/distobject.h" #include "distributed/shardinterval_utils.h" @@ -180,6 +182,43 @@ shard_split_change_cb(LogicalDecodingContext *ctx, ReorderBufferTXN *txn, } Oid targetRelationOid = InvalidOid; + +#if PG_VERSION_NUM >= PG_VERSION_17 + switch (change->action) + { + case REORDER_BUFFER_CHANGE_INSERT: + { + HeapTuple newTuple = change->data.tp.newtuple; + targetRelationOid = FindTargetRelationOid(relation, newTuple, + replicationSlotName); + break; + } + + /* updating non-partition column value */ + case REORDER_BUFFER_CHANGE_UPDATE: + { + HeapTuple newTuple = change->data.tp.newtuple; + targetRelationOid = FindTargetRelationOid(relation, newTuple, + replicationSlotName); + break; + } + + case REORDER_BUFFER_CHANGE_DELETE: + { + HeapTuple oldTuple = change->data.tp.oldtuple; + targetRelationOid = FindTargetRelationOid(relation, oldTuple, + replicationSlotName); + + break; + } + + /* Only INSERT/DELETE/UPDATE actions are visible in the replication path of split shard */ + default: + ereport(ERROR, errmsg( + "Unexpected Action :%d. Expected action is INSERT/DELETE/UPDATE", + change->action)); + } +#else switch (change->action) { case REORDER_BUFFER_CHANGE_INSERT: @@ -214,6 +253,7 @@ shard_split_change_cb(LogicalDecodingContext *ctx, ReorderBufferTXN *txn, "Unexpected Action :%d. Expected action is INSERT/DELETE/UPDATE", change->action)); } +#endif /* Current replication slot is not responsible for handling the change */ if (targetRelationOid == InvalidOid) @@ -231,6 +271,62 @@ shard_split_change_cb(LogicalDecodingContext *ctx, ReorderBufferTXN *txn, TupleDesc targetRelationDesc = RelationGetDescr(targetRelation); if (sourceRelationDesc->natts > targetRelationDesc->natts) { +#if PG_VERSION_NUM >= PG_VERSION_17 + switch (change->action) + { + case REORDER_BUFFER_CHANGE_INSERT: + { + HeapTuple sourceRelationNewTuple = change->data.tp.newtuple; + HeapTuple targetRelationNewTuple = GetTupleForTargetSchema( + sourceRelationNewTuple, sourceRelationDesc, targetRelationDesc); + + change->data.tp.newtuple = targetRelationNewTuple; + break; + } + + case REORDER_BUFFER_CHANGE_UPDATE: + { + HeapTuple sourceRelationNewTuple = change->data.tp.newtuple; + HeapTuple targetRelationNewTuple = GetTupleForTargetSchema( + sourceRelationNewTuple, sourceRelationDesc, targetRelationDesc); + + change->data.tp.newtuple = targetRelationNewTuple; + + /* + * Format oldtuple according to the target relation. If the column values of replica + * identiy change, then the old tuple is non-null and needs to be formatted according + * to the target relation schema. + */ + if (change->data.tp.oldtuple != NULL) + { + HeapTuple sourceRelationOldTuple = change->data.tp.oldtuple; + HeapTuple targetRelationOldTuple = GetTupleForTargetSchema( + sourceRelationOldTuple, + sourceRelationDesc, + targetRelationDesc); + + change->data.tp.oldtuple = targetRelationOldTuple; + } + break; + } + + case REORDER_BUFFER_CHANGE_DELETE: + { + HeapTuple sourceRelationOldTuple = change->data.tp.oldtuple; + HeapTuple targetRelationOldTuple = GetTupleForTargetSchema( + sourceRelationOldTuple, sourceRelationDesc, targetRelationDesc); + + change->data.tp.oldtuple = targetRelationOldTuple; + break; + } + + /* Only INSERT/DELETE/UPDATE actions are visible in the replication path of split shard */ + default: + ereport(ERROR, errmsg( + "Unexpected Action :%d. Expected action is INSERT/DELETE/UPDATE", + change->action)); + } +#else switch (change->action) { case REORDER_BUFFER_CHANGE_INSERT: @@ -285,6 +381,7 @@ shard_split_change_cb(LogicalDecodingContext *ctx, ReorderBufferTXN *txn, "Unexpected Action :%d. Expected action is INSERT/DELETE/UPDATE", change->action)); } +#endif } pgOutputPluginChangeCB(ctx, txn, targetRelation, change); @@ -337,7 +434,7 @@ FindTargetRelationOid(Relation sourceShardRelation, shardSplitInfo->distributedTableOid); shardSplitInfo = NULL; - foreach_ptr(shardSplitInfo, entry->shardSplitInfoList) + foreach_declared_ptr(shardSplitInfo, entry->shardSplitInfoList) { if (shardSplitInfo->shardMinValue <= hashValue && shardSplitInfo->shardMaxValue >= hashValue) diff --git a/src/backend/distributed/shardsplit/shardsplit_logical_replication.c b/src/backend/distributed/shardsplit/shardsplit_logical_replication.c index 328dc9af946..a18135372cb 100644 --- a/src/backend/distributed/shardsplit/shardsplit_logical_replication.c +++ b/src/backend/distributed/shardsplit/shardsplit_logical_replication.c @@ -154,7 +154,7 @@ AddPublishableShardEntryInMap(uint32 targetNodeId, ShardInterval *shardInterval, /* Check if parent is already added */ ShardInterval *existingShardInterval = NULL; - foreach_ptr(existingShardInterval, publicationInfo->shardIntervals) + foreach_declared_ptr(existingShardInterval, publicationInfo->shardIntervals) { if (existingShardInterval->shardId == shardInterval->shardId) { @@ -204,7 +204,7 @@ PopulateShardSplitSubscriptionsMetadataList(HTAB *shardSplitInfoHashMap, } List *shardIntervalList = NIL; - foreach_ptr(shardIntervalList, shardGroupSplitIntervalListList) + foreach_declared_ptr(shardIntervalList, shardGroupSplitIntervalListList) { ShardInterval *shardInterval = NULL; WorkerNode *workerPlacementNode = NULL; @@ -256,7 +256,7 @@ CreateLogicalRepTarget(Oid tableOwnerId, uint32 nodeId, * table owner and node. */ ReplicationSlotInfo *replicationSlot = NULL; - foreach_ptr(replicationSlot, replicationSlotInfoList) + foreach_declared_ptr(replicationSlot, replicationSlotInfoList) { if (nodeId == replicationSlot->targetNodeId && tableOwnerId == replicationSlot->tableOwnerId) diff --git a/src/backend/distributed/shared_library_init.c b/src/backend/distributed/shared_library_init.c index bd65fa60c01..16b21e323ea 100644 --- a/src/backend/distributed/shared_library_init.c +++ b/src/backend/distributed/shared_library_init.c @@ -2842,7 +2842,7 @@ ShowShardsForAppNamePrefixesCheckHook(char **newval, void **extra, GucSource sou } char *appNamePrefix = NULL; - foreach_ptr(appNamePrefix, prefixList) + foreach_declared_ptr(appNamePrefix, prefixList) { int prefixLength = strlen(appNamePrefix); if (prefixLength >= NAMEDATALEN) diff --git a/src/backend/distributed/test/colocation_utils.c b/src/backend/distributed/test/colocation_utils.c index 6a87539c46b..d1a738b80ad 100644 --- a/src/backend/distributed/test/colocation_utils.c +++ b/src/backend/distributed/test/colocation_utils.c @@ -93,7 +93,7 @@ get_colocated_table_array(PG_FUNCTION_ARGS) int colocatedTableIndex = 0; Oid colocatedTableId = InvalidOid; - foreach_oid(colocatedTableId, colocatedTableList) + foreach_declared_oid(colocatedTableId, colocatedTableList) { Datum colocatedTableDatum = ObjectIdGetDatum(colocatedTableId); diff --git a/src/backend/distributed/test/create_shards.c b/src/backend/distributed/test/create_shards.c index 4ef13f1cb78..d92a7605932 100644 --- a/src/backend/distributed/test/create_shards.c +++ b/src/backend/distributed/test/create_shards.c @@ -46,7 +46,7 @@ sort_names(PG_FUNCTION_ARGS) StringInfo sortedNames = makeStringInfo(); const char *name = NULL; - foreach_ptr(name, nameList) + foreach_declared_ptr(name, nameList) { appendStringInfo(sortedNames, "%s\n", name); } diff --git a/src/backend/distributed/test/deparse_shard_query.c b/src/backend/distributed/test/deparse_shard_query.c index a9b4ced1da4..1af5945cfd0 100644 --- a/src/backend/distributed/test/deparse_shard_query.c +++ b/src/backend/distributed/test/deparse_shard_query.c @@ -49,14 +49,14 @@ deparse_shard_query_test(PG_FUNCTION_ARGS) List *parseTreeList = pg_parse_query(queryStringChar); Node *parsetree = NULL; - foreach_ptr(parsetree, parseTreeList) + foreach_declared_ptr(parsetree, parseTreeList) { List *queryTreeList = pg_analyze_and_rewrite_fixedparams((RawStmt *) parsetree, queryStringChar, NULL, 0, NULL); Query *query = NULL; - foreach_ptr(query, queryTreeList) + foreach_declared_ptr(query, queryTreeList) { StringInfo buffer = makeStringInfo(); diff --git a/src/backend/distributed/test/dependency.c b/src/backend/distributed/test/dependency.c index 7afbfdec732..25a7ae6e4f7 100644 --- a/src/backend/distributed/test/dependency.c +++ b/src/backend/distributed/test/dependency.c @@ -50,7 +50,7 @@ citus_get_all_dependencies_for_object(PG_FUNCTION_ARGS) List *dependencies = GetAllSupportedDependenciesForObject(&address); ObjectAddress *dependency = NULL; - foreach_ptr(dependency, dependencies) + foreach_declared_ptr(dependency, dependencies) { Datum values[3]; bool isNulls[3]; @@ -95,7 +95,7 @@ citus_get_dependencies_for_object(PG_FUNCTION_ARGS) List *dependencies = GetDependenciesForObject(&address); ObjectAddress *dependency = NULL; - foreach_ptr(dependency, dependencies) + foreach_declared_ptr(dependency, dependencies) { Datum values[3]; bool isNulls[3]; diff --git a/src/backend/distributed/test/distributed_intermediate_results.c b/src/backend/distributed/test/distributed_intermediate_results.c index 843bda476aa..adbcbff89dd 100644 --- a/src/backend/distributed/test/distributed_intermediate_results.c +++ b/src/backend/distributed/test/distributed_intermediate_results.c @@ -90,7 +90,7 @@ partition_task_list_results(PG_FUNCTION_ARGS) Tuplestorestate *tupleStore = SetupTuplestore(fcinfo, &tupleDescriptor); DistributedResultFragment *fragment = NULL; - foreach_ptr(fragment, fragmentList) + foreach_declared_ptr(fragment, fragmentList) { bool columnNulls[5] = { 0 }; Datum columnValues[5] = { @@ -169,7 +169,7 @@ redistribute_task_list_results(PG_FUNCTION_ARGS) const char *resultId = NULL; int resultIdIndex = 0; - foreach_ptr(resultId, sortedResultIds) + foreach_declared_ptr(resultId, sortedResultIds) { resultIdValues[resultIdIndex++] = CStringGetTextDatum(resultId); } diff --git a/src/backend/distributed/test/distribution_metadata.c b/src/backend/distributed/test/distribution_metadata.c index 01117922e36..e75d3110bcf 100644 --- a/src/backend/distributed/test/distribution_metadata.c +++ b/src/backend/distributed/test/distribution_metadata.c @@ -74,7 +74,7 @@ load_shard_id_array(PG_FUNCTION_ARGS) Datum *shardIdDatumArray = palloc0(shardIdCount * sizeof(Datum)); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardList) + foreach_declared_ptr(shardInterval, shardList) { Datum shardIdDatum = Int64GetDatum(shardInterval->shardId); @@ -144,7 +144,7 @@ load_shard_placement_array(PG_FUNCTION_ARGS) Datum *placementDatumArray = palloc0(placementCount * sizeof(Datum)); ShardPlacement *placement = NULL; - foreach_ptr(placement, placementList) + foreach_declared_ptr(placement, placementList) { appendStringInfo(placementInfo, "%s:%d", placement->nodeName, placement->nodePort); @@ -263,14 +263,14 @@ relation_count_in_query(PG_FUNCTION_ARGS) List *parseTreeList = pg_parse_query(queryStringChar); Node *parsetree = NULL; - foreach_ptr(parsetree, parseTreeList) + foreach_declared_ptr(parsetree, parseTreeList) { List *queryTreeList = pg_analyze_and_rewrite_fixedparams((RawStmt *) parsetree, queryStringChar, NULL, 0, NULL); Query *query = NULL; - foreach_ptr(query, queryTreeList) + foreach_declared_ptr(query, queryTreeList) { List *rangeTableList = NIL; diff --git a/src/backend/distributed/test/fake_am.c b/src/backend/distributed/test/fake_am.c index cff124961ac..92805194242 100644 --- a/src/backend/distributed/test/fake_am.c +++ b/src/backend/distributed/test/fake_am.c @@ -372,8 +372,13 @@ fake_vacuum(Relation onerel, VacuumParams *params, static bool -fake_scan_analyze_next_block(TableScanDesc scan, BlockNumber blockno, +fake_scan_analyze_next_block(TableScanDesc scan, +#if PG_VERSION_NUM >= PG_VERSION_17 + ReadStream *stream) +#else + BlockNumber blockno, BufferAccessStrategy bstrategy) +#endif { /* we don't support analyze, so return false */ return false; diff --git a/src/backend/distributed/test/fake_fdw.c b/src/backend/distributed/test/fake_fdw.c index 585e61d4108..90b205b1ea1 100644 --- a/src/backend/distributed/test/fake_fdw.c +++ b/src/backend/distributed/test/fake_fdw.c @@ -29,7 +29,7 @@ #include "optimizer/restrictinfo.h" #include "utils/palloc.h" -#include "pg_version_constants.h" +#include "pg_version_compat.h" /* local function forward declarations */ static void FakeGetForeignRelSize(PlannerInfo *root, RelOptInfo *baserel, @@ -91,9 +91,11 @@ FakeGetForeignPaths(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid) Cost startup_cost = 0; Cost total_cost = startup_cost + baserel->rows; - add_path(baserel, (Path *) create_foreignscan_path(root, baserel, NULL, baserel->rows, - startup_cost, total_cost, NIL, - NULL, NULL, NIL)); + add_path(baserel, (Path *) create_foreignscan_path_compat(root, baserel, NULL, + baserel->rows, + startup_cost, total_cost, + NIL, + NULL, NULL, NIL, NIL)); } diff --git a/src/backend/distributed/test/foreign_key_relationship_query.c b/src/backend/distributed/test/foreign_key_relationship_query.c index af187111a70..8f96f5e3a82 100644 --- a/src/backend/distributed/test/foreign_key_relationship_query.c +++ b/src/backend/distributed/test/foreign_key_relationship_query.c @@ -205,7 +205,7 @@ get_foreign_key_connected_relations(PG_FUNCTION_ARGS) Oid connectedRelationId; List *fkeyConnectedRelationIdList = GetForeignKeyConnectedRelationIdList(relationId); - foreach_oid(connectedRelationId, fkeyConnectedRelationIdList) + foreach_declared_oid(connectedRelationId, fkeyConnectedRelationIdList) { Datum values[GET_FKEY_CONNECTED_RELATIONS_COLUMNS]; bool nulls[GET_FKEY_CONNECTED_RELATIONS_COLUMNS]; diff --git a/src/backend/distributed/test/metadata_sync.c b/src/backend/distributed/test/metadata_sync.c index ce025cff9bd..449ae31e84f 100644 --- a/src/backend/distributed/test/metadata_sync.c +++ b/src/backend/distributed/test/metadata_sync.c @@ -80,7 +80,7 @@ activate_node_snapshot(PG_FUNCTION_ARGS) sizeof(Datum)); const char *activateNodeSnapshotCommand = NULL; - foreach_ptr(activateNodeSnapshotCommand, activateNodeCommandList) + foreach_declared_ptr(activateNodeSnapshotCommand, activateNodeCommandList) { Datum activateNodeSnapshotCommandDatum = CStringGetTextDatum( activateNodeSnapshotCommand); @@ -109,7 +109,7 @@ IsMetadataSynced(void) List *workerList = ActivePrimaryNonCoordinatorNodeList(NoLock); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerList) + foreach_declared_ptr(workerNode, workerList) { if (workerNode->hasMetadata && !workerNode->metadataSynced) { diff --git a/src/backend/distributed/test/partitioning_utils.c b/src/backend/distributed/test/partitioning_utils.c index be916356145..f1e186bada9 100644 --- a/src/backend/distributed/test/partitioning_utils.c +++ b/src/backend/distributed/test/partitioning_utils.c @@ -85,7 +85,7 @@ print_partitions(PG_FUNCTION_ARGS) partitionList = SortList(partitionList, CompareOids); Oid partitionOid = InvalidOid; - foreach_oid(partitionOid, partitionList) + foreach_declared_oid(partitionOid, partitionList) { /* at least one table is already added, add comma */ if (resultRelationNames->len > 0) diff --git a/src/backend/distributed/test/progress_utils.c b/src/backend/distributed/test/progress_utils.c index e1ea09e3d2f..7c335ce8ae6 100644 --- a/src/backend/distributed/test/progress_utils.c +++ b/src/backend/distributed/test/progress_utils.c @@ -95,7 +95,7 @@ show_progress(PG_FUNCTION_ARGS) Tuplestorestate *tupstore = SetupTuplestore(fcinfo, &tupdesc); ProgressMonitorData *monitor = NULL; - foreach_ptr(monitor, monitorList) + foreach_declared_ptr(monitor, monitorList) { uint64 *steps = ProgressMonitorSteps(monitor); diff --git a/src/backend/distributed/test/prune_shard_list.c b/src/backend/distributed/test/prune_shard_list.c index f972281ecc6..f5bb9c97995 100644 --- a/src/backend/distributed/test/prune_shard_list.c +++ b/src/backend/distributed/test/prune_shard_list.c @@ -224,7 +224,7 @@ PrunedShardIdsForTable(Oid distributedTableId, List *whereClauseList) Datum *shardIdDatumArray = palloc0(shardIdCount * sizeof(Datum)); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardList) + foreach_declared_ptr(shardInterval, shardList) { Datum shardIdDatum = Int64GetDatum(shardInterval->shardId); diff --git a/src/backend/distributed/test/shard_rebalancer.c b/src/backend/distributed/test/shard_rebalancer.c index 32bfd9f463c..1b79fc27af6 100644 --- a/src/backend/distributed/test/shard_rebalancer.c +++ b/src/backend/distributed/test/shard_rebalancer.c @@ -128,13 +128,13 @@ shard_placement_rebalance_array(PG_FUNCTION_ARGS) pfree(shardPlacementJsonArray); /* map workerTestInfoList to a list of its WorkerNodes */ - foreach_ptr(workerTestInfo, context.workerTestInfoList) + foreach_declared_ptr(workerTestInfo, context.workerTestInfoList) { workerNodeList = lappend(workerNodeList, workerTestInfo->node); } /* map shardPlacementTestInfoList to a list of list of its ShardPlacements */ - foreach_ptr(shardPlacementTestInfo, context.shardPlacementTestInfoList) + foreach_declared_ptr(shardPlacementTestInfo, context.shardPlacementTestInfoList) { if (shardPlacementTestInfo->nextColocationGroup) { @@ -197,7 +197,7 @@ ShardAllowedOnNode(uint64 shardId, WorkerNode *workerNode, void *voidContext) RebalancePlacementContext *context = voidContext; WorkerTestInfo *workerTestInfo = NULL; uint64 *disallowedShardIdPtr = NULL; - foreach_ptr(workerTestInfo, context->workerTestInfoList) + foreach_declared_ptr(workerTestInfo, context->workerTestInfoList) { if (workerTestInfo->node == workerNode) { @@ -206,7 +206,7 @@ ShardAllowedOnNode(uint64 shardId, WorkerNode *workerNode, void *voidContext) } Assert(workerTestInfo != NULL); - foreach_ptr(disallowedShardIdPtr, workerTestInfo->disallowedShardIds) + foreach_declared_ptr(disallowedShardIdPtr, workerTestInfo->disallowedShardIds) { if (shardId == *disallowedShardIdPtr) { @@ -226,7 +226,7 @@ NodeCapacity(WorkerNode *workerNode, void *voidContext) { RebalancePlacementContext *context = voidContext; WorkerTestInfo *workerTestInfo = NULL; - foreach_ptr(workerTestInfo, context->workerTestInfoList) + foreach_declared_ptr(workerTestInfo, context->workerTestInfoList) { if (workerTestInfo->node == workerNode) { @@ -251,7 +251,7 @@ GetShardCost(uint64 shardId, void *voidContext) shardCost.shardId = shardId; ShardPlacementTestInfo *shardPlacementTestInfo = NULL; - foreach_ptr(shardPlacementTestInfo, context->shardPlacementTestInfoList) + foreach_declared_ptr(shardPlacementTestInfo, context->shardPlacementTestInfoList) { if (shardPlacementTestInfo->placement->shardId == shardId) { @@ -300,12 +300,12 @@ shard_placement_replication_array(PG_FUNCTION_ARGS) pfree(workerNodeJsonArray); pfree(shardPlacementJsonArray); - foreach_ptr(workerTestInfo, workerTestInfoList) + foreach_declared_ptr(workerTestInfo, workerTestInfoList) { workerNodeList = lappend(workerNodeList, workerTestInfo->node); } - foreach_ptr(shardPlacementTestInfo, shardPlacementTestInfoList) + foreach_declared_ptr(shardPlacementTestInfo, shardPlacementTestInfoList) { shardPlacementList = lappend(shardPlacementList, shardPlacementTestInfo->placement); diff --git a/src/backend/distributed/transaction/backend_data.c b/src/backend/distributed/transaction/backend_data.c index 67acadd2940..e2afd18f74a 100644 --- a/src/backend/distributed/transaction/backend_data.c +++ b/src/backend/distributed/transaction/backend_data.c @@ -33,7 +33,7 @@ #include "storage/spin.h" #include "utils/timestamp.h" -#include "pg_version_constants.h" +#include "pg_version_compat.h" #include "distributed/backend_data.h" #include "distributed/connection_management.h" @@ -267,7 +267,7 @@ get_global_active_transactions(PG_FUNCTION_ARGS) /* open connections in parallel */ WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { const char *nodeName = workerNode->workerName; int nodePort = workerNode->workerPort; @@ -289,7 +289,7 @@ get_global_active_transactions(PG_FUNCTION_ARGS) /* send commands in parallel */ MultiConnection *connection = NULL; - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { int querySent = SendRemoteCommand(connection, queryToSend->data); if (querySent == 0) @@ -299,7 +299,7 @@ get_global_active_transactions(PG_FUNCTION_ARGS) } /* receive query results */ - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { bool raiseInterrupts = true; Datum values[ACTIVE_TRANSACTION_COLUMN_COUNT]; @@ -700,7 +700,7 @@ InitializeBackendData(const char *applicationName) uint64 gpid = ExtractGlobalPID(applicationName); - MyBackendData = &backendManagementShmemData->backends[MyProc->pgprocno]; + MyBackendData = &backendManagementShmemData->backends[getProcNo_compat(MyProc)]; Assert(MyBackendData); @@ -1174,11 +1174,11 @@ CurrentDistributedTransactionNumber(void) void GetBackendDataForProc(PGPROC *proc, BackendData *result) { - int pgprocno = proc->pgprocno; + int pgprocno = getProcNo_compat(proc); if (proc->lockGroupLeader != NULL) { - pgprocno = proc->lockGroupLeader->pgprocno; + pgprocno = getProcNo_compat(proc->lockGroupLeader); } BackendData *backendData = &backendManagementShmemData->backends[pgprocno]; @@ -1198,7 +1198,8 @@ GetBackendDataForProc(PGPROC *proc, BackendData *result) void CancelTransactionDueToDeadlock(PGPROC *proc) { - BackendData *backendData = &backendManagementShmemData->backends[proc->pgprocno]; + BackendData *backendData = &backendManagementShmemData->backends[getProcNo_compat( + proc)]; /* backend might not have used citus yet and thus not initialized backend data */ if (!backendData) @@ -1330,7 +1331,7 @@ ActiveDistributedTransactionNumbers(void) LocalTransactionId GetMyProcLocalTransactionId(void) { - return MyProc->lxid; + return getLxid_compat(MyProc); } diff --git a/src/backend/distributed/transaction/distributed_deadlock_detection.c b/src/backend/distributed/transaction/distributed_deadlock_detection.c index 5e8060a4f63..30b42302875 100644 --- a/src/backend/distributed/transaction/distributed_deadlock_detection.c +++ b/src/backend/distributed/transaction/distributed_deadlock_detection.c @@ -177,7 +177,7 @@ CheckForDistributedDeadlocks(void) * this node. */ TransactionNode *currentNode = NULL; - foreach_ptr(currentNode, deadlockPath) + foreach_declared_ptr(currentNode, deadlockPath) { bool transactionAssociatedWithProc = AssociateDistributedTransactionWithBackendProc(currentNode); @@ -305,7 +305,7 @@ PrependOutgoingNodesToQueue(TransactionNode *transactionNode, int currentStackDe /* prepend to the list to continue depth-first search */ TransactionNode *waitForTransaction = NULL; - foreach_ptr(waitForTransaction, transactionNode->waitsFor) + foreach_declared_ptr(waitForTransaction, transactionNode->waitsFor) { QueuedTransactionNode *queuedNode = palloc0(sizeof(QueuedTransactionNode)); @@ -672,7 +672,7 @@ WaitsForToString(List *waitsFor) StringInfo transactionIdStr = makeStringInfo(); TransactionNode *waitingNode = NULL; - foreach_ptr(waitingNode, waitsFor) + foreach_declared_ptr(waitingNode, waitsFor) { if (transactionIdStr->len != 0) { diff --git a/src/backend/distributed/transaction/lock_graph.c b/src/backend/distributed/transaction/lock_graph.c index 695df2bf4c2..11982ec5a30 100644 --- a/src/backend/distributed/transaction/lock_graph.c +++ b/src/backend/distributed/transaction/lock_graph.c @@ -23,6 +23,8 @@ #include "utils/hsearch.h" #include "utils/timestamp.h" +#include "pg_version_compat.h" + #include "distributed/backend_data.h" #include "distributed/connection_management.h" #include "distributed/hash_helpers.h" @@ -149,7 +151,7 @@ BuildGlobalWaitGraph(bool onlyDistributedTx) /* open connections in parallel */ WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { const char *nodeName = workerNode->workerName; int nodePort = workerNode->workerPort; @@ -172,7 +174,7 @@ BuildGlobalWaitGraph(bool onlyDistributedTx) /* send commands in parallel */ MultiConnection *connection = NULL; - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { StringInfo queryString = makeStringInfo(); @@ -203,7 +205,7 @@ BuildGlobalWaitGraph(bool onlyDistributedTx) } /* receive dump_local_wait_edges results */ - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { bool raiseInterrupts = true; @@ -993,7 +995,7 @@ AllocWaitEdge(WaitGraph *waitGraph) static void AddProcToVisit(PROCStack *remaining, PGPROC *proc) { - if (remaining->procAdded[proc->pgprocno]) + if (remaining->procAdded[getProcNo_compat(proc)]) { return; } @@ -1001,7 +1003,7 @@ AddProcToVisit(PROCStack *remaining, PGPROC *proc) Assert(remaining->procCount < TotalProcCount()); remaining->procs[remaining->procCount++] = proc; - remaining->procAdded[proc->pgprocno] = true; + remaining->procAdded[getProcNo_compat(proc)] = true; } diff --git a/src/backend/distributed/transaction/relation_access_tracking.c b/src/backend/distributed/transaction/relation_access_tracking.c index 5044941c471..0ffa68d9566 100644 --- a/src/backend/distributed/transaction/relation_access_tracking.c +++ b/src/backend/distributed/transaction/relation_access_tracking.c @@ -367,7 +367,7 @@ RecordRelationParallelSelectAccessForTask(Task *task) List *relationShardList = task->relationShardList; RelationShard *relationShard = NULL; - foreach_ptr(relationShard, relationShardList) + foreach_declared_ptr(relationShard, relationShardList) { Oid currentRelationId = relationShard->relationId; @@ -412,7 +412,7 @@ RecordRelationParallelModifyAccessForTask(Task *task) { relationShardList = task->relationShardList; RelationShard *relationShard = NULL; - foreach_ptr(relationShard, relationShardList) + foreach_declared_ptr(relationShard, relationShardList) { Oid currentRelationId = relationShard->relationId; @@ -446,7 +446,7 @@ RecordRelationParallelDDLAccessForTask(Task *task) Oid lastRelationId = InvalidOid; RelationShard *relationShard = NULL; - foreach_ptr(relationShard, relationShardList) + foreach_declared_ptr(relationShard, relationShardList) { Oid currentRelationId = relationShard->relationId; @@ -534,7 +534,7 @@ RecordParallelRelationAccess(Oid relationId, ShardPlacementAccessType placementA List *partitionList = PartitionList(relationId); Oid partitionOid = InvalidOid; - foreach_oid(partitionOid, partitionList) + foreach_declared_oid(partitionOid, partitionList) { /* recursively record all relation accesses of its partitions */ RecordParallelRelationAccess(partitionOid, placementAccess); @@ -926,7 +926,7 @@ HoldsConflictingLockWithReferencedRelations(Oid relationId, ShardPlacementAccess CitusTableCacheEntry *cacheEntry = GetCitusTableCacheEntry(relationId); Oid referencedRelation = InvalidOid; - foreach_oid(referencedRelation, cacheEntry->referencedRelationsViaForeignKey) + foreach_declared_oid(referencedRelation, cacheEntry->referencedRelationsViaForeignKey) { /* * We're only interested in foreign keys to reference tables and citus @@ -997,7 +997,8 @@ HoldsConflictingLockWithReferencingRelations(Oid relationId, ShardPlacementAcces Assert(!IsCitusTableTypeCacheEntry(cacheEntry, DISTRIBUTED_TABLE)); Oid referencingRelation = InvalidOid; - foreach_oid(referencingRelation, cacheEntry->referencingRelationsViaForeignKey) + foreach_declared_oid(referencingRelation, + cacheEntry->referencingRelationsViaForeignKey) { /* * We're only interested in foreign keys to reference tables from diff --git a/src/backend/distributed/transaction/remote_transaction.c b/src/backend/distributed/transaction/remote_transaction.c index 4c26e2478ca..9ef7595168d 100644 --- a/src/backend/distributed/transaction/remote_transaction.c +++ b/src/backend/distributed/transaction/remote_transaction.c @@ -266,7 +266,7 @@ StartRemoteTransactionBegin(struct MultiConnection *connection) transaction->lastQueuedSubXact = TopSubTransactionId; SubXactContext *subXactState = NULL; - foreach_ptr(subXactState, activeSubXacts) + foreach_declared_ptr(subXactState, activeSubXacts) { /* append SET LOCAL state from when SAVEPOINT was encountered... */ if (subXactState->setLocalCmds != NULL) @@ -477,13 +477,13 @@ RemoteTransactionListBegin(List *connectionList) MultiConnection *connection = NULL; /* send BEGIN to all nodes */ - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { StartRemoteTransactionBegin(connection); } /* wait for BEGIN to finish on all nodes */ - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { FinishRemoteTransactionBegin(connection); } @@ -890,7 +890,7 @@ RemoteTransactionsBeginIfNecessary(List *connectionList) } /* issue BEGIN to all connections needing it */ - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { RemoteTransaction *transaction = &connection->remoteTransaction; @@ -914,7 +914,7 @@ RemoteTransactionsBeginIfNecessary(List *connectionList) WaitForAllConnections(connectionList, raiseInterrupts); /* get result of all the BEGINs */ - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { RemoteTransaction *transaction = &connection->remoteTransaction; diff --git a/src/backend/distributed/transaction/transaction_management.c b/src/backend/distributed/transaction/transaction_management.c index 9c7b456807e..d126577729d 100644 --- a/src/backend/distributed/transaction/transaction_management.c +++ b/src/backend/distributed/transaction/transaction_management.c @@ -1150,7 +1150,7 @@ TrackPropagatedTableAndSequences(Oid relationId) /* track its sequences */ List *ownedSeqIdList = getOwnedSequences(relationId); Oid ownedSeqId = InvalidOid; - foreach_oid(ownedSeqId, ownedSeqIdList) + foreach_declared_oid(ownedSeqId, ownedSeqIdList) { ObjectAddress *seqAddress = palloc0(sizeof(ObjectAddress)); ObjectAddressSet(*seqAddress, RelationRelationId, ownedSeqId); @@ -1178,7 +1178,7 @@ bool HasAnyObjectInPropagatedObjects(List *objectList) { ObjectAddress *object = NULL; - foreach_ptr(object, objectList) + foreach_declared_ptr(object, objectList) { /* first search in root transaction */ if (DependencyInPropagatedObjectsHash(PropagatedObjectsInTx, object)) @@ -1192,7 +1192,7 @@ HasAnyObjectInPropagatedObjects(List *objectList) continue; } SubXactContext *state = NULL; - foreach_ptr(state, activeSubXactContexts) + foreach_declared_ptr(state, activeSubXactContexts) { if (DependencyInPropagatedObjectsHash(state->propagatedObjects, object)) { diff --git a/src/backend/distributed/transaction/transaction_recovery.c b/src/backend/distributed/transaction/transaction_recovery.c index c31dc85a2a9..0eede84caf6 100644 --- a/src/backend/distributed/transaction/transaction_recovery.c +++ b/src/backend/distributed/transaction/transaction_recovery.c @@ -128,7 +128,7 @@ RecoverTwoPhaseCommits(void) List *workerList = ActivePrimaryNodeList(NoLock); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerList) + foreach_declared_ptr(workerNode, workerList) { recoveredTransactionCount += RecoverWorkerTransactions(workerNode); } diff --git a/src/backend/distributed/transaction/worker_transaction.c b/src/backend/distributed/transaction/worker_transaction.c index c6fcee107d6..08781105380 100644 --- a/src/backend/distributed/transaction/worker_transaction.c +++ b/src/backend/distributed/transaction/worker_transaction.c @@ -74,7 +74,7 @@ SendCommandToWorkersAsUser(TargetWorkerSet targetWorkerSet, const char *nodeUser /* run commands serially */ WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { const char *nodeName = workerNode->workerName; int nodePort = workerNode->workerPort; @@ -147,7 +147,7 @@ void SendCommandListToWorkersWithMetadata(List *commands) { char *command = NULL; - foreach_ptr(command, commands) + foreach_declared_ptr(command, commands) { SendCommandToWorkersWithMetadata(command); } @@ -193,7 +193,7 @@ void SendCommandListToRemoteNodesWithMetadata(List *commands) { char *command = NULL; - foreach_ptr(command, commands) + foreach_declared_ptr(command, commands) { SendCommandToRemoteNodesWithMetadata(command); } @@ -253,7 +253,7 @@ TargetWorkerSetNodeList(TargetWorkerSet targetWorkerSet, LOCKMODE lockMode) List *result = NIL; WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { if ((targetWorkerSet == NON_COORDINATOR_METADATA_NODES || targetWorkerSet == REMOTE_METADATA_NODES || @@ -314,7 +314,7 @@ SendBareCommandListToMetadataNodesInternal(List *commandList, /* run commands serially */ WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { const char *nodeName = workerNode->workerName; int nodePort = workerNode->workerPort; @@ -327,7 +327,7 @@ SendBareCommandListToMetadataNodesInternal(List *commandList, /* iterate over the commands and execute them in the same connection */ const char *commandString = NULL; - foreach_ptr(commandString, commandList) + foreach_declared_ptr(commandString, commandList) { ExecuteCriticalRemoteCommand(workerConnection, commandString); } @@ -380,7 +380,7 @@ SendCommandToWorkersParamsInternal(TargetWorkerSet targetWorkerSet, const char * /* open connections in parallel */ WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { const char *nodeName = workerNode->workerName; int nodePort = workerNode->workerPort; @@ -408,7 +408,7 @@ SendCommandToWorkersParamsInternal(TargetWorkerSet targetWorkerSet, const char * /* send commands in parallel */ MultiConnection *connection = NULL; - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { int querySent = SendRemoteCommandParams(connection, command, parameterCount, parameterTypes, parameterValues, false); @@ -419,7 +419,7 @@ SendCommandToWorkersParamsInternal(TargetWorkerSet targetWorkerSet, const char * } /* get results */ - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { PGresult *result = GetRemoteCommandResult(connection, true); if (!IsResponseOK(result)) @@ -490,7 +490,7 @@ SendCommandListToWorkerOutsideTransactionWithConnection(MultiConnection *workerC /* iterate over the commands and execute them in the same connection */ const char *commandString = NULL; - foreach_ptr(commandString, commandList) + foreach_declared_ptr(commandString, commandList) { ExecuteCriticalRemoteCommand(workerConnection, commandString); } @@ -531,7 +531,7 @@ SendCommandListToWorkerListWithBareConnections(List *workerConnectionList, /* send commands in parallel */ MultiConnection *connection = NULL; - foreach_ptr(connection, workerConnectionList) + foreach_declared_ptr(connection, workerConnectionList) { int querySent = SendRemoteCommand(connection, stringToSend); if (querySent == 0) @@ -541,7 +541,7 @@ SendCommandListToWorkerListWithBareConnections(List *workerConnectionList, } bool failOnError = true; - foreach_ptr(connection, workerConnectionList) + foreach_declared_ptr(connection, workerConnectionList) { ClearResults(connection, failOnError); } @@ -571,7 +571,7 @@ SendMetadataCommandListToWorkerListInCoordinatedTransaction(List *workerNodeList List *connectionList = NIL; WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { const char *nodeName = workerNode->workerName; int nodePort = workerNode->workerPort; @@ -608,7 +608,7 @@ SendMetadataCommandListToWorkerListInCoordinatedTransaction(List *workerNodeList /* send commands in parallel */ bool failOnError = true; MultiConnection *connection = NULL; - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { int querySent = SendRemoteCommand(connection, stringToSend); if (querySent == 0) @@ -617,7 +617,7 @@ SendMetadataCommandListToWorkerListInCoordinatedTransaction(List *workerNodeList } } - foreach_ptr(connection, connectionList) + foreach_declared_ptr(connection, connectionList) { ClearResults(connection, failOnError); } @@ -646,7 +646,7 @@ SendOptionalCommandListToWorkerOutsideTransactionWithConnection( /* iterate over the commands and execute them in the same connection */ bool failed = false; const char *commandString = NULL; - foreach_ptr(commandString, commandList) + foreach_declared_ptr(commandString, commandList) { if (ExecuteOptionalRemoteCommand(workerConnection, commandString, NULL) != 0) { @@ -722,7 +722,7 @@ SendOptionalMetadataCommandListToWorkerInCoordinatedTransaction(const char *node /* iterate over the commands and execute them in the same connection */ const char *commandString = NULL; - foreach_ptr(commandString, commandList) + foreach_declared_ptr(commandString, commandList) { if (ExecuteOptionalRemoteCommand(workerConnection, commandString, NULL) != RESPONSE_OKAY) @@ -757,7 +757,7 @@ static void ErrorIfAnyMetadataNodeOutOfSync(List *metadataNodeList) { WorkerNode *metadataNode = NULL; - foreach_ptr(metadataNode, metadataNodeList) + foreach_declared_ptr(metadataNode, metadataNodeList) { Assert(metadataNode->hasMetadata); diff --git a/src/backend/distributed/utils/background_jobs.c b/src/backend/distributed/utils/background_jobs.c index a7a124c7487..73a635f21f7 100644 --- a/src/backend/distributed/utils/background_jobs.c +++ b/src/backend/distributed/utils/background_jobs.c @@ -158,7 +158,7 @@ citus_job_cancel(PG_FUNCTION_ARGS) /* send cancellation to any running backends */ int pid = 0; - foreach_int(pid, pids) + foreach_declared_int(pid, pids) { Datum pidDatum = Int32GetDatum(pid); Datum signalSuccessDatum = DirectFunctionCall1(pg_cancel_backend, pidDatum); @@ -891,7 +891,7 @@ IncrementParallelTaskCountForNodesInvolved(BackgroundTask *task) int node; /* first check whether we have reached the limit for any of the nodes */ - foreach_int(node, task->nodesInvolved) + foreach_declared_int(node, task->nodesInvolved) { bool found; ParallelTasksPerNodeEntry *hashEntry = hash_search( @@ -908,7 +908,7 @@ IncrementParallelTaskCountForNodesInvolved(BackgroundTask *task) } /* then, increment the parallel task count per each node */ - foreach_int(node, task->nodesInvolved) + foreach_declared_int(node, task->nodesInvolved) { ParallelTasksPerNodeEntry *hashEntry = hash_search( ParallelTasksPerNode, &(node), HASH_FIND, NULL); @@ -934,7 +934,7 @@ DecrementParallelTaskCountForNodesInvolved(BackgroundTask *task) if (task->nodesInvolved) { int node; - foreach_int(node, task->nodesInvolved) + foreach_declared_int(node, task->nodesInvolved) { ParallelTasksPerNodeEntry *hashEntry = hash_search(ParallelTasksPerNode, &(node), @@ -1278,7 +1278,7 @@ CitusBackgroundTaskQueueMonitorMain(Datum arg) /* iterate over all handle entries and monitor each task's output */ BackgroundExecutorHashEntry *handleEntry = NULL; - foreach_ptr(handleEntry, runningTaskEntries) + foreach_declared_ptr(handleEntry, runningTaskEntries) { /* create task execution context and assign it to queueMonitorExecutionContext */ TaskExecutionContext taskExecutionContext = { @@ -1916,7 +1916,7 @@ ExecuteSqlString(const char *sql) * analysis on the next one, since there may be interdependencies. */ RawStmt *parsetree = NULL; - foreach_ptr(parsetree, raw_parsetree_list) + foreach_declared_ptr(parsetree, raw_parsetree_list) { /* * We don't allow transaction-control commands like COMMIT and ABORT diff --git a/src/backend/distributed/utils/citus_copyfuncs.c b/src/backend/distributed/utils/citus_copyfuncs.c index e283a3034c2..4b4a334c832 100644 --- a/src/backend/distributed/utils/citus_copyfuncs.c +++ b/src/backend/distributed/utils/citus_copyfuncs.c @@ -78,7 +78,7 @@ CitusSetTag(Node *node, int tag) do { \ char *curString = NULL; \ List *newList = NIL; \ - foreach_ptr(curString, from->fldname) { \ + foreach_declared_ptr(curString, from->fldname) { \ char *newString = curString ? pstrdup(curString) : (char *) NULL; \ newList = lappend(newList, newString); \ } \ diff --git a/src/backend/distributed/utils/citus_depended_object.c b/src/backend/distributed/utils/citus_depended_object.c index 7588f85949c..3babf76f088 100644 --- a/src/backend/distributed/utils/citus_depended_object.c +++ b/src/backend/distributed/utils/citus_depended_object.c @@ -138,7 +138,7 @@ HideCitusDependentObjectsOnQueriesOfPgMetaTables(Node *node, void *context) int varno = 0; RangeTblEntry *rangeTableEntry = NULL; - foreach_ptr(rangeTableEntry, query->rtable) + foreach_declared_ptr(rangeTableEntry, query->rtable) { varno++; @@ -376,7 +376,7 @@ DistOpsValidityState(Node *node, const DistributeObjectOps *ops) bool isPostprocess = false; List *objectAddresses = ops->address(node, missingOk, isPostprocess); ObjectAddress *objectAddress = NULL; - foreach_ptr(objectAddress, objectAddresses) + foreach_declared_ptr(objectAddress, objectAddresses) { if (OidIsValid(objectAddress->objectId)) { @@ -478,7 +478,7 @@ AnyObjectViolatesOwnership(DropStmt *dropStmt) PG_TRY(); { Node *object = NULL; - foreach_ptr(object, dropStmt->objects) + foreach_declared_ptr(object, dropStmt->objects) { Relation rel = NULL; objectAddress = get_object_address(objectType, object, diff --git a/src/backend/distributed/utils/colocation_utils.c b/src/backend/distributed/utils/colocation_utils.c index c189195271d..e2af11a1de5 100644 --- a/src/backend/distributed/utils/colocation_utils.c +++ b/src/backend/distributed/utils/colocation_utils.c @@ -204,7 +204,7 @@ get_colocated_shard_array(PG_FUNCTION_ARGS) int colocatedShardIndex = 0; ShardInterval *colocatedShardInterval = NULL; - foreach_ptr(colocatedShardInterval, colocatedShardList) + foreach_declared_ptr(colocatedShardInterval, colocatedShardList) { uint64 colocatedShardId = colocatedShardInterval->shardId; @@ -1063,7 +1063,7 @@ ColocatedShardIntervalList(ShardInterval *shardInterval) Assert(shardIntervalIndex >= 0); Oid colocatedTableId = InvalidOid; - foreach_oid(colocatedTableId, colocatedTableList) + foreach_declared_oid(colocatedTableId, colocatedTableList) { CitusTableCacheEntry *colocatedTableCacheEntry = GetCitusTableCacheEntry(colocatedTableId); @@ -1129,7 +1129,7 @@ ColocatedNonPartitionShardIntervalList(ShardInterval *shardInterval) Assert(shardIntervalIndex >= 0); Oid colocatedTableId = InvalidOid; - foreach_oid(colocatedTableId, colocatedTableList) + foreach_declared_oid(colocatedTableId, colocatedTableList) { if (PartitionTable(colocatedTableId)) { diff --git a/src/backend/distributed/utils/distribution_column_map.c b/src/backend/distributed/utils/distribution_column_map.c index 43f9939b1d2..380a5f98f30 100644 --- a/src/backend/distributed/utils/distribution_column_map.c +++ b/src/backend/distributed/utils/distribution_column_map.c @@ -81,7 +81,7 @@ AddDistributionColumnForRelation(DistributionColumnMap *distributionColumnMap, List *partitionList = PartitionList(relationId); Oid partitionRelationId = InvalidOid; - foreach_oid(partitionRelationId, partitionList) + foreach_declared_oid(partitionRelationId, partitionList) { AddDistributionColumnForRelation(distributionColumnMap, partitionRelationId, distributionColumnName); diff --git a/src/backend/distributed/utils/foreign_key_relationship.c b/src/backend/distributed/utils/foreign_key_relationship.c index 1abb7ae0717..0025becb448 100644 --- a/src/backend/distributed/utils/foreign_key_relationship.c +++ b/src/backend/distributed/utils/foreign_key_relationship.c @@ -190,7 +190,7 @@ GetRelationshipNodesForFKeyConnectedRelations( { List *allNeighboursList = GetAllNeighboursList(currentNode); ForeignConstraintRelationshipNode *neighbourNode = NULL; - foreach_ptr(neighbourNode, allNeighboursList) + foreach_declared_ptr(neighbourNode, allNeighboursList) { Oid neighbourRelationId = neighbourNode->relationId; if (OidVisited(oidVisitedMap, neighbourRelationId)) @@ -437,7 +437,7 @@ GetConnectedListHelper(ForeignConstraintRelationshipNode *node, bool isReferenci List *neighbourList = GetNeighbourList(currentNode, isReferencing); ForeignConstraintRelationshipNode *neighbourNode = NULL; - foreach_ptr(neighbourNode, neighbourList) + foreach_declared_ptr(neighbourNode, neighbourList) { Oid neighbourRelationId = neighbourNode->relationId; if (!OidVisited(oidVisitedMap, neighbourRelationId)) @@ -508,7 +508,7 @@ GetRelationIdsFromRelationshipNodeList(List *fKeyRelationshipNodeList) List *relationIdList = NIL; ForeignConstraintRelationshipNode *fKeyRelationshipNode = NULL; - foreach_ptr(fKeyRelationshipNode, fKeyRelationshipNodeList) + foreach_declared_ptr(fKeyRelationshipNode, fKeyRelationshipNodeList) { Oid relationId = fKeyRelationshipNode->relationId; relationIdList = lappend_oid(relationIdList, relationId); @@ -561,7 +561,7 @@ PopulateAdjacencyLists(void) frelEdgeList = SortList(frelEdgeList, CompareForeignConstraintRelationshipEdges); ForeignConstraintRelationshipEdge *currentFConstraintRelationshipEdge = NULL; - foreach_ptr(currentFConstraintRelationshipEdge, frelEdgeList) + foreach_declared_ptr(currentFConstraintRelationshipEdge, frelEdgeList) { /* we just saw this edge, no need to add it twice */ if (currentFConstraintRelationshipEdge->referencingRelationOID == diff --git a/src/backend/distributed/utils/listutils.c b/src/backend/distributed/utils/listutils.c index eddef1fea09..6f3c73e55cf 100644 --- a/src/backend/distributed/utils/listutils.c +++ b/src/backend/distributed/utils/listutils.c @@ -43,7 +43,7 @@ SortList(List *pointerList, int (*comparisonFunction)(const void *, const void * void **array = (void **) palloc0(arraySize * sizeof(void *)); void *pointer = NULL; - foreach_ptr(pointer, pointerList) + foreach_declared_ptr(pointer, pointerList) { array[arrayIndex] = pointer; @@ -82,7 +82,7 @@ PointerArrayFromList(List *pointerList) int pointerIndex = 0; void *pointer = NULL; - foreach_ptr(pointer, pointerList) + foreach_declared_ptr(pointer, pointerList) { pointerArray[pointerIndex] = pointer; pointerIndex += 1; @@ -130,7 +130,7 @@ ListToHashSet(List *itemList, Size keySize, bool isStringList) HTAB *itemSet = hash_create("ListToHashSet", capacity, &info, flags); void *item = NULL; - foreach_ptr(item, itemList) + foreach_declared_ptr(item, itemList) { bool foundInSet = false; @@ -188,7 +188,7 @@ StringJoinParams(List *stringList, char delimiter, char *prefix, char *postfix) const char *command = NULL; int curIndex = 0; - foreach_ptr(command, stringList) + foreach_declared_ptr(command, stringList) { if (curIndex > 0) { @@ -219,7 +219,7 @@ ListTake(List *pointerList, int size) int listIndex = 0; void *pointer = NULL; - foreach_ptr(pointer, pointerList) + foreach_declared_ptr(pointer, pointerList) { result = lappend(result, pointer); listIndex++; @@ -279,7 +279,7 @@ list_filter_oid(List *list, bool (*keepElement)(Oid element)) { List *result = NIL; Oid element = InvalidOid; - foreach_oid(element, list) + foreach_declared_oid(element, list) { if (keepElement(element)) { diff --git a/src/backend/distributed/utils/multi_partitioning_utils.c b/src/backend/distributed/utils/multi_partitioning_utils.c index ede2008cabc..063465beb7c 100644 --- a/src/backend/distributed/utils/multi_partitioning_utils.c +++ b/src/backend/distributed/utils/multi_partitioning_utils.c @@ -259,7 +259,7 @@ worker_fix_partition_shard_index_names(PG_FUNCTION_ARGS) List *partitionShardIndexIds = find_inheritance_children(parentShardIndexId, ShareRowExclusiveLock); Oid partitionShardIndexId = InvalidOid; - foreach_oid(partitionShardIndexId, partitionShardIndexIds) + foreach_declared_oid(partitionShardIndexId, partitionShardIndexIds) { if (IndexGetRelation(partitionShardIndexId, false) == partitionShardId) { @@ -372,7 +372,7 @@ CreateFixPartitionConstraintsTaskList(Oid relationId) LockShardListMetadata(shardIntervalList, ShareLock); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { uint64 shardId = shardInterval->shardId; @@ -458,7 +458,7 @@ WorkerFixPartitionConstraintCommandList(Oid relationId, uint64 shardId, char *quotedShardName = quote_qualified_identifier(schemaName, shardRelationName); char *constraintName = NULL; - foreach_ptr(constraintName, checkConstraintList) + foreach_declared_ptr(constraintName, checkConstraintList) { StringInfo shardQueryString = makeStringInfo(); appendStringInfo(shardQueryString, @@ -543,7 +543,7 @@ CreateFixPartitionShardIndexNames(Oid parentRelationId, Oid partitionRelationId, else { Oid partitionId = InvalidOid; - foreach_oid(partitionId, partitionList) + foreach_declared_oid(partitionId, partitionList) { List *partitionShardIntervalList = LoadShardIntervalList(partitionId); LockShardListMetadata(partitionShardIntervalList, ShareLock); @@ -563,7 +563,7 @@ CreateFixPartitionShardIndexNames(Oid parentRelationId, Oid partitionRelationId, int taskId = 1; ShardInterval *parentShardInterval = NULL; - foreach_ptr(parentShardInterval, parentShardIntervalList) + foreach_declared_ptr(parentShardInterval, parentShardIntervalList) { uint64 parentShardId = parentShardInterval->shardId; @@ -615,7 +615,7 @@ WorkerFixPartitionShardIndexNamesCommandList(uint64 parentShardId, { List *commandList = NIL; Oid parentIndexId = InvalidOid; - foreach_oid(parentIndexId, parentIndexIdList) + foreach_declared_oid(parentIndexId, parentIndexIdList) { if (!has_subclass(parentIndexId)) { @@ -666,7 +666,7 @@ WorkerFixPartitionShardIndexNamesCommandListForParentShardIndex( bool addAllPartitions = (partitionRelationId == InvalidOid); Oid partitionIndexId = InvalidOid; - foreach_oid(partitionIndexId, partitionIndexIds) + foreach_declared_oid(partitionIndexId, partitionIndexIds) { Oid partitionId = IndexGetRelation(partitionIndexId, false); if (addAllPartitions || partitionId == partitionRelationId) @@ -701,7 +701,7 @@ WorkerFixPartitionShardIndexNamesCommandListForPartitionIndex(Oid partitionIndex List *partitionShardIntervalList = LoadShardIntervalList(partitionId); ShardInterval *partitionShardInterval = NULL; - foreach_ptr(partitionShardInterval, partitionShardIntervalList) + foreach_declared_ptr(partitionShardInterval, partitionShardIntervalList) { /* * Prepare commands for each shard of current partition @@ -1044,7 +1044,7 @@ PartitionWithLongestNameRelationId(Oid parentRelationId) List *partitionList = PartitionList(parentRelationId); Oid partitionRelationId = InvalidOid; - foreach_oid(partitionRelationId, partitionList) + foreach_declared_oid(partitionRelationId, partitionList) { char *partitionName = get_rel_name(partitionRelationId); int partitionNameLength = strnlen(partitionName, NAMEDATALEN); @@ -1130,7 +1130,7 @@ GenerateDetachPartitionCommandRelationIdList(List *relationIds) { List *detachPartitionCommands = NIL; Oid relationId = InvalidOid; - foreach_oid(relationId, relationIds) + foreach_declared_oid(relationId, relationIds) { Assert(PartitionTable(relationId)); char *detachCommand = GenerateDetachPartitionCommand(relationId); @@ -1246,7 +1246,7 @@ GenerateAttachPartitionCommandRelationIdList(List *relationIds) { List *attachPartitionCommands = NIL; Oid relationId = InvalidOid; - foreach_oid(relationId, relationIds) + foreach_declared_oid(relationId, relationIds) { char *attachCommand = GenerateAlterTableAttachPartitionCommand(relationId); attachPartitionCommands = lappend(attachPartitionCommands, attachCommand); @@ -1318,7 +1318,7 @@ ListShardsUnderParentRelation(Oid relationId) List *partitionList = PartitionList(relationId); Oid partitionRelationId = InvalidOid; - foreach_oid(partitionRelationId, partitionList) + foreach_declared_oid(partitionRelationId, partitionList) { List *childShardList = ListShardsUnderParentRelation(partitionRelationId); shardList = list_concat(shardList, childShardList); diff --git a/src/backend/distributed/utils/reference_table_utils.c b/src/backend/distributed/utils/reference_table_utils.c index b1710c1d6d2..8f0d89fc91f 100644 --- a/src/backend/distributed/utils/reference_table_utils.c +++ b/src/backend/distributed/utils/reference_table_utils.c @@ -228,7 +228,7 @@ EnsureReferenceTablesExistOnAllNodesExtended(char transferMode) } WorkerNode *newWorkerNode = NULL; - foreach_ptr(newWorkerNode, newWorkersList) + foreach_declared_ptr(newWorkerNode, newWorkersList) { ereport(NOTICE, (errmsg("replicating reference table '%s' to %s:%d ...", referenceTableName, newWorkerNode->workerName, @@ -360,7 +360,7 @@ AnyRelationsModifiedInTransaction(List *relationIdList) { Oid relationId = InvalidOid; - foreach_oid(relationId, relationIdList) + foreach_declared_oid(relationId, relationIdList) { if (GetRelationDDLAccessMode(relationId) != RELATION_NOT_ACCESSED || GetRelationDMLAccessMode(relationId) != RELATION_NOT_ACCESSED) @@ -389,7 +389,7 @@ WorkersWithoutReferenceTablePlacement(uint64 shardId, LOCKMODE lockMode) workerNodeList = SortList(workerNodeList, CompareWorkerNodes); WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { char *nodeName = workerNode->workerName; uint32 nodePort = workerNode->workerPort; @@ -538,7 +538,7 @@ ReplicatedPlacementsForNodeGroup(int32 groupId) List *replicatedPlacementsForNodeGroup = NIL; Oid replicatedTableId = InvalidOid; - foreach_oid(replicatedTableId, replicatedTableList) + foreach_declared_oid(replicatedTableId, replicatedTableList) { List *placements = GroupShardPlacementsForTableOnGroup(replicatedTableId, groupId); @@ -591,7 +591,7 @@ DeleteAllReplicatedTablePlacementsFromNodeGroup(int32 groupId, bool localOnly) } GroupShardPlacement *placement = NULL; - foreach_ptr(placement, replicatedPlacementListForGroup) + foreach_declared_ptr(placement, replicatedPlacementListForGroup) { LockShardDistributionMetadata(placement->shardId, ExclusiveLock); @@ -627,7 +627,7 @@ DeleteAllReplicatedTablePlacementsFromNodeGroupViaMetadataContext( MemoryContext oldContext = MemoryContextSwitchTo(context->context); GroupShardPlacement *placement = NULL; - foreach_ptr(placement, replicatedPlacementListForGroup) + foreach_declared_ptr(placement, replicatedPlacementListForGroup) { LockShardDistributionMetadata(placement->shardId, ExclusiveLock); @@ -663,7 +663,7 @@ ReplicatedMetadataSyncedDistributedTableList(void) List *replicatedHashDistributedTableList = NIL; Oid relationId = InvalidOid; - foreach_oid(relationId, distributedRelationList) + foreach_declared_oid(relationId, distributedRelationList) { if (ShouldSyncTableMetadata(relationId) && !SingleReplicatedTable(relationId)) { @@ -707,7 +707,7 @@ ErrorIfNotAllNodesHaveReferenceTableReplicas(List *workerNodeList) { WorkerNode *workerNode = NULL; - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { if (!NodeHasAllReferenceTableReplicas(workerNode)) { @@ -763,7 +763,7 @@ NodeHasAllReferenceTableReplicas(WorkerNode *workerNode) List *shardPlacementList = ActiveShardPlacementList(shardInterval->shardId); ShardPlacement *placement = NULL; - foreach_ptr(placement, shardPlacementList) + foreach_declared_ptr(placement, shardPlacementList) { if (placement->groupId == workerNode->groupId) { diff --git a/src/backend/distributed/utils/resource_lock.c b/src/backend/distributed/utils/resource_lock.c index 8ac269e4314..3f50b682ec5 100644 --- a/src/backend/distributed/utils/resource_lock.c +++ b/src/backend/distributed/utils/resource_lock.c @@ -299,7 +299,7 @@ LockShardListResourcesOnFirstWorker(LOCKMODE lockmode, List *shardIntervalList) appendStringInfo(lockCommand, "SELECT lock_shard_resources(%d, ARRAY[", lockmode); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { int64 shardId = shardInterval->shardId; @@ -388,7 +388,7 @@ LockShardListMetadataOnWorkers(LOCKMODE lockmode, List *shardIntervalList) appendStringInfo(lockCommand, "SELECT lock_shard_metadata(%d, ARRAY[", lockmode); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { int64 shardId = shardInterval->shardId; @@ -529,7 +529,7 @@ LockReferencedReferenceShardDistributionMetadata(uint64 shardId, LOCKMODE lockMo } ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { LockShardDistributionMetadata(shardInterval->shardId, lockMode); } @@ -573,7 +573,7 @@ LockReferencedReferenceShardResources(uint64 shardId, LOCKMODE lockMode) } ShardInterval *referencedShardInterval = NULL; - foreach_ptr(referencedShardInterval, referencedShardIntervalList) + foreach_declared_ptr(referencedShardInterval, referencedShardIntervalList) { LockShardResource(referencedShardInterval->shardId, lockMode); } @@ -590,7 +590,7 @@ GetSortedReferenceShardIntervals(List *relationList) List *shardIntervalList = NIL; Oid relationId = InvalidOid; - foreach_oid(relationId, relationList) + foreach_declared_oid(relationId, relationList) { if (!IsCitusTableType(relationId, REFERENCE_TABLE)) { @@ -652,7 +652,7 @@ LockShardListMetadata(List *shardIntervalList, LOCKMODE lockMode) shardIntervalList = SortList(shardIntervalList, CompareShardIntervalsById); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { int64 shardId = shardInterval->shardId; @@ -673,7 +673,7 @@ LockShardsInPlacementListMetadata(List *shardPlacementList, LOCKMODE lockMode) SortList(shardPlacementList, CompareShardPlacementsByShardId); GroupShardPlacement *placement = NULL; - foreach_ptr(placement, shardPlacementList) + foreach_declared_ptr(placement, shardPlacementList) { int64 shardId = placement->shardId; @@ -760,7 +760,7 @@ AnyTableReplicated(List *shardIntervalList, List **replicatedShardIntervalList) List *localList = NIL; ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { int64 shardId = shardInterval->shardId; @@ -797,7 +797,7 @@ LockShardListResources(List *shardIntervalList, LOCKMODE lockMode) shardIntervalList = SortList(shardIntervalList, CompareShardIntervalsById); ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { int64 shardId = shardInterval->shardId; @@ -820,7 +820,7 @@ LockRelationShardResources(List *relationShardList, LOCKMODE lockMode) List *shardIntervalList = NIL; RelationShard *relationShard = NULL; - foreach_ptr(relationShard, relationShardList) + foreach_declared_ptr(relationShard, relationShardList) { uint64 shardId = relationShard->shardId; @@ -846,7 +846,7 @@ LockParentShardResourceIfPartition(List *shardIntervalList, LOCKMODE lockMode) List *parentShardIntervalList = NIL; ShardInterval *shardInterval = NULL; - foreach_ptr(shardInterval, shardIntervalList) + foreach_declared_ptr(shardInterval, shardIntervalList) { Oid relationId = shardInterval->relationId; @@ -1092,7 +1092,7 @@ static bool LockRelationRecordListMember(List *lockRelationRecordList, Oid relationId) { LockRelationRecord *record = NULL; - foreach_ptr(record, lockRelationRecordList) + foreach_declared_ptr(record, lockRelationRecordList) { if (record->relationId == relationId) { @@ -1131,7 +1131,7 @@ ConcatLockRelationRecordList(List *lockRelationRecordList, List *relationOidList List *constructedList = NIL; Oid relationId = InvalidOid; - foreach_oid(relationId, relationOidList) + foreach_declared_oid(relationId, relationOidList) { if (!LockRelationRecordListMember(lockRelationRecordList, relationId)) { @@ -1178,7 +1178,7 @@ AcquireDistributedLockOnRelations_Internal(List *lockRelationRecordList, int lockedRelations = 0; LockRelationRecord *lockRelationRecord; - foreach_ptr(lockRelationRecord, lockRelationRecordList) + foreach_declared_ptr(lockRelationRecord, lockRelationRecordList) { Oid relationId = lockRelationRecord->relationId; bool lockDescendants = lockRelationRecord->inh; @@ -1251,7 +1251,7 @@ AcquireDistributedLockOnRelations_Internal(List *lockRelationRecordList, WorkerNode *workerNode = NULL; const char *currentUser = CurrentUserName(); - foreach_ptr(workerNode, workerNodeList) + foreach_declared_ptr(workerNode, workerNodeList) { /* if local node is one of the targets, acquire the lock locally */ if (workerNode->groupId == localGroupId) @@ -1294,7 +1294,7 @@ AcquireDistributedLockOnRelations(List *relationList, LOCKMODE lockMode, uint32 bool nowait = (configs & DIST_LOCK_NOWAIT) > 0; RangeVar *rangeVar = NULL; - foreach_ptr(rangeVar, relationList) + foreach_declared_ptr(rangeVar, relationList) { Oid relationId = RangeVarGetRelid(rangeVar, NoLock, false); diff --git a/src/backend/distributed/utils/shardinterval_utils.c b/src/backend/distributed/utils/shardinterval_utils.c index 124bfbdf1c6..05df7d8161d 100644 --- a/src/backend/distributed/utils/shardinterval_utils.c +++ b/src/backend/distributed/utils/shardinterval_utils.c @@ -471,7 +471,7 @@ SingleReplicatedTable(Oid relationId) } uint64 *shardIdPointer = NULL; - foreach_ptr(shardIdPointer, shardList) + foreach_declared_ptr(shardIdPointer, shardList) { uint64 shardId = *shardIdPointer; shardPlacementList = ShardPlacementList(shardId); diff --git a/src/backend/distributed/utils/statistics_collection.c b/src/backend/distributed/utils/statistics_collection.c index 1cadea968c3..649c9dc826d 100644 --- a/src/backend/distributed/utils/statistics_collection.c +++ b/src/backend/distributed/utils/statistics_collection.c @@ -184,7 +184,7 @@ DistributedTablesSize(List *distTableOids) uint64 totalSize = 0; Oid relationId = InvalidOid; - foreach_oid(relationId, distTableOids) + foreach_declared_oid(relationId, distTableOids) { /* * Relations can get dropped after getting the Oid list and before we diff --git a/src/backend/distributed/worker/worker_create_or_replace.c b/src/backend/distributed/worker/worker_create_or_replace.c index 2fab84ac6b6..451649969df 100644 --- a/src/backend/distributed/worker/worker_create_or_replace.c +++ b/src/backend/distributed/worker/worker_create_or_replace.c @@ -85,7 +85,7 @@ WrapCreateOrReplaceList(List *sqls) appendStringInfoString(&textArrayLitteral, "ARRAY["); const char *sql = NULL; bool first = true; - foreach_ptr(sql, sqls) + foreach_declared_ptr(sql, sqls) { if (!first) { @@ -251,7 +251,7 @@ WorkerCreateOrReplaceObject(List *sqlStatements) /* apply all statement locally */ char *sqlStatement = NULL; - foreach_ptr(sqlStatement, sqlStatements) + foreach_declared_ptr(sqlStatement, sqlStatements) { parseTree = ParseTreeNode(sqlStatement); ProcessUtilityParseTree(parseTree, sqlStatement, PROCESS_UTILITY_QUERY, NULL, diff --git a/src/backend/distributed/worker/worker_data_fetch_protocol.c b/src/backend/distributed/worker/worker_data_fetch_protocol.c index f51d9c80c31..0370001eec2 100644 --- a/src/backend/distributed/worker/worker_data_fetch_protocol.c +++ b/src/backend/distributed/worker/worker_data_fetch_protocol.c @@ -170,7 +170,8 @@ worker_adjust_identity_column_seq_ranges(PG_FUNCTION_ARGS) if (attributeForm->attidentity) { - Oid sequenceOid = getIdentitySequence(tableRelationId, + Oid sequenceOid = getIdentitySequence(identitySequenceRelation_compat( + tableRelation), attributeForm->attnum, missingSequenceOk); @@ -377,7 +378,7 @@ check_log_statement(List *statementList) /* else we have to inspect the statement(s) to see whether to log */ Node *statement = NULL; - foreach_ptr(statement, statementList) + foreach_declared_ptr(statement, statementList) { if (GetCommandLogLevel(statement) <= log_statement) { @@ -480,7 +481,7 @@ void SetDefElemArg(AlterSeqStmt *statement, const char *name, Node *arg) { DefElem *defElem = NULL; - foreach_ptr(defElem, statement->options) + foreach_declared_ptr(defElem, statement->options) { if (strcmp(defElem->defname, name) == 0) { diff --git a/src/backend/distributed/worker/worker_drop_protocol.c b/src/backend/distributed/worker/worker_drop_protocol.c index 280de4493bd..c4c2fe5b574 100644 --- a/src/backend/distributed/worker/worker_drop_protocol.c +++ b/src/backend/distributed/worker/worker_drop_protocol.c @@ -93,7 +93,7 @@ worker_drop_distributed_table(PG_FUNCTION_ARGS) */ List *partitionList = PartitionList(relationId); Oid partitionOid = InvalidOid; - foreach_oid(partitionOid, partitionList) + foreach_declared_oid(partitionOid, partitionList) { WorkerDropDistributedTable(partitionOid); } @@ -128,7 +128,7 @@ WorkerDropDistributedTable(Oid relationId) List *ownedSequences = getOwnedSequences(relationId); Oid ownedSequenceOid = InvalidOid; - foreach_oid(ownedSequenceOid, ownedSequences) + foreach_declared_oid(ownedSequenceOid, ownedSequences) { ObjectAddress ownedSequenceAddress = { 0 }; ObjectAddressSet(ownedSequenceAddress, RelationRelationId, ownedSequenceOid); @@ -144,13 +144,13 @@ WorkerDropDistributedTable(Oid relationId) */ List *shardList = LoadShardList(relationId); uint64 *shardIdPointer = NULL; - foreach_ptr(shardIdPointer, shardList) + foreach_declared_ptr(shardIdPointer, shardList) { uint64 shardId = *shardIdPointer; List *shardPlacementList = ShardPlacementList(shardId); ShardPlacement *placement = NULL; - foreach_ptr(placement, shardPlacementList) + foreach_declared_ptr(placement, shardPlacementList) { /* delete the row from pg_dist_placement */ DeleteShardPlacementRow(placement->placementId); @@ -236,7 +236,7 @@ worker_drop_shell_table(PG_FUNCTION_ARGS) List *ownedSequences = getOwnedSequences(relationId); Oid ownedSequenceOid = InvalidOid; - foreach_oid(ownedSequenceOid, ownedSequences) + foreach_declared_oid(ownedSequenceOid, ownedSequences) { ObjectAddress ownedSequenceAddress = { 0 }; ObjectAddressSet(ownedSequenceAddress, RelationRelationId, ownedSequenceOid); @@ -284,7 +284,7 @@ worker_drop_sequence_dependency(PG_FUNCTION_ARGS) List *ownedSequences = getOwnedSequences(relationId); Oid ownedSequenceOid = InvalidOid; - foreach_oid(ownedSequenceOid, ownedSequences) + foreach_declared_oid(ownedSequenceOid, ownedSequences) { /* the caller doesn't want to drop the sequence, so break the dependency */ deleteDependencyRecordsForSpecific(RelationRelationId, ownedSequenceOid, diff --git a/src/backend/distributed/worker/worker_shard_visibility.c b/src/backend/distributed/worker/worker_shard_visibility.c index 3725800c30b..f783d514d2d 100644 --- a/src/backend/distributed/worker/worker_shard_visibility.c +++ b/src/backend/distributed/worker/worker_shard_visibility.c @@ -382,7 +382,7 @@ ShouldHideShardsInternal(void) } char *appNamePrefix = NULL; - foreach_ptr(appNamePrefix, prefixList) + foreach_declared_ptr(appNamePrefix, prefixList) { /* never hide shards when one of the prefixes is * */ if (strcmp(appNamePrefix, "*") == 0) @@ -446,7 +446,7 @@ FilterShardsFromPgclass(Node *node, void *context) int varno = 0; RangeTblEntry *rangeTableEntry = NULL; - foreach_ptr(rangeTableEntry, query->rtable) + foreach_declared_ptr(rangeTableEntry, query->rtable) { varno++; diff --git a/src/include/distributed/listutils.h b/src/include/distributed/listutils.h index 2a52cbc7527..db9ea7ce712 100644 --- a/src/include/distributed/listutils.h +++ b/src/include/distributed/listutils.h @@ -36,7 +36,7 @@ typedef struct ListCellAndListWrapper } ListCellAndListWrapper; /* - * foreach_ptr - + * foreach_declared_ptr - * a convenience macro which loops through a pointer list without needing a * ListCell, just a declared pointer variable to store the pointer of the * cell in. @@ -50,7 +50,7 @@ typedef struct ListCellAndListWrapper * - || true is used to always enter the loop when cell is not null even if * var is NULL. */ -#define foreach_ptr(var, l) \ +#define foreach_declared_ptr(var, l) \ for (ListCell *(var ## CellDoNotUse) = list_head(l); \ (var ## CellDoNotUse) != NULL && \ (((var) = lfirst(var ## CellDoNotUse)) || true); \ @@ -58,12 +58,12 @@ typedef struct ListCellAndListWrapper /* - * foreach_int - + * foreach_declared_int - * a convenience macro which loops through an int list without needing a * ListCell, just a declared int variable to store the int of the cell in. - * For explanation of how it works see foreach_ptr. + * For explanation of how it works see foreach_declared_ptr. */ -#define foreach_int(var, l) \ +#define foreach_declared_int(var, l) \ for (ListCell *(var ## CellDoNotUse) = list_head(l); \ (var ## CellDoNotUse) != NULL && \ (((var) = lfirst_int(var ## CellDoNotUse)) || true); \ @@ -71,12 +71,12 @@ typedef struct ListCellAndListWrapper /* - * foreach_oid - + * foreach_declared_oid - * a convenience macro which loops through an oid list without needing a * ListCell, just a declared Oid variable to store the oid of the cell in. - * For explanation of how it works see foreach_ptr. + * For explanation of how it works see foreach_declared_ptr. */ -#define foreach_oid(var, l) \ +#define foreach_declared_oid(var, l) \ for (ListCell *(var ## CellDoNotUse) = list_head(l); \ (var ## CellDoNotUse) != NULL && \ (((var) = lfirst_oid(var ## CellDoNotUse)) || true); \ diff --git a/src/include/distributed/resource_lock.h b/src/include/distributed/resource_lock.h index 576d2bf1516..3b1e9a459e7 100644 --- a/src/include/distributed/resource_lock.h +++ b/src/include/distributed/resource_lock.h @@ -169,7 +169,7 @@ IsNodeWideObjectClass(ObjectClass objectClass) * If new object classes are added and none of them are node-wide, then update * this assertion check based on latest supported major Postgres version. */ - StaticAssertStmt(PG_MAJORVERSION_NUM <= 16, + StaticAssertStmt(PG_MAJORVERSION_NUM <= 17, "better to check if any of newly added ObjectClass'es are node-wide"); switch (objectClass) diff --git a/src/include/pg_version_compat.h b/src/include/pg_version_compat.h index 665cd30c264..ef938ffe601 100644 --- a/src/include/pg_version_compat.h +++ b/src/include/pg_version_compat.h @@ -13,6 +13,140 @@ #include "pg_version_constants.h" +#if PG_VERSION_NUM >= PG_VERSION_17 + +#include "catalog/pg_am.h" +#include "catalog/pg_auth_members.h" +#include "catalog/pg_authid.h" +#include "catalog/pg_class.h" +#include "catalog/pg_collation.h" +#include "catalog/pg_constraint.h" +#include "catalog/pg_database.h" +#include "catalog/pg_extension.h" +#include "catalog/pg_foreign_server.h" +#include "catalog/pg_namespace.h" +#include "catalog/pg_parameter_acl.h" +#include "catalog/pg_proc.h" +#include "catalog/pg_publication.h" +#include "catalog/pg_tablespace.h" +#include "catalog/pg_transform.h" +#include "catalog/pg_ts_config.h" +#include "catalog/pg_ts_dict.h" +#include "catalog/pg_ts_template.h" +#include "catalog/pg_type.h" + +typedef int ObjectClass; +#define getObjectClass(a) a->classId +#define LAST_OCLASS TransformRelationId +#define OCLASS_ROLE AuthIdRelationId +#define OCLASS_DATABASE DatabaseRelationId +#define OCLASS_TBLSPACE TableSpaceRelationId +#define OCLASS_PARAMETER_ACL ParameterAclRelationId +#define OCLASS_ROLE_MEMBERSHIP AuthMemRelationId +#define OCLASS_CLASS RelationRelationId +#define OCLASS_COLLATION CollationRelationId +#define OCLASS_CONSTRAINT ConstraintRelationId +#define OCLASS_PROC ProcedureRelationId +#define OCLASS_PUBLICATION PublicationRelationId +#define OCLASS_SCHEMA NamespaceRelationId +#define OCLASS_TSCONFIG TSConfigRelationId +#define OCLASS_TSDICT TSDictionaryRelationId +#define OCLASS_TYPE TypeRelationId +#define OCLASS_EXTENSION ExtensionRelationId +#define OCLASS_FOREIGN_SERVER ForeignServerRelationId +#define OCLASS_AM AccessMethodRelationId +#define OCLASS_TSTEMPLATE TSTemplateRelationId + +#define Anum_pg_collation_colliculocale Anum_pg_collation_colllocale +#define Anum_pg_database_daticulocale Anum_pg_database_datlocale + +#include "commands/tablecmds.h" + +static inline void +RangeVarCallbackOwnsTable(const RangeVar *relation, + Oid relId, Oid oldRelId, void *arg) +{ + return RangeVarCallbackMaintainsTable(relation, relId, oldRelId, arg); +} + + +#include "catalog/pg_attribute.h" +#include "utils/syscache.h" + +static inline int32 +getAttstattarget_compat(HeapTuple attTuple) +{ + bool isnull; + Datum dat = SysCacheGetAttr(ATTNUM, attTuple, + Anum_pg_attribute_attstattarget, &isnull); + return (isnull ? -1 : DatumGetInt16(dat)); +} + + +#include "catalog/pg_statistic_ext.h" + +static inline int16 +getStxstattarget_compat(HeapTuple tup) +{ + bool isnull; + Datum dat = SysCacheGetAttr(STATEXTOID, tup, + Anum_pg_statistic_ext_stxstattarget, &isnull); + return (isnull ? -1 : DatumGetInt16(dat)); +} + + +#define getAlterStatsStxstattarget_compat(a) ((Node *) makeInteger(a)) +#define getIntStxstattarget_compat(a) (intVal(a)) + +#define WaitEventSetTracker_compat CurrentResourceOwner + +#define identitySequenceRelation_compat(a) (a) + +#define matched_compat(a) (a->matchKind == MERGE_WHEN_MATCHED) + +#define create_foreignscan_path_compat(a, b, c, d, e, f, g, h, i, j, \ + k) create_foreignscan_path(a, b, c, d, e, f, g, h, \ + i, j, k) + +#define getProcNo_compat(a) (a->vxid.procNumber) +#define getLxid_compat(a) (a->vxid.lxid) + +#else + +#include "access/htup_details.h" +static inline int32 +getAttstattarget_compat(HeapTuple attTuple) +{ + return ((Form_pg_attribute) GETSTRUCT(attTuple))->attstattarget; +} + + +#include "catalog/pg_statistic_ext.h" +static inline int32 +getStxstattarget_compat(HeapTuple tup) +{ + return ((Form_pg_statistic_ext) GETSTRUCT(tup))->stxstattarget; +} + + +#define getAlterStatsStxstattarget_compat(a) (a) +#define getIntStxstattarget_compat(a) (a) + +#define WaitEventSetTracker_compat CurrentMemoryContext + +#define identitySequenceRelation_compat(a) (RelationGetRelid(a)) + +#define matched_compat(a) (a->matched) + +#define create_foreignscan_path_compat(a, b, c, d, e, f, g, h, i, j, \ + k) create_foreignscan_path(a, b, c, d, e, f, g, h, \ + i, k) + +#define getProcNo_compat(a) (a->pgprocno) +#define getLxid_compat(a) (a->lxid) + +#endif + #if PG_VERSION_NUM >= PG_VERSION_16 #include "utils/guc_tables.h" diff --git a/src/test/regress/citus_tests/common.py b/src/test/regress/citus_tests/common.py index 6c09e0b3852..19b747c09e2 100644 --- a/src/test/regress/citus_tests/common.py +++ b/src/test/regress/citus_tests/common.py @@ -93,6 +93,7 @@ def get_pg_major_version(): 14: "10.2.0", 15: "11.1.5", 16: "12.1.1", + 17: "12.1.1", } OLDEST_SUPPORTED_CITUS_VERSION = OLDEST_SUPPORTED_CITUS_VERSION_MATRIX[PG_MAJOR_VERSION]