diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-09-02 01:05:06 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-09-02 01:05:06 +0000 |
commit | c7a165adc64e3e67e0dcee4088d84a0638b3515a (patch) | |
tree | 97d02a63e6ab6a516cb8e8ba24b0ba42782d202d /src/backend/utils | |
parent | fcd34f9f7ff561213beef97f93c32f415e35a79c (diff) |
Code review for HeapTupleHeader changes. Add version number to page headers
(overlaying low byte of page size) and add HEAP_HASOID bit to t_infomask,
per earlier discussion. Simplify scheme for overlaying fields in tuple
header (no need for cmax to live in more than one place). Don't try to
clear infomask status bits in tqual.c --- not safe to do it there. Don't
try to force output table of a SELECT INTO to have OIDs, either. Get rid
of unnecessarily complex three-state scheme for TupleDesc.tdhasoids, which
has already caused one recent failure. Improve documentation.
Diffstat (limited to 'src/backend/utils')
-rw-r--r-- | src/backend/utils/adt/lockfuncs.c | 4 | ||||
-rw-r--r-- | src/backend/utils/adt/regproc.c | 10 | ||||
-rw-r--r-- | src/backend/utils/adt/sets.c | 3 | ||||
-rw-r--r-- | src/backend/utils/cache/catcache.c | 6 | ||||
-rw-r--r-- | src/backend/utils/cache/inval.c | 5 | ||||
-rw-r--r-- | src/backend/utils/cache/relcache.c | 19 | ||||
-rw-r--r-- | src/backend/utils/init/postinit.c | 3 | ||||
-rw-r--r-- | src/backend/utils/misc/guc.c | 8 | ||||
-rw-r--r-- | src/backend/utils/time/tqual.c | 30 |
9 files changed, 23 insertions, 65 deletions
diff --git a/src/backend/utils/adt/lockfuncs.c b/src/backend/utils/adt/lockfuncs.c index b1ccceebcb9..a5dda27f640 100644 --- a/src/backend/utils/adt/lockfuncs.c +++ b/src/backend/utils/adt/lockfuncs.c @@ -6,7 +6,7 @@ * Copyright (c) 2002, PostgreSQL Global Development Group * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/lockfuncs.c,v 1.5 2002/08/31 17:14:28 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/lockfuncs.c,v 1.6 2002/09/02 01:05:06 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -50,7 +50,7 @@ pg_lock_status(PG_FUNCTION_ARGS) /* build tupdesc for result tuples */ /* this had better match pg_locks view in initdb.sh */ - tupdesc = CreateTemplateTupleDesc(6, WITHOUTOID); + tupdesc = CreateTemplateTupleDesc(6, false); TupleDescInitEntry(tupdesc, (AttrNumber) 1, "relation", OIDOID, -1, 0, false); TupleDescInitEntry(tupdesc, (AttrNumber) 2, "database", diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c index c99685d675f..c39d176ece8 100644 --- a/src/backend/utils/adt/regproc.c +++ b/src/backend/utils/adt/regproc.c @@ -13,7 +13,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.73 2002/08/22 00:01:43 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.74 2002/09/02 01:05:06 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -110,7 +110,6 @@ regprocin(PG_FUNCTION_ARGS) while (HeapTupleIsValid(tuple = systable_getnext(sysscan))) { - AssertTupleDescHasOid(hdesc->rd_att); result = (RegProcedure) HeapTupleGetOid(tuple); if (++matches > 1) break; @@ -425,7 +424,6 @@ regoperin(PG_FUNCTION_ARGS) while (HeapTupleIsValid(tuple = systable_getnext(sysscan))) { - AssertTupleDescHasOid(hdesc->rd_att); result = HeapTupleGetOid(tuple); if (++matches > 1) break; @@ -756,10 +754,7 @@ regclassin(PG_FUNCTION_ARGS) SnapshotNow, 1, skey); if (HeapTupleIsValid(tuple = systable_getnext(sysscan))) - { - AssertTupleDescHasOid(hdesc->rd_att); result = HeapTupleGetOid(tuple); - } else elog(ERROR, "No class with name %s", class_name_or_oid); @@ -912,10 +907,7 @@ regtypein(PG_FUNCTION_ARGS) SnapshotNow, 1, skey); if (HeapTupleIsValid(tuple = systable_getnext(sysscan))) - { - AssertTupleDescHasOid(hdesc->rd_att); result = HeapTupleGetOid(tuple); - } else elog(ERROR, "No type with name %s", typ_name_or_oid); diff --git a/src/backend/utils/adt/sets.c b/src/backend/utils/adt/sets.c index 2c0beb25e0d..321b9c6855e 100644 --- a/src/backend/utils/adt/sets.c +++ b/src/backend/utils/adt/sets.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/sets.c,v 1.52 2002/08/27 03:56:35 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/sets.c,v 1.53 2002/09/02 01:05:06 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -116,7 +116,6 @@ SetDefine(char *querystr, Oid elemType) simple_heap_update(procrel, &newtup->t_self, newtup); - AssertTupleDescHasOid(procrel->rd_att); setoid = HeapTupleGetOid(newtup); CatalogUpdateIndexes(procrel, newtup); diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c index 21f1e01dabb..5703bf16530 100644 --- a/src/backend/utils/cache/catcache.c +++ b/src/backend/utils/cache/catcache.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.97 2002/07/20 05:16:58 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.98 2002/09/02 01:05:06 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -907,7 +907,6 @@ CatalogCacheInitializeCache(CatCache *cache) * copy the relcache's tuple descriptor to permanent cache storage */ tupdesc = CreateTupleDescCopyConstr(RelationGetDescr(relation)); - AssertTupleDescHasOidIsValid(tupdesc); /* * get the relation's OID and relisshared flag, too @@ -1687,10 +1686,7 @@ build_dummy_tuple(CatCache *cache, int nkeys, ScanKey skeys) ntp = heap_formtuple(tupDesc, values, nulls); if (tupOid != InvalidOid) - { - AssertTupleDescHasOid(tupDesc); HeapTupleSetOid(ntp, tupOid); - } pfree(values); pfree(nulls); diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index c2929262381..d64f5bf0b57 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -74,7 +74,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.53 2002/07/20 05:16:58 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.54 2002/09/02 01:05:06 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -525,10 +525,7 @@ PrepareForTupleInvalidation(Relation relation, HeapTuple tuple, tupleRelId = RelationGetRelid(relation); if (tupleRelId == RelOid_pg_class) - { - AssertTupleDescHasOid(relation->rd_att); relationId = HeapTupleGetOid(tuple); - } else if (tupleRelId == RelOid_pg_attribute) relationId = ((Form_pg_attribute) GETSTRUCT(tuple))->attrelid; else diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 1b5717029aa..036d11022bb 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.172 2002/08/11 21:17:35 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.173 2002/09/02 01:05:06 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -434,7 +434,8 @@ AllocateRelationDesc(Relation relation, Form_pg_class relp) relation->rd_rel = relationForm; /* and allocate attribute tuple form storage */ - relation->rd_att = CreateTemplateTupleDesc(relationForm->relnatts, BoolToHasOid(relationForm->relhasoids)); + relation->rd_att = CreateTemplateTupleDesc(relationForm->relnatts, + relationForm->relhasoids); MemoryContextSwitchTo(oldcxt); @@ -460,6 +461,8 @@ RelationBuildTupleDesc(RelationBuildDescInfo buildinfo, AttrDefault *attrdef = NULL; int ndef = 0; + relation->rd_att->tdhasoid = RelationGetForm(relation)->relhasoids; + constr = (TupleConstr *) MemoryContextAlloc(CacheMemoryContext, sizeof(TupleConstr)); constr->has_not_null = false; @@ -695,7 +698,6 @@ RelationBuildRuleLock(Relation relation) rule = (RewriteRule *) MemoryContextAlloc(rulescxt, sizeof(RewriteRule)); - AssertTupleDescHasOid(rewrite_tupdesc); rule->ruleId = HeapTupleGetOid(rewrite_tuple); rule->event = rewrite_form->ev_type - '0'; @@ -871,7 +873,6 @@ RelationBuildDesc(RelationBuildDescInfo buildinfo, * initialize the tuple descriptor (relation->rd_att). */ RelationBuildTupleDesc(buildinfo, relation); - RelationGetDescr(relation)->tdhasoid = BoolToHasOid(RelationGetForm(relation)->relhasoids); /* * Fetch rules and triggers that affect this relation @@ -1405,7 +1406,8 @@ formrdesc(const char *relationName, * right because it will never be replaced. The input values must be * correctly defined by macros in src/include/catalog/ headers. */ - relation->rd_att = CreateTemplateTupleDesc(natts, BoolToHasOid(relation->rd_rel->relhasoids)); + relation->rd_att = CreateTemplateTupleDesc(natts, + relation->rd_rel->relhasoids); /* * initialize tuple desc info @@ -2101,7 +2103,7 @@ RelationBuildLocalRelation(const char *relname, rel->rd_rel->relnamespace = relnamespace; rel->rd_rel->relkind = RELKIND_UNCATALOGED; - rel->rd_rel->relhasoids = (rel->rd_att->tdhasoid == WITHOID); + rel->rd_rel->relhasoids = rel->rd_att->tdhasoid; rel->rd_rel->relnatts = natts; rel->rd_rel->reltype = InvalidOid; @@ -2304,7 +2306,7 @@ RelationCacheInitializePhase2(void) */ Assert(relation->rd_rel != NULL); memcpy((char *) relation->rd_rel, (char *) relp, CLASS_TUPLE_SIZE); - relation->rd_att->tdhasoid = BoolToHasOid(relp->relhasoids); + relation->rd_att->tdhasoid = relp->relhasoids; ReleaseSysCache(htup); } @@ -2766,7 +2768,8 @@ load_relcache_init_file(void) rel->rd_rel = relform; /* initialize attribute tuple forms */ - rel->rd_att = CreateTemplateTupleDesc(relform->relnatts, BoolToHasOid(relform->relhasoids)); + rel->rd_att = CreateTemplateTupleDesc(relform->relnatts, + relform->relhasoids); /* next read all the attribute tuple form data entries */ for (i = 0; i < relform->relnatts; i++) diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 82f4f632e58..5e4100384a2 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.112 2002/08/30 22:18:06 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.113 2002/09/02 01:05:06 tgl Exp $ * * *------------------------------------------------------------------------- @@ -98,7 +98,6 @@ ReverifyMyDatabase(const char *name) pgdbscan = heap_beginscan(pgdbrel, SnapshotNow, 1, &key); tup = heap_getnext(pgdbscan, ForwardScanDirection); - AssertTupleDescHasOid(pgdbrel->rd_att); if (!HeapTupleIsValid(tup) || HeapTupleGetOid(tup) != MyDatabaseId) { diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index e07421a87cf..0c24034b5f2 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -5,7 +5,7 @@ * command, configuration file, and command line options. * See src/backend/utils/misc/README for more information. * - * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.90 2002/09/01 23:26:06 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.91 2002/09/02 01:05:06 tgl Exp $ * * Copyright 2000 by PostgreSQL Global Development Group * Written by Peter Eisentraut <peter_e@gmx.net>. @@ -2288,7 +2288,7 @@ ShowGUCConfigOption(const char *name) value = GetConfigOptionByName(name, &varname); /* need a tuple descriptor representing a single TEXT column */ - tupdesc = CreateTemplateTupleDesc(1, WITHOUTOID); + tupdesc = CreateTemplateTupleDesc(1, false); TupleDescInitEntry(tupdesc, (AttrNumber) 1, (char *) varname, TEXTOID, -1, 0, false); @@ -2314,7 +2314,7 @@ ShowAllGUCConfig(void) char *values[2]; /* need a tuple descriptor representing two TEXT columns */ - tupdesc = CreateTemplateTupleDesc(2, WITHOUTOID); + tupdesc = CreateTemplateTupleDesc(2, false); TupleDescInitEntry(tupdesc, (AttrNumber) 1, "name", TEXTOID, -1, 0, false); TupleDescInitEntry(tupdesc, (AttrNumber) 2, "setting", @@ -2445,7 +2445,7 @@ show_all_settings(PG_FUNCTION_ARGS) oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* need a tuple descriptor representing two TEXT columns */ - tupdesc = CreateTemplateTupleDesc(2, WITHOUTOID); + tupdesc = CreateTemplateTupleDesc(2, false); TupleDescInitEntry(tupdesc, (AttrNumber) 1, "name", TEXTOID, -1, 0, false); TupleDescInitEntry(tupdesc, (AttrNumber) 2, "setting", diff --git a/src/backend/utils/time/tqual.c b/src/backend/utils/time/tqual.c index bd7693ca37c..0cc88167dac 100644 --- a/src/backend/utils/time/tqual.c +++ b/src/backend/utils/time/tqual.c @@ -16,7 +16,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.58 2002/07/30 16:08:33 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.59 2002/09/02 01:05:06 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -83,7 +83,6 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple) return false; } tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; } } else if (tuple->t_infomask & HEAP_MOVED_IN) @@ -93,10 +92,7 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple) if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple))) return false; if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple))) - { tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; - } else { tuple->t_infomask |= HEAP_XMIN_INVALID; @@ -223,7 +219,6 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple) return false; } tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; } } else if (tuple->t_infomask & HEAP_MOVED_IN) @@ -233,10 +228,7 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple) if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple))) return false; if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple))) - { tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; - } else { tuple->t_infomask |= HEAP_XMIN_INVALID; @@ -344,7 +336,6 @@ HeapTupleSatisfiesToast(HeapTupleHeader tuple) return false; } tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; } } else if (tuple->t_infomask & HEAP_MOVED_IN) @@ -354,10 +345,7 @@ HeapTupleSatisfiesToast(HeapTupleHeader tuple) if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple))) return false; if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple))) - { tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; - } else { tuple->t_infomask |= HEAP_XMIN_INVALID; @@ -401,7 +389,6 @@ HeapTupleSatisfiesUpdate(HeapTuple htuple, CommandId curcid) return HeapTupleInvisible; } tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; } } else if (tuple->t_infomask & HEAP_MOVED_IN) @@ -411,10 +398,7 @@ HeapTupleSatisfiesUpdate(HeapTuple htuple, CommandId curcid) if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple))) return HeapTupleInvisible; if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple))) - { tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; - } else { tuple->t_infomask |= HEAP_XMIN_INVALID; @@ -536,7 +520,6 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple) return false; } tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; } } else if (tuple->t_infomask & HEAP_MOVED_IN) @@ -546,10 +529,7 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple) if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple))) return false; if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple))) - { tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; - } else { tuple->t_infomask |= HEAP_XMIN_INVALID; @@ -671,7 +651,6 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot) return false; } tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; } } else if (tuple->t_infomask & HEAP_MOVED_IN) @@ -681,10 +660,7 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot) if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple))) return false; if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple))) - { tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; - } else { tuple->t_infomask |= HEAP_XMIN_INVALID; @@ -833,7 +809,6 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin) return HEAPTUPLE_DEAD; } tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; } else if (tuple->t_infomask & HEAP_MOVED_IN) { @@ -842,10 +817,7 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin) if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple))) return HEAPTUPLE_INSERT_IN_PROGRESS; if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple))) - { tuple->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_infomask &= ~HEAP_MOVED; - } else { tuple->t_infomask |= HEAP_XMIN_INVALID; |