mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-15 08:20:16 +08:00
Fix bootstrap so it properly defines alignment of attributes.
This commit is contained in:
parent
f821eece80
commit
9b73210f9d
@ -7,7 +7,7 @@
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.48 1998/08/19 02:01:26 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.49 1998/08/24 19:04:02 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -90,7 +90,7 @@ static AttributeTupleForm AllocateAttribute(void);
|
||||
static bool BootstrapAlreadySeen(Oid id);
|
||||
static int CompHash(char *str, int len);
|
||||
static hashnode *FindStr(char *str, int length, hashnode *mderef);
|
||||
static int gettype(char *type);
|
||||
static Oid gettype(char *type);
|
||||
static void cleanup(void);
|
||||
|
||||
/* ----------------
|
||||
@ -571,7 +571,7 @@ void
|
||||
DefineAttr(char *name, char *type, int attnum)
|
||||
{
|
||||
int attlen;
|
||||
int t;
|
||||
Oid typeoid;
|
||||
|
||||
if (reldesc != NULL)
|
||||
{
|
||||
@ -579,7 +579,7 @@ DefineAttr(char *name, char *type, int attnum)
|
||||
closerel(relname);
|
||||
}
|
||||
|
||||
t = gettype(type);
|
||||
typeoid = gettype(type);
|
||||
if (attrtypes[attnum] == (AttributeTupleForm) NULL)
|
||||
attrtypes[attnum] = AllocateAttribute();
|
||||
if (Typ != (struct typmap **) NULL)
|
||||
@ -591,16 +591,18 @@ DefineAttr(char *name, char *type, int attnum)
|
||||
attrtypes[attnum]->attnum = 1 + attnum; /* fillatt */
|
||||
attlen = attrtypes[attnum]->attlen = Ap->am_typ.typlen;
|
||||
attrtypes[attnum]->attbyval = Ap->am_typ.typbyval;
|
||||
attrtypes[attnum]->attalign = Ap->am_typ.typalign;
|
||||
}
|
||||
else
|
||||
{
|
||||
attrtypes[attnum]->atttypid = Procid[t].oid;
|
||||
attrtypes[attnum]->atttypid = Procid[typeoid].oid;
|
||||
namestrcpy(&attrtypes[attnum]->attname, name);
|
||||
if (!Quiet)
|
||||
printf("<%s %s> ", attrtypes[attnum]->attname.data, type);
|
||||
attrtypes[attnum]->attnum = 1 + attnum; /* fillatt */
|
||||
attlen = attrtypes[attnum]->attlen = Procid[t].len;
|
||||
attrtypes[attnum]->attbyval = (attlen == 1) || (attlen == 2) || (attlen == 4);
|
||||
attlen = attrtypes[attnum]->attlen = Procid[typeoid].len;
|
||||
attrtypes[attnum]->attbyval = (attlen == 1) || (attlen == 2) ||(attlen == 4);
|
||||
attrtypes[attnum]->attalign = 'i';
|
||||
}
|
||||
attrtypes[attnum]->attcacheoff = -1;
|
||||
attrtypes[attnum]->atttypmod = -1;
|
||||
@ -784,7 +786,7 @@ cleanup()
|
||||
* gettype
|
||||
* ----------------
|
||||
*/
|
||||
static int
|
||||
static Oid
|
||||
gettype(char *type)
|
||||
{
|
||||
int i;
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.52 1998/08/21 23:22:34 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.53 1998/08/24 19:04:04 momjian Exp $
|
||||
*
|
||||
*
|
||||
* INTERFACE ROUTINES
|
||||
@ -279,6 +279,7 @@ BuildFuncTupleDesc(FuncIndexInfo *funcInfo)
|
||||
funcTupDesc->attrs[0]->attbyval = ((TypeTupleForm) GETSTRUCT(tuple))->typbyval;
|
||||
funcTupDesc->attrs[0]->attcacheoff = -1;
|
||||
funcTupDesc->attrs[0]->atttypmod = -1;
|
||||
funcTupDesc->attrs[0]->attalign = ((TypeTupleForm) GETSTRUCT(tuple))->typalign;
|
||||
|
||||
/*
|
||||
* make the attributes name the same as the functions
|
||||
@ -378,7 +379,6 @@ ConstructTupleDescriptor(Oid heapoid,
|
||||
* here we are indexing on a normal attribute (1...n)
|
||||
* ----------------
|
||||
*/
|
||||
|
||||
heapTupDesc = RelationGetTupleDescriptor(heapRelation);
|
||||
atind = AttrNumberGetAttrOffset(atnum);
|
||||
|
||||
@ -400,6 +400,7 @@ ConstructTupleDescriptor(Oid heapoid,
|
||||
((AttributeTupleForm) to)->atthasdef = false;
|
||||
((AttributeTupleForm) to)->attcacheoff = -1;
|
||||
((AttributeTupleForm) to)->atttypmod = -1;
|
||||
((AttributeTupleForm) to)->attalign = 'i';
|
||||
|
||||
/*
|
||||
* if the keytype is defined, we need to change the tuple form's
|
||||
@ -417,11 +418,11 @@ ConstructTupleDescriptor(Oid heapoid,
|
||||
IndexKeyType->name);
|
||||
((AttributeTupleForm) to)->atttypid = tup->t_oid;
|
||||
((AttributeTupleForm) to)->attbyval =
|
||||
((TypeTupleForm) ((char *) tup + tup->t_hoff))->typbyval;
|
||||
|
||||
((TypeTupleForm) GETSTRUCT(tup))->typbyval;
|
||||
((AttributeTupleForm) to)->attlen =
|
||||
((TypeTupleForm) ((char *) tup + tup->t_hoff))->typlen;
|
||||
|
||||
((TypeTupleForm) GETSTRUCT(tup))->typlen;
|
||||
((AttributeTupleForm) to)->attalign =
|
||||
((TypeTupleForm) GETSTRUCT(tup))->typalign;
|
||||
((AttributeTupleForm) to)->atttypmod = IndexKeyType->typmod;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user