From c65ea0e040f08b59407cd74f8f0f0dd190169d46 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Fri, 16 Jan 1998 23:21:07 +0000
Subject: [PATCH] New pg_attribute.atttypmod for type-specific information like
 varchar length.

Cleans up code so attlen is always length.

Removed varchar() hack added earlier.

Will fix bug in selecting varchar() fields, and varchar() can be
variable length.
---
 src/backend/access/common/tupdesc.c    |  17 +-
 src/backend/catalog/catalog.c          |  11 +-
 src/backend/catalog/index.c            |  24 +-
 src/backend/commands/command.c         |   9 +-
 src/backend/commands/copy.c            |   4 +-
 src/backend/commands/sequence.c        |   1 +
 src/backend/executor/execAmi.c         |  28 +-
 src/backend/executor/execMain.c        |   9 +-
 src/backend/executor/execUtils.c       |  75 +---
 src/backend/nodes/copyfuncs.c          |   4 +-
 src/backend/nodes/outfuncs.c           |   8 +-
 src/backend/optimizer/prep/preptlist.c |   6 +-
 src/backend/parser/gram.y              |   4 +-
 src/backend/parser/parse_expr.c        |  13 +-
 src/backend/parser/parse_oper.c        |   6 +-
 src/backend/parser/parse_relation.c    |  15 +-
 src/backend/parser/parse_target.c      |  19 +-
 src/backend/parser/parse_type.c        |   7 +-
 src/backend/utils/adt/varchar.c        |  22 +-
 src/bin/pg_dump/pg_dump.c              |  34 +-
 src/bin/pg_dump/pg_dump.h              |   4 +-
 src/include/catalog/pg_attribute.h     | 462 +++++++++++++------------
 src/include/catalog/pg_class.h         |   6 +-
 src/include/nodes/parsenodes.h         |   4 +-
 src/include/parser/parse_expr.h        |   4 +-
 src/include/parser/parse_type.h        |   4 +-
 src/include/utils/builtins.h           |   6 +-
 27 files changed, 339 insertions(+), 467 deletions(-)

diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c
index 9324a95c768..f23c8e86572 100644
--- a/src/backend/access/common/tupdesc.c
+++ b/src/backend/access/common/tupdesc.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.31 1998/01/07 21:00:45 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.32 1998/01/16 23:19:16 momjian Exp $
  *
  * NOTES
  *	  some of the executor utility code such as "ExecTypeFromTL" should be
@@ -301,11 +301,12 @@ TupleDescInitEntry(TupleDesc desc,
 
 	att->attdisbursion = 0;		/* dummy value */
 	att->attcacheoff = -1;
+	att->atttypmod = 0;
 
 	att->attnum = attributeNumber;
 	att->attnelems = attdim;
 	att->attisset = attisset;
-
+	
 	att->attnotnull = false;
 	att->atthasdef = false;
 
@@ -512,17 +513,7 @@ BuildDescForRelation(List *schema, char *relname)
 					 typename);
 		}
 
-		/*
-		 * this is for char() and varchar(). When an entry is of type
-		 * char() or varchar(), typlen is set to the appropriate length,
-		 * which we'll use here instead. (The catalog lookup only returns
-		 * the length of bpchar and varchar which is not what we want!) -
-		 * ay 6/95
-		 */
-		if (entry->typename->typlen > 0)
-		{
-			desc->attrs[attnum - 1]->attlen = entry->typename->typlen;
-		}
+		desc->attrs[attnum - 1]->atttypmod = entry->typename->typmod;
 
 		/* This is for constraints */
 		if (entry->is_not_null)
diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c
index 2669a4481fa..f45685ea8a2 100644
--- a/src/backend/catalog/catalog.c
+++ b/src/backend/catalog/catalog.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/catalog.c,v 1.12 1998/01/06 19:42:26 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/catalog.c,v 1.13 1998/01/16 23:19:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -190,16 +190,9 @@ fillatt(TupleDesc tupleDesc)
 			 * and byval, since those were already set in
 			 * TupleDescInitEntry.	In fact, this seems redundant here,
 			 * but who knows what I'll break if I take it out...
-			 *
-			 * same for char() and varchar() stuff. I share the same
-			 * sentiments. This function is poorly written anyway. -ay
-			 * 6/95
 			 */
