From 09c1724c1b5d2bff0b2c571b40c17b46fc1be590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=85=E7=A8=8B?= <517719039@qq.com> Date: Fri, 3 Jan 2025 17:01:45 +0800 Subject: [PATCH] 1 --- src/common/backend/catalog/gs_package.cpp | 5 ++-- src/common/backend/catalog/pg_proc.cpp | 25 ++++++++++--------- src/common/backend/utils/adt/regproc.cpp | 4 --- src/common/backend/utils/cache/syscache.cpp | 12 ++------- src/common/backend/utils/init/globals.cpp | 2 +- .../runtime/executor/functions.cpp | 13 ++++++---- .../rollback-post_catalog_maindb_92_621.sql | 5 ++++ .../rollback-post_catalog_otherdb_92_621.sql | 5 ++++ .../upgrade-post_catalog_maindb_92_621.sql | 5 ++++ .../upgrade_catalog_maindb_92_621.sql | 1 + .../upgrade-post_catalog_otherdb_92_621.sql | 5 ++++ .../upgrade_catalog_otherdb_92_621.sql | 1 + 12 files changed, 49 insertions(+), 34 deletions(-) create mode 100644 src/include/catalog/upgrade_sql/rollback_catalog_maindb/rollback-post_catalog_maindb_92_621.sql create mode 100644 src/include/catalog/upgrade_sql/rollback_catalog_otherdb/rollback-post_catalog_otherdb_92_621.sql create mode 100644 src/include/catalog/upgrade_sql/upgrade_catalog_maindb/upgrade-post_catalog_maindb_92_621.sql create mode 100644 src/include/catalog/upgrade_sql/upgrade_catalog_maindb/upgrade_catalog_maindb_92_621.sql create mode 100644 src/include/catalog/upgrade_sql/upgrade_catalog_otherdb/upgrade-post_catalog_otherdb_92_621.sql create mode 100644 src/include/catalog/upgrade_sql/upgrade_catalog_otherdb/upgrade_catalog_otherdb_92_621.sql diff --git a/src/common/backend/catalog/gs_package.cpp b/src/common/backend/catalog/gs_package.cpp index ef23b6bd1f..8eb3e87107 100644 --- a/src/common/backend/catalog/gs_package.cpp +++ b/src/common/backend/catalog/gs_package.cpp @@ -1671,10 +1671,11 @@ Oid GetOldTupleOid(const char* procedureName, oidvector* parameterTypes, Oid pro { bool enableOutparamOverride = enable_out_param_override(); if (t_thrd.proc->workingVersionNum < 92470) { - HeapTuple oldtup = SearchSysCache3(PROCNAMEARGSNSP, + HeapTuple oldtup = SearchSysCache4(PROCNAMEARGSNSP, PointerGetDatum(procedureName), values[Anum_pg_proc_proargtypes - 1], - ObjectIdGetDatum(procNamespace)); + ObjectIdGetDatum(procNamespace), + ObjectIdGetDatum(propackageid)); if (!HeapTupleIsValid(oldtup)) { return InvalidOid; } diff --git a/src/common/backend/catalog/pg_proc.cpp b/src/common/backend/catalog/pg_proc.cpp index 86b072db3e..d73e94627b 100644 --- a/src/common/backend/catalog/pg_proc.cpp +++ b/src/common/backend/catalog/pg_proc.cpp @@ -30,7 +30,7 @@ #include "catalog/pg_proc.h" #include "catalog/gs_encrypted_proc.h" #include "catalog/pg_proc_fn.h" -#include "catalog/pg_synonym.h" +#include "catalog/pg_synonym.h" #include "catalog/pg_type.h" #include "client_logic/client_logic_proc.h" #include "commands/defrem.h" @@ -1075,15 +1075,15 @@ Oid ProcedureCreate(const char* procedureName, Oid procNamespace, Oid propackage /* sanity checks */ Assert(PointerIsValid(prosrc)); - /* - * Check function name to ensure that it doesn't conflict with existing synonym. - */ - if (!IsInitdb && GetSynonymOid(procedureName, procNamespace, true) != InvalidOid) { - ereport(ERROR, - (errmsg("function name is already used by an existing synonym in schema \"%s\"", - get_namespace_name(procNamespace)))); - } - + /* + * Check function name to ensure that it doesn't conflict with existing synonym. + */ + if (!IsInitdb && GetSynonymOid(procedureName, procNamespace, true) != InvalidOid) { + ereport(ERROR, + (errmsg("function name is already used by an existing synonym in schema \"%s\"", + get_namespace_name(procNamespace)))); + } + parameterCount = parameterTypes->dim1; if (parameterCount < 0 || parameterCount > FUNC_MAX_ARGS) ereport(ERROR, @@ -1467,10 +1467,11 @@ Oid ProcedureCreate(const char* procedureName, Oid procNamespace, Oid propackage propackageid, values, parameterModes); oldtup = SearchSysCache1(PROCOID, ObjectIdGetDatum(oldTupleOid)); #else - oldtup = SearchSysCache3(PROCNAMEARGSNSP, + oldtup = SearchSysCache4(PROCNAMEARGSNSP, PointerGetDatum(procedureName), values[Anum_pg_proc_proargtypes - 1], - ObjectIdGetDatum(procNamespace)); + ObjectIdGetDatum(procNamespace), + ObjectIdGetDatum(propackageid)); #endif } #ifndef ENABLE_MULTIPLE_NODES diff --git a/src/common/backend/utils/adt/regproc.cpp b/src/common/backend/utils/adt/regproc.cpp index c8979660a1..c38d10e92a 100644 --- a/src/common/backend/utils/adt/regproc.cpp +++ b/src/common/backend/utils/adt/regproc.cpp @@ -57,11 +57,7 @@ static Datum regprocin_booststrap(char* procname) ScanKeyInit(&skey[0], Anum_pg_proc_proname, BTEqualStrategyNumber, F_NAMEEQ, CStringGetDatum(procname)); hdesc = heap_open(ProcedureRelationId, AccessShareLock); -#ifndef ENABLE_MULTIPLE_NODES sysscan = systable_beginscan(hdesc, ProcedureNameArgsNspNewIndexId, true, NULL, 1, skey); -#else - sysscan = systable_beginscan(hdesc, ProcedureNameArgsNspIndexId, true, NULL, 1, skey); -#endif while (HeapTupleIsValid(tuple = systable_getnext(sysscan))) { result = (RegProcedure)HeapTupleGetOid(tuple); if (++matches > 1) diff --git a/src/common/backend/utils/cache/syscache.cpp b/src/common/backend/utils/cache/syscache.cpp index c42b44ea6f..5e6df4a10a 100644 --- a/src/common/backend/utils/cache/syscache.cpp +++ b/src/common/backend/utils/cache/syscache.cpp @@ -564,24 +564,16 @@ const cachedesc cacheinfo[] = { {ObjectIdAttributeNumber, 0, 0, 0}, 4 }, -#ifndef ENABLE_MULTIPLE_NODES {ProcedureRelationId, /* PROCNAMEARGSNSP */ ProcedureNameArgsNspNewIndexId, - 3, - {Anum_pg_proc_proname, Anum_pg_proc_proargtypes, Anum_pg_proc_pronamespace, 0}, + 4, + {Anum_pg_proc_proname, Anum_pg_proc_proargtypes, Anum_pg_proc_pronamespace, Anum_pg_proc_packageid}, 2048}, {ProcedureRelationId, /* PROCALLARGS */ ProcedureNameAllArgsNspIndexId, 4, {Anum_pg_proc_proname, Anum_pg_proc_allargtypes, Anum_pg_proc_pronamespace, Anum_pg_proc_packageid}, 2048}, -#else - {ProcedureRelationId, /* PROCNAMEARGSNSP */ - ProcedureNameArgsNspIndexId, - 3, - {Anum_pg_proc_proname, Anum_pg_proc_proargtypes, Anum_pg_proc_pronamespace, 0}, - 2048}, -#endif {ProcedureRelationId, /* PROCOID */ ProcedureOidIndexId, 1, diff --git a/src/common/backend/utils/init/globals.cpp b/src/common/backend/utils/init/globals.cpp index 79db5bce78..dd1858fab9 100644 --- a/src/common/backend/utils/init/globals.cpp +++ b/src/common/backend/utils/init/globals.cpp @@ -59,7 +59,7 @@ bool open_join_children = true; bool will_shutdown = false; /* hard-wired binary version number */ -const uint32 GRAND_VERSION_NUM = 92620; +const uint32 GRAND_VERSION_NUM = 92621; const uint32 PARTITION_ENHANCE_VERSION_NUM = 92620; const uint32 FLUSH_LSN_VERSION_NUM = 92619; diff --git a/src/gausskernel/runtime/executor/functions.cpp b/src/gausskernel/runtime/executor/functions.cpp index ac613bcbd0..eb82c9f8fe 100644 --- a/src/gausskernel/runtime/executor/functions.cpp +++ b/src/gausskernel/runtime/executor/functions.cpp @@ -2127,19 +2127,22 @@ bool sql_fn_cl_rewrite_params(const Oid func_id, SQLFunctionParseInfoPtr p_info, otherwise return error to client */ HeapTuple oldtup = NULL; -#ifndef ENABLE_MULTIPLE_NODES /* support CREATE OR REPLACE with the same parameter types */ Datum packageidDatum = SysCacheGetAttr(PROCOID, tuple, Anum_pg_proc_packageid, &isNull); +#ifndef ENABLE_MULTIPLE_NODES if (!is_supported_outparams_override) { - oldtup = SearchSysCache3(PROCNAMEARGSNSP, CStringGetDatum(NameStr(oldproc->proname)), - PointerGetDatum(&oldproc->proargtypes), ObjectIdGetDatum(oldproc->pronamespace)); + oldtup = SearchSysCache4(PROCNAMEARGSNSP, CStringGetDatum(NameStr(oldproc->proname)), + PointerGetDatum(&oldproc->proargtypes), + ObjectIdGetDatum(oldproc->pronamespace), + packageidDatum); } else { oldtup = SearchSysCacheForProcAllArgs(CStringGetDatum(NameStr(oldproc->proname)), PointerGetDatum(tup_allargs), ObjectIdGetDatum(oldproc->pronamespace), packageidDatum, proargmodes); } #else - oldtup = SearchSysCache3(PROCNAMEARGSNSP, CStringGetDatum(NameStr(oldproc->proname)), - PointerGetDatum(&oldproc->proargtypes), ObjectIdGetDatum(oldproc->pronamespace)); + oldtup = SearchSysCache4(PROCNAMEARGSNSP, CStringGetDatum(NameStr(oldproc->proname)), + PointerGetDatum(&oldproc->proargtypes), ObjectIdGetDatum(oldproc->pronamespace), + packageidDatum); #endif // ENABLE_MULTIPLE_NODES Relation rel = NULL; diff --git a/src/include/catalog/upgrade_sql/rollback_catalog_maindb/rollback-post_catalog_maindb_92_621.sql b/src/include/catalog/upgrade_sql/rollback_catalog_maindb/rollback-post_catalog_maindb_92_621.sql new file mode 100644 index 0000000000..a080a4e3e5 --- /dev/null +++ b/src/include/catalog/upgrade_sql/rollback_catalog_maindb/rollback-post_catalog_maindb_92_621.sql @@ -0,0 +1,5 @@ +alter index pg_catalog.pg_proc_proname_args_nsp_new_index unusable; +DROP INDEX IF EXISTS pg_catalog.pg_proc_proname_args_nsp_new_index; +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 9378; +CREATE INDEX pg_catalog.pg_proc_proname_args_nsp_new_index on pg_catalog.pg_proc USING BTREE(proname name_ops, proargtypes oidvector_ops, pronamespace oid_ops, propackageid oid_ops); +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 0; diff --git a/src/include/catalog/upgrade_sql/rollback_catalog_otherdb/rollback-post_catalog_otherdb_92_621.sql b/src/include/catalog/upgrade_sql/rollback_catalog_otherdb/rollback-post_catalog_otherdb_92_621.sql new file mode 100644 index 0000000000..a080a4e3e5 --- /dev/null +++ b/src/include/catalog/upgrade_sql/rollback_catalog_otherdb/rollback-post_catalog_otherdb_92_621.sql @@ -0,0 +1,5 @@ +alter index pg_catalog.pg_proc_proname_args_nsp_new_index unusable; +DROP INDEX IF EXISTS pg_catalog.pg_proc_proname_args_nsp_new_index; +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 9378; +CREATE INDEX pg_catalog.pg_proc_proname_args_nsp_new_index on pg_catalog.pg_proc USING BTREE(proname name_ops, proargtypes oidvector_ops, pronamespace oid_ops, propackageid oid_ops); +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 0; diff --git a/src/include/catalog/upgrade_sql/upgrade_catalog_maindb/upgrade-post_catalog_maindb_92_621.sql b/src/include/catalog/upgrade_sql/upgrade_catalog_maindb/upgrade-post_catalog_maindb_92_621.sql new file mode 100644 index 0000000000..50f1b699ec --- /dev/null +++ b/src/include/catalog/upgrade_sql/upgrade_catalog_maindb/upgrade-post_catalog_maindb_92_621.sql @@ -0,0 +1,5 @@ +DROP INDEX IF EXISTS pg_catalog.pg_proc_proname_args_nsp_index; +DROP INDEX IF EXISTS pg_catalog.pg_proc_proname_args_nsp_new_index; +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 9378; +CREATE INDEX pg_catalog.pg_proc_proname_args_nsp_new_index on pg_catalog.pg_proc USING BTREE(proname name_ops, proargtypes oidvector_ops, pronamespace oid_ops, propackageid oid_ops); +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 0; diff --git a/src/include/catalog/upgrade_sql/upgrade_catalog_maindb/upgrade_catalog_maindb_92_621.sql b/src/include/catalog/upgrade_sql/upgrade_catalog_maindb/upgrade_catalog_maindb_92_621.sql new file mode 100644 index 0000000000..29a0855756 --- /dev/null +++ b/src/include/catalog/upgrade_sql/upgrade_catalog_maindb/upgrade_catalog_maindb_92_621.sql @@ -0,0 +1 @@ +-- DROP INDEX IF EXISTS pg_catalog.pg_proc_proname_args_nsp_new_index; diff --git a/src/include/catalog/upgrade_sql/upgrade_catalog_otherdb/upgrade-post_catalog_otherdb_92_621.sql b/src/include/catalog/upgrade_sql/upgrade_catalog_otherdb/upgrade-post_catalog_otherdb_92_621.sql new file mode 100644 index 0000000000..50f1b699ec --- /dev/null +++ b/src/include/catalog/upgrade_sql/upgrade_catalog_otherdb/upgrade-post_catalog_otherdb_92_621.sql @@ -0,0 +1,5 @@ +DROP INDEX IF EXISTS pg_catalog.pg_proc_proname_args_nsp_index; +DROP INDEX IF EXISTS pg_catalog.pg_proc_proname_args_nsp_new_index; +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 9378; +CREATE INDEX pg_catalog.pg_proc_proname_args_nsp_new_index on pg_catalog.pg_proc USING BTREE(proname name_ops, proargtypes oidvector_ops, pronamespace oid_ops, propackageid oid_ops); +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 0; diff --git a/src/include/catalog/upgrade_sql/upgrade_catalog_otherdb/upgrade_catalog_otherdb_92_621.sql b/src/include/catalog/upgrade_sql/upgrade_catalog_otherdb/upgrade_catalog_otherdb_92_621.sql new file mode 100644 index 0000000000..29a0855756 --- /dev/null +++ b/src/include/catalog/upgrade_sql/upgrade_catalog_otherdb/upgrade_catalog_otherdb_92_621.sql @@ -0,0 +1 @@ +-- DROP INDEX IF EXISTS pg_catalog.pg_proc_proname_args_nsp_new_index; -- Gitee