diff --git a/src/common/backend/catalog/gs_package.cpp b/src/common/backend/catalog/gs_package.cpp index ef23b6bd1ff01ef9a7086c3d0600c5f10ca11a37..8eb3e8710785242521f0b518f595b74e08a8ed51 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 86b072db3eaa3efda12f67fa138374be7d50d88f..d73e94627be90e31db4ec4579af5d94953b61e4a 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 c8979660a1f2d78449dd50cb202d7ccb611ff23d..c38d10e92a1777b07cb8e5f96a38bd8b097d3313 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 c42b44ea6fb035da9c2d43f3a698749c72f84cc3..5e6df4a10a921521ff5a15c5aa41cadeca45aff4 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 79db5bce786280e7de21b572dec1c34c022f4e2d..dd1858fab97642bdeb50b47f08be620ec6c0e94f 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 ac613bcbd0ab807a968613fe76baa01881826114..eb82c9f8fe14628ae9261b1857cfd78a2a1364ea 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 0000000000000000000000000000000000000000..a080a4e3e5a43a4e3d31da2f65364ac195583a93 --- /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 0000000000000000000000000000000000000000..a080a4e3e5a43a4e3d31da2f65364ac195583a93 --- /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 0000000000000000000000000000000000000000..50f1b699ec8b4b53f730c38214a35c1ba79d26dd --- /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 0000000000000000000000000000000000000000..29a08557564bbb4c6edacd96194c9d2a784e5828 --- /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 0000000000000000000000000000000000000000..50f1b699ec8b4b53f730c38214a35c1ba79d26dd --- /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 0000000000000000000000000000000000000000..29a08557564bbb4c6edacd96194c9d2a784e5828 --- /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;