From c2f698674fe93b274b57d424edfacbab90a0e6f5 Mon Sep 17 00:00:00 2001 From: Halil Ozan Akgul Date: Fri, 13 Aug 2021 15:58:21 +0300 Subject: [PATCH] Introduces BeginCopyFrom_compat macro BeginCopyFrom function now has a new whereClause parameter. In the function this parameter is assigned to the whereClause field of the CopyFromState returned Currently in Postgres there is only one place where this argument isn't NULL, and in previous PG version the whereClause argument of copy state is set right after the function call Since we don't have such example all current whereClause parameters are set to NULL Relevant PG commit: c532d15dddff14b01fe9ef1d465013cb8ef186df --- .../distributed/commands/local_multi_copy.c | 7 +++-- src/backend/distributed/commands/multi_copy.c | 30 ++++++++++--------- .../distributed/executor/multi_executor.c | 5 ++-- src/include/distributed/version_compat.h | 2 ++ 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/backend/distributed/commands/local_multi_copy.c b/src/backend/distributed/commands/local_multi_copy.c index f5fa6abb7..91094b57b 100644 --- a/src/backend/distributed/commands/local_multi_copy.c +++ b/src/backend/distributed/commands/local_multi_copy.c @@ -213,9 +213,10 @@ DoLocalCopy(StringInfo buffer, Oid relationId, int64 shardId, CopyStmt *copyStat /* p_rtable of pState is set so that we can check constraints. */ pState->p_rtable = CreateRangeTable(shard, ACL_INSERT); - CopyFromState_compat cstate = BeginCopyFrom(pState, shard, NULL, false, - ReadFromLocalBufferCallback, - copyStatement->attlist, copyStatement->options); + CopyFromState_compat cstate = BeginCopyFrom_compat(pState, shard, NULL, NULL, false, + ReadFromLocalBufferCallback, + copyStatement->attlist, + copyStatement->options); CopyFrom(cstate); EndCopyFrom(cstate); diff --git a/src/backend/distributed/commands/multi_copy.c b/src/backend/distributed/commands/multi_copy.c index ad597a11d..38ec6fa91 100644 --- a/src/backend/distributed/commands/multi_copy.c +++ b/src/backend/distributed/commands/multi_copy.c @@ -520,13 +520,14 @@ CopyToExistingShards(CopyStmt *copyStatement, QueryCompletionCompat *completionT } /* initialize copy state to read from COPY data source */ - CopyFromState_compat copyState = BeginCopyFrom(NULL, - copiedDistributedRelation, - copyStatement->filename, - copyStatement->is_program, - NULL, - copyStatement->attlist, - copyStatement->options); + CopyFromState_compat copyState = BeginCopyFrom_compat(NULL, + copiedDistributedRelation, + NULL, + copyStatement->filename, + copyStatement->is_program, + NULL, + copyStatement->attlist, + copyStatement->options); /* set up callback to identify error line number */ errorCallback.callback = CopyFromErrorCallback; @@ -617,13 +618,14 @@ CopyToNewShards(CopyStmt *copyStatement, QueryCompletionCompat *completionTag, O (ShardConnections *) palloc0(sizeof(ShardConnections)); /* initialize copy state to read from COPY data source */ - CopyFromState_compat copyState = BeginCopyFrom(NULL, - distributedRelation, - copyStatement->filename, - copyStatement->is_program, - NULL, - copyStatement->attlist, - copyStatement->options); + CopyFromState_compat copyState = BeginCopyFrom_compat(NULL, + distributedRelation, + NULL, + copyStatement->filename, + copyStatement->is_program, + NULL, + copyStatement->attlist, + copyStatement->options); CopyOutState copyOutState = (CopyOutState) palloc0(sizeof(CopyOutStateData)); copyOutState->delim = (char *) delimiterCharacter; diff --git a/src/backend/distributed/executor/multi_executor.c b/src/backend/distributed/executor/multi_executor.c index 65f2a718b..2863df26e 100644 --- a/src/backend/distributed/executor/multi_executor.c +++ b/src/backend/distributed/executor/multi_executor.c @@ -410,8 +410,9 @@ ReadFileIntoTupleStore(char *fileName, char *copyFormat, TupleDesc tupleDescript location); copyOptions = lappend(copyOptions, copyOption); - CopyFromState_compat copyState = BeginCopyFrom(NULL, stubRelation, fileName, false, NULL, - NULL, copyOptions); + CopyFromState_compat copyState = BeginCopyFrom_compat(NULL, stubRelation, NULL, + fileName, false, NULL, + NULL, copyOptions); while (true) { diff --git a/src/include/distributed/version_compat.h b/src/include/distributed/version_compat.h index 994da5f2d..588676929 100644 --- a/src/include/distributed/version_compat.h +++ b/src/include/distributed/version_compat.h @@ -49,6 +49,7 @@ #define VACOPTVALUE_ENABLED_COMPAT VACOPTVALUE_ENABLED #define IsReindexWithParam_compat(reindex, param) IsReindexWithParam(reindex, param) #define CopyFromState_compat CopyFromState +#define BeginCopyFrom_compat(a, b, c, d, e, f, g, h) BeginCopyFrom(a, b, c, d, e, f, g, h) #else #define AlterTableStmtObjType(a) ((a)->relkind) #define F_NEXTVAL_COMPAT F_NEXTVAL_OID @@ -71,6 +72,7 @@ ((strcmp(param, "verbose") == 0) ? ((reindex)->options == REINDEXOPT_VERBOSE) : \ false)) #define CopyFromState_compat CopyState +#define BeginCopyFrom_compat(a, b, c, d, e, f, g, h) BeginCopyFrom(a, b, d, e, f, g, h) #endif #if PG_VERSION_NUM >= PG_VERSION_13