Commit 9b73210f authored by Bruce Momjian's avatar Bruce Momjian

Fix bootstrap so it properly defines alignment of attributes.

parent f821eece
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * 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); ...@@ -90,7 +90,7 @@ static AttributeTupleForm AllocateAttribute(void);
static bool BootstrapAlreadySeen(Oid id); static bool BootstrapAlreadySeen(Oid id);
static int CompHash(char *str, int len); static int CompHash(char *str, int len);
static hashnode *FindStr(char *str, int length, hashnode *mderef); static hashnode *FindStr(char *str, int length, hashnode *mderef);
static int gettype(char *type); static Oid gettype(char *type);
static void cleanup(void); static void cleanup(void);
/* ---------------- /* ----------------
...@@ -571,7 +571,7 @@ void ...@@ -571,7 +571,7 @@ void
DefineAttr(char *name, char *type, int attnum) DefineAttr(char *name, char *type, int attnum)
{ {
int attlen; int attlen;
int t; Oid typeoid;
if (reldesc != NULL) if (reldesc != NULL)
{ {
...@@ -579,7 +579,7 @@ DefineAttr(char *name, char *type, int attnum) ...@@ -579,7 +579,7 @@ DefineAttr(char *name, char *type, int attnum)
closerel(relname); closerel(relname);
} }
t = gettype(type); typeoid = gettype(type);
if (attrtypes[attnum] == (AttributeTupleForm) NULL) if (attrtypes[attnum] == (AttributeTupleForm) NULL)
attrtypes[attnum] = AllocateAttribute(); attrtypes[attnum] = AllocateAttribute();
if (Typ != (struct typmap **) NULL) if (Typ != (struct typmap **) NULL)
...@@ -591,16 +591,18 @@ DefineAttr(char *name, char *type, int attnum) ...@@ -591,16 +591,18 @@ DefineAttr(char *name, char *type, int attnum)
attrtypes[attnum]->attnum = 1 + attnum; /* fillatt */ attrtypes[attnum]->attnum = 1 + attnum; /* fillatt */
attlen = attrtypes[attnum]->attlen = Ap->am_typ.typlen; attlen = attrtypes[attnum]->attlen = Ap->am_typ.typlen;
attrtypes[attnum]->attbyval = Ap->am_typ.typbyval; attrtypes[attnum]->attbyval = Ap->am_typ.typbyval;
attrtypes[attnum]->attalign = Ap->am_typ.typalign;
} }
else else
{ {
attrtypes[attnum]->atttypid = Procid[t].oid; attrtypes[attnum]->atttypid = Procid[typeoid].oid;
namestrcpy(&attrtypes[attnum]->attname, name); namestrcpy(&attrtypes[attnum]->attname, name);
if (!Quiet) if (!Quiet)
printf("<%s %s> ", attrtypes[attnum]->attname.data, type); printf("<%s %s> ", attrtypes[attnum]->attname.data, type);
attrtypes[attnum]->attnum = 1 + attnum; /* fillatt */ attrtypes[attnum]->attnum = 1 + attnum; /* fillatt */
attlen = attrtypes[attnum]->attlen = Procid[t].len; attlen = attrtypes[attnum]->attlen = Procid[typeoid].len;
attrtypes[attnum]->attbyval = (attlen == 1) || (attlen == 2) || (attlen == 4); attrtypes[attnum]->attbyval = (attlen == 1) || (attlen == 2) ||(attlen == 4);
attrtypes[attnum]->attalign = 'i';
} }
attrtypes[attnum]->attcacheoff = -1; attrtypes[attnum]->attcacheoff = -1;
attrtypes[attnum]->atttypmod = -1; attrtypes[attnum]->atttypmod = -1;
...@@ -784,7 +786,7 @@ cleanup() ...@@ -784,7 +786,7 @@ cleanup()
* gettype * gettype
* ---------------- * ----------------
*/ */
static int static Oid
gettype(char *type) gettype(char *type)
{ {
int i; int i;
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 * INTERFACE ROUTINES
...@@ -279,6 +279,7 @@ BuildFuncTupleDesc(FuncIndexInfo *funcInfo) ...@@ -279,6 +279,7 @@ BuildFuncTupleDesc(FuncIndexInfo *funcInfo)
funcTupDesc->attrs[0]->attbyval = ((TypeTupleForm) GETSTRUCT(tuple))->typbyval; funcTupDesc->attrs[0]->attbyval = ((TypeTupleForm) GETSTRUCT(tuple))->typbyval;
funcTupDesc->attrs[0]->attcacheoff = -1; funcTupDesc->attrs[0]->attcacheoff = -1;
funcTupDesc->attrs[0]->atttypmod = -1; funcTupDesc->attrs[0]->atttypmod = -1;
funcTupDesc->attrs[0]->attalign = ((TypeTupleForm) GETSTRUCT(tuple))->typalign;
/* /*
* make the attributes name the same as the functions * make the attributes name the same as the functions
...@@ -378,7 +379,6 @@ ConstructTupleDescriptor(Oid heapoid, ...@@ -378,7 +379,6 @@ ConstructTupleDescriptor(Oid heapoid,
* here we are indexing on a normal attribute (1...n) * here we are indexing on a normal attribute (1...n)
* ---------------- * ----------------
*/ */
heapTupDesc = RelationGetTupleDescriptor(heapRelation); heapTupDesc = RelationGetTupleDescriptor(heapRelation);
atind = AttrNumberGetAttrOffset(atnum); atind = AttrNumberGetAttrOffset(atnum);
...@@ -400,6 +400,7 @@ ConstructTupleDescriptor(Oid heapoid, ...@@ -400,6 +400,7 @@ ConstructTupleDescriptor(Oid heapoid,
((AttributeTupleForm) to)->atthasdef = false; ((AttributeTupleForm) to)->atthasdef = false;
((AttributeTupleForm) to)->attcacheoff = -1; ((AttributeTupleForm) to)->attcacheoff = -1;
((AttributeTupleForm) to)->atttypmod = -1; ((AttributeTupleForm) to)->atttypmod = -1;
((AttributeTupleForm) to)->attalign = 'i';
/* /*
* if the keytype is defined, we need to change the tuple form's * if the keytype is defined, we need to change the tuple form's
...@@ -417,11 +418,11 @@ ConstructTupleDescriptor(Oid heapoid, ...@@ -417,11 +418,11 @@ ConstructTupleDescriptor(Oid heapoid,
IndexKeyType->name); IndexKeyType->name);
((AttributeTupleForm) to)->atttypid = tup->t_oid; ((AttributeTupleForm) to)->atttypid = tup->t_oid;
((AttributeTupleForm) to)->attbyval = ((AttributeTupleForm) to)->attbyval =
((TypeTupleForm) ((char *) tup + tup->t_hoff))->typbyval; ((TypeTupleForm) GETSTRUCT(tup))->typbyval;
((AttributeTupleForm) to)->attlen = ((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; ((AttributeTupleForm) to)->atttypmod = IndexKeyType->typmod;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment