From ebf1b7e23faf9ef03c258b102184d7bd623fbc2e Mon Sep 17 00:00:00 2001 From: Halil Ozan Akgul Date: Thu, 12 Aug 2021 13:16:42 +0300 Subject: [PATCH] Introduces macros for functions that now have include_out_arguments argument New macros: FuncnameGetCandidates_compat and expand_function_arguments_compat The functions (the ones without _compat) now have a new bool include_out_arguments parameter These new macros give us the ability to use this new parameter for PG14 and it doesn't give the parameter for previous versions Existing include_out_arguments parameters are set to 'false' to keep current behavior Relevant PG commit: e56bce5d43789cce95d099554ae9593ada92b3b7 --- src/backend/distributed/commands/function.c | 4 ++-- .../distributed/planner/multi_logical_optimizer.c | 4 ++-- src/backend/distributed/utils/citus_clauses.c | 6 ++++-- src/backend/distributed/utils/function_utils.c | 12 ++++++++---- src/include/distributed/version_compat.h | 6 ++++++ 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/backend/distributed/commands/function.c b/src/backend/distributed/commands/function.c index 6aedce934..e6a646735 100644 --- a/src/backend/distributed/commands/function.c +++ b/src/backend/distributed/commands/function.c @@ -1808,8 +1808,8 @@ GenerateBackupNameForProcCollision(const ObjectAddress *address) List *newProcName = list_make2(namespace, makeString(newName)); /* don't need to rename if the input arguments don't match */ - FuncCandidateList clist = FuncnameGetCandidates(newProcName, numargs, NIL, false, - false, true); + FuncCandidateList clist = FuncnameGetCandidates_compat(newProcName, numargs, NIL, + false, false, false, true); for (; clist; clist = clist->next) { if (memcmp(clist->args, argtypes, sizeof(Oid) * numargs) == 0) diff --git a/src/backend/distributed/planner/multi_logical_optimizer.c b/src/backend/distributed/planner/multi_logical_optimizer.c index 16c300bc8..bd3739717 100644 --- a/src/backend/distributed/planner/multi_logical_optimizer.c +++ b/src/backend/distributed/planner/multi_logical_optimizer.c @@ -3585,8 +3585,8 @@ static Oid CitusFunctionOidWithSignature(char *functionName, int numargs, Oid *argtypes) { List *aggregateName = list_make2(makeString("pg_catalog"), makeString(functionName)); - FuncCandidateList clist = FuncnameGetCandidates(aggregateName, numargs, NIL, false, - false, true); + FuncCandidateList clist = FuncnameGetCandidates_compat(aggregateName, numargs, NIL, + false, false, false, true); for (; clist; clist = clist->next) { diff --git a/src/backend/distributed/utils/citus_clauses.c b/src/backend/distributed/utils/citus_clauses.c index 99f1a3ac6..bd1b409b2 100644 --- a/src/backend/distributed/utils/citus_clauses.c +++ b/src/backend/distributed/utils/citus_clauses.c @@ -12,6 +12,7 @@ #include "distributed/insert_select_planner.h" #include "distributed/metadata_cache.h" #include "distributed/multi_router_planner.h" +#include "distributed/version_compat.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" @@ -526,8 +527,9 @@ FixFunctionArgumentsWalker(Node *expr, void *context) elog(ERROR, "cache lookup failed for function %u", funcExpr->funcid); } - funcExpr->args = expand_function_arguments(funcExpr->args, - funcExpr->funcresulttype, func_tuple); + funcExpr->args = expand_function_arguments_compat(funcExpr->args, false, + funcExpr->funcresulttype, + func_tuple); ReleaseSysCache(func_tuple); } diff --git a/src/backend/distributed/utils/function_utils.c b/src/backend/distributed/utils/function_utils.c index 07c85b796..f0818d0c8 100644 --- a/src/backend/distributed/utils/function_utils.c +++ b/src/backend/distributed/utils/function_utils.c @@ -45,10 +45,14 @@ FunctionOidExtended(const char *schemaName, const char *functionName, int argume const bool findVariadics = false; const bool findDefaults = false; - FuncCandidateList functionList = FuncnameGetCandidates(qualifiedFunctionNameList, - argumentCount, - argumentList, findVariadics, - findDefaults, true); + FuncCandidateList functionList = FuncnameGetCandidates_compat( + qualifiedFunctionNameList, + argumentCount, + argumentList, + findVariadics, + findDefaults, + false, + true); if (functionList == NULL) { diff --git a/src/include/distributed/version_compat.h b/src/include/distributed/version_compat.h index f4a036a01..750a73aeb 100644 --- a/src/include/distributed/version_compat.h +++ b/src/include/distributed/version_compat.h @@ -40,6 +40,9 @@ /* for MemoryContextMethods->stats */ #define stats_compat(a, b, c, d, e) stats(a, b, c, d, e) +#define FuncnameGetCandidates_compat(a, b, c, d, e, f, g) \ + FuncnameGetCandidates(a, b, c, d, e, f, g) +#define expand_function_arguments_compat(a, b, c, d) expand_function_arguments(a, b, c, d) #else #define AlterTableStmtObjType(a) ((a)->relkind) #define F_NEXTVAL_COMPAT F_NEXTVAL_OID @@ -50,6 +53,9 @@ /* for MemoryContextMethods->stats */ #define stats_compat(a, b, c, d, e) stats(a, b, c, d) +#define FuncnameGetCandidates_compat(a, b, c, d, e, f, g) \ + FuncnameGetCandidates(a, b, c, d, e, g) +#define expand_function_arguments_compat(a, b, c, d) expand_function_arguments(a, c, d) #endif #if PG_VERSION_NUM >= PG_VERSION_13