-			if (!(*attributeP)->attisset &&
-				(*attributeP)->atttypid != BPCHAROID &&
-				(*attributeP)->atttypid != VARCHAROID)
+			if (!(*attributeP)->attisset)
 			{
-
 				typp = (TypeTupleForm) GETSTRUCT(tuple);		/* XXX */
 				(*attributeP)->attlen = typp->typlen;
 				(*attributeP)->attbyval = typp->typbyval;
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index c98c877d7d2..6772f8b6658 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.35 1998/01/15 19:42:27 pgsql Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.36 1998/01/16 23:19:27 momjian Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -107,6 +107,7 @@ DefaultBuild(Relation heapRelation, Relation indexRelation,
  *		AttrNumber		attnum;
  *		uint32			attnelems;
  *		int32			attcacheoff;
+ *		int16			atttypmod;
  *		bool			attbyval;
  *		bool			attisset;
  *		char			attalign;
@@ -117,12 +118,12 @@ DefaultBuild(Relation heapRelation, Relation indexRelation,
  * ----------------------------------------------------------------
  */
 static FormData_pg_attribute sysatts[] = {
-	{0l, {"ctid"}, 27l, 0l, 6, -1, 0, -1, '\0', '\0', 'i', '\0', '\0'},
-	{0l, {"oid"}, 26l, 0l, 4, -2, 0, -1, '\001', '\0', 'i', '\0', '\0'},
-	{0l, {"xmin"}, 28l, 0l, 4, -3, 0, -1, '\0', '\0', 'i', '\0', '\0'},
-	{0l, {"cmin"}, 29l, 0l, 4, -4, 0, -1, '\001', '\0', 'i', '\0', '\0'},
-	{0l, {"xmax"}, 28l, 0l, 4, -5, 0, -1, '\0', '\0', 'i', '\0', '\0'},
-	{0l, {"cmax"}, 29l, 0l, 4, -6, 0, -1, '\001', '\0', 'i', '\0', '\0'},
+	{0l, {"ctid"}, 27l, 0l, 6, -1, 0, -1, 0, '\0', '\0', 'i', '\0', '\0'},
+	{0l, {"oid"},  26l, 0l, 4, -2, 0, -1, 0, '\001', '\0', 'i', '\0', '\0'},
+	{0l, {"xmin"}, 28l, 0l, 4, -3, 0, -1, 0, '\0', '\0', 'i', '\0', '\0'},
+	{0l, {"cmin"}, 29l, 0l, 4, -4, 0, -1, 0, '\001', '\0', 'i', '\0', '\0'},
+	{0l, {"xmax"}, 28l, 0l, 4, -5, 0, -1, 0, '\0', '\0', 'i', '\0', '\0'},
+	{0l, {"cmax"}, 29l, 0l, 4, -6, 0, -1, 0, '\001', '\0', 'i', '\0', '\0'},
 };
 
 /* ----------------------------------------------------------------
@@ -436,6 +437,7 @@ ConstructTupleDescriptor(Oid heapoid,
 
 		((AttributeTupleForm) to)->attnotnull = false;
 		((AttributeTupleForm) to)->atthasdef = false;
+		((AttributeTupleForm) to)->atttypmod = 0;
 
 		/*
 		 * if the keytype is defined, we need to change the tuple form's
@@ -454,11 +456,11 @@ ConstructTupleDescriptor(Oid heapoid,
 			((AttributeTupleForm) to)->atttypid = tup->t_oid;
 			((AttributeTupleForm) to)->attbyval =
 				((TypeTupleForm) ((char *) tup + tup->t_hoff))->typbyval;
-			if (IndexKeyType->typlen > 0)
-				((AttributeTupleForm) to)->attlen = IndexKeyType->typlen;
-			else
-				((AttributeTupleForm) to)->attlen =
+
+			((AttributeTupleForm) to)->attlen =
 					((TypeTupleForm) ((char *) tup + tup->t_hoff))->typlen;
+
+			((AttributeTupleForm) to)->atttypmod = IndexKeyType->typmod;
 		}
 
 
diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c
index d9a4281ea12..5f7bcd2d073 100644
--- a/src/backend/commands/command.c
+++ b/src/backend/commands/command.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.23 1998/01/05 16:38:44 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.24 1998/01/16 23:19:33 momjian Exp $
  *
  * NOTES
  *	  The PortalExecutorHeapMemory crap needs to be eliminated
@@ -482,11 +482,8 @@ PerformAddAttribute(char *relationName,
 		}
 		namestrcpy(&(attribute->attname), (char *) key[1].sk_argument);
 		attribute->atttypid = typeTuple->t_oid;
-		if (colDef->typename->typlen > 0)
-			attribute->attlen = colDef->typename->typlen;
-		else
-/* bpchar, varchar, text */
-			attribute->attlen = form->typlen;
+		attribute->attlen = form->typlen;
+		attribute->atttypmod = colDef->typename->typmod;
 		attribute->attnum = i;
 		attribute->attbyval = form->typbyval;
 		attribute->attnelems = attnelems;
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 9b5fbda69e8..b3017dcd74f 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.38 1998/01/15 19:42:36 pgsql Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.39 1998/01/16 23:19:40 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -574,7 +574,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
 					values[i] =
 						(Datum) (*fmgr_faddr(&in_functions[i])) (string,
 												   elements[i],
-												   attr[i]->attlen);
+												   attr[i]->atttypmod);
 
 					/*
 					 * Sanity check - by reference attributes cannot
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c
index bf7e79d3ed1..58008dd1382 100644
--- a/src/backend/commands/sequence.c
+++ b/src/backend/commands/sequence.c
@@ -98,6 +98,7 @@ DefineSequence(CreateSeqStmt *seq)
 		typnam = makeNode(TypeName);
 		typnam->setof = FALSE;
 		typnam->arrayBounds = NULL;
+		typnam->typmod = 0;
 		coldef = makeNode(ColumnDef);
 		coldef->typename = typnam;
 		coldef->defval = NULL;
diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c
index 675a58d649f..2349f32411e 100644
--- a/src/backend/executor/execAmi.c
+++ b/src/backend/executor/execAmi.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execAmi.c,v 1.15 1998/01/16 05:03:45 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execAmi.c,v 1.16 1998/01/16 23:19:47 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,7 +42,6 @@
 #include "access/genam.h"
 #include "access/heapam.h"
 #include "catalog/heap.h"
-#include "catalog/pg_type.h"
 
 static Pointer
 ExecBeginScan(Relation relation, int nkeys, ScanKey skeys,
@@ -125,31 +124,6 @@ ExecOpenR(Oid relationOid, bool isindex)
 	if (relation == NULL)
 		elog(DEBUG, "ExecOpenR: relation == NULL, heap_open failed.");
 
-	{
-		int i;
-		Relation trel = palloc(sizeof(RelationData));
-		TupleDesc tdesc = palloc(sizeof(struct tupleDesc));
-		AttributeTupleForm *tatt =
-				palloc(sizeof(AttributeTupleForm*)*relation->rd_att->natts);
-
-		memcpy(trel, relation, sizeof(RelationData));
-		memcpy(tdesc, relation->rd_att, sizeof(struct tupleDesc));
-		trel->rd_att = tdesc;
-		tdesc->attrs = tatt;
-		
-		for (i = 0; i < relation->rd_att->natts; i++)
-		{
-			if (relation->rd_att->attrs[i]->atttypid != VARCHAROID)
-				tdesc->attrs[i] = relation->rd_att->attrs[i];
-			else
-			{
-				tdesc->attrs[i] = palloc(sizeof(FormData_pg_attribute));
-				memcpy(tdesc->attrs[i], relation->rd_att->attrs[i],
-											sizeof(FormData_pg_attribute));
-				tdesc->attrs[i]->attlen = -1;
-			}
-		}
-	}
 	return relation;
 }
 
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index b4716cc2bb5..ecfc4d9a952 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -26,7 +26,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.38 1998/01/14 15:48:09 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.39 1998/01/16 23:19:49 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -563,13 +563,8 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate)
 				 */
 				tupdesc = CreateTupleDescCopy(tupType);
 
-				/* fixup to prevent zero-length columns in create */
-				setVarAttrLenForCreateTable(tupdesc, targetList, rangeTable);
-
 				intoRelationId = heap_create_with_catalog(intoName, tupdesc);
-#ifdef NOT_USED					/* it's copy ... */
-				resetVarAttrLenForCreateTable(tupdesc);
-#endif
+
 				FreeTupleDesc(tupdesc);
 
 				/* ----------------
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c
index 75f44e865ea..8d93ecf9cc0 100644
--- a/src/backend/executor/execUtils.c
+++ b/src/backend/executor/execUtils.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.23 1998/01/07 21:02:50 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.24 1998/01/16 23:19:52 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1177,76 +1177,3 @@ ExecInsertIndexTuples(TupleTableSlot *slot,
 	if (econtext != NULL)
 		pfree(econtext);
 }
-
-/* ----------------------------------------------------------------
- * setVarAttrLenForCreateTable -
- *	  called when we do a SELECT * INTO TABLE tab
- *	  needed for attributes that have a defined length, like bpchar and
- *	  varchar
- * ----------------------------------------------------------------
- */
-void
-setVarAttrLenForCreateTable(TupleDesc tupType, List *targetList,
-							List *rangeTable)
-{
-	List	   *tl;
-	TargetEntry *tle;
-	Node	   *expr;
-	int			varno;
-
-	tl = targetList;
-
-	for (varno = 0; varno < tupType->natts; varno++)
-	{
-		tle = lfirst(tl);
-
-		if (tupType->attrs[varno]->atttypid == BPCHAROID ||
-			tupType->attrs[varno]->atttypid == VARCHAROID)
-		{
-			expr = tle->expr;
-			if (expr && IsA(expr, Var))
-			{
-				Var		   *var;
-				RangeTblEntry *rtentry;
-				Relation	rd;
-
-				var = (Var *) expr;
-				rtentry = rt_fetch(var->varnoold, rangeTable);
-				rd = heap_open(rtentry->relid);
-				/* set length to that defined in relation */
-				tupType->attrs[varno]->attlen =
-					(*rd->rd_att->attrs[var->varoattno - 1]).attlen;
-				heap_close(rd);
-			}
-			else
-				elog(ERROR, "setVarAttrLenForCreateTable: can't get length for variable-length field");
-		}
-		tl = lnext(tl);
-	}
-}
-
-
-#ifdef NOT_USED					/* look at execMain.c */
-/* ----------------------------------------------------------------
- * resetVarAttrLenForCreateTable -
- *	  called when we do a SELECT * INTO TABLE tab
- *	  needed for attributes that have a defined length, like bpchar and
- *	  varchar
- *	  resets length to -1 for those types
- * ----------------------------------------------------------------
- */
-void
-resetVarAttrLenForCreateTable(TupleDesc tupType)
-{
-	int			varno;
-
-	for (varno = 0; varno < tupType->natts; varno++)
-	{
-		if (tupType->attrs[varno]->atttypid == BPCHAROID ||
-			tupType->attrs[varno]->atttypid == VARCHAROID)
-			/* set length to original -1 */
-			tupType->attrs[varno]->attlen = -1;
-	}
-}
-
-#endif
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index e0ccc63f350..fe045539223 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.30 1998/01/15 18:59:20 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.31 1998/01/16 23:19:56 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1480,8 +1480,8 @@ _copyTypeName(TypeName *from)
 		newnode->name = pstrdup(from->name);
 	newnode->timezone = from->timezone;
 	newnode->setof = from->setof;
+	newnode->typmod = from->typmod;
 	Node_Copy(from, newnode, arrayBounds);
-	newnode->typlen = from->typlen;
 
 	return newnode;
 }
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index ba4b27f822c..41f3022c135 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.21 1998/01/15 18:59:26 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.22 1998/01/16 23:19:59 momjian Exp $
  *
  * NOTES
  *	  Every (plan) node in POSTGRES has an associated "out" routine which
@@ -137,11 +137,11 @@ _outTypeName(StringInfo str, TypeName *node)
 	appendStringInfo(str, (node->timezone ? "true" : "false"));
 	appendStringInfo(str, " :setof ");
 	appendStringInfo(str, (node->setof ? "true" : "false"));
+	appendStringInfo(str, " :typmod ");
+	sprintf(buf," %d ", node->typmod);
+	appendStringInfo(str, buf);
 	appendStringInfo(str, " :arrayBounds ");
 	_outNode(str, node->arrayBounds);
-	appendStringInfo(str, " :typlen ");
-	sprintf(buf," %d ", node->typlen);
-	appendStringInfo(str, buf);
 }
 
 static void
diff --git a/src/backend/optimizer/prep/preptlist.c b/src/backend/optimizer/prep/preptlist.c
index faf281985e4..e92fbb33322 100644
--- a/src/backend/optimizer/prep/preptlist.c
+++ b/src/backend/optimizer/prep/preptlist.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/optimizer/prep/preptlist.c,v 1.6 1997/11/25 22:00:06 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/optimizer/prep/preptlist.c,v 1.7 1998/01/16 23:20:09 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -278,13 +278,9 @@ new_relation_targetlist(Oid relid, Index rt_index, NodeTag node_type)
 		 */
 		attisset = get_attisset( /* type_id, */ relid, attname);
 		if (attisset)
