diff options
| author | Bruce Momjian <bruce@momjian.us> | 1998-08-19 02:04:17 +0000 |
|---|---|---|
| committer | Bruce Momjian <bruce@momjian.us> | 1998-08-19 02:04:17 +0000 |
| commit | 7971539020a344dce3a8b3b9b93ff4f10e2f823a (patch) | |
| tree | 8dca0af0d3ac8d431bff8c0dec793fe9733a1ee9 /src/backend/utils/cache/syscache.c | |
| parent | 31de2c9461dff3284ad61084c73eba093fa3f68e (diff) | |
| download | postgresql-7971539020a344dce3a8b3b9b93ff4f10e2f823a.tar.gz | |
heap_fetch requires buffer pointer, must be released; heap_getnext
no longer returns buffer pointer, can be gotten from scan;
descriptor; bootstrap can create multi-key indexes;
pg_procname index now is multi-key index; oidint2, oidint4, oidname
are gone (must be removed from regression tests); use System Cache
rather than sequential scan in many places; heap_modifytuple no
longer takes buffer parameter; remove unused buffer parameter in
a few other functions; oid8 is not index-able; remove some use of
single-character variable names; cleanup Buffer variables usage
and scan descriptor looping; cleaned up allocation and freeing of
tuples; 18k lines of diff;
Diffstat (limited to 'src/backend/utils/cache/syscache.c')
| -rw-r--r-- | src/backend/utils/cache/syscache.c | 211 |
1 files changed, 145 insertions, 66 deletions
diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c index e98a26a60b..7b4a411d17 100644 --- a/src/backend/utils/cache/syscache.c +++ b/src/backend/utils/cache/syscache.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.19 1998/07/20 16:57:05 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.20 1998/08/19 02:03:15 momjian Exp $ * * NOTES * These routines allow the parser/planner/executor to perform @@ -67,262 +67,320 @@ typedef HeapTuple (*ScanFunc) (); static struct cachedesc cacheinfo[] = { {AccessMethodOperatorRelationName, /* AMOPOPID */ 3, - {Anum_pg_amop_amopclaid, + { + Anum_pg_amop_amopclaid, Anum_pg_amop_amopopr, Anum_pg_amop_amopid, - 0}, + 0 + }, sizeof(FormData_pg_amop), NULL, (ScanFunc) NULL}, {AccessMethodOperatorRelationName, /* AMOPSTRATEGY */ 3, - {Anum_pg_amop_amopid, + { + Anum_pg_amop_amopid, Anum_pg_amop_amopclaid, Anum_pg_amop_amopstrategy, - 0}, + 0 + }, sizeof(FormData_pg_amop), NULL, (ScanFunc) NULL}, {AttributeRelationName, /* ATTNAME */ 2, - {Anum_pg_attribute_attrelid, + { + Anum_pg_attribute_attrelid, Anum_pg_attribute_attname, 0, - 0}, + 0 + }, ATTRIBUTE_TUPLE_SIZE, AttributeNameIndex, (ScanFunc) AttributeNameIndexScan}, {AttributeRelationName, /* ATTNUM */ 2, - {Anum_pg_attribute_attrelid, + { + Anum_pg_attribute_attrelid, Anum_pg_attribute_attnum, 0, - 0}, + 0 + }, ATTRIBUTE_TUPLE_SIZE, AttributeNumIndex, (ScanFunc) AttributeNumIndexScan}, {IndexRelationName, /* INDEXRELID */ 1, - {Anum_pg_index_indexrelid, + { + Anum_pg_index_indexrelid, 0, 0, - 0}, + 0 + }, offsetof(FormData_pg_index, indpred), NULL, NULL}, {LanguageRelationName, /* LANNAME */ 1, - {Anum_pg_language_lanname, + { + Anum_pg_language_lanname, 0, 0, - 0}, + 0 + }, offsetof(FormData_pg_language, lancompiler), NULL, NULL}, {OperatorRelationName, /* OPRNAME */ 4, - {Anum_pg_operator_oprname, + { + Anum_pg_operator_oprname, Anum_pg_operator_oprleft, Anum_pg_operator_oprright, - Anum_pg_operator_oprkind}, + Anum_pg_operator_oprkind + }, sizeof(FormData_pg_operator), NULL, NULL}, {OperatorRelationName, /* OPROID */ 1, - {ObjectIdAttributeNumber, + { + ObjectIdAttributeNumber, 0, 0, - 0}, + 0 + }, sizeof(FormData_pg_operator), NULL, (ScanFunc) NULL}, {ProcedureRelationName, /* PRONAME */ 3, - {Anum_pg_proc_proname, + { + Anum_pg_proc_proname, Anum_pg_proc_pronargs, Anum_pg_proc_proargtypes, - 0}, + 0 + }, offsetof(FormData_pg_proc, prosrc), ProcedureNameIndex, (ScanFunc) ProcedureNameIndexScan}, {ProcedureRelationName, /* PROOID */ 1, - {ObjectIdAttributeNumber, + { + ObjectIdAttributeNumber, 0, 0, - 0}, + 0 + }, offsetof(FormData_pg_proc, prosrc), ProcedureOidIndex, (ScanFunc) ProcedureOidIndexScan}, {RelationRelationName, /* RELNAME */ 1, - {Anum_pg_class_relname, + { + Anum_pg_class_relname, 0, 0, - 0}, + 0 + }, CLASS_TUPLE_SIZE, ClassNameIndex, (ScanFunc) ClassNameIndexScan}, {RelationRelationName, /* RELOID */ 1, - {ObjectIdAttributeNumber, + { + ObjectIdAttributeNumber, 0, 0, - 0}, + 0 + }, CLASS_TUPLE_SIZE, ClassOidIndex, (ScanFunc) ClassOidIndexScan}, {TypeRelationName, /* TYPNAME */ 1, - {Anum_pg_type_typname, + { + Anum_pg_type_typname, 0, 0, - 0}, + 0 + }, offsetof(TypeTupleFormData, typalign) +sizeof(char), TypeNameIndex, TypeNameIndexScan}, {TypeRelationName, /* TYPOID */ 1, - {ObjectIdAttributeNumber, + { + ObjectIdAttributeNumber, 0, 0, - 0}, + 0 + }, offsetof(TypeTupleFormData, typalign) +sizeof(char), TypeOidIndex, TypeOidIndexScan}, {AccessMethodRelationName, /* AMNAME */ 1, - {Anum_pg_am_amname, + { + Anum_pg_am_amname, 0, 0, - 0}, + 0 + }, sizeof(FormData_pg_am), NULL, NULL}, {OperatorClassRelationName, /* CLANAME */ 1, - {Anum_pg_opclass_opcname, + { + Anum_pg_opclass_opcname, 0, 0, - 0}, + 0 + }, sizeof(FormData_pg_opclass), NULL, NULL}, - {IndexRelationName, /* INDRELIDKEY */ + {IndexRelationName, /* INDRELIDKEY */ /* never used */ 2, - {Anum_pg_index_indrelid, + { + Anum_pg_index_indrelid, Anum_pg_index_indkey, 0, - 0}, + 0 + }, offsetof(FormData_pg_index, indpred), NULL, (ScanFunc) NULL}, {InheritsRelationName, /* INHRELID */ 2, - {Anum_pg_inherits_inhrel, + { + Anum_pg_inherits_inhrel, Anum_pg_inherits_inhseqno, 0, - 0}, + 0 + }, sizeof(FormData_pg_inherits), NULL, (ScanFunc) NULL}, {RewriteRelationName, /* RULOID */ 1, - {ObjectIdAttributeNumber, + { + ObjectIdAttributeNumber, 0, 0, - 0}, + 0 + }, offsetof(FormData_pg_rewrite, ev_qual), NULL, (ScanFunc) NULL}, {AggregateRelationName, /* AGGNAME */ 2, - {Anum_pg_aggregate_aggname, + { + Anum_pg_aggregate_aggname, Anum_pg_aggregate_aggbasetype, 0, - 0}, + 0 + }, offsetof(FormData_pg_aggregate, agginitval1), NULL, (ScanFunc) NULL}, {ListenerRelationName, /* LISTENREL */ 2, - {Anum_pg_listener_relname, + { + Anum_pg_listener_relname, Anum_pg_listener_pid, 0, - 0}, + 0 + }, sizeof(FormData_pg_listener), NULL, (ScanFunc) NULL}, {ShadowRelationName, /* USENAME */ 1, - {Anum_pg_shadow_usename, + { + Anum_pg_shadow_usename, 0, 0, - 0}, + 0 + }, sizeof(FormData_pg_shadow), NULL, (ScanFunc) NULL}, {ShadowRelationName, /* USESYSID */ 1, - {Anum_pg_shadow_usesysid, + { + Anum_pg_shadow_usesysid, 0, 0, - 0}, + 0 + }, sizeof(FormData_pg_shadow), NULL, (ScanFunc) NULL}, {GroupRelationName, /* GRONAME */ 1, - {Anum_pg_group_groname, + { + Anum_pg_group_groname, 0, 0, - 0}, + 0 + }, offsetof(FormData_pg_group, grolist[0]), NULL, (ScanFunc) NULL}, {GroupRelationName, /* GROSYSID */ 1, - {Anum_pg_group_grosysid, + { + Anum_pg_group_grosysid, 0, 0, - 0}, + 0 + }, offsetof(FormData_pg_group, grolist[0]), NULL, (ScanFunc) NULL}, {RewriteRelationName, /* REWRITENAME */ 1, - {Anum_pg_rewrite_rulename, + { + Anum_pg_rewrite_rulename, 0, 0, - 0}, + 0 + }, offsetof(FormData_pg_rewrite, ev_qual), NULL, (ScanFunc) NULL}, {ProcedureRelationName, /* PROSRC */ 1, - {Anum_pg_proc_prosrc, + { + Anum_pg_proc_prosrc, 0, 0, - 0}, + 0 + }, offsetof(FormData_pg_proc, prosrc), ProcedureSrcIndex, (ScanFunc) ProcedureSrcIndexScan}, {OperatorClassRelationName, /* CLADEFTYPE */ 1, - {Anum_pg_opclass_opcdeftype, + { + Anum_pg_opclass_opcdeftype, 0, 0, - 0}, + 0 + }, sizeof(FormData_pg_opclass), NULL, (ScanFunc) NULL}, {LanguageRelationName, /* LANOID */ 1, - {ObjectIdAttributeNumber, + { + ObjectIdAttributeNumber, 0, 0, - 0}, + 0 + }, offsetof(FormData_pg_language, lancompiler), NULL, NULL} @@ -380,16 +438,39 @@ InitCatalogCache() } } } +/* + * SearchSysCacheTupleCopy-- + * + * THis is like SearchSysCacheTuple, except it returns a copy of the tuple + * that the user is required to pfree(). + */ +HeapTuple +SearchSysCacheTupleCopy(int cacheId,/* cache selection code */ + Datum key1, + Datum key2, + Datum key3, + Datum key4) +{ + HeapTuple cachetup; + + cachetup = SearchSysCacheTuple(cacheId, key1, key2, key3, key4); + if (PointerIsValid(cachetup)) + return heap_copytuple(cachetup); + else + return cachetup; /* NULL */ +} + /* * SearchSysCacheTuple-- * - * A layer on top of SearchSysCache that does the initialization and - * key-setting for you. + * A layer on top of SearchSysCache that does the initialization and + * key-setting for you. * - * Returns the tuple if one is found, NULL if not. + * Returns the cache copy of the tuple if one is found, NULL if not. + * The tuple is the 'cache' copy. * - * XXX The tuple that is returned is NOT supposed to be pfree'd! + * XXX The tuple that is returned is NOT supposed to be pfree'd! */ HeapTuple SearchSysCacheTuple(int cacheId,/* cache selection code */ @@ -542,7 +623,6 @@ SearchSysCacheGetAttribute(int cacheId, if (isNull) { - /* * Used to be an elog(DEBUG, ...) here and a claim that it should * be a FATAL error, I don't think either is warranted -mer 6/9/92 @@ -622,7 +702,6 @@ TypeDefaultRetrieve(Oid typId) cacheinfo[TYPOID].name, TYPOID); #endif /* defined(CACHEDEBUG) */ return (NULL); - } dataSize = VARSIZE(typDefault) - VARHDRSZ; |
