aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/extension.c82
1 files changed, 13 insertions, 69 deletions
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index 1643c8c69a0..fab59ad5f66 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -64,6 +64,7 @@
#include "utils/memutils.h"
#include "utils/rel.h"
#include "utils/snapmgr.h"
+#include "utils/syscache.h"
#include "utils/varlena.h"
@@ -145,32 +146,9 @@ Oid
get_extension_oid(const char *extname, bool missing_ok)
{
Oid result;
- Relation rel;
- SysScanDesc scandesc;
- HeapTuple tuple;
- ScanKeyData entry[1];
-
- rel = table_open(ExtensionRelationId, AccessShareLock);
-
- ScanKeyInit(&entry[0],
- Anum_pg_extension_extname,
- BTEqualStrategyNumber, F_NAMEEQ,
- CStringGetDatum(extname));
- scandesc = systable_beginscan(rel, ExtensionNameIndexId, true,
- NULL, 1, entry);
-
- tuple = systable_getnext(scandesc);
-
- /* We assume that there can be at most one matching tuple */
- if (HeapTupleIsValid(tuple))
- result = ((Form_pg_extension) GETSTRUCT(tuple))->oid;
- else
- result = InvalidOid;
-
- systable_endscan(scandesc);
-
- table_close(rel, AccessShareLock);
+ result = GetSysCacheOid1(EXTENSIONNAME, Anum_pg_extension_oid,
+ CStringGetDatum(extname));
if (!OidIsValid(result) && !missing_ok)
ereport(ERROR,
@@ -190,32 +168,15 @@ char *
get_extension_name(Oid ext_oid)
{
char *result;
- Relation rel;
- SysScanDesc scandesc;
HeapTuple tuple;
- ScanKeyData entry[1];
- rel = table_open(ExtensionRelationId, AccessShareLock);
+ tuple = SearchSysCache1(EXTENSIONOID, ObjectIdGetDatum(ext_oid));
- ScanKeyInit(&entry[0],
- Anum_pg_extension_oid,
- BTEqualStrategyNumber, F_OIDEQ,
- ObjectIdGetDatum(ext_oid));
+ if (!HeapTupleIsValid(tuple))
+ return NULL;
- scandesc = systable_beginscan(rel, ExtensionOidIndexId, true,
- NULL, 1, entry);
-
- tuple = systable_getnext(scandesc);
-
- /* We assume that there can be at most one matching tuple */
- if (HeapTupleIsValid(tuple))
- result = pstrdup(NameStr(((Form_pg_extension) GETSTRUCT(tuple))->extname));
- else
- result = NULL;
-
- systable_endscan(scandesc);
-
- table_close(rel, AccessShareLock);
+ result = pstrdup(NameStr(((Form_pg_extension) GETSTRUCT(tuple))->extname));
+ ReleaseSysCache(tuple);
return result;
}
@@ -229,32 +190,15 @@ Oid
get_extension_schema(Oid ext_oid)
{
Oid result;
- Relation rel;
- SysScanDesc scandesc;
HeapTuple tuple;
- ScanKeyData entry[1];
-
- rel = table_open(ExtensionRelationId, AccessShareLock);
- ScanKeyInit(&entry[0],
- Anum_pg_extension_oid,
- BTEqualStrategyNumber, F_OIDEQ,
- ObjectIdGetDatum(ext_oid));
+ tuple = SearchSysCache1(EXTENSIONOID, ObjectIdGetDatum(ext_oid));
- scandesc = systable_beginscan(rel, ExtensionOidIndexId, true,
- NULL, 1, entry);
-
- tuple = systable_getnext(scandesc);
-
- /* We assume that there can be at most one matching tuple */
- if (HeapTupleIsValid(tuple))
- result = ((Form_pg_extension) GETSTRUCT(tuple))->extnamespace;
- else
- result = InvalidOid;
-
- systable_endscan(scandesc);
+ if (!HeapTupleIsValid(tuple))
+ return InvalidOid;
- table_close(rel, AccessShareLock);
+ result = ((Form_pg_extension) GETSTRUCT(tuple))->extnamespace;
+ ReleaseSysCache(tuple);
return result;
}