-		{
 			typlen = typeLen(typeidType(OIDOID));
-		}
 		else
-		{
 			typlen = get_typlen(atttype);
-		}
 
 		switch (node_type)
 		{
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index d2ed0d2633f..77a2e0b7c29 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.90 1998/01/11 20:01:59 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.91 1998/01/16 23:20:14 momjian Exp $
  *
  * HISTORY
  *	  AUTHOR			DATE			MAJOR EVENT
@@ -2754,7 +2754,7 @@ Character:  character '(' Iconst ')'
 					 * between this and "text" is that we blank-pad and
 					 * truncate where necessary
 					 */
-					$$->typlen = VARHDRSZ + $3;
+					$$->typmod = VARHDRSZ + $3;
 				}
 		| character
 				{
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c
index c17c3e9d48e..00efc044dcd 100644
--- a/src/backend/parser/parse_expr.c
+++ b/src/backend/parser/parse_expr.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.6 1998/01/05 03:32:27 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.7 1998/01/16 23:20:18 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -30,7 +30,7 @@
 #include "parser/parse_target.h"
 #include "utils/builtins.h"
 
-static Node *parser_typecast(Value *expr, TypeName *typename, int typlen);
+static Node *parser_typecast(Value *expr, TypeName *typename, int atttypmod);
 
 /*
  * transformExpr -
@@ -403,7 +403,7 @@ handleNestedDots(ParseState *pstate, Attr *attr, int *curr_resno, int precedence
 }
 
 static Node	   *
-parser_typecast(Value *expr, TypeName *typename, int typlen)
+parser_typecast(Value *expr, TypeName *typename, int atttypmod)
 {
 	/* check for passing non-ints */
 	Const	   *adt;
@@ -492,7 +492,7 @@ parser_typecast(Value *expr, TypeName *typename, int typlen)
 	}
 #endif
 
-	cp = stringTypeString(tp, const_string, typlen);
+	cp = stringTypeString(tp, const_string, atttypmod);
 
 	if (!typeByVal(tp))
 	{
@@ -540,7 +540,7 @@ parser_typecast(Value *expr, TypeName *typename, int typlen)
 }
 
 Node	   *
-parser_typecast2(Node *expr, Oid exprType, Type tp, int typlen)
+parser_typecast2(Node *expr, Oid exprType, Type tp, int atttypmod)
 {
 	/* check for passing non-ints */
 	Const	   *adt;
@@ -627,8 +627,7 @@ parser_typecast2(Node *expr, Oid exprType, Type tp, int typlen)
 		return ((Node *) adt);
 	}
 
