mirror of
https://github.com/postgres/postgres.git
synced 2025-08-22 21:53:06 +03:00
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.
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.87 2002/08/27 03:38:27 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.88 2002/09/02 01:05:04 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -199,7 +199,6 @@ make_new_heap(Oid OIDOldHeap, const char *NewName)
|
||||
tupdesc,
|
||||
OldHeap->rd_rel->relkind,
|
||||
OldHeap->rd_rel->relisshared,
|
||||
OldHeap->rd_rel->relhasoids,
|
||||
allowSystemTableMods);
|
||||
|
||||
/*
|
||||
|
@@ -7,7 +7,7 @@
|
||||
* Copyright (c) 1996-2001, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/comment.c,v 1.58 2002/08/29 00:17:03 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/comment.c,v 1.59 2002/09/02 01:05:04 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -516,7 +516,6 @@ CommentRule(List *qualname, char *comment)
|
||||
if (HeapTupleIsValid(tuple))
|
||||
{
|
||||
reloid = ((Form_pg_rewrite) GETSTRUCT(tuple))->ev_class;
|
||||
AssertTupleDescHasOid(RewriteRelation->rd_att);
|
||||
ruleoid = HeapTupleGetOid(tuple);
|
||||
}
|
||||
else
|
||||
@@ -557,7 +556,6 @@ CommentRule(List *qualname, char *comment)
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
elog(ERROR, "rule \"%s\" does not exist", rulename);
|
||||
Assert(reloid == ((Form_pg_rewrite) GETSTRUCT(tuple))->ev_class);
|
||||
AssertTupleDescHasOid(relation->rd_att);
|
||||
ruleoid = HeapTupleGetOid(tuple);
|
||||
ReleaseSysCache(tuple);
|
||||
}
|
||||
@@ -769,7 +767,6 @@ CommentTrigger(List *qualname, char *comment)
|
||||
elog(ERROR, "trigger \"%s\" for relation \"%s\" does not exist",
|
||||
trigname, RelationGetRelationName(relation));
|
||||
|
||||
AssertTupleDescHasOid(pg_trigger->rd_att);
|
||||
oid = HeapTupleGetOid(triggertuple);
|
||||
|
||||
systable_endscan(scan);
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.169 2002/08/29 07:22:21 ishii Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.170 2002/09/02 01:05:04 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -597,10 +597,8 @@ CopyTo(Relation rel, List *attnumlist, bool binary, bool oids,
|
||||
/* Send OID if wanted --- note fld_count doesn't include it */
|
||||
if (oids)
|
||||
{
|
||||
Oid oid;
|
||||
|
||||
AssertTupleDescHasOid(tupDesc);
|
||||
oid = HeapTupleGetOid(tuple);
|
||||
Oid oid = HeapTupleGetOid(tuple);
|
||||
|
||||
fld_size = sizeof(Oid);
|
||||
CopySendData(&fld_size, sizeof(int16), fp);
|
||||
CopySendData(&oid, sizeof(Oid), fp);
|
||||
@@ -611,7 +609,6 @@ CopyTo(Relation rel, List *attnumlist, bool binary, bool oids,
|
||||
/* Text format has no per-tuple header, but send OID if wanted */
|
||||
if (oids)
|
||||
{
|
||||
AssertTupleDescHasOid(tupDesc);
|
||||
string = DatumGetCString(DirectFunctionCall1(oidout,
|
||||
ObjectIdGetDatum(HeapTupleGetOid(tuple))));
|
||||
CopySendString(string, fp);
|
||||
|
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.100 2002/08/29 07:22:21 ishii Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.101 2002/09/02 01:05:04 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -335,7 +335,6 @@ createdb(const CreatedbStmt *stmt)
|
||||
|
||||
tuple = heap_formtuple(pg_database_dsc, new_record, new_record_nulls);
|
||||
|
||||
AssertTupleDescHasOid(pg_database_dsc);
|
||||
HeapTupleSetOid(tuple, dboid); /* override heap_insert's OID
|
||||
* selection */
|
||||
|
||||
@@ -589,10 +588,7 @@ get_db_info(const char *name, Oid *dbIdP, int4 *ownerIdP,
|
||||
|
||||
/* oid of the database */
|
||||
if (dbIdP)
|
||||
{
|
||||
AssertTupleDescHasOid(relation->rd_att);
|
||||
*dbIdP = HeapTupleGetOid(tuple);
|
||||
}
|
||||
/* sysid of the owner */
|
||||
if (ownerIdP)
|
||||
*ownerIdP = dbform->datdba;
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994-5, Regents of the University of California
|
||||
*
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/explain.c,v 1.85 2002/08/29 00:17:03 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/explain.c,v 1.86 2002/09/02 01:05:04 tgl Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -69,7 +69,7 @@ ExplainQuery(ExplainStmt *stmt, CommandDest dest)
|
||||
List *l;
|
||||
|
||||
/* need a tuple descriptor representing a single TEXT column */
|
||||
tupdesc = CreateTemplateTupleDesc(1, WITHOUTOID);
|
||||
tupdesc = CreateTemplateTupleDesc(1, false);
|
||||
TupleDescInitEntry(tupdesc, (AttrNumber) 1, "QUERY PLAN",
|
||||
TEXTOID, -1, 0, false);
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.37 2002/08/30 19:23:19 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.38 2002/09/02 01:05:04 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -150,7 +150,8 @@ DefineRelation(CreateStmt *stmt, char relkind)
|
||||
* have to copy inherited constraints here.)
|
||||
*/
|
||||
descriptor = BuildDescForRelation(schema);
|
||||
descriptor->tdhasoid = BoolToHasOid(stmt->hasoids || parentHasOids);
|
||||
|
||||
descriptor->tdhasoid = (stmt->hasoids || parentHasOids);
|
||||
|
||||
if (old_constraints != NIL)
|
||||
{
|
||||
@@ -212,7 +213,6 @@ DefineRelation(CreateStmt *stmt, char relkind)
|
||||
descriptor,
|
||||
relkind,
|
||||
false,
|
||||
stmt->hasoids || parentHasOids,
|
||||
allowSystemTableMods);
|
||||
|
||||
StoreCatalogInheritance(relationId, inheritOids);
|
||||
@@ -1733,7 +1733,6 @@ AlterTableAddColumn(Oid myrelid,
|
||||
|
||||
ReleaseSysCache(typeTuple);
|
||||
|
||||
AssertTupleDescHasNoOid(attrdesc->rd_att);
|
||||
simple_heap_insert(attrdesc, attributeTuple);
|
||||
|
||||
/* Update indexes on pg_attribute */
|
||||
@@ -1747,7 +1746,7 @@ AlterTableAddColumn(Oid myrelid,
|
||||
newreltup = heap_copytuple(reltup);
|
||||
|
||||
((Form_pg_class) GETSTRUCT(newreltup))->relnatts = maxatts;
|
||||
AssertTupleDescHasOid(pgclass->rd_att);
|
||||
|
||||
simple_heap_update(pgclass, &newreltup->t_self, newreltup);
|
||||
|
||||
/* keep catalog indexes current */
|
||||
@@ -3430,7 +3429,7 @@ AlterTableCreateToastTable(Oid relOid, bool silent)
|
||||
snprintf(toast_idxname, NAMEDATALEN, "pg_toast_%u_index", relOid);
|
||||
|
||||
/* this is pretty painful... need a tuple descriptor */
|
||||
tupdesc = CreateTemplateTupleDesc(3, WITHOUTOID);
|
||||
tupdesc = CreateTemplateTupleDesc(3, false);
|
||||
TupleDescInitEntry(tupdesc, (AttrNumber) 1,
|
||||
"chunk_id",
|
||||
OIDOID,
|
||||
@@ -3464,7 +3463,6 @@ AlterTableCreateToastTable(Oid relOid, bool silent)
|
||||
tupdesc,
|
||||
RELKIND_TOASTVALUE,
|
||||
shared_relation,
|
||||
false,
|
||||
true);
|
||||
|
||||
/* make the toast relation visible, else index creation will fail */
|
||||
|
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.129 2002/08/25 17:20:00 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.130 2002/09/02 01:05:04 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -301,7 +301,6 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint)
|
||||
tuple = heap_formtuple(tgrel->rd_att, values, nulls);
|
||||
|
||||
/* force tuple to have the desired OID */
|
||||
AssertTupleDescHasOid(tgrel->rd_att);
|
||||
HeapTupleSetOid(tuple, trigoid);
|
||||
|
||||
/*
|
||||
@@ -421,7 +420,6 @@ DropTrigger(Oid relid, const char *trigname, DropBehavior behavior)
|
||||
if (!pg_class_ownercheck(relid, GetUserId()))
|
||||
aclcheck_error(ACLCHECK_NOT_OWNER, get_rel_name(relid));
|
||||
|
||||
AssertTupleDescHasOid(tgrel->rd_att);
|
||||
object.classId = RelationGetRelid(tgrel);
|
||||
object.objectId = HeapTupleGetOid(tup);
|
||||
object.objectSubId = 0;
|
||||
@@ -683,7 +681,6 @@ RelationBuildTriggers(Relation relation)
|
||||
RelationGetRelationName(relation));
|
||||
build = &(triggers[found]);
|
||||
|
||||
AssertTupleDescHasOid(tgrel->rd_att);
|
||||
build->tgoid = HeapTupleGetOid(htup);
|
||||
build->tgname = MemoryContextStrdup(CacheMemoryContext,
|
||||
DatumGetCString(DirectFunctionCall1(nameout,
|
||||
@@ -1923,7 +1920,6 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt)
|
||||
elog(ERROR, "Constraint '%s' is not deferrable",
|
||||
cname);
|
||||
|
||||
AssertTupleDescHasOid(tgrel->rd_att);
|
||||
constr_oid = HeapTupleGetOid(htup);
|
||||
loid = lappendi(loid, constr_oid);
|
||||
found = true;
|
||||
|
@@ -13,7 +13,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.235 2002/08/30 22:18:05 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.236 2002/09/02 01:05:04 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -396,7 +396,6 @@ getrels(const RangeVar *vacrel, const char *stmttype)
|
||||
{
|
||||
/* Make a relation list entry for this guy */
|
||||
oldcontext = MemoryContextSwitchTo(vac_context);
|
||||
AssertTupleDescHasOid(pgclass->rd_att);
|
||||
vrl = lappendi(vrl, HeapTupleGetOid(tuple));
|
||||
MemoryContextSwitchTo(oldcontext);
|
||||
}
|
||||
@@ -1861,8 +1860,9 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
|
||||
/* NO ELOG(ERROR) TILL CHANGES ARE LOGGED */
|
||||
START_CRIT_SECTION();
|
||||
|
||||
tuple.t_data->t_infomask &=
|
||||
~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_IN);
|
||||
tuple.t_data->t_infomask &= ~(HEAP_XMIN_COMMITTED |
|
||||
HEAP_XMIN_INVALID |
|
||||
HEAP_MOVED_IN);
|
||||
tuple.t_data->t_infomask |= HEAP_MOVED_OFF;
|
||||
HeapTupleHeaderSetXvac(tuple.t_data, myXID);
|
||||
|
||||
@@ -1901,12 +1901,16 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
|
||||
* Update the state of the copied tuple, and store it
|
||||
* on the destination page.
|
||||
*/
|
||||
newtup.t_data->t_infomask &=
|
||||
~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_OFF);
|
||||
newtup.t_data->t_infomask &= ~(HEAP_XMIN_COMMITTED |
|
||||
HEAP_XMIN_INVALID |
|
||||
HEAP_MOVED_OFF);
|
||||
newtup.t_data->t_infomask |= HEAP_MOVED_IN;
|
||||
HeapTupleHeaderSetXvac(newtup.t_data, myXID);
|
||||
newoff = PageAddItem(ToPage, (Item) newtup.t_data, tuple_len,
|
||||
InvalidOffsetNumber, LP_USED);
|
||||
newoff = PageAddItem(ToPage,
|
||||
(Item) newtup.t_data,
|
||||
tuple_len,
|
||||
InvalidOffsetNumber,
|
||||
LP_USED);
|
||||
if (newoff == InvalidOffsetNumber)
|
||||
{
|
||||
elog(PANIC, "moving chain: failed to add item with len = %lu to page %u",
|
||||
@@ -2038,11 +2042,11 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
|
||||
START_CRIT_SECTION();
|
||||
|
||||
/*
|
||||
* Mark new tuple as moved_in by vacuum and store vacuum XID
|
||||
* in t_cid !!!
|
||||
* Mark new tuple as MOVED_IN by me.
|
||||
*/
|
||||
newtup.t_data->t_infomask &=
|
||||
~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_OFF);
|
||||
newtup.t_data->t_infomask &= ~(HEAP_XMIN_COMMITTED |
|
||||
HEAP_XMIN_INVALID |
|
||||
HEAP_MOVED_OFF);
|
||||
newtup.t_data->t_infomask |= HEAP_MOVED_IN;
|
||||
HeapTupleHeaderSetXvac(newtup.t_data, myXID);
|
||||
|
||||
@@ -2064,11 +2068,11 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
|
||||
newtup.t_self = newtup.t_data->t_ctid;
|
||||
|
||||
/*
|
||||
* Mark old tuple as moved_off by vacuum and store vacuum XID
|
||||
* in t_cid !!!
|
||||
* Mark old tuple as MOVED_OFF by me.
|
||||
*/
|
||||
tuple.t_data->t_infomask &=
|
||||
~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_IN);
|
||||
tuple.t_data->t_infomask &= ~(HEAP_XMIN_COMMITTED |
|
||||
HEAP_XMIN_INVALID |
|
||||
HEAP_MOVED_IN);
|
||||
tuple.t_data->t_infomask |= HEAP_MOVED_OFF;
|
||||
HeapTupleHeaderSetXvac(tuple.t_data, myXID);
|
||||
|
||||
|
Reference in New Issue
Block a user