64
64
#include "utils/memutils.h"
65
65
#include "utils/rel.h"
66
66
#include "utils/snapmgr.h"
67
+ #include "utils/syscache.h"
67
68
#include "utils/varlena.h"
68
69
69
70
145
146
get_extension_oid (const char * extname , bool missing_ok )
146
147
{
147
148
Oid result ;
148
- Relation rel ;
149
- SysScanDesc scandesc ;
150
- HeapTuple tuple ;
151
- ScanKeyData entry [1 ];
152
-
153
- rel = table_open (ExtensionRelationId , AccessShareLock );
154
-
155
- ScanKeyInit (& entry [0 ],
156
- Anum_pg_extension_extname ,
157
- BTEqualStrategyNumber , F_NAMEEQ ,
158
- CStringGetDatum (extname ));
159
149
160
- scandesc = systable_beginscan (rel , ExtensionNameIndexId , true,
161
- NULL , 1 , entry );
162
-
163
- tuple = systable_getnext (scandesc );
164
-
165
- /* We assume that there can be at most one matching tuple */
166
- if (HeapTupleIsValid (tuple ))
167
- result = ((Form_pg_extension ) GETSTRUCT (tuple ))-> oid ;
168
- else
169
- result = InvalidOid ;
170
-
171
- systable_endscan (scandesc );
172
-
173
- table_close (rel , AccessShareLock );
150
+ result = GetSysCacheOid1 (EXTENSIONNAME , Anum_pg_extension_oid ,
151
+ CStringGetDatum (extname ));
174
152
175
153
if (!OidIsValid (result ) && !missing_ok )
176
154
ereport (ERROR ,
@@ -190,32 +168,15 @@ char *
190
168
get_extension_name (Oid ext_oid )
191
169
{
192
170
char * result ;
193
- Relation rel ;
194
- SysScanDesc scandesc ;
195
171
HeapTuple tuple ;
196
- ScanKeyData entry [1 ];
197
172
198
- rel = table_open ( ExtensionRelationId , AccessShareLock );
173
+ tuple = SearchSysCache1 ( EXTENSIONOID , ObjectIdGetDatum ( ext_oid ) );
199
174
200
- ScanKeyInit (& entry [0 ],
201
- Anum_pg_extension_oid ,
202
- BTEqualStrategyNumber , F_OIDEQ ,
203
- ObjectIdGetDatum (ext_oid ));
175
+ if (!HeapTupleIsValid (tuple ))
176
+ return NULL ;
204
177
205
- scandesc = systable_beginscan (rel , ExtensionOidIndexId , true,
206
- NULL , 1 , entry );
207
-
208
- tuple = systable_getnext (scandesc );
209
-
210
- /* We assume that there can be at most one matching tuple */
211
- if (HeapTupleIsValid (tuple ))
212
- result = pstrdup (NameStr (((Form_pg_extension ) GETSTRUCT (tuple ))-> extname ));
213
- else
214
- result = NULL ;
215
-
216
- systable_endscan (scandesc );
217
-
218
- table_close (rel , AccessShareLock );
178
+ result = pstrdup (NameStr (((Form_pg_extension ) GETSTRUCT (tuple ))-> extname ));
179
+ ReleaseSysCache (tuple );
219
180
220
181
return result ;
221
182
}
@@ -229,32 +190,15 @@ Oid
229
190
get_extension_schema (Oid ext_oid )
230
191
{
231
192
Oid result ;
232
- Relation rel ;
233
- SysScanDesc scandesc ;
234
193
HeapTuple tuple ;
235
- ScanKeyData entry [1 ];
236
-
237
- rel = table_open (ExtensionRelationId , AccessShareLock );
238
194
239
- ScanKeyInit (& entry [0 ],
240
- Anum_pg_extension_oid ,
241
- BTEqualStrategyNumber , F_OIDEQ ,
242
- ObjectIdGetDatum (ext_oid ));
195
+ tuple = SearchSysCache1 (EXTENSIONOID , ObjectIdGetDatum (ext_oid ));
243
196
244
- scandesc = systable_beginscan (rel , ExtensionOidIndexId , true,
245
- NULL , 1 , entry );
246
-
247
- tuple = systable_getnext (scandesc );
248
-
249
- /* We assume that there can be at most one matching tuple */
250
- if (HeapTupleIsValid (tuple ))
251
- result = ((Form_pg_extension ) GETSTRUCT (tuple ))-> extnamespace ;
252
- else
253
- result = InvalidOid ;
254
-
255
- systable_endscan (scandesc );
197
+ if (!HeapTupleIsValid (tuple ))
198
+ return InvalidOid ;
256
199
257
- table_close (rel , AccessShareLock );
200
+ result = ((Form_pg_extension ) GETSTRUCT (tuple ))-> extnamespace ;
201
+ ReleaseSysCache (tuple );
258
202
259
203
return result ;
260
204
}
0 commit comments