-	cp = stringTypeString(tp, const_string, typlen);
-
+	cp = stringTypeString(tp, const_string, atttypmod);
 
 	if (!typeByVal(tp))
 	{
diff --git a/src/backend/parser/parse_oper.c b/src/backend/parser/parse_oper.c
index 66961ca79ac..253fed7ced4 100644
--- a/src/backend/parser/parse_oper.c
+++ b/src/backend/parser/parse_oper.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.6 1998/01/15 20:54:28 scrappy Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.7 1998/01/16 23:20:20 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -401,9 +401,9 @@ unary_oper_get_candidates(char *op,
 
 	*candidates = NULL;
 
-	fmgr_info(NameEqualRegProcedure, (func_ptr *) &opKey[0].sk_func);
+	fmgr_info(NameEqualRegProcedure, (FmgrInfo *) &opKey[0].sk_func);
 	opKey[0].sk_argument = NameGetDatum(op);
-	fmgr_info(CharacterEqualRegProcedure, (func_ptr *) &opKey[1].sk_func);
+	fmgr_info(CharacterEqualRegProcedure, (FmgrInfo *) &opKey[1].sk_func);
 	opKey[1].sk_argument = CharGetDatum(rightleft);
 
 	/* currently, only "unknown" can be coerced */
diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c
index dc5a11a8df5..692b1eb116e 100644
--- a/src/backend/parser/parse_relation.c
+++ b/src/backend/parser/parse_relation.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.5 1998/01/05 03:32:30 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.6 1998/01/16 23:20:21 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -430,10 +430,15 @@ checkTargetTypes(ParseState *pstate, char *target_colname,
 		elog(ERROR, "Type of %s does not match target column %s",
 			 colname, target_colname);
 
-	if ((attrtype_id == BPCHAROID || attrtype_id == VARCHAROID) &&
-		rd->rd_att->attrs[resdomno_id - 1]->attlen !=
-	pstate->p_target_relation->rd_att->attrs[resdomno_target - 1]->attlen)
-		elog(ERROR, "Length of %s does not match length of target column %s",
+	if (attrtype_id == BPCHAROID &&
+		rd->rd_att->attrs[resdomno_id - 1]->atttypmod !=
+	pstate->p_target_relation->rd_att->attrs[resdomno_target - 1]->atttypmod)
+		elog(ERROR, "Length of %s is longer than length of target column %s",
+			 colname, target_colname);
+	if (attrtype_id == VARCHAROID &&
+		rd->rd_att->attrs[resdomno_id - 1]->atttypmod >
+	pstate->p_target_relation->rd_att->attrs[resdomno_target - 1]->atttypmod)
+		elog(ERROR, "Length of %s is longer than length of target column %s",
 			 colname, target_colname);
 
 	heap_close(rd);
diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c
index eccdbda6b4e..895411aa1da 100644
--- a/src/backend/parser/parse_target.c
+++ b/src/backend/parser/parse_target.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.5 1998/01/05 03:32:31 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.6 1998/01/16 23:20:22 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -326,7 +326,8 @@ make_targetlist_expr(ParseState *pstate,
 	Oid			type_id,
 				attrtype;
 	int			type_len,
-				attrlen;
+				attrlen,
+				attrtypmod;
 	int			resdomno;
 	Relation	rd;
 	bool		attrisset;
@@ -360,14 +361,8 @@ make_targetlist_expr(ParseState *pstate,
 		attrtype = attnumTypeId(rd, resdomno);
 		if ((arrayRef != NIL) && (lfirst(arrayRef) == NIL))
 			attrtype = GetArrayElementType(attrtype);
-		if (attrtype == BPCHAROID || attrtype == VARCHAROID)
-		{
-			attrlen = rd->rd_att->attrs[resdomno - 1]->attlen;
-		}
-		else
-		{
-			attrlen = typeLen(typeidType(attrtype));
-		}
+		attrlen = typeLen(typeidType(attrtype));
+		attrtypmod = rd->rd_att->attrs[resdomno - 1]->atttypmod;
 #if 0
 		if (Input_is_string && Typecast_ok)
 		{
@@ -438,13 +433,13 @@ make_targetlist_expr(ParseState *pstate,
 					expr = (Node *) parser_typecast2(expr,
 													 type_id,
 													 typeidType(typelem),
-													 attrlen);
+													 attrtypmod);
 				}
 				else
 					expr = (Node *) parser_typecast2(expr,
 													 type_id,
 												   typeidType(attrtype),
-													 attrlen);
+													 attrtypmod);
 			}
 			else
 			{
diff --git a/src/backend/parser/parse_type.c b/src/backend/parser/parse_type.c
index ef238f9fd07..4562623808e 100644
--- a/src/backend/parser/parse_type.c
+++ b/src/backend/parser/parse_type.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.3 1998/01/05 03:32:33 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.4 1998/01/16 23:20:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -136,15 +136,14 @@ typeTypeFlag(Type t)
 /* Given a type structure and a string, returns the internal form of
    that string */
 char *
-stringTypeString(Type tp, char *string, int typlen)
+stringTypeString(Type tp, char *string, int atttypmod)
 {
 	Oid			op;
 	Oid			typelem;
 
 	op = ((TypeTupleForm) GETSTRUCT(tp))->typinput;
 	typelem = ((TypeTupleForm) GETSTRUCT(tp))->typelem;	/* XXX - used for array_in */
-	/* typlen is for bpcharin() and varcharin() */
-	return ((char *) fmgr(op, string, typelem, typlen));
+	return ((char *) fmgr(op, string, typelem, atttypmod));
 }
 
 /* Given a type id, returns the out-conversion function of the type */
diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c
index 2aaf0a58b8b..cb17194e252 100644
--- a/src/backend/utils/adt/varchar.c
+++ b/src/backend/utils/adt/varchar.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.23 1998/01/08 06:18:18 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.24 1998/01/16 23:20:34 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -50,7 +50,7 @@
  *	  because we pass typelem as the second argument for array_in.)
  */
 char *
-bpcharin(char *s, int dummy, int typlen)
+bpcharin(char *s, int dummy, int atttypmod)
 {
 	char	   *result,
 			   *r;
@@ -60,23 +60,23 @@ bpcharin(char *s, int dummy, int typlen)
 	if (s == NULL)
 		return ((char *) NULL);
 
-	if (typlen == -1)
+	if (atttypmod == -1)
 	{
 
 		/*
-		 * this is here because some functions can't supply the typlen
+		 * this is here because some functions can't supply the atttypmod
 		 */
 		len = strlen(s);
-		typlen = len + VARHDRSZ;
+		atttypmod = len + VARHDRSZ;
 	}
 	else
-		len = typlen - VARHDRSZ;
+		len = atttypmod - VARHDRSZ;
 
 	if (len > 4096)
 		elog(ERROR, "bpcharin: length of char() must be less than 4096");
 
-	result = (char *) palloc(typlen);
-	VARSIZE(result) = typlen;
+	result = (char *) palloc(atttypmod);
+	VARSIZE(result) = atttypmod;
 	r = VARDATA(result);
 	for (i = 0; i < len; i++, r++, s++)
 	{
@@ -124,7 +124,7 @@ bpcharout(char *s)
  *	  because we pass typelem as the second argument for array_in.)
  */
 char *
-varcharin(char *s, int dummy, int typlen)
+varcharin(char *s, int dummy, int atttypmod)
 {
 	char	   *result;
 	int			len;
@@ -133,8 +133,8 @@ varcharin(char *s, int dummy, int typlen)
 		return ((char *) NULL);
 
 	len = strlen(s) + VARHDRSZ;
-	if (typlen != -1 && len > typlen)
-		len = typlen;	/* clip the string at max length */
+	if (atttypmod != -1 && len > atttypmod)
+		len = atttypmod;	/* clip the string at max length */
 
 	if (len > 4096)
 		elog(ERROR, "varcharin: length of char() must be less than 4096");
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index ea463e32c65..1e465b5296c 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -21,7 +21,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.59 1997/12/26 08:45:27 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.60 1998/01/16 23:20:39 momjian Exp $
  *
  * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
  *
@@ -924,8 +924,8 @@ clearTableInfo(TableInfo *tblinfo, int numTables)
 			if (tblinfo[i].typnames[j])
 				free(tblinfo[i].typnames[j]);
 		}
-		if (tblinfo[i].attlen)
-			free((int *) tblinfo[i].attlen);
+		if (tblinfo[i].atttypmod)
+			free((int *) tblinfo[i].atttypmod);
 		if (tblinfo[i].inhAttrs)
 			free((int *) tblinfo[i].inhAttrs);
 		if (tblinfo[i].attnames)
@@ -1613,7 +1613,7 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
 	char		q[MAXQUERYLEN];
 	int			i_attname;
 	int			i_typname;
-	int			i_attlen;
+	int			i_atttypmod;
 	int			i_attnotnull;
 	int			i_atthasdef;
 	PGresult   *res;
@@ -1638,7 +1638,7 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
 					tblinfo[i].relname,
 					g_comment_end);
 
-		sprintf(q, "SELECT a.attnum, a.attname, t.typname, a.attlen, "
+		sprintf(q, "SELECT a.attnum, a.attname, t.typname, a.atttypmod, "
 				"a.attnotnull, a.atthasdef "
 				"from pg_attribute a, pg_type t "
 				"where a.attrelid = '%s'::oid and a.atttypid = t.oid "
@@ -1656,14 +1656,14 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
 
 		i_attname = PQfnumber(res, "attname");
 		i_typname = PQfnumber(res, "typname");
-		i_attlen = PQfnumber(res, "attlen");
+		i_atttypmod = PQfnumber(res, "atttypmod");
 		i_attnotnull = PQfnumber(res, "attnotnull");
 		i_atthasdef = PQfnumber(res, "atthasdef");
 
 		tblinfo[i].numatts = ntups;
 		tblinfo[i].attnames = (char **) malloc(ntups * sizeof(char *));
 		tblinfo[i].typnames = (char **) malloc(ntups * sizeof(char *));
-		tblinfo[i].attlen = (int *) malloc(ntups * sizeof(int));
+		tblinfo[i].atttypmod = (int *) malloc(ntups * sizeof(int));
 		tblinfo[i].inhAttrs = (int *) malloc(ntups * sizeof(int));
 		tblinfo[i].notnull = (bool *) malloc(ntups * sizeof(bool));
 		tblinfo[i].adef_expr = (char **) malloc(ntups * sizeof(char *));
@@ -1673,9 +1673,7 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
 		{
 			tblinfo[i].attnames[j] = strdup(PQgetvalue(res, j, i_attname));
 			tblinfo[i].typnames[j] = strdup(PQgetvalue(res, j, i_typname));
-			tblinfo[i].attlen[j] = atoi(PQgetvalue(res, j, i_attlen));
-			if (tblinfo[i].attlen[j] > 0)
-				tblinfo[i].attlen[j] = tblinfo[i].attlen[j] - VARHDRSZ;
+			tblinfo[i].atttypmod[j] = atoi(PQgetvalue(res, j, i_atttypmod));
 			tblinfo[i].inhAttrs[j] = 0; /* this flag is set in
 										 * flagInhAttrs() */
 			tblinfo[i].notnull[j] = (PQgetvalue(res, j, i_attnotnull)[0] == 't') ? true : false;
@@ -2321,11 +2319,9 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
 								(actual_atts > 0) ? ", " : "",
 								fmtId(tblinfo[i].attnames[j]));
 
-						/* stored length can be -1 (variable) */
-						if (tblinfo[i].attlen[j] > 0)
-							sprintf(q, "%s(%d)",
-									q,
-									tblinfo[i].attlen[j]);
+						sprintf(q, "%s(%d)",
+								q,
+								tblinfo[i].atttypmod[j]-VARHDRSZ);
 						actual_atts++;
 					}
 					else if (!strcmp(tblinfo[i].typnames[j], "varchar"))
@@ -2336,11 +2332,9 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
 								fmtId(tblinfo[i].attnames[j]),
 								tblinfo[i].typnames[j]);
 
-						/* stored length can be -1 (variable) */
-						if (tblinfo[i].attlen[j] > 0)
-							sprintf(q, "%s(%d)",
-									q,
-									tblinfo[i].attlen[j]);
+						sprintf(q, "%s(%d)",
+								q,
+								tblinfo[i].atttypmod[j]-VARHDRSZ);
 						actual_atts++;
 					}
 					else
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index 2e687105447..9aed251ce92 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_dump.h,v 1.28 1997/12/04 01:31:28 scrappy Exp $
+ * $Id: pg_dump.h,v 1.29 1998/01/16 23:20:43 momjian Exp $
  *
  * Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2
  *
@@ -86,7 +86,7 @@ typedef struct _tableInfo
 								 * needed because the SQL tables will not
 								 * have the same order of attributes as
 								 * the POSTQUEL tables */
-	int		   *attlen;			/* attribute lengths */
+	int		   *atttypmod;		/* type-specific type modifier */
 	char	   *usename;
 	int			ncheck;			/* # of CHECK expressions */
 	char	  **check_expr;		/* [CONSTRAINT name] CHECK expressions */
diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h
index 9be5e6ba23b..0c43065b8e1 100644
--- a/src/include/catalog/pg_attribute.h
+++ b/src/include/catalog/pg_attribute.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_attribute.h,v 1.21 1997/12/04 00:27:47 scrappy Exp $
+ * $Id: pg_attribute.h,v 1.22 1998/01/16 23:20:49 momjian Exp $
  *
  * NOTES
  *	  the genbki.sh script reads this file and generates .bki
@@ -75,8 +75,8 @@ CATALOG(pg_attribute) BOOTSTRAP
 	 * Note that (attnum - 1) is often used as the index to an array.
 	 */
 	int4		attnelems;
-	int4		attcacheoff;
 
+	int4		attcacheoff;
 	/*
 	 * fastgetattr() uses attcacheoff to cache byte offsets of attributes
 	 * in heap tuples.	The data actually stored in pg_attribute (-1)
@@ -84,8 +84,14 @@ CATALOG(pg_attribute) BOOTSTRAP
 	 * tuple descriptor, we may then update attcacheoff in the copies.
 	 * This speeds up the attribute walking process.
 	 */
-	bool		attbyval;
 
+	int2		atttypmod;
+	/*
+	 * atttypmod records type-specific modifications supplied at table
+     * creation time.
+	 */
+
+	bool		attbyval;
 	/*
 	 * attbyval is a copy of the typbyval field from pg_type for this
 	 * attribute.  See atttypid above.	See struct TypeTupleFormData for
@@ -126,25 +132,21 @@ typedef FormData_pg_attribute *AttributeTupleForm;
  * ----------------
  */
 
-#define Natts_pg_attribute				13
+#define Natts_pg_attribute				14
 #define Anum_pg_attribute_attrelid		1
 #define Anum_pg_attribute_attname		2
 #define Anum_pg_attribute_atttypid		3
-
 #define Anum_pg_attribute_attdisbursion 4
-
 #define Anum_pg_attribute_attlen		5
 #define Anum_pg_attribute_attnum		6
-
-
-
 #define Anum_pg_attribute_attnelems		7
 #define Anum_pg_attribute_attcacheoff	8
-#define Anum_pg_attribute_attbyval		9
-#define Anum_pg_attribute_attisset		10
-#define Anum_pg_attribute_attalign		11
-#define Anum_pg_attribute_attnotnull	12
-#define Anum_pg_attribute_atthasdef		13
+#define Anum_pg_attribute_atttypmod		9
+#define Anum_pg_attribute_attbyval		10
+#define Anum_pg_attribute_attisset		11
+#define Anum_pg_attribute_attalign		12
+#define Anum_pg_attribute_attnotnull	13
+#define Anum_pg_attribute_atthasdef		14
 
 
 /* ----------------
@@ -172,265 +174,267 @@ typedef FormData_pg_attribute *AttributeTupleForm;
  * ----------------
  */
 #define Schema_pg_type \
-{ 1247l, {"typname"},	   19l, 0l, NAMEDATALEN,  1, 0l, -1l, '\0', '\0', 'i', '\0', '\0' }, \
-{ 1247l, {"typowner"},	   26l, 0l,  4,  2, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1247l, {"typlen"},	   21l, 0l,  2,  3, 0l, -1l, '\001', '\0', 's', '\0', '\0' }, \
-{ 1247l, {"typprtlen"},    21l, 0l,  2,  4, 0l, -1l, '\001', '\0', 's', '\0', '\0' }, \
-{ 1247l, {"typbyval"},	   16l, 0l,  1,  5, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1247l, {"typtype"},	   18l, 0l,  1,  6, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1247l, {"typisdefined"}, 16l, 0l,  1,  7, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1247l, {"typdelim"},	   18l, 0l,  1,  8, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1247l, {"typrelid"},	   26l, 0l,  4,  9, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1247l, {"typelem"},	   26l, 0l,  4, 10, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1247l, {"typinput"},	   24l, 0l,  4, 11, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1247l, {"typoutput"},    24l, 0l,  4, 12, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1247l, {"typreceive"},   24l, 0l,  4, 13, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1247l, {"typsend"},	   24l, 0l,  4, 14, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1247l, {"typalign"},	   18l, 0l,  1, 15, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1247l, {"typdefault"},   25l, 0l, -1, 16, 0l, -1l, '\0'  , '\0', 'i', '\0', '\0' }
-
-DATA(insert OID = 0 ( 1247 typname			19 0 NAMEDATALEN   1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1247 typowner			26 0  4   2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1247 typlen			21 0  2   3 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1247 typprtlen		21 0  2   4 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1247 typbyval			16 0  1   5 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1247 typtype			18 0  1   6 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1247 typisdefined		16 0  1   7 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1247 typdelim			18 0  1   8 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1247 typrelid			26 0  4   9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1247 typelem			26 0  4  10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1247 typinput			24 0  4  11 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1247 typoutput		24 0  4  12 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1247 typreceive		24 0  4  13 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1247 typsend			24 0  4  14 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1247 typalign			18 0  1  15 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1247 typdefault		25 0 -1  16 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1247 ctid				27 0  6  -1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1247 oid				26 0  4  -2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1247 xmin				28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1247 cmin				29 0  4  -4 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1247 xmax				28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1247 cmax				29 0  4  -6 0 -1 t f i f f));
+{ 1247l, {"typname"},	   19l, 0l, NAMEDATALEN,  1, 0l, -1l, 0, '\0', '\0', 'i', '\0', '\0' }, \
+{ 1247l, {"typowner"},	   26l, 0l,  4,  2, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1247l, {"typlen"},	   21l, 0l,  2,  3, 0l, -1l, 0, '\001', '\0', 's', '\0', '\0' }, \
+{ 1247l, {"typprtlen"},    21l, 0l,  2,  4, 0l, -1l, 0, '\001', '\0', 's', '\0', '\0' }, \
+{ 1247l, {"typbyval"},	   16l, 0l,  1,  5, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1247l, {"typtype"},	   18l, 0l,  1,  6, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1247l, {"typisdefined"}, 16l, 0l,  1,  7, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1247l, {"typdelim"},	   18l, 0l,  1,  8, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1247l, {"typrelid"},	   26l, 0l,  4,  9, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1247l, {"typelem"},	   26l, 0l,  4, 10, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1247l, {"typinput"},	   24l, 0l,  4, 11, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1247l, {"typoutput"},    24l, 0l,  4, 12, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1247l, {"typreceive"},   24l, 0l,  4, 13, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1247l, {"typsend"},	   24l, 0l,  4, 14, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1247l, {"typalign"},	   18l, 0l,  1, 15, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1247l, {"typdefault"},   25l, 0l, -1, 16, 0l, -1l, 0, '\0'  , '\0', 'i', '\0', '\0' }
+
+DATA(insert OID = 0 ( 1247 typname			19 0 NAMEDATALEN   1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1247 typowner			26 0  4   2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1247 typlen			21 0  2   3 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1247 typprtlen		21 0  2   4 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1247 typbyval			16 0  1   5 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1247 typtype			18 0  1   6 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1247 typisdefined		16 0  1   7 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1247 typdelim			18 0  1   8 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1247 typrelid			26 0  4   9 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1247 typelem			26 0  4  10 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1247 typinput			24 0  4  11 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1247 typoutput		24 0  4  12 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1247 typreceive		24 0  4  13 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1247 typsend			24 0  4  14 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1247 typalign			18 0  1  15 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1247 typdefault		25 0 -1  16 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1247 ctid				27 0  6  -1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1247 oid				26 0  4  -2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1247 xmin				28 0  4  -3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1247 cmin				29 0  4  -4 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1247 xmax				28 0  4  -5 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1247 cmax				29 0  4  -6 0 -1 0 t f i f f));
 
 /* ----------------
  *		pg_database
  * ----------------
  */
-DATA(insert OID = 0 ( 1262 datname			19 0 NAMEDATALEN   1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1262 datdba			23 0  4   2 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1262 datpath			25 0 -1   3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1262 ctid				27 0  6  -1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1262 oid				26 0  4  -2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1262 xmin				28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1262 cmin				29 0  4  -4 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1262 xmax				28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1262 cmax				29 0  4  -6 0 -1 t f i f f));
+DATA(insert OID = 0 ( 1262 datname			19 0 NAMEDATALEN   1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1262 datdba			23 0  4   2 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1262 datpath			25 0 -1   3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1262 ctid				27 0  6  -1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1262 oid				26 0  4  -2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1262 xmin				28 0  4  -3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1262 cmin				29 0  4  -4 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1262 xmax				28 0  4  -5 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1262 cmax				29 0  4  -6 0 -1 0 t f i f f));
 
 /* ----------------
  *		pg_proc
  * ----------------
  */
 #define Schema_pg_proc \
-{ 1255l, {"proname"},		19l, 0l, NAMEDATALEN,  1, 0l, -1l, '\0', '\0', 'i', '\0', '\0' }, \
-{ 1255l, {"proowner"},		26l, 0l,  4,  2, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1255l, {"prolang"},		26l, 0l,  4,  3, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1255l, {"proisinh"},		16l, 0l,  1,  4, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1255l, {"proistrusted"},	16l, 0l,  1,  5, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1255l, {"proiscachable"}, 16l, 0l,  1,  6, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1255l, {"pronargs"},		21l, 0l,  2,  7, 0l, -1l, '\001', '\0', 's', '\0', '\0' }, \
-{ 1255l, {"proretset"},		16l, 0l,  1,  8, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1255l, {"prorettype"},	26l, 0l,  4,  9, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1255l, {"proargtypes"},	30l, 0l, 32, 10, 0l, -1l,	'\0', '\0', 'i', '\0', '\0' }, \
-{ 1255l, {"probyte_pct"},	23l, 0l,  4, 11, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1255l, {"properbyte_cpu"},   23l, 0l,  4, 12, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1255l, {"propercall_cpu"},   23l, 0l,  4, 13, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1255l, {"prooutin_ratio"},   23l, 0l,  4, 14, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1255l, {"prosrc"},		25l, 0l, -1,  15,	0l, -1l, '\0', '\0', 'i', '\0', '\0' }, \
-{ 1255l, {"probin"},		17l, 0l, -1,  16,	0l, -1l, '\0', '\0', 'i', '\0', '\0' }
-
-DATA(insert OID = 0 ( 1255 proname			19 0 NAMEDATALEN   1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1255 proowner			26 0  4   2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1255 prolang			26 0  4   3 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1255 proisinh			16 0  1   4 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1255 proistrusted		16 0  1   5 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1255 proiscachable	16 0  1   6 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1255 pronargs			21 0  2   7 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1255 proretset		16 0  1   8 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1255 prorettype		26 0  4   9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1255 proargtypes		30 0 32  10 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1255 probyte_pct		23 0  4  11 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1255 properbyte_cpu	23 0  4  12 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1255 propercall_cpu	23 0  4  13 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1255 prooutin_ratio	23 0  4  14 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1255 prosrc			25 0 -1  15 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1255 probin			17 0 -1  16 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1255 ctid				27 0  6  -1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1255 oid				26 0  4  -2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1255 xmin				28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1255 cmin				29 0  4  -4 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1255 xmax				28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1255 cmax				29 0  4  -6 0 -1 t f i f f));
+{ 1255l, {"proname"},			19l, 0l, NAMEDATALEN,  1, 0l, -1l, 0, '\0', '\0', 'i', '\0', '\0' }, \
+{ 1255l, {"proowner"},			26l, 0l,  4,  2, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1255l, {"prolang"},			26l, 0l,  4,  3, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1255l, {"proisinh"},			16l, 0l,  1,  4, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1255l, {"proistrusted"},		16l, 0l,  1,  5, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1255l, {"proiscachable"},	 	16l, 0l,  1,  6, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1255l, {"pronargs"},			21l, 0l,  2,  7, 0l, -1l, 0, '\001', '\0', 's', '\0', '\0' }, \
+{ 1255l, {"proretset"},			16l, 0l,  1,  8, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1255l, {"prorettype"},		26l, 0l,  4,  9, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1255l, {"proargtypes"},		30l, 0l, 32, 10, 0l, -1l, 0,	'\0', '\0', 'i', '\0', '\0' }, \
+{ 1255l, {"probyte_pct"},		23l, 0l,  4, 11, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1255l, {"properbyte_cpu"},	23l, 0l,  4, 12, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1255l, {"propercall_cpu"},	23l, 0l,  4, 13, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1255l, {"prooutin_ratio"},	23l, 0l,  4, 14, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1255l, {"prosrc"},			25l, 0l, -1,  15,	0l, -1l, 0, '\0', '\0', 'i', '\0', '\0' }, \
+{ 1255l, {"probin"},			17l, 0l, -1,  16,	0l, -1l, 0, '\0', '\0', 'i', '\0', '\0' }
+
+DATA(insert OID = 0 ( 1255 proname			19 0 NAMEDATALEN   1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1255 proowner			26 0  4   2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1255 prolang			26 0  4   3 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1255 proisinh			16 0  1   4 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1255 proistrusted		16 0  1   5 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1255 proiscachable	16 0  1   6 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1255 pronargs			21 0  2   7 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1255 proretset		16 0  1   8 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1255 prorettype		26 0  4   9 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1255 proargtypes		30 0 32  10 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1255 probyte_pct		23 0  4  11 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1255 properbyte_cpu	23 0  4  12 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1255 propercall_cpu	23 0  4  13 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1255 prooutin_ratio	23 0  4  14 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1255 prosrc			25 0 -1  15 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1255 probin			17 0 -1  16 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1255 ctid				27 0  6  -1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1255 oid				26 0  4  -2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1255 xmin				28 0  4  -3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1255 cmin				29 0  4  -4 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1255 xmax				28 0  4  -5 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1255 cmax				29 0  4  -6 0 -1 0 t f i f f));
 
 /* ----------------
  *		pg_user
  * ----------------
  */
-DATA(insert OID = 0 ( 1260 usename		19  0 NAMEDATALEN   1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1260 usesysid		23  0   4   2 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1260 usecreatedb		16  0   1   3 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1260 usetrace		16  0   1   4 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1260 usesuper		16  0   1   5 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1260 usecatupd		16  0   1   6 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1260 passwd		25  0  -1   7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1260 valuntil		702 0   4   8 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1260 ctid				27 0  6  -1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1260 oid				26 0  4  -2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1260 xmin				28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1260 cmin				29 0  4  -4 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1260 xmax				28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1260 cmax				29 0  4  -6 0 -1 t f i f f));
+DATA(insert OID = 0 ( 1260 usename		19  0 NAMEDATALEN   1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1260 usesysid		23  0   4   2 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1260 usecreatedb	16  0   1   3 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1260 usetrace		16  0   1   4 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1260 usesuper		16  0   1   5 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1260 usecatupd	16  0   1   6 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1260 passwd		25  0  -1   7 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1260 valuntil		702 0   4   8 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1260 ctid			27 0  6  -1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1260 oid			26 0  4  -2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1260 xmin			28 0  4  -3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1260 cmin			29 0  4  -4 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1260 xmax			28 0  4  -5 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1260 cmax			29 0  4  -6 0 -1 0 t f i f f));
 
 /* ----------------
  *		pg_group
  * ----------------
  */
-DATA(insert OID = 0 ( 1261 groname			19 0 NAMEDATALEN  1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1261 grosysid			23 0  4   2 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1261 grolist		  1007 0 -1   3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1261 ctid				27 0  6  -1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1261 oid				26 0  4  -2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1261 xmin				28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1261 cmin				29 0  4  -4 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1261 xmax				28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1261 cmax				29 0  4  -6 0 -1 t f i f f));
+DATA(insert OID = 0 ( 1261 groname			19 0 NAMEDATALEN  1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1261 grosysid			23 0  4   2 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1261 grolist		  1007 0 -1   3 0 0 -1 f f i f f));
+DATA(insert OID = 0 ( 1261 ctid				27 0  6  -1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1261 oid				26 0  4  -2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1261 xmin				28 0  4  -3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1261 cmin				29 0  4  -4 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1261 xmax				28 0  4  -5 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1261 cmax				29 0  4  -6 0 -1 0 t f i f f));
 
 /* ----------------
  *		pg_attribute
  * ----------------
  */
 #define Schema_pg_attribute \
-{ 1249l, {"attrelid"},	  26l, 0l,	4,	1, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1249l, {"attname"},	  19l, 0l, NAMEDATALEN,  2, 0l, -1l, '\0', '\0', 'i', '\0', '\0' }, \
-{ 1249l, {"atttypid"},	  26l, 0l,	4,	3, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1249l, {"attdisbursion"},   700l, 0l,  4,  4, 0l, -1l, '\0', '\0', 'i', '\0', '\0' }, \
-{ 1249l, {"attlen"},	  21l, 0l,	2,	5, 0l, -1l, '\001', '\0', 's', '\0', '\0' }, \
-{ 1249l, {"attnum"},	  21l, 0l,	2,	6, 0l, -1l, '\001', '\0', 's', '\0', '\0' }, \
-{ 1249l, {"attnelems"},   23l, 0l,	4,	7, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1249l, {"attcacheoff"}, 23l, 0l,	4,	8, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1249l, {"attbyval"},	  16l, 0l,	1,	9, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1249l, {"attisset"},	  16l, 0l,	1, 10, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1249l, {"attalign"},	  18l, 0l,	1, 11, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 12491, {"attnotnull"},  16l, 0l,	1, 12, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 12491, {"atthasdef"},   16l, 0l,	1, 13, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }
-
-DATA(insert OID = 0 ( 1249 attrelid			26 0  4   1 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1249 attname			19 0 NAMEDATALEN  2 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1249 atttypid			26 0  4   3 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1249 attdisbursion   700 0  4   4 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1249 attlen			21 0  2   5 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1249 attnum			21 0  2   6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1249 attnelems		23 0  4   7 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1249 attcacheoff		23 0  4   8 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1249 attbyval			16 0  1   9 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1249 attisset			16 0  1  10 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1249 attalign			18 0  1  11 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1249 attnotnull		16 0  1  12 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1249 atthasdef		16 0  1  13 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1249 ctid				27 0  6  -1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1249 oid				26 0  4  -2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1249 xmin				28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1249 cmin				29 0  4  -4 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1249 xmax				28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1249 cmax				29 0  4  -6 0 -1 t f i f f));
+{ 1249l, {"attrelid"},	  26l, 0l,	4,	1, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1249l, {"attname"},	  19l, 0l, NAMEDATALEN,  2, 0l, -1l, 0, '\0', '\0', 'i', '\0', '\0' }, \
+{ 1249l, {"atttypid"},	  26l, 0l,	4,	3, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1249l, {"attdisbursion"},   700l, 0l,  4,  4, 0l, -1l, 0, '\0', '\0', 'i', '\0', '\0' }, \
+{ 1249l, {"attlen"},	  21l, 0l,	2,	5, 0l, -1l, 0, '\001', '\0', 's', '\0', '\0' }, \
+{ 1249l, {"attnum"},	  21l, 0l,	2,	6, 0l, -1l, 0, '\001', '\0', 's', '\0', '\0' }, \
+{ 1249l, {"attnelems"},   23l, 0l,	4,	7, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1249l, {"attcacheoff"}, 23l, 0l,	4,	8, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1249l, {"atttypmod"},	  21l, 0l,	2,	9, 0l, -1l, 0, '\001', '\0', 's', '\0', '\0' }, \
+{ 1249l, {"attbyval"},	  16l, 0l,	1, 10, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1249l, {"attisset"},	  16l, 0l,	1, 11, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1249l, {"attalign"},	  18l, 0l,	1, 12, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 12491, {"attnotnull"},  16l, 0l,	1, 13, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 12491, {"atthasdef"},   16l, 0l,	1, 14, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }
+
+DATA(insert OID = 0 ( 1249 attrelid			26 0  4   1 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1249 attname			19 0 NAMEDATALEN  2 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1249 atttypid			26 0  4   3 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1249 attdisbursion   700 0  4   4 0 0 -1 f f i f f));
+DATA(insert OID = 0 ( 1249 attlen			21 0  2   5 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1249 attnum			21 0  2   6 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1249 attnelems		23 0  4   7 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1249 attcacheoff		23 0  4   8 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1249 atttypmod		21 0  2   9 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1249 attbyval			16 0  1  10 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1249 attisset			16 0  1  11 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1249 attalign			18 0  1  12 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1249 attnotnull		16 0  1  13 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1249 atthasdef		16 0  1  14 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1249 ctid				27 0  6  -1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1249 oid				26 0  4  -2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1249 xmin				28 0  4  -3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1249 cmin				29 0  4  -4 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1249 xmax				28 0  4  -5 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1249 cmax				29 0  4  -6 0 -1 0 t f i f f));
 
 /* ----------------
  *		pg_class
  * ----------------
  */
 #define Schema_pg_class \
-{ 1259l, {"relname"},	   19l, 0l, NAMEDATALEN,  1, 0l, -1l, '\0', '\0', 'i', '\0', '\0' }, \
-{ 1259l, {"reltype"},	   26l, 0l,  4,  2, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1259l, {"relowner"},	   26l, 0l,  4,  3, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1259l, {"relam"},		   26l, 0l,  4,  4, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1259l, {"relpages"},	   23,	0l,  4,  5, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1259l, {"reltuples"},    23,	0l,  4,  6, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }, \
-{ 1259l, {"relhasindex"},  16,	0l,  1,  7, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1259l, {"relisshared"},  16,	0l,  1,  8, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1259l, {"relkind"},	   18,	0l,  1,  9, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1259l, {"relnatts"},	   21,	0l,  2, 10, 0l, -1l, '\001', '\0', 's', '\0', '\0' }, \
-{ 1259l, {"relchecks"},    21l, 0l,  2, 11, 0l, -1l, '\001', '\0', 's', '\0', '\0' }, \
-{ 1259l, {"reltriggers"},  21l, 0l,  2, 12, 0l, -1l, '\001', '\0', 's', '\0', '\0' }, \
-{ 1259l, {"relhasrules"},  16,	0l,  1, 13, 0l, -1l, '\001', '\0', 'c', '\0', '\0' }, \
-{ 1259l, {"relacl"},	 1034l, 0l, -1, 14, 0l, -1l,   '\0', '\0', 'i', '\0', '\0' }
-
-DATA(insert OID = 0 ( 1259 relname			19 0 NAMEDATALEN   1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1259 reltype			26 0  4   2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1259 relowner			26 0  4   3 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1259 relam			26 0  4   4 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1259 relpages			23 0  4   5 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1259 reltuples		23 0  4   6 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1259 relhasindex		16 0  1   7 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1259 relisshared		16 0  1   8 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1259 relkind			18 0  1   9 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1259 relnatts			21 0  2  10 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1259 relchecks		21 0  2  11 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1259 reltriggers		21 0  2  12 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1259 relhasrules		16 0  1  13 0 -1 t f c f f));
-DATA(insert OID = 0 ( 1259 relacl		  1034 0 -1  14 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1259 ctid				27 0  6  -1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1259 oid				26 0  4  -2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1259 xmin				28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1259 cmin				29 0  4  -4 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1259 xmax				28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1259 cmax				29 0  4  -6 0 -1 t f i f f));
+{ 1259l, {"relname"},	   19l, 0l, NAMEDATALEN,  1, 0l, -1l, 0, '\0', '\0', 'i', '\0', '\0' }, \
+{ 1259l, {"reltype"},	   26l, 0l,  4,  2, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1259l, {"relowner"},	   26l, 0l,  4,  3, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1259l, {"relam"},		   26l, 0l,  4,  4, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1259l, {"relpages"},	   23,	0l,  4,  5, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1259l, {"reltuples"},    23,	0l,  4,  6, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }, \
+{ 1259l, {"relhasindex"},  16,	0l,  1,  7, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1259l, {"relisshared"},  16,	0l,  1,  8, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1259l, {"relkind"},	   18,	0l,  1,  9, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1259l, {"relnatts"},	   21,	0l,  2, 10, 0l, -1l, 0, '\001', '\0', 's', '\0', '\0' }, \
+{ 1259l, {"relchecks"},    21l, 0l,  2, 11, 0l, -1l, 0, '\001', '\0', 's', '\0', '\0' }, \
+{ 1259l, {"reltriggers"},  21l, 0l,  2, 12, 0l, -1l, 0, '\001', '\0', 's', '\0', '\0' }, \
+{ 1259l, {"relhasrules"},  16,	0l,  1, 13, 0l, -1l, 0, '\001', '\0', 'c', '\0', '\0' }, \
+{ 1259l, {"relacl"},	 1034l, 0l, -1, 14, 0l, -1l, 0,   '\0', '\0', 'i', '\0', '\0' }
+
+DATA(insert OID = 0 ( 1259 relname			19 0 NAMEDATALEN   1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1259 reltype			26 0  4   2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1259 relowner			26 0  4   3 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1259 relam			26 0  4   4 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1259 relpages			23 0  4   5 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1259 reltuples		23 0  4   6 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1259 relhasindex		16 0  1   7 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1259 relisshared		16 0  1   8 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1259 relkind			18 0  1   9 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1259 relnatts			21 0  2  10 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1259 relchecks		21 0  2  11 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1259 reltriggers		21 0  2  12 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1259 relhasrules		16 0  1  13 0 -1 0 t f c f f));
+DATA(insert OID = 0 ( 1259 relacl		  1034 0 -1  14 0 0 -1 f f i f f));
+DATA(insert OID = 0 ( 1259 ctid				27 0  6  -1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1259 oid				26 0  4  -2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1259 xmin				28 0  4  -3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1259 cmin				29 0  4  -4 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1259 xmax				28 0  4  -5 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1259 cmax				29 0  4  -6 0 -1 0 t f i f f));
 
 /* ----------------
  *		pg_attrdef
  * ----------------
  */
-DATA(insert OID = 0 ( 1215 adrelid			26 0  4   1 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1215 adnum			21 0  2   2 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1215 adbin			25 0 -1   3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1215 adsrc			25 0 -1   4 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1215 ctid				27 0  6  -1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1215 oid				26 0  4  -2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1215 xmin				28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1215 cmin				29 0  4  -4 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1215 xmax				28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1215 cmax				29 0  4  -6 0 -1 t f i f f));
+DATA(insert OID = 0 ( 1215 adrelid			26 0  4   1 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1215 adnum			21 0  2   2 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1215 adbin			25 0 -1   3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1215 adsrc			25 0 -1   4 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1215 ctid				27 0  6  -1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1215 oid				26 0  4  -2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1215 xmin				28 0  4  -3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1215 cmin				29 0  4  -4 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1215 xmax				28 0  4  -5 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1215 cmax				29 0  4  -6 0 -1 0 t f i f f));
 
 /* ----------------
  *		pg_relcheck
  * ----------------
  */
-DATA(insert OID = 0 ( 1216 rcrelid			26 0  4   1 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1216 rcname			19 0  NAMEDATALEN  2 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1216 rcbin			25 0 -1   3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1216 rcsrc			25 0 -1   4 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1216 ctid				27 0  6  -1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1216 oid				26 0  4  -2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1216 xmin				28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1216 cmin				29 0  4  -4 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1216 xmax				28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1216 cmax				29 0  4  -6 0 -1 t f i f f));
+DATA(insert OID = 0 ( 1216 rcrelid			26 0  4   1 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1216 rcname			19 0  NAMEDATALEN  2 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1216 rcbin			25 0 -1   3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1216 rcsrc			25 0 -1   4 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1216 ctid				27 0  6  -1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1216 oid				26 0  4  -2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1216 xmin				28 0  4  -3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1216 cmin				29 0  4  -4 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1216 xmax				28 0  4  -5 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1216 cmax				29 0  4  -6 0 -1 0 t f i f f));
 
 /* ----------------
  *		pg_trigger
  * ----------------
  */
-DATA(insert OID = 0 ( 1219 tgrelid			26 0  4   1 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1219 tgname			19 0  NAMEDATALEN  2 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1219 tgfoid			26 0  4   3 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1219 tgtype			21 0  2   4 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1219 tgnargs			21 0  2   5 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1219 tgattr			22 0 16   6 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1219 tgargs			17 0 -1   7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1219 ctid				27 0  6  -1 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1219 oid				26 0  4  -2 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1219 xmin				28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1219 cmin				29 0  4  -4 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1219 xmax				28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1219 cmax				29 0  4  -6 0 -1 t f i f f));
+DATA(insert OID = 0 ( 1219 tgrelid			26 0  4   1 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1219 tgname			19 0  NAMEDATALEN  2 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1219 tgfoid			26 0  4   3 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1219 tgtype			21 0  2   4 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1219 tgnargs			21 0  2   5 0 -1 0 t f s f f));
+DATA(insert OID = 0 ( 1219 tgattr			22 0 16   6 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1219 tgargs			17 0 -1   7 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1219 ctid				27 0  6  -1 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1219 oid				26 0  4  -2 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1219 xmin				28 0  4  -3 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1219 cmin				29 0  4  -4 0 -1 0 t f i f f));
+DATA(insert OID = 0 ( 1219 xmax				28 0  4  -5 0 -1 0 f f i f f));
+DATA(insert OID = 0 ( 1219 cmax				29 0  4  -6 0 -1 0 t f i f f));
 
 /* ----------------
  *		pg_variable - this relation is modified by special purpose access
@@ -439,9 +443,9 @@ DATA(insert OID = 0 ( 1219 cmax				29 0  4  -6 0 -1 t f i f f));
  * ----------------
  */
 #define Schema_pg_variable \
-{ 1264l, {"varfoo"},  26l, 0l, 4, 1, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }
+{ 1264l, {"varfoo"},  26l, 0l, 4, 1, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }
 
-DATA(insert OID = 0 ( 1264 varfoo			26 0  4   1 0 -1 t f i f f));
+DATA(insert OID = 0 ( 1264 varfoo			26 0  4   1 0 -1 0 t f i f f));
 
 /* ----------------
  *		pg_log - this relation is modified by special purpose access
@@ -450,8 +454,8 @@ DATA(insert OID = 0 ( 1264 varfoo			26 0  4   1 0 -1 t f i f f));
  * ----------------
  */
 #define Schema_pg_log \
-{ 1269l, {"logfoo"},  26l, 0l, 4, 1, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }
+{ 1269l, {"logfoo"},  26l, 0l, 4, 1, 0l, -1l, 0, '\001', '\0', 'i', '\0', '\0' }
 
-DATA(insert OID = 0 ( 1269 logfoo			26 0  4   1 0 -1 t f i f f));
+DATA(insert OID = 0 ( 1269 logfoo			26 0  4   1 0 -1 0 t f i f f));
 
 #endif							/* PG_ATTRIBUTE_H */
diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h
index 7c0ee50fec9..b70ceba2cee 100644
--- a/src/include/catalog/pg_class.h
+++ b/src/include/catalog/pg_class.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_class.h,v 1.17 1997/12/04 00:27:50 scrappy Exp $
+ * $Id: pg_class.h,v 1.18 1998/01/16 23:20:52 momjian Exp $
  *
  * NOTES
  *	  ``pg_relation'' is being replaced by ``pg_class''.  currently
@@ -119,11 +119,11 @@ typedef FormData_pg_class *Form_pg_class;
 
 DATA(insert OID = 1247 (  pg_type 71		  PGUID 0 0 0 f f r 16 0 0 f _null_ ));
 DESCR("");
-DATA(insert OID = 1249 (  pg_attribute 75	  PGUID 0 0 0 f f r 16 0 0 f _null_ ));
+DATA(insert OID = 1249 (  pg_attribute 75	  PGUID 0 0 0 f f r 14 0 0 f _null_ ));
 DESCR("");
 DATA(insert OID = 1255 (  pg_proc 81		  PGUID 0 0 0 f f r 16 0 0 f _null_ ));
 DESCR("");
-DATA(insert OID = 1259 (  pg_class 83		  PGUID 0 0 0 f f r 18 0 0 f _null_ ));
+DATA(insert OID = 1259 (  pg_class 83		  PGUID 0 0 0 f f r 14 0 0 f _null_ ));
 DESCR("");
 DATA(insert OID = 1260 (  pg_user 86		  PGUID 0 0 0 f t r 8  0 0 f _null_ ));
 DESCR("");
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index c56363ddf0c..02fa069df61 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: parsenodes.h,v 1.44 1998/01/15 19:00:11 momjian Exp $
+ * $Id: parsenodes.h,v 1.45 1998/01/16 23:20:55 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -642,8 +642,8 @@ typedef struct TypeName
 	char	   *name;			/* name of the type */
 	bool		timezone;		/* timezone specified? */
 	bool		setof;			/* is a set? */
+	int2		typmod;			/* type modifier */
 	List	   *arrayBounds;	/* array bounds */
-	int			typlen;			/* length for char() and varchar() */
 } TypeName;
 
 /*
diff --git a/src/include/parser/parse_expr.h b/src/include/parser/parse_expr.h
index ba8eed9c814..42cbe9c4616 100644
--- a/src/include/parser/parse_expr.h
+++ b/src/include/parser/parse_expr.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: parse_expr.h,v 1.4 1998/01/04 04:31:41 momjian Exp $
+ * $Id: parse_expr.h,v 1.5 1998/01/16 23:21:01 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -23,7 +23,7 @@ extern Node *transformIdent(ParseState *pstate, Node *expr, int precedence);
 extern Oid exprType(Node *expr);
 extern Node *handleNestedDots(ParseState *pstate, Attr *attr,
 		int *curr_resno, int precedence);
-extern Node *parser_typecast2(Node *expr, Oid exprType, Type tp, int typlen);
+extern Node *parser_typecast2(Node *expr, Oid exprType, Type tp, int attypmod);
 
 #endif							/* PARSE_EXPR_H */
 
diff --git a/src/include/parser/parse_type.h b/src/include/parser/parse_type.h
index fa2025994c7..22a81c4994f 100644
--- a/src/include/parser/parse_type.h
+++ b/src/include/parser/parse_type.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: parse_type.h,v 1.2 1997/11/26 01:14:14 momjian Exp $
+ * $Id: parse_type.h,v 1.3 1998/01/16 23:21:03 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -26,7 +26,7 @@ extern int16 typeLen(Type t);
 extern bool typeByVal(Type t);
 extern char *typeTypeName(Type t);
 extern char typeTypeFlag(Type t);
-extern char *stringTypeString(Type tp, char *string, int typlen);
+extern char *stringTypeString(Type tp, char *string, int atttypmod);
 extern Oid typeidRetoutfunc(Oid type_id);
 extern Oid typeidTypeRelid(Oid type_id);
 extern Oid typeTypeRelid(Type typ);
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h
index 0c8e5554cb6..b10769ee7d5 100644
--- a/src/include/utils/builtins.h
+++ b/src/include/utils/builtins.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: builtins.h,v 1.33 1998/01/01 05:42:40 thomas Exp $
+ * $Id: builtins.h,v 1.34 1998/01/16 23:21:07 momjian Exp $
  *
  * NOTES
  *	  This should normally only be included by fmgr.h.
@@ -445,7 +445,7 @@ DateTime   *timestamp_datetime(time_t timestamp);
 time_t		datetime_timestamp(DateTime *datetime);
 
 /* varchar.c */
-extern char *bpcharin(char *s, int dummy, int typlen);
+extern char *bpcharin(char *s, int dummy, int atttypmod);
 extern char *bpcharout(char *s);
 extern bool bpchareq(char *arg1, char *arg2);
 extern bool bpcharne(char *arg1, char *arg2);
@@ -457,7 +457,7 @@ extern int32 bpcharcmp(char *arg1, char *arg2);
 extern int32 bpcharlen(char *arg);
 extern uint32 hashbpchar(struct varlena * key);
 
-extern char *varcharin(char *s, int dummy, int typlen);
+extern char *varcharin(char *s, int dummy, int atttypmod);
 extern char *varcharout(char *s);
 extern bool varchareq(char *arg1, char *arg2);
 extern bool varcharne(char *arg1, char *arg2);
-- 
GitLab