diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c
index 719fe3528f4061e2ca06c6b3179652d39b12e072..968846385f140777ebd99a8e1496f5646b1cf740 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.37 1998/03/30 17:22:05 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.38 1998/04/07 18:09:44 momjian Exp $
  *
  * NOTES
  *	  some of the executor utility code such as "ExecTypeFromTL" should be
@@ -317,7 +317,7 @@ TupleDescInitEntry(TupleDesc desc,
 	 *
 	 *	Note: in the special case of
 	 *
-	 *		create EMP (name = text, manager = EMP)
+	 *		create EMP (name = char16, manager = EMP)
 	 *
 	 *	RelationNameCreateHeapRelation() calls BuildDesc() which
 	 *	calls this routine and since EMP does not exist yet, the
diff --git a/src/backend/access/hash/hashfunc.c b/src/backend/access/hash/hashfunc.c
index 37b7722b8c1d5ea5af44df4fbf1c090f68dad4d7..cef3a087e9510b3aa442cf9b34df1d45a0053fb0 100644
--- a/src/backend/access/hash/hashfunc.c
+++ b/src/backend/access/hash/hashfunc.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.7 1998/03/30 17:22:08 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.8 1998/04/07 18:09:46 momjian Exp $
  *
  * NOTES
  *	  These functions are stored in pg_amproc.	For each operator class
@@ -133,8 +133,6 @@ hashoid(Oid key)
 	return ((uint32) ~key);
 }
 
-#define PRIME1			37
-#define PRIME2			1048583
 
 uint32
 hashchar(char key)
@@ -142,8 +140,12 @@ hashchar(char key)
 	int			len;
 	uint32		h;
 
-	h = 0;
 	len = sizeof(char);
+
+#define PRIME1			37
+#define PRIME2			1048583
+
+	h = 0;
 	/* Convert char to integer */
 	h = h * PRIME1 ^ (key - ' ');
 	h %= PRIME2;
@@ -151,6 +153,55 @@ hashchar(char key)
 	return (h);
 }
 
+uint32
+hashchar2(uint16 intkey)
+{
+	uint32		h;
+	int			len;
+	char	   *key = (char *) &intkey;
+
+	h = 0;
+	len = sizeof(uint16);
+	/* Convert string to integer */
+	while (len--)
+		h = h * PRIME1 ^ (*key++ - ' ');
+	h %= PRIME2;
+
+	return (h);
+}
+
+uint32
+hashchar4(uint32 intkey)
+{
+	uint32		h;
+	int			len;
+	char	   *key = (char *) &intkey;
+
+	h = 0;
+	len = sizeof(uint32);
+	/* Convert string to integer */
+	while (len--)
+		h = h * PRIME1 ^ (*key++ - ' ');
+	h %= PRIME2;
+
+	return (h);
+}
+
+uint32
+hashchar8(char *key)
+{
+	uint32		h;
+	int			len;
+
+	h = 0;
+	len = sizeof(char8);
+	/* Convert string to integer */
+	while (len--)
+		h = h * PRIME1 ^ (*key++ - ' ');
+	h %= PRIME2;
+
+	return (h);
+}
 
 uint32
 hashname(NameData *n)
@@ -172,6 +223,22 @@ hashname(NameData *n)
 }
 
 
+uint32
+hashchar16(char *key)
+{
+	uint32		h;
+	int			len;
+
+	h = 0;
+	len = sizeof(char16);
+	/* Convert string to integer */
+	while (len--)
+		h = h * PRIME1 ^ (*key++ - ' ');
+	h %= PRIME2;
+
+	return (h);
+}
+
 
 /*
  * (Comment from the original db3 hashing code: )
diff --git a/src/backend/access/nbtree/nbtcompare.c b/src/backend/access/nbtree/nbtcompare.c
index 85b673ebba6eb366d418427b80085837039fea9c..a674de9c726e387053fb54d4b88de2754c75cccf 100644
--- a/src/backend/access/nbtree/nbtcompare.c
+++ b/src/backend/access/nbtree/nbtcompare.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.14 1998/03/30 17:22:17 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.15 1998/04/07 18:09:51 momjian Exp $
  *
  *	NOTES
  *		These functions are stored in pg_amproc.  For each operator class
@@ -101,6 +101,30 @@ btcharcmp(char a, char b)
 	return ((int32) ((uint8) a - (uint8) b));
 }
 
+int32
+btchar2cmp(uint16 a, uint16 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 2));
+}
+
+int32
+btchar4cmp(uint32 a, uint32 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 4));
+}
+
+int32
+btchar8cmp(char *a, char *b)
+{
+	return (strncmp(a, b, 8));
+}
+
+int32
+btchar16cmp(char *a, char *b)
+{
+	return (strncmp(a, b, 16));
+}
+
 int32
 btnamecmp(NameData *a, NameData *b)
 {
diff --git a/src/backend/access/transam/xid.c b/src/backend/access/transam/xid.c
index 960d98b9e3a13bda4a0a1f457c6d48d516d09e3c..00810528c44531f578f34feb166703c4cf0c63c1 100644
--- a/src/backend/access/transam/xid.c
+++ b/src/backend/access/transam/xid.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/xid.c,v 1.13 1998/03/30 17:22:28 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/xid.c,v 1.14 1998/04/07 18:10:01 momjian Exp $
  *
  * OLD COMMENTS
  * XXX WARNING
@@ -30,14 +30,14 @@ extern TransactionId DisabledTransactionId;
 extern TransactionId AmiTransactionId;
 extern TransactionId FirstTransactionId;
 
-/* XXX name for catalogs */
+/* XXX char16 name for catalogs */
 TransactionId
 xidin(char *representation)
 {
 	return (atol(representation));
 }
 
-/* XXX name for catalogs */
+/* XXX char16 name for catalogs */
 char *
 xidout(TransactionId transactionId)
 {
diff --git a/src/backend/bootstrap/bootparse.y b/src/backend/bootstrap/bootparse.y
index 613dba9d05b43f6c19fb332eb128d2d01eb05f0c..4dc0a5128d8ef8ce4a54e128954211a11e53ce4d 100644
--- a/src/backend/bootstrap/bootparse.y
+++ b/src/backend/bootstrap/bootparse.y
@@ -8,47 +8,53 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.14 1998/03/30 17:22:44 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.15 1998/04/07 18:10:11 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 
-#include <stdio.h>
-#include <time.h>
-
 #include "postgres.h"
 
-#include "miscadmin.h"
-
+#include "catalog/pg_attribute.h"
 #include "access/attnum.h"
-#include "access/funcindex.h"
-#include "access/htup.h"
-#include "access/itup.h"
-#include "access/skey.h"
-#include "access/strat.h"
+#include "nodes/pg_list.h"
 #include "access/tupdesc.h"
-#include "access/xact.h"
-#include "bootstrap/bootstrap.h"
-#include "catalog/heap.h"
+#include "storage/fd.h"
 #include "catalog/pg_am.h"
-#include "catalog/pg_attribute.h"
 #include "catalog/pg_class.h"
-#include "commands/defrem.h"
 #include "nodes/nodes.h"
-#include "nodes/parsenodes.h"
-#include "nodes/pg_list.h"
-#include "nodes/primnodes.h"
 #include "rewrite/prs2lock.h"
+#include "access/skey.h"
+#include "access/strat.h"
+#include "utils/rel.h"
+
+#include "nodes/primnodes.h"
+#include <time.h>
+#include "utils/nabstime.h"
 #include "storage/block.h"
-#include "storage/fd.h"
-#include "storage/ipc.h"
-#include "storage/itemptr.h"
 #include "storage/off.h"
-#include "storage/smgr.h"
+#include "storage/itemptr.h"
+#include "access/htup.h"
+#include "nodes/parsenodes.h"
+
+#include "access/xact.h"
+
+#include <stdio.h>
+
+#include "catalog/heap.h"
+
+#include "storage/ipc.h"
 #include "storage/spin.h"
+#include "storage/smgr.h"
+
 #include "tcop/dest.h"
-#include "utils/nabstime.h"
-#include "utils/rel.h"
+#include "commands/defrem.h"
+
+#include "access/itup.h"
+#include "access/funcindex.h"
+#include "bootstrap/bootstrap.h"
+
+#include "miscadmin.h"
 
 #define DO_START { \
 					StartTransactionCommand();\
diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index f1d4ddd04d0014e437a239f1dc1bae6c51e4ad7b..0336cf054447fef915278327eeefa64dac55c82e 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -7,7 +7,7 @@
  * Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.38 1998/03/30 17:22:49 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.39 1998/04/07 18:10:21 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -16,70 +16,88 @@
 #include <stdio.h>
 #include <signal.h>
 #include <setjmp.h>
-#include <string.h>
 
 #define BOOTSTRAP_INCLUDE		/* mask out stuff in tcop/tcopprot.h */
 
 #include "postgres.h"
 
-#include "miscadmin.h"
-#include "fmgr.h"
-
+#include "catalog/pg_attribute.h"
 #include "access/attnum.h"
-#include "access/funcindex.h"
-#include "access/genam.h"
-#include "access/heapam.h"
-#include "access/htup.h"
-#include "access/itup.h"
-#include "access/relscan.h"
-#include "access/sdir.h"
-#include "access/skey.h"
-#include "access/strat.h"
+#include "nodes/pg_list.h"
 #include "access/tupdesc.h"
-#include "access/xact.h"
-#include "bootstrap/bootstrap.h"
-#include "catalog/catname.h"
-#include "catalog/index.h"
+#include "storage/fd.h"
 #include "catalog/pg_am.h"
-#include "catalog/pg_attribute.h"
 #include "catalog/pg_class.h"
-#include "catalog/pg_type.h"
-#include "executor/execdesc.h"
-#include "executor/hashjoin.h"
-#include "executor/tuptable.h"
-#include "libpq/pqsignal.h"
-#include "nodes/execnodes.h"
-#include "nodes/memnodes.h"
 #include "nodes/nodes.h"
-#include "nodes/params.h"
-#include "nodes/parsenodes.h"
-#include "nodes/plannodes.h"
-#include "nodes/pg_list.h"
-#include "nodes/primnodes.h"
 #include "rewrite/prs2lock.h"
+#include "access/skey.h"
+#include "access/strat.h"
+#include "utils/rel.h"
+#include "libpq/pqsignal.h"
+
 #include "storage/block.h"
+#include "storage/off.h"
+#include "storage/itemptr.h"
+#include "utils/nabstime.h"
+#include "access/htup.h"
 #include "storage/buf.h"
-#include "storage/fd.h"
+#include "access/relscan.h"
+#include "access/heapam.h"
+
+#include "fmgr.h"
+
+#include "access/funcindex.h"
+
+#include "nodes/memnodes.h"
+
+#include "miscadmin.h"
+
+#include "catalog/pg_type.h"
+
+#include "access/itup.h"
+#include "bootstrap/bootstrap.h"
+
+#include "tcop/tcopprot.h"
+
 #include "storage/ipc.h"
-#include "storage/itemptr.h"
-#include "storage/lock.h"
-#include "storage/off.h"
-#include "storage/shmem.h"
 #include "storage/spin.h"
-#include "tcop/dest.h"
-#include "tcop/tcopprot.h"
-#include "utils/builtins.h"
-#include "utils/geo_decls.h"
 #include "utils/hsearch.h"
-#include "utils/lsyscache.h"
-#include "utils/mcxt.h"
-#include "utils/nabstime.h"
-#include "utils/portal.h"
-#include "utils/rel.h"
+#include "storage/shmem.h"
+#include "storage/lock.h"
+
+#include "access/xact.h"
 
 #ifndef HAVE_MEMMOVE
 #include "regex/utils.h"
 #endif
+#include <string.h>
+
+#include "nodes/primnodes.h"
+#include "nodes/parsenodes.h"
+#include "nodes/params.h"
+#include "access/sdir.h"
+#include "executor/hashjoin.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+#include "nodes/plannodes.h"
+#include "tcop/dest.h"
+#include "executor/execdesc.h"
+#include "utils/portal.h"
+
+#include "utils/mcxt.h"
+
+#include "catalog/catname.h"
+
+#include "utils/geo_decls.h"
+#include "utils/builtins.h"
+
+#include "catalog/index.h"
+
+#include "access/genam.h"
+
+#include "utils/lsyscache.h"
+
+#include "utils/palloc.h"
 
 #define ALLOC(t, c)		(t *)calloc((unsigned)(c), sizeof(t))
 #define FIRST_TYPE_OID 16		/* OID of the first type */
@@ -143,7 +161,7 @@ static struct typinfo Procid[] = {
 	{"bytea", 17, 0, -1, F_BYTEAIN, F_BYTEAOUT},
 	{"char", 18, 0, 1, F_CHARIN, F_CHAROUT},
 	{"name", 19, 0, NAMEDATALEN, F_NAMEIN, F_NAMEOUT},
-	{"dummy", 20, 0, 16, 0, 0},
+	{"char16", 20, 0, 16, F_CHAR16IN, F_CHAR16OUT},
 /*	  { "dt",		  20,	 0,  4, F_DTIN,			F_DTOUT}, */
 	{"int2", 21, 0, 2, F_INT2IN, F_INT2OUT},
 	{"int28", 22, 0, 16, F_INT28IN, F_INT28OUT},
diff --git a/src/backend/commands/creatinh.c b/src/backend/commands/creatinh.c
index 7e6e49216902850b27d451fe309381d731fd8bd2..ec3a3e8499444bd622c7ffcbcd87631cb66293cf 100644
--- a/src/backend/commands/creatinh.c
+++ b/src/backend/commands/creatinh.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.27 1998/03/30 17:22:55 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.28 1998/04/07 18:10:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -179,7 +179,7 @@ RemoveRelation(char *name)
  *	  Here's an example:
  *
  *		create table person (name text, age int4, location point);
- *		create table emp (salary int4, manager text) inherits(person);
+ *		create table emp (salary int4, manager char16) inherits(person);
  *		create table student (gpa float8) inherits (person);
  *		create table stud_emp (percent int4) inherits (emp, student);
  *
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index 67de9f1f0787a5a7d38ea7e5279d7e3beae4dffa..0a481677b30ea1c2d709dea85b58f48d5d3b6553 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.10 1998/04/05 21:04:12 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.11 1998/04/07 18:10:41 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -88,7 +88,7 @@ createdb(char *dbname, char *dbpath)
 
 #if FALSE
 	sprintf(buf, "insert into pg_database (datname, datdba, datpath) \
-                  values (\'%s\'::name, \'%d\'::oid, \'%s\'::text);",
+                  values (\'%s\'::char16, \'%d\'::oid, \'%s\'::text);",
 			dbname, user_id, dbname);
 #endif
 
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c
index 9fd4c185be2a2e7c82472aa0f8d0e8e635b63b97..2950d93227ce1eeba8aa9b6b05a73aa1c0a88cdc 100644
--- a/src/backend/executor/execQual.c
+++ b/src/backend/executor/execQual.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.28 1998/03/30 17:23:05 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.29 1998/04/07 18:10:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -547,7 +547,7 @@ GetAttributeByNum(TupleTableSlot *slot,
 	return (char *) retval;
 }
 
-/* XXX name for catalogs */
+/* XXX char16 name for catalogs */
 #ifdef NOT_USED
 char *
 att_by_num(TupleTableSlot *slot,
@@ -608,7 +608,7 @@ GetAttributeByName(TupleTableSlot *slot, char *attname, bool *isNull)
 	return (char *) retval;
 }
 
-/* XXX name for catalogs */
+/* XXX char16 name for catalogs */
 #ifdef NOT_USED
 char *
 att_by_name(TupleTableSlot *slot, char *attname, bool *isNull)
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c
index 31c636ee26fae635836ed148615e82715672e407..68cb73ceabcf11fb6f31dc54d19e9c3d3cc8fdcf 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.25 1998/03/30 17:23:19 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.26 1998/04/07 18:10:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -530,7 +530,7 @@ parser_typecast2(Node *expr, Oid exprType, Type tp, int16 atttypmod)
 			sprintf(const_string, "%d",
 					(int) ((Const *) expr)->constvalue);
 			break;
-		case NAMEOID:			/* name */
+		case NAMEOID:			/* char16 */
 			const_string = (char *) palloc(256);
 			string_palloced = true;
 			sprintf(const_string, "%s",
diff --git a/src/backend/rewrite/rewriteRemove.c b/src/backend/rewrite/rewriteRemove.c
index fd9b7ecf4acbc514b6a97513a8d1381a7177013b..350045eb90abe05541fa826071993d5a5a1c6ff4 100644
--- a/src/backend/rewrite/rewriteRemove.c
+++ b/src/backend/rewrite/rewriteRemove.c
@@ -7,20 +7,21 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.12 1998/03/30 17:23:37 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.13 1998/04/07 18:11:08 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 #include "postgres.h"
 
-#include "fmgr.h"				/* for F_NAMEEQ */
-
-#include "access/heapam.h"		/* heap AM calls defined here */
 #include "access/skey.h"
-#include "catalog/catname.h"	/* for RewriteRelationName */
 #include "catalog/pg_rewrite.h"
+#include "catalog/catname.h"	/* for RewriteRelationName */
 #include "utils/syscache.h"
+#include "utils/elog.h"			/* for elog stuff */
+#include "utils/palloc.h"
+#include "access/heapam.h"		/* heap AM calls defined here */
+#include "fmgr.h"				/* for CHAR_16_EQ */
 
 #include "rewrite/rewriteRemove.h"		/* where the decls go */
 #include "rewrite/rewriteSupport.h"
@@ -85,7 +86,7 @@ RemoveRewriteRule(char *ruleName)
 	 * Scan the RuleRelation ('pg_rewrite') until we find a tuple
 	 */
 	ScanKeyEntryInitialize(&scanKeyData, 0, Anum_pg_rewrite_rulename,
-						   F_NAMEEQ, NameGetDatum(ruleName));
+						   F_CHAR16EQ, NameGetDatum(ruleName));
 	scanDesc = heap_beginscan(RewriteRelation,
 							  0, false, 1, &scanKeyData);
 
diff --git a/src/backend/rewrite/rewriteSupport.c b/src/backend/rewrite/rewriteSupport.c
index 8c62cc2bfe0adb25d3d1b997eef5e8cb23184bf2..d1ce425da32f0358e9e40bbde83f8d9bd5b08274 100644
--- a/src/backend/rewrite/rewriteSupport.c
+++ b/src/backend/rewrite/rewriteSupport.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteSupport.c,v 1.17 1998/03/30 17:23:40 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteSupport.c,v 1.18 1998/04/07 18:11:11 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -106,7 +106,7 @@ IsDefinedRewriteRule(char *ruleName)
 	 * Scan the RuleRelation ('pg_rewrite') until we find a tuple
 	 */
 	ScanKeyEntryInitialize(&scanKey, 0, Anum_pg_rewrite_rulename,
-					   F_NAMEEQ, PointerGetDatum(ruleName));
+					   NameEqualRegProcedure, PointerGetDatum(ruleName));
 	scanDesc = heap_beginscan(RewriteRelation,
 							  0, false, 1, &scanKey);
 
diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c
index e5a1ff8e690a67bcc931259eed030e32afa595c3..ce165baed8bc5e48238ee846a157c26aa0369003 100644
--- a/src/backend/tcop/fastpath.c
+++ b/src/backend/tcop/fastpath.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.14 1998/03/30 17:23:52 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.15 1998/04/07 18:11:18 momjian Exp $
  *
  * NOTES
  *	  This cruft is the server side of PQfn.
@@ -44,7 +44,7 @@
  *	  The previous implementation would assume (1) that any value of
  *	  length <= 4 bytes was passed-by-value, and that any other value
  *	  was a struct varlena (by-reference).	There was NO way to pass a
- *	  fixed-length by-reference argument (like name) or a struct
+ *	  fixed-length by-reference argument (like char16) or a struct
  *	  varlena of size <= 4 bytes.
  *
  *	  The new implementation checks the catalogs to determine whether
diff --git a/src/backend/utils/adt/char.c b/src/backend/utils/adt/char.c
index 5a32bceeb66baf9c8386b8ab7bdbff55c36842ee..87fd3ed1f9bd02f5a9d0fc4344f1c29af2bc72ec 100644
--- a/src/backend/utils/adt/char.c
+++ b/src/backend/utils/adt/char.c
@@ -3,12 +3,16 @@
  * char.c--
  *	  Functions for the built-in type "char".
  *	  Functions for the built-in type "cid".
+ *	  Functions for the built-in type "char2".
+ *	  Functions for the built-in type "char4".
+ *	  Functions for the built-in type "char8".
+ *	  Functions for the built-in type "char16".
  *
  * Copyright (c) 1994, Regents of the University of California
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.16 1998/03/30 17:24:00 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.17 1998/04/07 18:11:25 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -83,6 +87,42 @@ cidout(int32 c)
 	return (result);
 }
 
+/*
+ *		char16in		- converts "..." to internal reprsentation
+ *
+ *		Note:
+ *				Currently if strlen(s) < 14, the extra chars are nulls
+ */
+char *
+char16in(char *s)
+{
+	char	   *result;
+
+	if (s == NULL)
+		return (NULL);
+	result = (char *) palloc(16);
+	strncpy(result, s, 16);
+	return (result);
+}
+
+/*
+ *		char16out		- converts internal reprsentation to "..."
+ */
+char *
+char16out(char *s)
+{
+	char	   *result = (char *) palloc(17);
+
+	if (s == NULL)
+	{
+		result[0] = '-';
+		result[1] = '\0';
+	}
+	else
+		StrNCpy(result, s, 17);
+	return (result);
+}
+
 
 /*****************************************************************************
  *	 PUBLIC ROUTINES														 *
@@ -153,3 +193,283 @@ cideq(int8 arg1, int8 arg2)
 {
 	return (arg1 == arg2);
 }
+
+/*
+ *		char16eq		- returns 1 iff arguments are equal
+ *		char16ne		- returns 1 iff arguments are not equal
+ *
+ *		BUGS:
+ *				Assumes that "xy\0\0a" should be equal to "xy\0b".
+ *				If not, can do the comparison backwards for efficiency.
+ *
+ *		char16lt		- returns 1 iff a < b
+ *		char16le		- returns 1 iff a <= b
+ *		char16gt		- returns 1 iff a < b
+ *		char16ge		- returns 1 iff a <= b
+ *
+ */
+bool
+char16eq(char *arg1, char *arg2)
+{
+	if (arg1 == NULL || arg2 == NULL)
+		return ((bool) 0);
+	return (strncmp(arg1, arg2, 16) == 0);
+}
+
+bool
+char16ne(char *arg1, char *arg2)
+{
+	if (arg1 == NULL || arg2 == NULL)
+		return ((bool) 0);
+	return (strncmp(arg1, arg2, 16) != 0);
+}
+
+bool
+char16lt(char *arg1, char *arg2)
+{
+	if (arg1 == NULL || arg2 == NULL)
+		return ((bool) 0);
+	return (strncmp(arg1, arg2, 16) < 0);
+}
+
+bool
+char16le(char *arg1, char *arg2)
+{
+	if (arg1 == NULL || arg2 == NULL)
+		return ((bool) 0);
+	return (strncmp(arg1, arg2, 16) <= 0);
+}
+
+bool
+char16gt(char *arg1, char *arg2)
+{
+	if (arg1 == NULL || arg2 == NULL)
+		return ((bool) 0);
+
+	return (strncmp(arg1, arg2, 16) > 0);
+}
+
+bool
+char16ge(char *arg1, char *arg2)
+{
+	if (arg1 == NULL || arg2 == NULL)
+		return ((bool) 0);
+
+	return (strncmp(arg1, arg2, 16) >= 0);
+}
+
+
+/* ============================== char2 ============================== */
+uint16
+char2in(char *s)
+{
+	uint16		res;
+
+	if (s == NULL)
+		return (0);
+
+	strncpy((char *) &res, s, 2);
+	return (res);
+}
+
+char *
+char2out(uint16 s)
+{
+	char	   *result = (char *) palloc(3);
+
+	StrNCpy(result, (char *) &s, 3);
+
+	return (result);
+}
+
+bool
+char2eq(uint16 a, uint16 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 2) == 0);
+}
+
+bool
+char2ne(uint16 a, uint16 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 2) != 0);
+}
+
+bool
+char2lt(uint16 a, uint16 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 2) < 0);
+}
+
+bool
+char2le(uint16 a, uint16 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 2) <= 0);
+}
+
+bool
+char2gt(uint16 a, uint16 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 2) > 0);
+}
+
+bool
+char2ge(uint16 a, uint16 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 2) >= 0);
+}
+
+int32
+char2cmp(uint16 a, uint16 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 2));
+}
+
+/* ============================== char4 ============================== */
+uint32
+char4in(char *s)
+{
+	uint32		res;
+
+	if (s == NULL)
+		return (0);
+
+	strncpy((char *) &res, s, 4);
+
+	return (res);
+}
+
+char *
+char4out(s)
+uint32		s;
+{
+	char	   *result = (char *) palloc(5);
+
+	StrNCpy(result, (char *) &s, 5);
+
+	return (result);
+}
+
+bool
+char4eq(uint32 a, uint32 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 4) == 0);
+}
+
+bool
+char4ne(uint32 a, uint32 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 4) != 0);
+}
+
+bool
+char4lt(uint32 a, uint32 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 4) < 0);
+}
+
+bool
+char4le(uint32 a, uint32 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 4) <= 0);
+}
+
+bool
+char4gt(uint32 a, uint32 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 4) > 0);
+}
+
+bool
+char4ge(uint32 a, uint32 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 4) >= 0);
+}
+
+int32
+char4cmp(uint32 a, uint32 b)
+{
+	return (strncmp((char *) &a, (char *) &b, 4));
+}
+
+/* ============================== char8 ============================== */
+char *
+char8in(char *s)
+{
+	char	   *result;
+
+	if (s == NULL)
+		return ((char *) NULL);
+
+	result = (char *) palloc(8);
+	strncpy(result, s, 8);
+	return (result);
+}
+
+char *
+char8out(char *s)
+{
+	char	   *result = (char *) palloc(9);
+
+	if (s == NULL)
+	{
+		result[0] = '-';
+		result[1] = '\0';
+	}
+	else
+		StrNCpy(result, s, 9);
+	return (result);
+}
+
+bool
+char8eq(char *arg1, char *arg2)
+{
+	if (arg1 == NULL || arg2 == NULL)
+		return ((bool) 0);
+	return (strncmp(arg1, arg2, 8) == 0);
+}
+
+bool
+char8ne(char *arg1, char *arg2)
+{
+	if (arg1 == NULL || arg2 == NULL)
+		return ((bool) 0);
+	return (strncmp(arg1, arg2, 8) != 0);
+}
+
+bool
+char8lt(char *arg1, char *arg2)
+{
+	if (arg1 == NULL || arg2 == NULL)
+		return ((bool) 0);
+	return (strncmp(arg1, arg2, 8) < 0);
+}
+
+bool
+char8le(char *arg1, char *arg2)
+{
+	if (arg1 == NULL || arg2 == NULL)
+		return ((bool) 0);
+	return (strncmp(arg1, arg2, 8) <= 0);
+}
+
+bool
+char8gt(char *arg1, char *arg2)
+{
+	if (arg1 == NULL || arg2 == NULL)
+		return ((bool) 0);
+	return (strncmp(arg1, arg2, 8) > 0);
+}
+
+bool
+char8ge(char *arg1, char *arg2)
+{
+	if (arg1 == NULL || arg2 == NULL)
+		return ((bool) 0);
+	return (strncmp(arg1, arg2, 8) >= 0);
+}
+
+int32
+char8cmp(char *arg1, char *arg2)
+{
+	return (strncmp(arg1, arg2, 8));
+}
diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c
index 032f28b13acc9f0f0dc82022b18b9d1475c5540f..5c3c61333d5001ec8f4abcac68f6dc92bedb822a 100644
--- a/src/backend/utils/adt/like.c
+++ b/src/backend/utils/adt/like.c
@@ -82,6 +82,58 @@ fixedlen_like(char *s, struct varlena * p, int charlen)
 	return ((bool) result);
 }
 
+bool
+char2like(uint16 arg1, struct varlena * p)
+{
+	char	   *s = (char *) &arg1;
+
+	return (fixedlen_like(s, p, 2));
+}
+
+bool
+char2nlike(uint16 arg1, struct varlena * p)
+{
+	return (!char2like(arg1, p));
+}
+
+bool
+char4like(uint32 arg1, struct varlena * p)
+{
+	char	   *s = (char *) &arg1;
+
+	return (fixedlen_like(s, p, 4));
+}
+
+bool
+char4nlike(uint32 arg1, struct varlena * p)
+{
+	return (!char4like(arg1, p));
+}
+
+bool
+char8like(char *s, struct varlena * p)
+{
+	return (fixedlen_like(s, p, 8));
+}
+
+bool
+char8nlike(char *s, struct varlena * p)
+{
+	return (!char8like(s, p));
+}
+
+bool
+char16like(char *s, struct varlena * p)
+{
+	return (fixedlen_like(s, p, 16));
+}
+
+bool
+char16nlike(char *s, struct varlena * p)
+{
+	return (!char16like(s, p));
+}
+
 bool
 namelike(NameData *n, struct varlena * p)
 {
@@ -111,7 +163,7 @@ textnlike(struct varlena * s, struct varlena * p)
 }
 
 
-/*	$Revision: 1.14 $
+/*	$Revision: 1.15 $
 **	"like.c" A first attempt at a LIKE operator for Postgres95.
 **
 **	Originally written by Rich $alz, mirror!rs, Wed Nov 26 19:03:17 EST 1986.
diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c
index b16e1e11b6e27a260c250df9ddf4c2465e566a51..61f0affe2ee69f0acbc52a1509489d9d149b5275 100644
--- a/src/backend/utils/adt/regexp.c
+++ b/src/backend/utils/adt/regexp.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.15 1998/03/30 17:24:12 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.16 1998/04/07 18:11:32 momjian Exp $
  *
  *		Alistair Crooks added the code for the regex caching
  *		agc - cached the regular expressions used - there's a good chance
@@ -203,6 +203,58 @@ fixedlen_regexeq(char *s, struct varlena * p, int charlen, int cflags)
 /*
  *	routines that use the regexp stuff
  */
+bool
+char2regexeq(uint16 arg1, struct varlena * p)
+{
+	char	   *s = (char *) &arg1;
+
+	return (fixedlen_regexeq(s, p, 2, REG_EXTENDED));
+}
+
+bool
+char2regexne(uint16 arg1, struct varlena * p)
+{
+	return (!char2regexeq(arg1, p));
+}
+
+bool
+char4regexeq(uint32 arg1, struct varlena * p)
+{
+	char	   *s = (char *) &arg1;
+
+	return (fixedlen_regexeq(s, p, 4, REG_EXTENDED));
+}
+
+bool
+char4regexne(uint32 arg1, struct varlena * p)
+{
+	return (!char4regexeq(arg1, p));
+}
+
+bool
+char8regexeq(char *s, struct varlena * p)
+{
+	return (fixedlen_regexeq(s, p, 8, REG_EXTENDED));
+}
+
+bool
+char8regexne(char *s, struct varlena * p)
+{
+	return (!char8regexeq(s, p));
+}
+
+bool
+char16regexeq(char *s, struct varlena * p)
+{
+	return (fixedlen_regexeq(s, p, 16, REG_EXTENDED));
+}
+
+bool
+char16regexne(char *s, struct varlena * p)
+{
+	return (!char16regexeq(s, p));
+}
+
 bool
 nameregexeq(NameData *n, struct varlena * p)
 {
@@ -236,6 +288,59 @@ textregexne(struct varlena * s, struct varlena * p)
 *  routines that use the regexp stuff, but ignore the case.
  *	for this, we use the REG_ICASE flag to pg95_regcomp
  */
+bool
+char2icregexeq(uint16 arg1, struct varlena * p)
+{
+	char	   *s = (char *) &arg1;
+
+	return (fixedlen_regexeq(s, p, 2, REG_ICASE | REG_EXTENDED));
+}
+
+
+bool
+char2icregexne(uint16 arg1, struct varlena * p)
+{
+	return (!char2icregexeq(arg1, p));
+}
+
+bool
+char4icregexeq(uint32 arg1, struct varlena * p)
+{
+	char	   *s = (char *) &arg1;
+
+	return (fixedlen_regexeq(s, p, 4, REG_ICASE | REG_EXTENDED));
+}
+
+bool
+char4icregexne(uint32 arg1, struct varlena * p)
+{
+	return (!char4icregexeq(arg1, p));
+}
+
+bool
+char8icregexeq(char *s, struct varlena * p)
+{
+	return (fixedlen_regexeq(s, p, 8, REG_ICASE | REG_EXTENDED));
+}
+
+bool
+char8icregexne(char *s, struct varlena * p)
+{
+	return (!char8icregexeq(s, p));
+}
+
+bool
+char16icregexeq(char *s, struct varlena * p)
+{
+	return (fixedlen_regexeq(s, p, 16, REG_ICASE | REG_EXTENDED));
+}
+
+bool
+char16icregexne(char *s, struct varlena * p)
+{
+	return (!char16icregexeq(s, p));
+}
+
 bool
 texticregexeq(struct varlena * s, struct varlena * p)
 {
diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c
index 34a3b268c27ba98fcac9778999b9c84b1878f187..e4cdab617e18930f182272bc09ab7a47d3a6c91d 100644
--- a/src/backend/utils/adt/regproc.c
+++ b/src/backend/utils/adt/regproc.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.16 1998/03/30 17:24:17 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.17 1998/04/07 18:11:34 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -52,7 +52,7 @@ regprocin(char *proname)
 	ScanKeyEntryInitialize(&key,
 						   (bits16) 0,
 						   (AttrNumber) 1,
-						   (RegProcedure) F_NAMEEQ,
+						   (RegProcedure) F_CHAR16EQ,
 						   (Datum) proname);
 
 	procscan = heap_beginscan(proc, 0, false, 1, &key);
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index 59bdce3f6e631d54bfe8a89f6bd9140504a8b6a2..746669d1828c58390732ebf9ce181e17422e7685 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.25 1998/03/30 17:24:21 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.26 1998/04/07 18:11:38 momjian Exp $
  *
  * Notes:
  *		XXX This needs to use exception.h to handle recovery when
@@ -79,7 +79,7 @@ static int	DisableCache;
  * ----------------
  */
 static long eqproc[] = {
-	F_BOOLEQ, 0l, F_CHAREQ, F_NAMEEQ, 0l,
+	F_BOOLEQ, 0l, F_CHAREQ, F_CHAR16EQ, 0l,
 	F_INT2EQ, F_KEYFIRSTEQ, F_INT4EQ, 0l, F_TEXTEQ,
 	F_OIDEQ, 0l, 0l, 0l, F_OID8EQ
 };
diff --git a/src/include/access/hash.h b/src/include/access/hash.h
index e059617571d3e70bed2c603afb2fa55d43bae791..324c5772f255e9dcd615c9f2eaa93161053c0c29 100644
--- a/src/include/access/hash.h
+++ b/src/include/access/hash.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: hash.h,v 1.14 1998/03/30 17:24:40 momjian Exp $
+ * $Id: hash.h,v 1.15 1998/04/07 18:12:01 momjian Exp $
  *
  * NOTES
  *		modeled after Margo Seltzer's hash implementation for unix.
@@ -272,6 +272,10 @@ extern uint32 hashfloat4(float32 keyp);
 extern uint32 hashfloat8(float64 keyp);
 extern uint32 hashoid(Oid key);
 extern uint32 hashchar(char key);
+extern uint32 hashchar2(uint16 intkey);
+extern uint32 hashchar4(uint32 intkey);
+extern uint32 hashchar8(char *key);
+extern uint32 hashchar16(char *key);
 extern uint32 hashtext(struct varlena * key);
 extern uint32 hashname(NameData *n);
 
diff --git a/src/include/catalog/pg_amop.h b/src/include/catalog/pg_amop.h
index 521b3948d1421705be7ae7638c5a75261189de8c..32b98029be7fbbc7d2a2c49d450db94f869539f7 100644
--- a/src/include/catalog/pg_amop.h
+++ b/src/include/catalog/pg_amop.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_amop.h,v 1.10 1998/03/30 17:24:56 momjian Exp $
+ * $Id: pg_amop.h,v 1.11 1998/04/07 18:12:11 momjian Exp $
  *
  * NOTES
  *	 the genbki.sh script reads this file and generates .bki
@@ -197,6 +197,36 @@ DATA(insert OID = 0 (  403 429 92 3 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 429 634 4 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 429 633 5 btreesel btreenpage ));
 
+/*
+ *	nbtree char2_ops
+ */
+
+DATA(insert OID = 0 (  403 406 418 1 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 406 457 2 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 406 412 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 406 463 4 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 406 460 5 btreesel btreenpage ));
+
+/*
+ *	nbtree char4_ops
+ */
+
+DATA(insert OID = 0 (  403 407 419 1 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 407 458 2 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 407 413 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 407 464 4 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 407 461 5 btreesel btreenpage ));
+
+/*
+ *	nbtree char8_ops
+ */
+
+DATA(insert OID = 0 (  403 408 420 1 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 408 459 2 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 408 414 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 408 465 4 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 408 462 5 btreesel btreenpage ));
+
 /*
  *	nbtree name_ops
  */
@@ -207,6 +237,16 @@ DATA(insert OID = 0 (  403 1181 93 3 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 1181 663 4 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 1181 662 5 btreesel btreenpage ));
 
+/*
+ *	nbtree char16_ops
+ */
+
+DATA(insert OID = 0 (  403 430 645 1 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 430 646 2 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 430 1267 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 430 648 4 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 430 647 5 btreesel btreenpage ));
+
 /*
  *	nbtree text_ops
  */
@@ -401,6 +441,46 @@ DATA(insert OID = 0 (  404 429 92 3 btreesel btreenpage ));
 DATA(insert OID = 0 (  404 429 634 4 btreesel btreenpage ));
 DATA(insert OID = 0 (  404 429 633 5 btreesel btreenpage ));
 
+/*
+ *	nobtree char2_ops
+ */
+
+DATA(insert OID = 0 (  404 406 418 1 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 406 457 2 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 406 412 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 406 463 4 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 406 460 5 btreesel btreenpage ));
+
+/*
+ *	nobtree char4_ops
+ */
+
+DATA(insert OID = 0 (  404 407 419 1 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 407 458 2 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 407 413 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 407 464 4 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 407 461 5 btreesel btreenpage ));
+
+/*
+ *	nobtree char8_ops
+ */
+
+DATA(insert OID = 0 (  404 408 420 1 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 408 459 2 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 408 414 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 408 465 4 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 408 462 5 btreesel btreenpage ));
+
+/*
+ *	nobtree char16_ops
+ */
+
+DATA(insert OID = 0 (  404 430 645 1 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 430 646 2 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 430 1267 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 430 648 4 btreesel btreenpage ));
+DATA(insert OID = 0 (  404 430 647 5 btreesel btreenpage ));
+
 /*
  *	nobtree name_ops
  */
@@ -471,6 +551,14 @@ DATA(insert OID = 0 (  405	427  607 1 hashsel hashnpage ));
 DATA(insert OID = 0 (  405	428  620 1 hashsel hashnpage ));
 /* char_ops */
 DATA(insert OID = 0 (  405	429   92 1 hashsel hashnpage ));
+/* char2_ops */
+DATA(insert OID = 0 (  405	406  412 1 hashsel hashnpage ));
+/* char4_ops */
+DATA(insert OID = 0 (  405	407  413 1 hashsel hashnpage ));
+/* char8_ops */
+DATA(insert OID = 0 (  405	408  414 1 hashsel hashnpage ));
+/* char16_ops */
+DATA(insert OID = 0 (  405	430 1267 1 hashsel hashnpage ));
 /* name_ops */
 DATA(insert OID = 0 (  405 1181   93 1 hashsel hashnpage ));
 /* text_ops */
diff --git a/src/include/catalog/pg_opclass.h b/src/include/catalog/pg_opclass.h
index f12eacaf618e9fb9c5b1aa99a5c6947d1db1c474..fcce756b76518660b1a326af7b929489dbdf6077 100644
--- a/src/include/catalog/pg_opclass.h
+++ b/src/include/catalog/pg_opclass.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_opclass.h,v 1.7 1998/03/30 17:25:13 momjian Exp $
+ * $Id: pg_opclass.h,v 1.8 1998/04/07 18:12:16 momjian Exp $
  *
  * NOTES
  *	  the genbki.sh script reads this file and generates .bki
@@ -62,6 +62,12 @@ typedef FormData_pg_opclass *Form_pg_opclass;
  * (see the README in this directory), so just put zeros
  * in, which are invalid OID's anyway.  --djm
  */
+DATA(insert OID =  406 (	char2_ops		409   ));
+DESCR("");
+DATA(insert OID =  407 (	char4_ops		410   ));
+DESCR("");
+DATA(insert OID =  408 (	char8_ops		411   ));
+DESCR("");
 DATA(insert OID = 1181 (	name_ops		 19   ));
 DESCR("");
 DATA(insert OID =  421 (	int2_ops		 21   ));
@@ -83,6 +89,8 @@ DATA(insert OID =  428 (	float4_ops		700   ));
 DESCR("");
 DATA(insert OID =  429 (	char_ops		 18   ));
 DESCR("");
+DATA(insert OID =  430 (	char16_ops		 20   ));
+DESCR("");
 DATA(insert OID =  431 (	text_ops		 25   ));
 DESCR("");
 DATA(insert OID =  432 (	abstime_ops		702   ));
diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h
index 7d70082b36264f3d5b5257bdd2a031b907375449..4dd15562589a50541a297342430db35ef5f7138e 100644
--- a/src/include/catalog/pg_operator.h
+++ b/src/include/catalog/pg_operator.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_operator.h,v 1.28 1998/03/30 17:25:19 momjian Exp $
+ * $Id: pg_operator.h,v 1.29 1998/04/07 18:12:22 momjian Exp $
  *
  * NOTES
  *	  the genbki.sh script reads this file and generates .bki
@@ -102,6 +102,7 @@ DATA(insert OID = 96 (	"="		   PGUID 0 b t t  23  23  16  96 518 97 97 int4eq eq
 DATA(insert OID = 97 (	"<"		   PGUID 0 b t f  23  23  16 521 525 0 0 int4lt intltsel intltjoinsel ));
 DATA(insert OID = 98 (	"="		   PGUID 0 b t t  25  25  16  98 531 664 664 texteq eqsel eqjoinsel ));
 
+DATA(insert OID = 1267 (  "="		 PGUID 0 b t t	20	20	16	1267 644 645 645 char16eq eqsel eqjoinsel ));
 DATA(insert OID = 329 (  "="	   PGUID 0 b t t  1000	1000  16  329 0  0	0 array_eq eqsel eqjoinsel ));
 DATA(insert OID = 349 (  "="	   PGUID 0 b t t  1001	1001  16  349 0  0	0 array_eq eqsel eqjoinsel ));
 DATA(insert OID = 374 (  "="	   PGUID 0 b t t  1002	1002  16  374 0  0	0 array_eq eqsel eqjoinsel ));
@@ -135,6 +136,27 @@ DATA(insert OID = 399 (  "="	   PGUID 0 b t t  1026	1026  16  399 0  0	0 array_e
 DATA(insert OID = 400 (  "="	   PGUID 0 b t t  1027	1027  16  400 0  0	0 array_eq eqsel eqjoinsel ));
 DATA(insert OID = 401 (  "="	   PGUID 0 b t t  1034	1034  16  401 0  0	0 array_eq eqsel eqjoinsel ));
 
+DATA(insert OID = 412 (  "="	   PGUID 0 b t t  409  409	16	412 415 418 418 char2eq eqsel eqjoinsel ));
+DATA(insert OID = 413 (  "="	   PGUID 0 b t t  410  410	16	413 416 419 419 char4eq eqsel eqjoinsel ));
+DATA(insert OID = 414 (  "="	   PGUID 0 b t t  411  411	16	414 417 420 420 char8eq eqsel eqjoinsel ));
+
+DATA(insert OID = 415 (  "<>"	   PGUID 0 b t f  409  409	16 415 412	0 0 char2ne neqsel neqjoinsel ));
+DATA(insert OID = 416 (  "<>"	   PGUID 0 b t f  410  410	16 416 413	0 0 char4ne neqsel neqjoinsel ));
+DATA(insert OID = 417 (  "<>"	   PGUID 0 b t f  411  411	16 417 414	0 0 char8ne neqsel neqjoinsel ));
+DATA(insert OID = 418 (  "<"	   PGUID 0 b t f  409  409	16 460 463	0 0 char2lt intltsel intltjoinsel ));
+DATA(insert OID = 419 (  "<"	   PGUID 0 b t f  410  410	16 461 464	0 0 char4lt intltsel intltjoinsel ));
+DATA(insert OID = 420 (  "<"	   PGUID 0 b t f  411  411	16 462 465	0 0 char8lt intltsel intltjoinsel ));
+
+DATA(insert OID = 457 (  "<="	   PGUID 0 b t f  409  409	16 463 460	0 0 char2le intltsel intltjoinsel ));
+DATA(insert OID = 458 (  "<="	   PGUID 0 b t f  410  410	16 464 461	0 0 char4le intltsel intltjoinsel ));
+DATA(insert OID = 459 (  "<="	   PGUID 0 b t f  411  411	16 465 462	0 0 char8le intltsel intltjoinsel ));
+DATA(insert OID = 460 (  ">"	   PGUID 0 b t f  409  409	16 418 457	0 0 char2gt intltsel intltjoinsel ));
+DATA(insert OID = 461 (  ">"	   PGUID 0 b t f  410  410	16 419 458	0 0 char4gt intltsel intltjoinsel ));
+DATA(insert OID = 462 (  ">"	   PGUID 0 b t f  411  411	16 420 459	0 0 char8gt intltsel intltjoinsel ));
+DATA(insert OID = 463 (  ">="	   PGUID 0 b t f  409  409	16 457 418	0 0 char2ge intltsel intltjoinsel ));
+DATA(insert OID = 464 (  ">="	   PGUID 0 b t f  410  410	16 458 418	0 0 char4ge intltsel intltjoinsel ));
+DATA(insert OID = 465 (  ">="	   PGUID 0 b t f  411  411	16 459 420	0 0 char8ge intltsel intltjoinsel ));
+
 DATA(insert OID = 485 (  "<<"	   PGUID 0 b t f 604 604  16   0   0   0   0 poly_left intltsel intltjoinsel ));
 DATA(insert OID = 486 (  "&<"	   PGUID 0 b t f 604 604  16   0   0   0   0 poly_overleft intltsel intltjoinsel ));
 DATA(insert OID = 487 (  "&>"	   PGUID 0 b t f 604 604  16   0   0   0   0 poly_overright intltsel intltjoinsel ));
@@ -297,6 +319,15 @@ DATA(insert OID = 640 (  "!~"	   PGUID 0 b t f  19  25  16 0 639	0 0 nameregexne
 DATA(insert OID = 641 (  "~"	   PGUID 0 b t f  25  25  16 0 642	0 0 textregexeq eqsel eqjoinsel ));
 DATA(insert OID = 642 (  "!~"	   PGUID 0 b t f  25  25  16 0 641	0 0 textregexne eqsel eqjoinsel ));
 DATA(insert OID = 643 (  "<>"	   PGUID 0 b t f  19  19  16 643 93 0 0 namene neqsel neqjoinsel ));
+DATA(insert OID = 644 (  "<>"	   PGUID 0 b t f  20  20  16 644 1267 0 0 char16ne neqsel neqjoinsel ));
+DATA(insert OID = 645 (  "<"	   PGUID 0 b t f  20  20  16 647 648  0 0 char16lt intltsel intltjoinsel ));
+DATA(insert OID = 646 (  "<="	   PGUID 0 b t f  20  20  16 648 647  0 0 char16le intltsel intltjoinsel ));
+DATA(insert OID = 647 (  ">"	   PGUID 0 b t f  20  20  16 645 646  0 0 char16gt intltsel intltjoinsel ));
+DATA(insert OID = 648 (  ">="	   PGUID 0 b t f  20  20  16 646 645  0 0 char16ge intltsel intltjoinsel ));
+DATA(insert OID = 649 (  "~"	   PGUID 0 b t f  20  25  16 0 650	0 0 char16regexeq intltsel intltjoinsel ));
+DATA(insert OID = 650 (  "!~"	   PGUID 0 b t f  20  25  16 650 0	0 0 char16regexne intltsel intltjoinsel ));
+DATA(insert OID = 651 (  "~~"	   PGUID 0 b t f  20  25  16 0 651	0 0 char16like eqsel eqjoinsel ));
+DATA(insert OID = 652 (  "!~~"	   PGUID 0 b t f  20  25  16 651 0	0 0 char16nlike neqsel neqjoinsel ));
 DATA(insert OID = 654 (  "||"	   PGUID 0 b t f  25  25  25   0 0	0 0 textcat - - ));
 
 DATA(insert OID = 660 (  "<"	   PGUID 0 b t f  19  19  16 662 663  0 0 namelt intltsel intltjoinsel ));
@@ -322,6 +353,9 @@ DATA(insert OID = 679 (  ">="	   PGUID 0 b t f  911  911	16 677 676	0 0 oidnameg
 DATA(insert OID = 680 (  ">"	   PGUID 0 b t f  911  911	16 676 677	0 0 oidnamegt intltsel intltjoinsel ));
 DATA(insert OID = 681 (  "<>"	   PGUID 0 b t f  911  911	16 681 678	0 0 oidnamene intltsel intltjoinsel ));
 
+DATA(insert OID = 697 (  "~"	   PGUID 0 b t f  411  25  16 0 698  0 0 char8regexeq eqsel eqjoinsel ));
+DATA(insert OID = 698 (  "!~"	   PGUID 0 b t f  411  25  16 0 697  0 0 char8regexne neqsel neqjoinsel ));
+
 DATA(insert OID = 706 (  "<->"	   PGUID 0 b t f 603 603 701 706   0  0  0 box_distance intltsel intltjoinsel ));
 DATA(insert OID = 707 (  "<->"	   PGUID 0 b t f 602 602 701 707   0  0  0 path_distance intltsel intltjoinsel ));
 DATA(insert OID = 708 (  "<->"	   PGUID 0 b t f 628 628 701 708   0  0  0 line_distance intltsel intltjoinsel ));
@@ -379,6 +413,11 @@ DATA(insert OID = 833 (  ">="	   PGUID 0 b t f  810  810	16 831 830	0 0 oidint2g
 DATA(insert OID = 834 (  ">"	   PGUID 0 b t f  810  810	16 830 831	0 0 oidint2gt intltsel intltjoinsel ));
 DATA(insert OID = 835 (  "<>"	   PGUID 0 b t f  810  810	16 835 832	0 0 oidint2ne intltsel intltjoinsel ));
 
+DATA(insert OID = 839 (  "~"	   PGUID 0 b t f  409  25  16 0 841  0 0 char2regexeq eqsel eqjoinsel ));
+DATA(insert OID = 841 (  "!~"	   PGUID 0 b t f  409  25  16 0 839  0 0 char2regexne neqsel neqjoinsel ));
+DATA(insert OID = 840 (  "~"	   PGUID 0 b t f  410  25  16 0 842  0 0 char4regexeq eqsel eqjoinsel ));
+DATA(insert OID = 842 (  "!~"	   PGUID 0 b t f  410  25  16 0 840  0 0 char4regexne neqsel neqjoinsel ));
+
 DATA(insert OID = 843 (  "*"	   PGUID 0 b t f  790  700	790 845   0   0   0 cash_mul_flt4 - - ));
 DATA(insert OID = 844 (  "/"	   PGUID 0 b t f  790  700	790   0   0   0   0 cash_div_flt4 - - ));
 DATA(insert OID = 845 (  "*"	   PGUID 0 b t f  700  790	790 843   0   0   0 flt4_mul_cash - - ));
@@ -487,6 +526,12 @@ DATA(insert OID = 1136 (  "="		PGUID 0 b t t 23 26 16 1137 0 0 0 int4eqoid eqsel
 DATA(insert OID = 1137 (  "="		PGUID 0 b t t 26 23 16 1136 0 0 0 oideqint4 eqsel eqjoinsel ));
 
 /* LIKE hacks by Keith Parks. */
+DATA(insert OID = 1201 (  "~~"	  PGUID 0 b t f  409  25  16 0 1202 0 0 char2like eqsel eqjoinsel ));
+DATA(insert OID = 1202 (  "!~~"   PGUID 0 b t f  409  25  16 0 1201 0 0 char2nlike neqsel neqjoinsel ));
+DATA(insert OID = 1203 (  "~~"	  PGUID 0 b t f  410  25  16 0 1204 0 0 char4like eqsel eqjoinsel ));
+DATA(insert OID = 1204 (  "!~~"   PGUID 0 b t f  410  25  16 0 1203 0 0 char4nlike neqsel neqjoinsel ));
+DATA(insert OID = 1205 (  "~~"	  PGUID 0 b t f  411  25  16 0 1206 0 0 char8like eqsel eqjoinsel ));
+DATA(insert OID = 1206 (  "!~~"   PGUID 0 b t f  411  25  16 0 1205 0 0 char8nlike neqsel neqjoinsel ));
 DATA(insert OID = 1207 (  "~~"	  PGUID 0 b t f  19   25  16 0 1208 0 0 namelike eqsel eqjoinsel ));
 DATA(insert OID = 1208 (  "!~~"   PGUID 0 b t f  19   25  16 0 1207 0 0 namenlike neqsel neqjoinsel ));
 DATA(insert OID = 1209 (  "~~"	  PGUID 0 b t f  25   25  16 0 1210 0 0 textlike eqsel eqjoinsel ));
@@ -497,10 +542,18 @@ DATA(insert OID = 1213 (  "~~"	  PGUID 0 b t f  1043 25  16 0 1214 0 0 textlike
 DATA(insert OID = 1214 (  "!~~"   PGUID 0 b t f  1043 25  16 0 1213 0 0 textnlike neqsel neqjoinsel ));
 
 /* case-insensitive LIKE hacks */
+DATA(insert OID = 1220 (  "~*"		 PGUID 0 b t f	409  25  16 0 1221	0 0 char2icregexeq eqsel eqjoinsel ));
+DATA(insert OID = 1221 (  "!~*"		 PGUID 0 b t f	409  25  16 0 1220	0 0 char2icregexne neqsel neqjoinsel ));
+DATA(insert OID = 1222 (  "~*"		 PGUID 0 b t f	410  25  16 0 1223	0 0 char4icregexeq eqsel eqjoinsel ));
+DATA(insert OID = 1223 (  "!~*"		 PGUID 0 b t f	410  25  16 0 1222	0 0 char4icregexne neqsel neqjoinsel ));
+DATA(insert OID = 1224 (  "~*"		 PGUID 0 b t f	411  25  16 0 1225	0 0 char8icregexeq eqsel eqjoinsel ));
+DATA(insert OID = 1225 (  "!~*"		 PGUID 0 b t f	411  25  16 0 1224	0 0 char8icregexne neqsel neqjoinsel ));
 DATA(insert OID = 1226 (  "~*"		 PGUID 0 b t f	19	25	16 0 1227  0 0 nameicregexeq eqsel eqjoinsel ));
 DATA(insert OID = 1227 (  "!~*"		 PGUID 0 b t f	19	25	16 0 1226  0 0 nameicregexne neqsel neqjoinsel ));
 DATA(insert OID = 1228 (  "~*"		 PGUID 0 b t f	25	25	16 0 1229  0 0 texticregexeq eqsel eqjoinsel ));
 DATA(insert OID = 1229 (  "!~*"		 PGUID 0 b t f	25	25	16 0 1228  0 0 texticregexne eqsel eqjoinsel ));
+DATA(insert OID = 1230 (  "~*"		 PGUID 0 b t f	20	25	16 0 1231  0 0 char16icregexeq eqsel eqjoinsel ));
+DATA(insert OID = 1231 (  "!~*"		 PGUID 0 b t f	20	25	16 0 1230  0 0 char16icregexne neqsel neqjoinsel ));
 DATA(insert OID = 1232 (  "~*"		PGUID 0 b t f  1043  25  16 0 1233	0 0 texticregexeq eqsel eqjoinsel ));
 DATA(insert OID = 1233 ( "!~*"		PGUID 0 b t f  1043  25  16 0 1232	0 0 texticregexne neqsel neqjoinsel ));
 DATA(insert OID = 1234 (  "~*"		PGUID 0 b t f  1042  25  16 0 1235	0 0 texticregexeq eqsel eqjoinsel ));
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 8457d3238b7fc72b5d2a9af24981083a39a8a6fd..ed64537d2a7ab15bb7155f005b8c72813db1ed74 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_proc.h,v 1.49 1998/03/30 17:25:24 momjian Exp $
+ * $Id: pg_proc.h,v 1.50 1998/04/07 18:12:25 momjian Exp $
  *
  * NOTES
  *	  The script catalog/genbki.sh reads this file and generates .bki
@@ -110,6 +110,10 @@ DATA(insert OID =  34 (  namein			   PGUID 11 f t f 1 f 19 "0" 100 0 0 100  foo
 DESCR("(internal)");
 DATA(insert OID =  35 (  nameout		   PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
 DESCR("(internal)");
+DATA(insert OID =  36 (  char16in		   PGUID 11 f t f 1 f 19 "0" 100 0 0 100  foo bar ));
+DESCR("(internal)");
+DATA(insert OID =  37 (  char16out		   PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
+DESCR("(internal)");
 DATA(insert OID =  38 (  int2in			   PGUID 11 f t f 1 f 21 "0" 100 0 0 100  foo bar ));
 DESCR("(internal)");
 DATA(insert OID =  39 (  int2out		   PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
@@ -792,6 +796,8 @@ DATA(insert OID = 372 (  on_sb			   PGUID 11 f t f 2 f 16 "601 603" 100 0 0 100
 DESCR("contained in");
 DATA(insert OID = 373 (  inter_sb		   PGUID 11 f t f 2 f 16 "601 603" 100 0 0 100	foo bar ));
 DESCR("");
+DATA(insert OID = 1274 (  btchar16cmp	   PGUID 11 f t f 2 f 23 "19 19" 100 0 0 100  foo bar ));
+DESCR("btree less-equal-greater");
 
 /* OIDS 400 - 499 */
 
@@ -834,6 +840,59 @@ DATA(insert OID = 455 (  hashname		   PGUID 11 f t f 2 f 23 "19 19" 100 0 0 100
 DESCR("hash");
 DATA(insert OID = 456 (  hashtext		   PGUID 11 f t f 2 f 23 "25 25" 100 0 0 100  foo bar ));
 DESCR("hash");
+DATA(insert OID = 466 (  char2in		   PGUID 11 f t f 1 f 409 "0" 100 0 0 100  foo bar ));
+DESCR("(internal)");
+DATA(insert OID = 467 (  char4in		   PGUID 11 f t f 1 f 410 "0" 100 0 0 100  foo bar ));
+DESCR("(internal)");
+DATA(insert OID = 468 (  char8in		   PGUID 11 f t f 1 f 411 "0" 100 0 0 100  foo bar ));
+DESCR("(internal)");
+DATA(insert OID = 469 (  char2out		   PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
+DESCR("(internal)");
+DATA(insert OID = 470 (  char4out		   PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
+DESCR("(internal)");
+DATA(insert OID = 471 (  char8out		   PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
+DESCR("(internal)");
+DATA(insert OID = 472 (  char2eq		   PGUID 11 f t f 2 f 16 "409 409" 100 0 0 100	foo bar ));
+DESCR("equals");
+DATA(insert OID = 473 (  char4eq		   PGUID 11 f t f 2 f 16 "410 410" 100 0 0 100	foo bar ));
+DESCR("equals");
+DATA(insert OID = 474 (  char8eq		   PGUID 11 f t f 2 f 16 "411 411" 100 0 0 100	foo bar ));
+DESCR("equals");
+DATA(insert OID = 475 (  char2lt		   PGUID 11 f t f 2 f 16 "409 409" 100 0 0 100	foo bar ));
+DESCR("less-than");
+DATA(insert OID = 476 (  char4lt		   PGUID 11 f t f 2 f 16 "410 410" 100 0 0 100	foo bar ));
+DESCR("less-than");
+DATA(insert OID = 477 (  char8lt		   PGUID 11 f t f 2 f 16 "411 411" 100 0 0 100	foo bar ));
+DESCR("less-than");
+DATA(insert OID = 478 (  char2le		   PGUID 11 f t f 2 f 16 "409 409" 100 0 0 100	foo bar ));
+DESCR("less-than-or-equals");
+DATA(insert OID = 479 (  char4le		   PGUID 11 f t f 2 f 16 "410 410" 100 0 0 100	foo bar ));
+DESCR("less-than-or-equals");
+DATA(insert OID = 480 (  char8le		   PGUID 11 f t f 2 f 16 "411 411" 100 0 0 100	foo bar ));
+DESCR("less-than-or-equals");
+DATA(insert OID = 481 (  char2gt		   PGUID 11 f t f 2 f 16 "409 409" 100 0 0 100	foo bar ));
+DESCR("greater-than");
+DATA(insert OID = 482 (  char4gt		   PGUID 11 f t f 2 f 16 "410 410" 100 0 0 100	foo bar ));
+DESCR("greater-than");
+DATA(insert OID = 483 (  char8gt		   PGUID 11 f t f 2 f 16 "411 411" 100 0 0 100	foo bar ));
+DESCR("greater-than");
+DATA(insert OID = 484 (  char2ge		   PGUID 11 f t f 2 f 16 "409 409" 100 0 0 100	foo bar ));
+DESCR("greater-than-or-equals");
+DATA(insert OID = 1275 (  char16eq		   PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
+DESCR("equals");
+DATA(insert OID = 1276 (  char16lt		   PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
+DESCR("less-than");
+DATA(insert OID = 1277 (  char16le		   PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
+DESCR("less-than-or-equals");
+DATA(insert OID = 1278 (  char16gt		   PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
+DESCR("greater-than");
+DATA(insert OID = 1279 (  char16ge		   PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
+DESCR("greater-than-or-equals");
+DATA(insert OID = 1280 (  char16ne		   PGUID 11 f t f 2 f 16 "19 19" 100 0 0 100  foo bar ));
+DESCR("not equal");
+
+DATA(insert OID = 1281 (  hashchar16	   PGUID 11 f t f 2 f 23 "19 19" 100 0 0 100  foo bar ));
+DESCR("hash");
 
 /* OIDS 500 - 599 */
 
@@ -861,9 +920,41 @@ DATA(insert OID = 682 (  mktinterval	   PGUID 11 f t f 2 f 704 "702 702" 100 0 0
 DESCR("convert to interval");
 DATA(insert OID = 683 (  oid8eq			   PGUID 11 f t f 2 f 16 "30 30" 100 0 0 100  foo bar ));
 DESCR("equals");
+DATA(insert OID = 684 (  char4ge		   PGUID 11 f t f 2 f 16 "410 410" 100 0 0 100	foo bar ));
+DESCR("greater-than-or-equals");
+DATA(insert OID = 685 (  char8ge		   PGUID 11 f t f 2 f 16 "411 411" 100 0 0 100	foo bar ));
+DESCR("greater-than-or-equals");
+DATA(insert OID = 686 (  char2ne		   PGUID 11 f t f 2 f 16 "409 409" 100 0 0 100	foo bar ));
+DESCR("not equal");
+DATA(insert OID = 687 (  char4ne		   PGUID 11 f t f 2 f 16 "410 410" 100 0 0 100	foo bar ));
+DESCR("not equal");
+DATA(insert OID = 688 (  char8ne		   PGUID 11 f t f 2 f 16 "411 411" 100 0 0 100	foo bar ));
+DESCR("not equal");
+DATA(insert OID = 689 (  btchar2cmp		   PGUID 11 f t f 2 f 23 "409 409" 100 0 0 100	foo bar ));
+DESCR("btree less-equal-greater");
+DATA(insert OID = 690 (  btchar4cmp		   PGUID 11 f t f 2 f 23 "410 410" 100 0 0 100	foo bar ));
+DESCR("btree less-equal-greater");
+DATA(insert OID = 691 (  btchar8cmp		   PGUID 11 f t f 2 f 23 "411 411" 100 0 0 100	foo bar ));
+DESCR("btree less-equal-greater");
+DATA(insert OID = 692 (  hashchar2		   PGUID 11 f t f 2 f 23 "409 409" 100 0 0 100	foo bar ));
+DESCR("hash");
+DATA(insert OID = 693 (  hashchar4		   PGUID 11 f t f 2 f 23 "410 410" 100 0 0 100	foo bar ));
+DESCR("hash");
+DATA(insert OID = 694 (  hashchar8		   PGUID 11 f t f 2 f 23 "411 411" 100 0 0 100	foo bar ));
+DESCR("hash");
+DATA(insert OID = 695 (  char8regexeq	   PGUID 11 f t f 2 f 16 "411 25" 100 0 0 100  foo bar ));
+DESCR("matches regex., case-sensitive");
+DATA(insert OID = 696 (  char8regexne	   PGUID 11 f t f 2 f 16 "411 25" 100 0 0 100  foo bar ));
+DESCR("does not match regex., case-sensitive");
+DATA(insert OID = 699 (  char2regexeq	   PGUID 11 f t f 2 f 16 "409 25" 100 0 0 100  foo bar ));
+DESCR("matches regex., case-sensitive");
 
 /* OIDS 700 - 799 */
 
+DATA(insert OID = 1288 (  char16regexeq    PGUID 11 f t f 2 f 16 "19 25" 100 0 0 100  foo bar ));
+DESCR("matches regex., case-sensitive");
+DATA(insert OID = 1289 (  char16regexne    PGUID 11 f t f 2 f 16 "19 25" 100 0 0 100  foo bar ));
+DESCR("does not match regex., case-sensitive");
 
 DATA(insert OID = 710 (  getpgusername	   PGUID 11 f t f 0 f 19 "0" 100 0 0 100  foo bar ));
 DESCR("(internal)");
@@ -1029,16 +1120,39 @@ DESCR("less-equal-greater");
 DATA(insert OID = 829 (  mkoidint2		   PGUID 11 f t f 2 f 810 "26 21" 100 0 0 100  foo bar));
 DESCR("");
 
+DATA(insert OID =  837 (  char2regexne	   PGUID 11 f t f 2 f 16 "409 25" 100 0 0 100  foo bar ));
+DESCR("does not match regex., case-sensitive");
+DATA(insert OID =  836 (  char4regexeq	   PGUID 11 f t f 2 f 16 "410 25" 100 0 0 100  foo bar ));
+DESCR("matches regex., case-sensitive");
+DATA(insert OID =  838 (  char4regexne	   PGUID 11 f t f 2 f 16 "410 25" 100 0 0 100  foo bar ));
+DESCR("does not match regex., case-sensitive");
+
 DATA(insert OID =  849 (  textpos		   PGUID 11 f t f 2 f 23 "25 25" 100 0 1 0 foo bar ));
 DESCR("return position of substring");
 DATA(insert OID =  850 (  textlike		   PGUID 11 f t f 2 f 16 "25 25" 100 0 1 0 foo bar ));
 DESCR("matches LIKE expression");
 DATA(insert OID =  851 (  textnlike		   PGUID 11 f t f 2 f 16 "25 25" 100 0 1 0 foo bar ));
 DESCR("does not match LIKE expression");
+DATA(insert OID =  852 (  char2like		   PGUID 11 f t f 2 f 16 "409 25" 100 0 0 100  foo bar ));
+DESCR("matches LIKE expression");
+DATA(insert OID =  853 (  char2nlike	   PGUID 11 f t f 2 f 16 "409 25" 100 0 0 100  foo bar ));
+DESCR("does not match LIKE expression");
+DATA(insert OID =  854 (  char4like		   PGUID 11 f t f 2 f 16 "410 25" 100 0 0 100  foo bar ));
+DESCR("matches LIKE expression");
+DATA(insert OID =  855 (  char4nlike	   PGUID 11 f t f 2 f 16 "410 25" 100 0 0 100  foo bar ));
+DESCR("does not match LIKE expression");
+DATA(insert OID =  856 (  char8like		   PGUID 11 f t f 2 f 16 "411 25" 100 0 0 100  foo bar ));
+DESCR("matches LIKE expression");
+DATA(insert OID =  857 (  char8nlike	   PGUID 11 f t f 2 f 16 "411 25" 100 0 0 100  foo bar ));
+DESCR("does not match LIKE expression");
 DATA(insert OID =  858 (  namelike		   PGUID 11 f t f 2 f 16 "19 25" 100 0 0 100  foo bar ));
 DESCR("matches LIKE expression");
 DATA(insert OID =  859 (  namenlike		   PGUID 11 f t f 2 f 16 "19 25" 100 0 0 100  foo bar ));
 DESCR("does not match LIKE expression");
+DATA(insert OID =  860 (  char16like	   PGUID 11 f t f 2 f 16 "20 25" 100 0 0 100  foo bar ));
+DESCR("matches LIKE expression");
+DATA(insert OID =  861 (  char16nlike	   PGUID 11 f t f 2 f 16 "20 25" 100 0 0 100  foo bar ));
+DESCR("does not match LIKE expression");
 
 DATA(insert OID =  846 (  cash_mul_flt4		   PGUID 11 f t f 2 f 790 "790 700" 100 0 0 100  foo bar ));
 DESCR("multiply");
@@ -1463,6 +1577,10 @@ DESCR("truncate datetime to specified units");
 DATA(insert OID = 1218 (  timespan_trunc   PGUID 11 f t f 2 f 1186 "25 1186" 100 0 0 100  foo bar ));
 DESCR("truncate timespan to specified units");
 
+DATA(insert OID = 1236 (  char16icregexeq  PGUID 11 f t f 2 f 16 "20 25" 100 0 0 100  foo bar ));
+DESCR("matches regex., case-insensitive");
+DATA(insert OID = 1237 (  char16icregexne  PGUID 11 f t f 2 f 16 "20 25" 100 0 0 100  foo bar ));
+DESCR("does not match regex., case-insensitive");
 DATA(insert OID = 1238 (  texticregexeq    PGUID 11 f t f 2 f 16 "25 25" 100 0 1 0	foo bar ));
 DESCR("matches regex., case-insensitive");
 DATA(insert OID = 1239 (  texticregexne    PGUID 11 f t f 2 f 16 "25 25" 100 0 1 0	foo bar ));
@@ -1482,6 +1600,19 @@ DESCR("convert");
 DATA(insert OID = 1271 (  timespan_finite  PGUID 11 f t f 1 f	16 "1186" 100 0 0 100  foo bar ));
 DESCR("boolean test");
 
+DATA(insert OID = 1290 (  char2icregexeq   PGUID 11 f t f 2 f 16 "409 25" 100 0 0 100  foo bar ));
+DESCR("matches regex., case-insensitive");
+DATA(insert OID = 1291 (  char2icregexne   PGUID 11 f t f 2 f 16 "409 25" 100 0 0 100  foo bar ));
+DESCR("does not match regex., case-insensitive");
+DATA(insert OID = 1292 (  char4icregexeq   PGUID 11 f t f 2 f 16 "410 25" 100 0 0 100  foo bar ));
+DESCR("matches regex., case-insensitive");
+DATA(insert OID = 1293 (  char4icregexne   PGUID 11 f t f 2 f 16 "410 25" 100 0 0 100  foo bar ));
+DESCR("does not match regex., case-insensitive");
+DATA(insert OID = 1294 (  char8icregexeq   PGUID 11 f t f 2 f 16 "411 25" 100 0 0 100  foo bar ));
+DESCR("matches regex., case-insensitive");
+DATA(insert OID = 1295 (  char8icregexne   PGUID 11 f t f 2 f 16 "411 25" 100 0 0 100  foo bar ));
+DESCR("does not match regex., case-insensitive");
+
 DATA(insert OID = 1297 (  timestamp_in	   PGUID 11 f t f 1 f 1296 "0" 100 0 0 100	foo bar ));
 DESCR("(internal)");
 DATA(insert OID = 1298 (  timestamp_out    PGUID 11 f t f 1 f	23 "0" 100 0 0 100	foo bar ));
diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h
index c255a13903c0dca34a3ac034e3d7107d4838e8fc..2d9b81cc777187406b61ffdac78c4620605eb238 100644
--- a/src/include/catalog/pg_type.h
+++ b/src/include/catalog/pg_type.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_type.h,v 1.36 1998/03/30 17:25:31 momjian Exp $
+ * $Id: pg_type.h,v 1.37 1998/04/07 18:12:28 momjian Exp $
  *
  * NOTES
  *	  the genbki.sh script reads this file and generates .bki
@@ -166,6 +166,8 @@ DATA(insert OID = 19 (	name	   PGUID NAMEDATALEN NAMEDATALEN  f b t \054 0	18 na
 DESCR("31-character type for storing system identifiers");
 #define NAMEOID 19
 
+DATA(insert OID = 20 (	char16	   PGUID 16  16 f b t \054 0  18 char16in char16out char16in char16out i _null_ ));
+DESCR("16 characters, fixed length");
 DATA(insert OID = 21 (	int2	   PGUID  2   5 t b t \054 0   0 int2in int2out int2in int2out s _null_ ));
 DESCR("two-byte integer, -32k to 32k");
 #define INT2OID			21
@@ -230,6 +232,12 @@ DESCR("storage manager");
 /* OIDS 300 - 399 */
 
 /* OIDS 400 - 499 */
+DATA(insert OID = 409 (  char2	   PGUID 2	2 t b t \054 0	18 char2in char2out char2in char2out s _null_ ));
+DESCR("2 characters");
+DATA(insert OID = 410 (  char4	   PGUID 4	4 t b t \054 0	18 char4in char4out char4in char4out i _null_ ));
+DESCR("4 characters");
+DATA(insert OID = 411 (  char8	   PGUID 8	8 f b t \054 0	18 char8in char8out char8in char8out i _null_ ));
+DESCR("8 characters");
 
 /* OIDS 500 - 599 */
 
@@ -293,6 +301,7 @@ DATA(insert OID = 1000 (  _bool		 PGUID -1  -1 f b t \054 0	16 array_in array_ou
 DATA(insert OID = 1001 (  _bytea	 PGUID -1  -1 f b t \054 0	17 array_in array_out array_in array_out i _null_ ));
 DATA(insert OID = 1002 (  _char		 PGUID -1  -1 f b t \054 0	18 array_in array_out array_in array_out i _null_ ));
 DATA(insert OID = 1003 (  _name		 PGUID -1  -1 f b t \054 0	19 array_in array_out array_in array_out i _null_ ));
+DATA(insert OID = 1004 (  _char16	 PGUID -1  -1 f b t \054 0	20 array_in array_out array_in array_out i _null_ ));
 DATA(insert OID = 1005 (  _int2		 PGUID -1  -1 f b t \054 0	21 array_in array_out array_in array_out i _null_ ));
 DATA(insert OID = 1006 (  _int28	 PGUID -1  -1 f b t \054 0	22 array_in array_out array_in array_out i _null_ ));
 DATA(insert OID = 1007 (  _int4		 PGUID -1  -1 f b t \054 0	23 array_in array_out array_in array_out i _null_ ));
@@ -322,6 +331,10 @@ DATA(insert OID = 1033 (  aclitem	 PGUID 8   -1 f b t \054 0 0 aclitemin aclitem
 DESCR("access control list");
 DATA(insert OID = 1034 (  _aclitem	 PGUID -1  -1 f b t \054 0 1033 array_in array_out array_in array_out i _null_ ));
 
+DATA(insert OID = 1039 (  _char2	 PGUID -1  -1 f b t \054 0	409 array_in array_out array_in array_out i _null_ ));
+DATA(insert OID = 1040 (  _char4	 PGUID -1  -1 f b t \054 0	410 array_in array_out array_in array_out i _null_ ));
+DATA(insert OID = 1041 (  _char8	 PGUID -1  -1 f b t \054 0	411 array_in array_out array_in array_out i _null_ ));
+
 DATA(insert OID = 1042 ( bpchar		 PGUID -1  -1 f b t \054 0	18 bpcharin bpcharout bpcharin bpcharout i _null_ ));
 DESCR("blank-padded characters, length specifed when created");
 #define BPCHAROID		1042
diff --git a/src/include/postgres.h b/src/include/postgres.h
index 66d665cf9b80423f9cf0e5aa8f52d2a53ae1c600..12c818a4497664dff1b9efdacb643121f1caf74e 100644
--- a/src/include/postgres.h
+++ b/src/include/postgres.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1995, Regents of the University of California
  *
- * $Id: postgres.h,v 1.14 1998/03/30 17:24:31 momjian Exp $
+ * $Id: postgres.h,v 1.15 1998/04/07 18:11:53 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -19,7 +19,7 @@
  *				Oid		   regproc	  RegProcedure
  *				aclitem
  *				struct varlena
- *				int28	  oid8
+ *				char8	   char16	   int28	  oid8
  *				bytea	   text
  *				NameData   Name
  *				oidint4    oidint2	  oidname
@@ -88,6 +88,22 @@ struct varlena
 typedef struct varlena bytea;
 typedef struct varlena text;
 
+typedef struct char8
+{
+	char		data[8];
+} char8;
+
+/* ----------------
+ *		char16
+ * ----------------
+ */
+typedef struct char16
+{
+	char		data[16];
+} char16;
+
+typedef char16 *Char16;
+
 typedef int2 int28[8];
 typedef Oid oid8[8];
 
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h
index adc4f7dc6b61fde1fc155906b217b2c30f1922d2..8d605897094ecc29c86b088681a3919c6c5d3da5 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.38 1998/03/30 17:25:38 momjian Exp $
+ * $Id: builtins.h,v 1.39 1998/04/07 18:12:35 momjian Exp $
  *
  * NOTES
  *	  This should normally only be included by fmgr.h.
@@ -43,6 +43,8 @@ extern int32 charin(char *ch);
 extern char *charout(int32 ch);
 extern int32 cidin(char *s);
 extern char *cidout(int32 c);
+extern char *char16in(char *s);
+extern char *char16out(char *s);
 extern bool chareq(int8 arg1, int8 arg2);
 extern bool charne(int8 arg1, int8 arg2);
 extern bool charlt(int8 arg1, int8 arg2);
@@ -54,6 +56,39 @@ extern int8 charmi(int8 arg1, int8 arg2);
 extern int8 charmul(int8 arg1, int8 arg2);
 extern int8 chardiv(int8 arg1, int8 arg2);
 extern bool cideq(int8 arg1, int8 arg2);
+extern bool char16eq(char *arg1, char *arg2);
+extern bool char16ne(char *arg1, char *arg2);
+extern bool char16lt(char *arg1, char *arg2);
+extern bool char16le(char *arg1, char *arg2);
+extern bool char16gt(char *arg1, char *arg2);
+extern bool char16ge(char *arg1, char *arg2);
+extern uint16 char2in(char *s);
+extern char *char2out(uint16 s);
+extern bool char2eq(uint16 a, uint16 b);
+extern bool char2ne(uint16 a, uint16 b);
+extern bool char2lt(uint16 a, uint16 b);
+extern bool char2le(uint16 a, uint16 b);
+extern bool char2gt(uint16 a, uint16 b);
+extern bool char2ge(uint16 a, uint16 b);
+extern int32 char2cmp(uint16 a, uint16 b);
+extern uint32 char4in(char *s);
+extern char *char4out(uint32 s);
+extern bool char4eq(uint32 a, uint32 b);
+extern bool char4ne(uint32 a, uint32 b);
+extern bool char4lt(uint32 a, uint32 b);
+extern bool char4le(uint32 a, uint32 b);
+extern bool char4gt(uint32 a, uint32 b);
+extern bool char4ge(uint32 a, uint32 b);
+extern int32 char4cmp(uint32 a, uint32 b);
+extern char *char8in(char *s);
+extern char *char8out(char *s);
+extern bool char8eq(char *arg1, char *arg2);
+extern bool char8ne(char *arg1, char *arg2);
+extern bool char8lt(char *arg1, char *arg2);
+extern bool char8le(char *arg1, char *arg2);
+extern bool char8gt(char *arg1, char *arg2);
+extern bool char8ge(char *arg1, char *arg2);
+extern int32 char8cmp(char *arg1, char *arg2);
 
 /* int.c */
 extern int32 int2in(char *num);
@@ -162,6 +197,10 @@ extern int32 btfloat8cmp(float64 a, float64 b);
 extern int32 btoidcmp(Oid a, Oid b);
 extern int32 btabstimecmp(AbsoluteTime a, AbsoluteTime b);
 extern int32 btcharcmp(char a, char b);
+extern int32 btchar2cmp(uint16 a, uint16 b);
+extern int32 btchar4cmp(uint32 a, uint32 b);
+extern int32 btchar8cmp(char *a, char *b);
+extern int32 btchar16cmp(char *a, char *b);
 extern int32 btnamecmp(NameData *a, NameData *b);
 extern int32 bttextcmp(struct varlena * a, struct varlena * b);
 
@@ -335,10 +374,26 @@ extern text *oid_text(Oid arg1);
 extern Oid	text_oid(text *arg1);
 
 /* regexp.c */
+extern bool char2regexeq(uint16 arg1, struct varlena * p);
+extern bool char2regexne(uint16 arg1, struct varlena * p);
+extern bool char4regexeq(uint32 arg1, struct varlena * p);
+extern bool char4regexne(uint32 arg1, struct varlena * p);
+extern bool char8regexeq(char *s, struct varlena * p);
+extern bool char8regexne(char *s, struct varlena * p);
+extern bool char16regexeq(char *s, struct varlena * p);
+extern bool char16regexne(char *s, struct varlena * p);
 extern bool nameregexeq(NameData *n, struct varlena * p);
 extern bool nameregexne(NameData *s, struct varlena * p);
 extern bool textregexeq(struct varlena * s, struct varlena * p);
 extern bool textregexne(struct varlena * s, struct varlena * p);
+extern bool char2icregexeq(uint16 arg1, struct varlena * p);
+extern bool char2icregexne(uint16 arg1, struct varlena * p);
+extern bool char4icregexeq(uint32 arg1, struct varlena * p);
+extern bool char4icregexne(uint32 arg1, struct varlena * p);
+extern bool char8icregexeq(char *s, struct varlena * p);
+extern bool char8icregexne(char *s, struct varlena * p);
+extern bool char16icregexeq(char *s, struct varlena * p);
+extern bool char16icregexne(char *s, struct varlena * p);
 extern bool nameicregexeq(NameData *s, struct varlena * p);
 extern bool nameicregexne(NameData *s, struct varlena * p);
 extern bool texticregexeq(struct varlena * s, struct varlena * p);
@@ -469,6 +524,14 @@ extern TimeADT *datetime_time(DateTime *datetime);
 extern int32 int42reltime(int32 timevalue);
 
 /* like.c */
+extern bool char2like(uint16 arg1, struct varlena * p);
+extern bool char2nlike(uint16 arg1, struct varlena * p);
+extern bool char4like(uint32 arg1, struct varlena * p);
+extern bool char4nlike(uint32 arg1, struct varlena * p);
+extern bool char8like(char *s, struct varlena * p);
+extern bool char8nlike(char *s, struct varlena * p);
+extern bool char16like(char *s, struct varlena * p);
+extern bool char16nlike(char *s, struct varlena * p);
 extern bool namelike(NameData *n, struct varlena * p);
 extern bool namenlike(NameData *s, struct varlena * p);
 extern bool textlike(struct varlena * s, struct varlena * p);
diff --git a/src/include/utils/oidcompos.h b/src/include/utils/oidcompos.h
index 100b992b3d4e3b6ba6c25d421c9df144b4d65ca1..30cedbf6e13aac75733ee9e8d9b71f53c1e70554 100644
--- a/src/include/utils/oidcompos.h
+++ b/src/include/utils/oidcompos.h
@@ -1,12 +1,12 @@
 /*-------------------------------------------------------------------------
  *
  * oidcompos.h--
- *	  prototype file for the oid {name,int4} composite type functions.
+ *	  prototype file for the oid {char16,int4} composite type functions.
  *
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: oidcompos.h,v 1.4 1998/03/30 17:25:41 momjian Exp $
+ * $Id: oidcompos.h,v 1.5 1998/04/07 18:12:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
diff --git a/src/man/bki.5 b/src/man/bki.5
index f7e3a87bad98591560877ae8aaf178a303ea6508..9fb8e6b2ce2b7ca99f7e3582da4e6fa2758af872 100644
--- a/src/man/bki.5
+++ b/src/man/bki.5
@@ -1,5 +1,5 @@
 .\" This is -*-nroff-*-
-.\" $Header: /cvsroot/pgsql/src/man/Attic/bki.5,v 1.2 1998/03/30 17:25:47 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/bki.5,v 1.3 1998/04/07 18:12:50 momjian Exp $
 .TH BKI 5 11/04/96 Postgres Postgres
 .SH NAME
 *.bki
@@ -207,7 +207,7 @@ collection as object
 .IR 421,
 print out the class, and then close it.
 .nf
-create pg_opclass (opcname=name)
+create pg_opclass (opcname=char16)
 open pg_opclass
 insert oid=421 (int_ops)
 print
diff --git a/src/man/create_function.l b/src/man/create_function.l
index 1213dc95b0a736a564e5685d5c51dba4caca09cd..cff79889bbdc544ad5d950bd04384966023c8209 100644
--- a/src/man/create_function.l
+++ b/src/man/create_function.l
@@ -1,6 +1,6 @@
 .\" This is -*-nroff-*-
 .\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/create_function.l,v 1.6 1998/03/30 17:25:48 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/create_function.l,v 1.7 1998/04/07 18:12:51 momjian Exp $
 .TH "CREATE FUNCTION" SQL 11/05/95 PostgreSQL PostgreSQL
 .SH "NAME"
 create function - define a new function
@@ -138,6 +138,7 @@ bool	bool	include/c.h
 box	(BOX *) 	utils/geo-decls.h
 bytea	(bytea *)	include/postgres.h
 char	char	N/A
+char16	Char16 or (char16 *)	include/postgres.h
 cid	CID	include/postgres.h
 int2	int2	include/postgres.h
 int28	(int28 *)	include/postgres.h
diff --git a/src/man/create_index.l b/src/man/create_index.l
index 333d555b994c9a1146886737e0c05ce250786d54..2247026bce89f9393a8f02c6f601c48f6780d87a 100644
--- a/src/man/create_index.l
+++ b/src/man/create_index.l
@@ -1,6 +1,6 @@
 .\" This is -*-nroff-*-
 .\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/create_index.l,v 1.9 1998/03/30 17:25:50 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/create_index.l,v 1.10 1998/04/07 18:12:52 momjian Exp $
 .TH "CREATE INDEX" SQL 11/05/95 PostgreSQL PostgreSQL
 .SH NAME
 create index - construct a secondary index
@@ -99,6 +99,26 @@ btree   |bpchar_ops |<=
 btree   |bpchar_ops |=       
 btree   |bpchar_ops |>       
 btree   |bpchar_ops |>=      
+btree   |char16_ops |<       
+btree   |char16_ops |<=      
+btree   |char16_ops |=       
+btree   |char16_ops |>       
+btree   |char16_ops |>=      
+btree   |char2_ops  |<       
+btree   |char2_ops  |<=      
+btree   |char2_ops  |=       
+btree   |char2_ops  |>       
+btree   |char2_ops  |>=      
+btree   |char4_ops  |<       
+btree   |char4_ops  |<=      
+btree   |char4_ops  |=       
+btree   |char4_ops  |>       
+btree   |char4_ops  |>=      
+btree   |char8_ops  |<       
+btree   |char8_ops  |<=      
+btree   |char8_ops  |=       
+btree   |char8_ops  |>       
+btree   |char8_ops  |>=      
 btree   |char_ops   |<       
 btree   |char_ops   |<=      
 btree   |char_ops   |=       
@@ -180,6 +200,10 @@ btree   |varchar_ops|=
 btree   |varchar_ops|>       
 btree   |varchar_ops|>=      
 hash    |bpchar_ops |=       
+hash    |char16_ops |=       
+hash    |char2_ops  |=       
+hash    |char4_ops  |=       
+hash    |char8_ops  |=       
 hash    |char_ops   |=       
 hash    |date_ops   |=       
 hash    |float4_ops |=       
@@ -230,7 +254,7 @@ The operator classes
 .IR oidint2_ops ,
 .IR oidint4_ops ,
 and
-.IR oidname_ops
+.IR oidchar16_ops
 represent the use of 
 .IR "functional indices"
 to simulate multi-key indices.
@@ -276,7 +300,7 @@ create index empindex on emp using btree (age int4_ops)
 --Create a btree index on employee name.
 --
 create index empname
-	on emp using btree (name name_ops)
+	on emp using btree (name char16_ops)
 .fi
 .nf
 --
diff --git a/src/man/create_rule.l b/src/man/create_rule.l
index 4347720f59bd7fe4926385112870a5ec73f1e88a..3c84427f32daf24652c5b44b3b7e21478abf5e29 100644
--- a/src/man/create_rule.l
+++ b/src/man/create_rule.l
@@ -1,6 +1,6 @@
 .\" This is -*-nroff-*-
 .\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/create_rule.l,v 1.5 1998/03/30 17:25:51 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/create_rule.l,v 1.6 1998/04/07 18:12:53 momjian Exp $
 .TH "CREATE RULE" SQL 11/05/95 PostgreSQL PostgreSQL
 .SH NAME
 create rule - define a new rule
@@ -183,7 +183,7 @@ create rule example_3 is
 --
 --Create a view of the employees working in the toy department.
 --
-create TOYEMP(name = name, salary = int4)
+create TOYEMP(name = char16, salary = int4)
 
 create rule example_4 is
     on select to TOYEMP
diff --git a/src/man/create_table.l b/src/man/create_table.l
index 1dd6ee3fe2759ae1bf3d5ee707ac0c95447397e1..d314241ce50249bc3e33728e314b714fe64d8ff4 100644
--- a/src/man/create_table.l
+++ b/src/man/create_table.l
@@ -1,6 +1,6 @@
 .\" This is -*-nroff-*-
 .\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/create_table.l,v 1.15 1998/03/30 17:25:51 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/create_table.l,v 1.16 1998/04/07 18:12:54 momjian Exp $
 .TH "CREATE TABLE" SQL 09/25/97 PostgreSQL
 .SH NAME
 create table - create a new class
@@ -78,14 +78,14 @@ name as a system catalog class.
 --
 -- Create class emp with attributes name, sal and bdate
 --
-create table emp (name name, salary float4, bdate abstime)
+create table emp (name char16, salary float4, bdate abstime)
 .fi
 .nf
 --
 --Create class permemp with pension information that
 --inherits all fields of emp 
 --
-create table permemp (plan name) inherits (emp)
+create table permemp (plan char16) inherits (emp)
 .fi
 .nf
 --
diff --git a/src/man/libpq.3 b/src/man/libpq.3
index 77423866a7e69dba89ab22412e5f9e5645227bad..f10ac9f45e52ecc9c08765a5df08a4ee31631b6c 100644
--- a/src/man/libpq.3
+++ b/src/man/libpq.3
@@ -1,6 +1,6 @@
 .\" This is -*-nroff-*-
 .\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/libpq.3,v 1.14 1998/03/30 17:25:55 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/libpq.3,v 1.15 1998/04/07 18:12:56 momjian Exp $
 .TH LIBPQ INTRO 03/12/94 PostgreSQL PostgreSQL
 .SH DESCRIPTION
 Libpq is the programmer's interface to Postgres.  Libpq is a set of
@@ -556,7 +556,7 @@ int PQendcopy(PGconn *conn);
 .fi
 As an example:
 .nf
-PQexec(conn, "create table foo (a int4, b name, d float8)");
+PQexec(conn, "create table foo (a int4, b char16, d float8)");
 PQexec(conn, "copy foo from stdin");
 PQputline(conn, "3<TAB>hello world<TAB>4.5\en");
 PQputline(conn,"4<TAB>goodbye world<TAB>7.11\en");
diff --git a/src/man/sql.l b/src/man/sql.l
index afe8d59bb237c61f5e77a963dbf9db36184877ce..73b64ee4a7c96dc80083496622bc63fe2f329016 100644
--- a/src/man/sql.l
+++ b/src/man/sql.l
@@ -1,6 +1,6 @@
 .\" This is -*-nroff-*-
 .\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/sql.l,v 1.9 1998/03/30 17:26:00 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/sql.l,v 1.10 1998/04/07 18:12:57 momjian Exp $
 .TH INTRODUCTION SQL 11/5/95 PostgreSQL PostgreSQL
 .SH "Section 4 - SQL Commands (COMMANDS)"
 .SH "General Information"
@@ -219,7 +219,7 @@ parameter is:
 .fi
 For example, consider the definition of a function, DEPT, as
 .nf
-create function DEPT (name) 
+create function DEPT (char16) 
 	returns dept
 	as 'select * from 
 	    dept where name=$1'
diff --git a/src/test/bench/create.source b/src/test/bench/create.source
index b75ed732a0c1d3a114762638e7626abf087503e1..986ff3cf6c0d067e6920afa992265e990272140a 100644
--- a/src/test/bench/create.source
+++ b/src/test/bench/create.source
@@ -1,6 +1,6 @@
-create table onek(unique1 int4,unique2 int4,two int4,four int4,ten int4,twenty int4, hundred int4,thousand int4,twothousand int4,fivethous int4,tenthous int4,odd int4, even int4,stringu1 name,stringu2 name,string4 name);
-create table tenk1 (unique1 int4,unique2 int4, two int4,four int4,ten int4,twenty int4,hundred int4,thousand int4,twothousand int4,fivethous int4,tenthous int4,odd int4,even int4,stringu1 name,stringu2 name,string4 name);
-create table tenk2 (unique1 int4, unique2 int4, two int4, four int4,ten int4, twenty int4, hundred int4, thousand int4, twothousand int4,fivethous int4, tenthous int4, odd int4, even int4,stringu1 name,stringu2 name, string4 name);
+create table onek(unique1 int4,unique2 int4,two int4,four int4,ten int4,twenty int4, hundred int4,thousand int4,twothousand int4,fivethous int4,tenthous int4,odd int4, even int4,stringu1 char16,stringu2 char16,string4 char16);
+create table tenk1 (unique1 int4,unique2 int4, two int4,four int4,ten int4,twenty int4,hundred int4,thousand int4,twothousand int4,fivethous int4,tenthous int4,odd int4,even int4,stringu1 char16,stringu2 char16,string4 char16);
+create table tenk2 (unique1 int4, unique2 int4, two int4, four int4,ten int4, twenty int4, hundred int4, thousand int4, twothousand int4,fivethous int4, tenthous int4, odd int4, even int4,stringu1 char16,stringu2 char16, string4 char16);
 copy onek from '_CWD_/../regress/data/onek.data';
 copy tenk1 from '_CWD_/../regress/data/tenk.data';
 copy tenk2 from '_CWD_/../regress/data/tenk.data';
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out
index 0d218eec6a8de5d201988ad7a5e205e8b74883d6..9da80caf97dfde45e0301f566c9ad2331cbfdd8a 100644
--- a/src/test/regress/expected/alter_table.out
+++ b/src/test/regress/expected/alter_table.out
@@ -1,6 +1,6 @@
 QUERY: CREATE TABLE temp (initial int4);
 QUERY: ALTER TABLE temp ADD COLUMN a int4;
-QUERY: ALTER TABLE temp ADD COLUMN b name;
+QUERY: ALTER TABLE temp ADD COLUMN b char16;
 QUERY: ALTER TABLE temp ADD COLUMN c text;
 QUERY: ALTER TABLE temp ADD COLUMN d float8;
 QUERY: ALTER TABLE temp ADD COLUMN e float4;
@@ -27,12 +27,12 @@ QUERY: ALTER TABLE temp ADD COLUMN y float4[];
 QUERY: ALTER TABLE temp ADD COLUMN z int2[];
 QUERY: INSERT INTO temp (a, b, c, d, e, f, g, h, i, j, k, l, m, n, p, q, r, s, t, u,
 	v, w, x, y, z)
-   VALUES (4, 'name', 'text', 4.1, 4.1, 2, '(4.1,4.1,3.1,3.1)',
+   VALUES (4, 'char16', 'text', 4.1, 4.1, 2, '(4.1,4.1,3.1,3.1)',
         'Mon May  1 00:30:30 1995', 'c', '{Mon May  1 00:30:30 1995, Monday Aug 24 14:43:07 1992, epoch}',
 	314159, '(1,1)', 512,
 	'1 2 3 4 5 6 7 8', 'magnetic disk', '(1.1,1.1)', '(4.1,4.1,3.1,3.1)',
 	'(0,2,4.1,4.1,3.1,3.1)', '(4.1,4.1,3.1,3.1)', '["current" "infinity"]',
-	'1/3', '1,name', '{1.0,2.0,3.0,4.0}', '{1.0,2.0,3.0,4.0}', '{1,2,3,4}');
+	'1/3', '1,char16', '{1.0,2.0,3.0,4.0}', '{1.0,2.0,3.0,4.0}', '{1,2,3,4}');
 ERROR:  Relation temp does not have attribute k
 QUERY: SELECT * FROM temp;
 initial|a|b|c|d|e|f|g|h|i|j|l|m|n|p|q|r|s|t|u|v|w|x|y|z
@@ -44,7 +44,7 @@ QUERY: CREATE TABLE temp (
 	initial 	int4
 );
 QUERY: ALTER TABLE temp ADD COLUMN a int4;
-QUERY: ALTER TABLE temp ADD COLUMN b name;
+QUERY: ALTER TABLE temp ADD COLUMN b char16;
 QUERY: ALTER TABLE temp ADD COLUMN c text;
 QUERY: ALTER TABLE temp ADD COLUMN d float8;
 QUERY: ALTER TABLE temp ADD COLUMN e float4;
@@ -71,12 +71,12 @@ QUERY: ALTER TABLE temp ADD COLUMN y float4[];
 QUERY: ALTER TABLE temp ADD COLUMN z int2[];
 QUERY: INSERT INTO temp (a, b, c, d, e, f, g, h, i, j, k, l, m, n, p, q, r, s, t, u,
 	v, w, x, y, z)
-   VALUES (4, 'name', 'text', 4.1, 4.1, 2, '(4.1,4.1,3.1,3.1)',
+   VALUES (4, 'char16', 'text', 4.1, 4.1, 2, '(4.1,4.1,3.1,3.1)',
 	'Mon May  1 00:30:30 1995', 'c', '{Mon May  1 00:30:30 1995, Monday Aug 24 14:43:07 1992, epoch}',
 	 314159, '(1,1)', 512,
 	'1 2 3 4 5 6 7 8', 'magnetic disk', '(1.1,1.1)', '(4.1,4.1,3.1,3.1)',
 	'(0,2,4.1,4.1,3.1,3.1)', '(4.1,4.1,3.1,3.1)', '["current" "infinity"]',
-	'1/3', '1,name', '{1.0,2.0,3.0,4.0}', '{1.0,2.0,3.0,4.0}', '{1,2,3,4}');
+	'1/3', '1,char16', '{1.0,2.0,3.0,4.0}', '{1.0,2.0,3.0,4.0}', '{1,2,3,4}');
 ERROR:  Relation temp does not have attribute k
 QUERY: SELECT * FROM temp;
 initial|a|b|c|d|e|f|g|h|i|j|l|m|n|p|q|r|s|t|u|v|w|x|y|z
diff --git a/src/test/regress/expected/arrays.out b/src/test/regress/expected/arrays.out
index 92cfc94d2139b592fac1f5aab2eeb5f5b6c2e065..b593c212cb367194cdf1cd50da7687b26aecc538 100644
--- a/src/test/regress/expected/arrays.out
+++ b/src/test/regress/expected/arrays.out
@@ -42,7 +42,7 @@ x
 QUERY: SELECT *
    FROM arrtest
    WHERE arrtest.a[1] < 5 and
-         arrtest.c = '{"foobar"}'::_name;
+         arrtest.c = '{"foobar"}'::_char16;
 a|b|c|d|e
 -+-+-+-+-
 (0 rows)
diff --git a/src/test/regress/expected/btree_index.out b/src/test/regress/expected/btree_index.out
index fae68fd164da890d45c79a274f58445fd83ae3fd..97386feb518ab84d2f451430899ff2d0d1f0e406 100644
--- a/src/test/regress/expected/btree_index.out
+++ b/src/test/regress/expected/btree_index.out
@@ -23,24 +23,24 @@ seqno|    random
 (1 row)
 
 QUERY: SELECT b.*
-   FROM bt_name_heap b
-   WHERE b.seqno < '1'::name;
+   FROM bt_c16_heap b
+   WHERE b.seqno < '1'::char16;
 seqno|    random
 -----+----------
     0|1935401906
 (1 row)
 
 QUERY: SELECT b.*
-   FROM bt_name_heap b
-   WHERE b.seqno >= '9999'::name;
+   FROM bt_c16_heap b
+   WHERE b.seqno >= '9999'::char16;
 seqno|    random
 -----+----------
  9999|1227676208
 (1 row)
 
 QUERY: SELECT b.*
-   FROM bt_name_heap b
-   WHERE b.seqno = '4500'::name;
+   FROM bt_c16_heap b
+   WHERE b.seqno = '4500'::char16;
 seqno|    random
 -----+----------
  4500|2080851358
diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out
index 69535a52a0e24d2bc42fcd5763d457cd96d773e0..d09a4e4d757ce575904e6cb1641ed542189536e9 100644
--- a/src/test/regress/expected/create_index.out
+++ b/src/test/regress/expected/create_index.out
@@ -1,7 +1,7 @@
 QUERY: CREATE INDEX onek_unique1 ON onek USING btree(unique1 int4_ops);
 QUERY: CREATE INDEX onek_unique2 ON onek USING btree(unique2 int4_ops);
 QUERY: CREATE INDEX onek_hundred ON onek USING btree(hundred int4_ops);
-QUERY: CREATE INDEX onek_stringu1 ON onek USING btree(stringu1 name_ops);
+QUERY: CREATE INDEX onek_stringu1 ON onek USING btree(stringu1 char16_ops);
 QUERY: CREATE INDEX tenk1_unique1 ON tenk1 USING btree(unique1 int4_ops);
 QUERY: CREATE INDEX tenk1_unique2 ON tenk1 USING btree(unique2 int4_ops);
 QUERY: CREATE INDEX tenk1_hundred ON tenk1 USING btree(hundred int4_ops);
@@ -12,11 +12,11 @@ QUERY: CREATE INDEX rix ON road USING btree (name text_ops);
 QUERY: CREATE INDEX iix ON ihighway USING btree (name text_ops);
 QUERY: CREATE INDEX six ON shighway USING btree (name text_ops);
 QUERY: CREATE INDEX bt_i4_index ON bt_i4_heap USING btree (seqno int4_ops);
-QUERY: CREATE INDEX bt_name_index ON bt_name_heap USING btree (seqno name_ops);
+QUERY: CREATE INDEX bt_c16_index ON bt_c16_heap USING btree (seqno char16_ops);
 QUERY: CREATE INDEX bt_txt_index ON bt_txt_heap USING btree (seqno text_ops);
 QUERY: CREATE INDEX bt_f8_index ON bt_f8_heap USING btree (seqno float8_ops);
 QUERY: CREATE INDEX rect2ind ON fast_emp4000 USING rtree (home_base bigbox_ops);
 QUERY: CREATE INDEX hash_i4_index ON hash_i4_heap USING hash (random int4_ops);
-QUERY: CREATE INDEX hash_name_index ON hash_name_heap USING hash (random name_ops);
+QUERY: CREATE INDEX hash_c16_index ON hash_c16_heap USING hash (random char16_ops);
 QUERY: CREATE INDEX hash_txt_index ON hash_txt_heap USING hash (random text_ops);
 QUERY: CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops);
diff --git a/src/test/regress/expected/create_misc.out b/src/test/regress/expected/create_misc.out
index 3382c8566971b35c61bfc1a32be3dbdd5cfebc8a..bfa7daacddb33ba026e5aa3ae93e28b5e324a22d 100644
--- a/src/test/regress/expected/create_misc.out
+++ b/src/test/regress/expected/create_misc.out
@@ -39,77 +39,77 @@ QUERY: INSERT INTO b_star (class, a, b) VALUES ('b', 3, 'mumble'::text);
 QUERY: INSERT INTO b_star (class, a) VALUES ('b', 4);
 QUERY: INSERT INTO b_star (class, b) VALUES ('b', 'bumble'::text);
 QUERY: INSERT INTO b_star (class) VALUES ('b');
-QUERY: INSERT INTO c_star (class, a, c) VALUES ('c', 5, 'hi mom'::name);
+QUERY: INSERT INTO c_star (class, a, c) VALUES ('c', 5, 'hi mom'::char16);
 QUERY: INSERT INTO c_star (class, a) VALUES ('c', 6);
-QUERY: INSERT INTO c_star (class, c) VALUES ('c', 'hi paul'::name);
+QUERY: INSERT INTO c_star (class, c) VALUES ('c', 'hi paul'::char16);
 QUERY: INSERT INTO c_star (class) VALUES ('c');
 QUERY: INSERT INTO d_star (class, a, b, c, d)
-   VALUES ('d', 7, 'grumble'::text, 'hi sunita'::name, '0.0'::float8);
+   VALUES ('d', 7, 'grumble'::text, 'hi sunita'::char16, '0.0'::float8);
 QUERY: INSERT INTO d_star (class, a, b, c)
-   VALUES ('d', 8, 'stumble'::text, 'hi koko'::name);
+   VALUES ('d', 8, 'stumble'::text, 'hi koko'::char16);
 QUERY: INSERT INTO d_star (class, a, b, d)
    VALUES ('d', 9, 'rumble'::text, '1.1'::float8);
 QUERY: INSERT INTO d_star (class, a, c, d)
-   VALUES ('d', 10, 'hi kristin'::name, '10.01'::float8);
+   VALUES ('d', 10, 'hi kristin'::char16, '10.01'::float8);
 QUERY: INSERT INTO d_star (class, b, c, d)
-   VALUES ('d', 'crumble'::text, 'hi boris'::name, '100.001'::float8);
+   VALUES ('d', 'crumble'::text, 'hi boris'::char16, '100.001'::float8);
 QUERY: INSERT INTO d_star (class, a, b)
    VALUES ('d', 11, 'fumble'::text);
 QUERY: INSERT INTO d_star (class, a, c)
-   VALUES ('d', 12, 'hi avi'::name);
+   VALUES ('d', 12, 'hi avi'::char16);
 QUERY: INSERT INTO d_star (class, a, d)
    VALUES ('d', 13, '1000.0001'::float8);
 QUERY: INSERT INTO d_star (class, b, c)
-   VALUES ('d', 'tumble'::text, 'hi andrew'::name);
+   VALUES ('d', 'tumble'::text, 'hi andrew'::char16);
 QUERY: INSERT INTO d_star (class, b, d)
    VALUES ('d', 'humble'::text, '10000.00001'::float8);
 QUERY: INSERT INTO d_star (class, c, d)
-   VALUES ('d', 'hi ginger'::name, '100000.000001'::float8);
+   VALUES ('d', 'hi ginger'::char16, '100000.000001'::float8);
 QUERY: INSERT INTO d_star (class, a) VALUES ('d', 14);
 QUERY: INSERT INTO d_star (class, b) VALUES ('d', 'jumble'::text);
-QUERY: INSERT INTO d_star (class, c) VALUES ('d', 'hi jolly'::name);
+QUERY: INSERT INTO d_star (class, c) VALUES ('d', 'hi jolly'::char16);
 QUERY: INSERT INTO d_star (class, d) VALUES ('d', '1000000.0000001'::float8);
 QUERY: INSERT INTO d_star (class) VALUES ('d');
 QUERY: INSERT INTO e_star (class, a, c, e)
-   VALUES ('e', 15, 'hi carol'::name, '-1'::int2);
+   VALUES ('e', 15, 'hi carol'::char16, '-1'::int2);
 QUERY: INSERT INTO e_star (class, a, c)
-   VALUES ('e', 16, 'hi bob'::name);
+   VALUES ('e', 16, 'hi bob'::char16);
 QUERY: INSERT INTO e_star (class, a, e)
    VALUES ('e', 17, '-2'::int2);
 QUERY: INSERT INTO e_star (class, c, e)
-   VALUES ('e', 'hi michelle'::name, '-3'::int2);
+   VALUES ('e', 'hi michelle'::char16, '-3'::int2);
 QUERY: INSERT INTO e_star (class, a)
    VALUES ('e', 18);
 QUERY: INSERT INTO e_star (class, c)
-   VALUES ('e', 'hi elisa'::name);
+   VALUES ('e', 'hi elisa'::char16);
 QUERY: INSERT INTO e_star (class, e)
    VALUES ('e', '-4'::int2);
 QUERY: INSERT INTO f_star (class, a, c, e, f)
-   VALUES ('f', 19, 'hi claire'::name, '-5'::int2, '(1,3),(2,4)'::polygon);
+   VALUES ('f', 19, 'hi claire'::char16, '-5'::int2, '(1,3),(2,4)'::polygon);
 QUERY: INSERT INTO f_star (class, a, c, e)
-   VALUES ('f', 20, 'hi mike'::name, '-6'::int2);
+   VALUES ('f', 20, 'hi mike'::char16, '-6'::int2);
 QUERY: INSERT INTO f_star (class, a, c, f)
-   VALUES ('f', 21, 'hi marcel'::name, '(11,44),(22,55),(33,66)'::polygon);
+   VALUES ('f', 21, 'hi marcel'::char16, '(11,44),(22,55),(33,66)'::polygon);
 QUERY: INSERT INTO f_star (class, a, e, f)
    VALUES ('f', 22, '-7'::int2, '(111,555),(222,666),(333,777),(444,888)'::polygon);
 QUERY: INSERT INTO f_star (class, c, e, f)
-   VALUES ('f', 'hi keith'::name, '-8'::int2,
+   VALUES ('f', 'hi keith'::char16, '-8'::int2,
 	   '(1111,3333),(2222,4444)'::polygon);
 QUERY: INSERT INTO f_star (class, a, c)
-   VALUES ('f', 24, 'hi marc'::name);
+   VALUES ('f', 24, 'hi marc'::char16);
 QUERY: INSERT INTO f_star (class, a, e)
    VALUES ('f', 25, '-9'::int2);
 QUERY: INSERT INTO f_star (class, a, f)
    VALUES ('f', 26, '(11111,33333),(22222,44444)'::polygon);
 QUERY: INSERT INTO f_star (class, c, e)
-   VALUES ('f', 'hi allison'::name, '-10'::int2);
+   VALUES ('f', 'hi allison'::char16, '-10'::int2);
 QUERY: INSERT INTO f_star (class, c, f)
-   VALUES ('f', 'hi jeff'::name,
+   VALUES ('f', 'hi jeff'::char16,
            '(111111,333333),(222222,444444)'::polygon);
 QUERY: INSERT INTO f_star (class, e, f)
    VALUES ('f', '-11'::int2, '(1111111,3333333),(2222222,4444444)'::polygon);
 QUERY: INSERT INTO f_star (class, a) VALUES ('f', 27);
-QUERY: INSERT INTO f_star (class, c) VALUES ('f', 'hi carl'::name);
+QUERY: INSERT INTO f_star (class, c) VALUES ('f', 'hi carl'::char16);
 QUERY: INSERT INTO f_star (class, e) VALUES ('f', '-12'::int2);
 QUERY: INSERT INTO f_star (class, f)
    VALUES ('f', '(11111111,33333333),(22222222,44444444)'::polygon);
diff --git a/src/test/regress/expected/create_table.out b/src/test/regress/expected/create_table.out
index 7f3859da5d0e2b79eecdadaf3df6beba6ad8f095..2cc1099bed1c794e10527e9425d295d5426cef6b 100644
--- a/src/test/regress/expected/create_table.out
+++ b/src/test/regress/expected/create_table.out
@@ -20,9 +20,9 @@ QUERY: CREATE TABLE onek (
 	tenthous	int4,
 	odd		int4,
 	even		int4,
-	stringu1	name,
-	stringu2	name,
-	string4		name
+	stringu1	char16,
+	stringu2	char16,
+	string4		char16
 );
 QUERY: CREATE TABLE tenk1 (
 	unique1		int4,
@@ -38,9 +38,9 @@ QUERY: CREATE TABLE tenk1 (
 	tenthous	int4,
 	odd		int4,
 	even		int4,
-	stringu1	name,
-	stringu2	name,
-	string4		name
+	stringu1	char16,
+	stringu2	char16,
+	string4		char16
 );
 QUERY: CREATE TABLE tenk2 (
 	unique1 	int4,
@@ -56,9 +56,9 @@ QUERY: CREATE TABLE tenk2 (
 	tenthous	int4,
 	odd		int4,
 	even		int4,
-	stringu1	name,
-	stringu2	name,
-	string4		name
+	stringu1	char16,
+	stringu2	char16,
+	string4		char16
 );
 QUERY: CREATE TABLE person (
 	name 		text,
@@ -67,7 +67,7 @@ QUERY: CREATE TABLE person (
 );
 QUERY: CREATE TABLE emp (
 	salary 		int4,
-	manager 	name
+	manager 	char16
 ) INHERITS (person);
 QUERY: CREATE TABLE student (
 	gpa 		float8
@@ -76,12 +76,12 @@ QUERY: CREATE TABLE stud_emp (
 	percent 	int4
 ) INHERITS (emp, student);
 QUERY: CREATE TABLE city (
-	name		name,
+	name		char16,
 	location 	box,
 	budget 		city_budget
 );
 QUERY: CREATE TABLE dept (
-	dname		name,
+	dname		char16,
 	mgrname 	text
 );
 QUERY: CREATE TABLE slow_emp4000 (
@@ -111,7 +111,7 @@ QUERY: CREATE TABLE b_star (
 	b 		text
 ) INHERITS (a_star);
 QUERY: CREATE TABLE c_star (
-	c 		name
+	c 		char16
 ) INHERITS (a_star);
 QUERY: CREATE TABLE d_star (
 	d 		float8
@@ -129,7 +129,7 @@ QUERY: CREATE TABLE aggtest (
 QUERY: CREATE TABLE arrtest (
 	a 		int2[],
 	b 		int4[][][],
-	c 		name[],
+	c 		char16[],
 	d		text[][],
 	e 		float8[]
 );
@@ -137,9 +137,9 @@ QUERY: CREATE TABLE hash_i4_heap (
 	seqno 		int4,
 	random 		int4
 );
-QUERY: CREATE TABLE hash_name_heap (
+QUERY: CREATE TABLE hash_c16_heap (
 	seqno 		int4,
-	random 		name
+	random 		char16
 );
 QUERY: CREATE TABLE hash_txt_heap (
 	seqno 		int4,
@@ -153,8 +153,8 @@ QUERY: CREATE TABLE bt_i4_heap (
 	seqno 		int4,
 	random 		int4
 );
-QUERY: CREATE TABLE bt_name_heap (
-	seqno 		name,
+QUERY: CREATE TABLE bt_c16_heap (
+	seqno 		char16,
 	random 		int4
 );
 QUERY: CREATE TABLE bt_txt_heap (
diff --git a/src/test/regress/expected/hash_index.out b/src/test/regress/expected/hash_index.out
index ee3f615beb5f923cd1a84e806946da2f84814372..c8403f7bc62f50c6b2474521bdf28a6d324644b8 100644
--- a/src/test/regress/expected/hash_index.out
+++ b/src/test/regress/expected/hash_index.out
@@ -11,15 +11,15 @@ seqno|random
 -----+------
 (0 rows)
 
-QUERY: SELECT hash_name_heap.*
-   WHERE hash_name_heap.random = '1505703298'::name;
+QUERY: SELECT hash_c16_heap.*
+   WHERE hash_c16_heap.random = '1505703298'::char16;
 seqno|    random
 -----+----------
  9838|1505703298
 (1 row)
 
-QUERY: SELECT hash_name_heap.*
-   WHERE hash_name_heap.random = '7777777'::name;
+QUERY: SELECT hash_c16_heap.*
+   WHERE hash_c16_heap.random = '7777777'::char16;
 seqno|random
 -----+------
 (0 rows)
@@ -72,23 +72,23 @@ i20000
  20000
 (1 row)
 
-QUERY: UPDATE hash_name_heap
-   SET random = '0123456789abcdef'::name
-   WHERE hash_name_heap.seqno = 6543;
+QUERY: UPDATE hash_c16_heap
+   SET random = '0123456789abcdef'::char16
+   WHERE hash_c16_heap.seqno = 6543;
 QUERY: SELECT h.seqno AS i6543, h.random AS c0_to_f
-   FROM hash_name_heap h
-   WHERE h.random = '0123456789abcdef'::name;
+   FROM hash_c16_heap h
+   WHERE h.random = '0123456789abcdef'::char16;
 i6543|c0_to_f         
 -----+----------------
  6543|0123456789abcdef
 (1 row)
 
-QUERY: UPDATE hash_name_heap
+QUERY: UPDATE hash_c16_heap
    SET seqno = 20000
-   WHERE hash_name_heap.random = '76652222'::name;
+   WHERE hash_c16_heap.random = '76652222'::char16;
 QUERY: SELECT h.seqno AS emptyset
-   FROM hash_name_heap h
-   WHERE h.random = '76652222'::name;
+   FROM hash_c16_heap h
+   WHERE h.random = '76652222'::char16;
 emptyset
 --------
 (0 rows)
diff --git a/src/test/regress/expected/name.out b/src/test/regress/expected/name.out
index 9d3cdd46586585d9ad9345df044a8eae0222b266..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/src/test/regress/expected/name.out
+++ b/src/test/regress/expected/name.out
@@ -1,116 +0,0 @@
-QUERY: SELECT 'name string'::name = 'name string'::name AS "True";
-True
-----
-t   
-(1 row)
-
-QUERY: SELECT 'name string'::name = 'name string '::name AS "False";
-False
------
-f    
-(1 row)
-
-QUERY: CREATE TABLE NAME_TBL(f1 name);
-QUERY: INSERT INTO NAME_TBL(f1) VALUES ('ABCDEFGHIJKLMNOP');
-QUERY: INSERT INTO NAME_TBL(f1) VALUES ('abcdefghijklmnop');
-QUERY: INSERT INTO NAME_TBL(f1) VALUES ('asdfghjkl;');
-QUERY: INSERT INTO NAME_TBL(f1) VALUES ('343f%2a');
-QUERY: INSERT INTO NAME_TBL(f1) VALUES ('d34aaasdf');
-QUERY: INSERT INTO NAME_TBL(f1) VALUES ('');
-QUERY: INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ');
-QUERY: SELECT '' AS seven, NAME_TBL.*;
-seven|f1                             
------+-------------------------------
-     |ABCDEFGHIJKLMNOP               
-     |abcdefghijklmnop               
-     |asdfghjkl;                     
-     |343f%2a                        
-     |d34aaasdf                      
-     |                               
-     |1234567890ABCDEFGHIJKLMNOPQRSTU
-(7 rows)
-
-QUERY: SELECT '' AS six, c.f1 FROM NAME_TBL c WHERE c.f1 <> 'ABCDEFGHIJKLMNOP';
-six|f1                             
----+-------------------------------
-   |abcdefghijklmnop               
-   |asdfghjkl;                     
-   |343f%2a                        
-   |d34aaasdf                      
-   |                               
-   |1234567890ABCDEFGHIJKLMNOPQRSTU
-(6 rows)
-
-QUERY: SELECT '' AS one, c.f1 FROM NAME_TBL c WHERE c.f1 = 'ABCDEFGHIJKLMNOP';
-one|f1              
----+----------------
-   |ABCDEFGHIJKLMNOP
-(1 row)
-
-QUERY: SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 < 'ABCDEFGHIJKLMNOP';
-three|f1                             
------+-------------------------------
-     |343f%2a                        
-     |                               
-     |1234567890ABCDEFGHIJKLMNOPQRSTU
-(3 rows)
-
-QUERY: SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 <= 'ABCDEFGHIJKLMNOP';
-four|f1                             
-----+-------------------------------
-    |ABCDEFGHIJKLMNOP               
-    |343f%2a                        
-    |                               
-    |1234567890ABCDEFGHIJKLMNOPQRSTU
-(4 rows)
-
-QUERY: SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 > 'ABCDEFGHIJKLMNOP';
-three|f1              
------+----------------
-     |abcdefghijklmnop
-     |asdfghjkl;      
-     |d34aaasdf       
-(3 rows)
-
-QUERY: SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 >= 'ABCDEFGHIJKLMNOP';
-four|f1              
-----+----------------
-    |ABCDEFGHIJKLMNOP
-    |abcdefghijklmnop
-    |asdfghjkl;      
-    |d34aaasdf       
-(4 rows)
-
-QUERY: SELECT '' AS seven, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*';
-seven|f1                             
------+-------------------------------
-     |ABCDEFGHIJKLMNOP               
-     |abcdefghijklmnop               
-     |asdfghjkl;                     
-     |343f%2a                        
-     |d34aaasdf                      
-     |                               
-     |1234567890ABCDEFGHIJKLMNOPQRSTU
-(7 rows)
-
-QUERY: SELECT '' AS zero, c.f1 FROM NAME_TBL c WHERE c.f1 !~ '.*';
-zero|f1
-----+--
-(0 rows)
-
-QUERY: SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '[0-9]';
-three|f1                             
------+-------------------------------
-     |343f%2a                        
-     |d34aaasdf                      
-     |1234567890ABCDEFGHIJKLMNOPQRSTU
-(3 rows)
-
-QUERY: SELECT '' AS two, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*asdf.*';
-two|f1        
----+----------
-   |asdfghjkl;
-   |d34aaasdf 
-(2 rows)
-
-QUERY: DROP TABLE NAME_TBL;
diff --git a/src/test/regress/expected/oidname.out b/src/test/regress/expected/oidname.out
index 4f8b7dadef26122366111001d73a6fb6eb3fecdb..e7ad5da26fea2c5f943b708a0dacdc3b1926aa31 100644
--- a/src/test/regress/expected/oidname.out
+++ b/src/test/regress/expected/oidname.out
@@ -4,18 +4,18 @@ QUERY: INSERT INTO OIDNAME_TBL(f1) VALUES ('1235,efgh');
 QUERY: INSERT INTO OIDNAME_TBL(f1) VALUES ('987,XXXX');
 QUERY: INSERT INTO OIDNAME_TBL(f1) VALUES ('123456');
 ERROR:  Bad input data for type oidname
-QUERY: INSERT INTO OIDNAME_TBL(f1) VALUES ('123456,abcdefghijklmnopqrsutvwyz0123456789');
+QUERY: INSERT INTO OIDNAME_TBL(f1) VALUES ('123456,abcdefghijklmnopqrsutvwyz');
 QUERY: INSERT INTO OIDNAME_TBL(f1) VALUES ('');
 ERROR:  Bad input data for type oidname
 QUERY: INSERT INTO OIDNAME_TBL(f1) VALUES ('asdfasd');
 ERROR:  Bad input data for type oidname
 QUERY: SELECT '' AS four, OIDNAME_TBL.*;
-four|f1                                    
-----+--------------------------------------
-    |1234,abcd                             
-    |1235,efgh                             
-    |987,XXXX                              
-    |123456,abcdefghijklmnopqrsutvwyz012345
+four|f1                              
+----+--------------------------------
+    |1234,abcd                       
+    |1235,efgh                       
+    |987,XXXX                        
+    |123456,abcdefghijklmnopqrsutvwyz
 (4 rows)
 
 QUERY: SELECT '' AS one, o.* FROM OIDNAME_TBL o WHERE o.f1 = '1234,abcd';
@@ -25,11 +25,11 @@ one|f1
 (1 row)
 
 QUERY: SELECT '' AS three, o.* FROM OIDNAME_TBL o WHERE o.f1 <> '1234,abcd';
-three|f1                                    
------+--------------------------------------
-     |1235,efgh                             
-     |987,XXXX                              
-     |123456,abcdefghijklmnopqrsutvwyz012345
+three|f1                              
+-----+--------------------------------
+     |1235,efgh                       
+     |987,XXXX                        
+     |123456,abcdefghijklmnopqrsutvwyz
 (3 rows)
 
 QUERY: SELECT '' AS two, o.* FROM OIDNAME_TBL o WHERE o.f1 <= '1234,abcd';
@@ -46,18 +46,18 @@ one|f1
 (1 row)
 
 QUERY: SELECT '' AS three, o.* FROM OIDNAME_TBL o WHERE o.f1 >= '1234,abcd';
-three|f1                                    
------+--------------------------------------
-     |1234,abcd                             
-     |1235,efgh                             
-     |123456,abcdefghijklmnopqrsutvwyz012345
+three|f1                              
+-----+--------------------------------
+     |1234,abcd                       
+     |1235,efgh                       
+     |123456,abcdefghijklmnopqrsutvwyz
 (3 rows)
 
 QUERY: SELECT '' AS two, o.* FROM OIDNAME_TBL o WHERE o.f1 > '1234,abcd';
-two|f1                                    
----+--------------------------------------
-   |1235,efgh                             
-   |123456,abcdefghijklmnopqrsutvwyz012345
+two|f1                              
+---+--------------------------------
+   |1235,efgh                       
+   |123456,abcdefghijklmnopqrsutvwyz
 (2 rows)
 
 QUERY: DROP TABLE  OIDNAME_TBL;
diff --git a/src/test/regress/expected/sanity_check.out b/src/test/regress/expected/sanity_check.out
index 8b506cbb60a0dbfd1815eeb10d5d3c878308dbf6..e69212ed63958304fea02a6a8064b9025f80c01a 100644
--- a/src/test/regress/expected/sanity_check.out
+++ b/src/test/regress/expected/sanity_check.out
@@ -5,14 +5,14 @@ QUERY: SELECT relname, relhasindex
    ORDER BY relname;
 relname       |relhasindex
 --------------+-----------
+bt_c16_heap   |t          
 bt_f8_heap    |t          
 bt_i4_heap    |t          
-bt_name_heap  |t          
 bt_txt_heap   |t          
 fast_emp4000  |t          
+hash_c16_heap |t          
 hash_f8_heap  |t          
 hash_i4_heap  |t          
-hash_name_heap|t          
 hash_txt_heap |t          
 ihighway      |t          
 onek          |t          
diff --git a/src/test/regress/input/copy.source b/src/test/regress/input/copy.source
index 7df2c6057ad39bc0871a3a372beb4a8b73fa4aa5..1c93759ec20b78919b9458ea028e4186ff37c94f 100644
--- a/src/test/regress/input/copy.source
+++ b/src/test/regress/input/copy.source
@@ -34,7 +34,7 @@ COPY real_city FROM '_OBJWD_/data/real_city.data';
 
 COPY hash_i4_heap FROM '_OBJWD_/data/hash.data';
 
-COPY hash_name_heap FROM '_OBJWD_/data/hash.data';
+COPY hash_c16_heap FROM '_OBJWD_/data/hash.data';
 
 COPY hash_txt_heap FROM '_OBJWD_/data/hash.data';
 
@@ -49,7 +49,7 @@ COPY hash_f8_heap FROM '_OBJWD_/data/hash.data';
 
 COPY bt_i4_heap FROM '_OBJWD_/data/desc.data';
 
-COPY bt_name_heap FROM '_OBJWD_/data/hash.data';
+COPY bt_c16_heap FROM '_OBJWD_/data/hash.data';
 
 COPY bt_txt_heap FROM '_OBJWD_/data/desc.data';
 
diff --git a/src/test/regress/input/create_function_2.source b/src/test/regress/input/create_function_2.source
index c68305b3608614915ae901feae557de344a6d847..6a23c53c36a5bdb3a7ba5aa65eb407f2f7ac5798 100644
--- a/src/test/regress/input/create_function_2.source
+++ b/src/test/regress/input/create_function_2.source
@@ -47,8 +47,8 @@ CREATE FUNCTION interpt_pp(path, path)
    AS '_OBJWD_/regress_DLSUFFIX_'
    LANGUAGE 'c';
 
-CREATE FUNCTION reverse_name(name)
-   RETURNS name
+CREATE FUNCTION reverse_c16(char16)
+   RETURNS char16
    AS '_OBJWD_/regress_DLSUFFIX_'
    LANGUAGE 'c';
 
diff --git a/src/test/regress/input/misc.source b/src/test/regress/input/misc.source
index 633c50237e91d772b9dfa83912871ebb60a8e805..8151ff3a5a8610fc6ef11f87bc2f20a6f08df8be 100644
--- a/src/test/regress/input/misc.source
+++ b/src/test/regress/input/misc.source
@@ -27,12 +27,12 @@ UPDATE onek
 -- more closely.  			- jolly (2/22/96)
 -- 
 UPDATE temp
-   SET stringu1 = reverse_name(onek.stringu1)
+   SET stringu1 = reverse_c16(onek.stringu1)
    WHERE onek.stringu1 = 'JBAAAA' and
 	  onek.stringu1 = temp.stringu1;
 
 UPDATE temp
-   SET stringu1 = reverse_name(onek2.stringu1)
+   SET stringu1 = reverse_c16(onek2.stringu1)
    WHERE onek2.stringu1 = 'JCAAAA' and
 	  onek2.stringu1 = temp.stringu1;
 
diff --git a/src/test/regress/output/copy.source b/src/test/regress/output/copy.source
index bf12d0671d2a644c7521d74a354c9af312e19d4f..d417fb4e4276e356cfb467e085a6956153318638 100644
--- a/src/test/regress/output/copy.source
+++ b/src/test/regress/output/copy.source
@@ -12,10 +12,10 @@ QUERY: COPY stud_emp FROM '_OBJWD_/data/stud_emp.data';
 QUERY: COPY road FROM '_OBJWD_/data/streets.data';
 QUERY: COPY real_city FROM '_OBJWD_/data/real_city.data';
 QUERY: COPY hash_i4_heap FROM '_OBJWD_/data/hash.data';
-QUERY: COPY hash_name_heap FROM '_OBJWD_/data/hash.data';
+QUERY: COPY hash_c16_heap FROM '_OBJWD_/data/hash.data';
 QUERY: COPY hash_txt_heap FROM '_OBJWD_/data/hash.data';
 QUERY: COPY hash_f8_heap FROM '_OBJWD_/data/hash.data';
 QUERY: COPY bt_i4_heap FROM '_OBJWD_/data/desc.data';
-QUERY: COPY bt_name_heap FROM '_OBJWD_/data/hash.data';
+QUERY: COPY bt_c16_heap FROM '_OBJWD_/data/hash.data';
 QUERY: COPY bt_txt_heap FROM '_OBJWD_/data/desc.data';
 QUERY: COPY bt_f8_heap FROM '_OBJWD_/data/hash.data';
diff --git a/src/test/regress/output/create_function_2.source b/src/test/regress/output/create_function_2.source
index 8f3c17a6e6f5a3b7642c0c6a0fa689f1b1e77054..23fddb21f468e03b877b3de57bae6ac454583f59 100644
--- a/src/test/regress/output/create_function_2.source
+++ b/src/test/regress/output/create_function_2.source
@@ -33,8 +33,8 @@ QUERY: CREATE FUNCTION interpt_pp(path, path)
    RETURNS point
    AS '_OBJWD_/regress_DLSUFFIX_'
    LANGUAGE 'c';
-QUERY: CREATE FUNCTION reverse_name(name)
-   RETURNS name
+QUERY: CREATE FUNCTION reverse_c16(char16)
+   RETURNS char16
    AS '_OBJWD_/regress_DLSUFFIX_'
    LANGUAGE 'c';
 QUERY: LOAD '_OBJWD_/regress_DLSUFFIX_';
diff --git a/src/test/regress/output/misc.source b/src/test/regress/output/misc.source
index f0ac90d7956875f6c73d4b0c596c268075f24f32..02eb0b6703c667eff617ca0ce0f2fab2deb317cd 100644
--- a/src/test/regress/output/misc.source
+++ b/src/test/regress/output/misc.source
@@ -3,13 +3,13 @@ QUERY: UPDATE onek
 QUERY: UPDATE onek
    SET unique1 = onek.unique1 - 1;
 QUERY: UPDATE temp
-   SET stringu1 = reverse_name(onek.stringu1)
+   SET stringu1 = reverse_c16(onek.stringu1)
    WHERE onek.stringu1 = 'JBAAAA' and
 	  onek.stringu1 = temp.stringu1;
 NOTICE:  Non-functional update, only first update is performed
 NOTICE:  Non-functional update, only first update is performed
 QUERY: UPDATE temp
-   SET stringu1 = reverse_name(onek2.stringu1)
+   SET stringu1 = reverse_c16(onek2.stringu1)
    WHERE onek2.stringu1 = 'JCAAAA' and
 	  onek2.stringu1 = temp.stringu1;
 NOTICE:  Non-functional update, only first update is performed
@@ -449,9 +449,9 @@ arrtest
 b_star         
 box_tbl        
 bprime         
+bt_c16_heap    
 bt_f8_heap     
 bt_i4_heap     
-bt_name_heap   
 bt_txt_heap    
 c_star         
 char_tbl       
@@ -474,9 +474,9 @@ f_star
 fast_emp4000   
 float4_tbl     
 float8_tbl     
+hash_c16_heap  
 hash_f8_heap   
 hash_i4_heap   
-hash_name_heap 
 hash_txt_heap  
 hobbies_r      
 iexit          
diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c
index 848dee62c0e6f377db0506091da565265ee39192..f44893a97366993ac4248a54faf17815f93235c6 100644
--- a/src/test/regress/regress.c
+++ b/src/test/regress/regress.c
@@ -1,5 +1,5 @@
 /*
- * $Header: /cvsroot/pgsql/src/test/regress/regress.c,v 1.24 1998/03/30 17:26:20 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/test/regress/regress.c,v 1.25 1998/04/07 18:13:08 momjian Exp $
  */
 
 #include <float.h>				/* faked on sunos */
@@ -25,7 +25,7 @@ extern Point *interpt_pp(PATH *p1, PATH *p2);
 extern void regress_lseg_construct(LSEG *lseg, Point *pt1, Point *pt2);
 extern char overpaid(TUPLE tuple);
 extern int	boxarea(BOX *box);
-extern char *reverse_name(char *string);
+extern char *reverse_c16(char *string);
 
 /*
 ** Distance from a point to a path
@@ -276,7 +276,7 @@ BOX		   *box;
 }
 
 char *
-reverse_name(string)
+reverse_c16(string)
 char	   *string;
 {
 	int			i;
@@ -285,7 +285,7 @@ char	   *string;
 
 	if (!(new_string = palloc(16)))
 	{
-		fprintf(stderr, "reverse_name: palloc failed\n");
+		fprintf(stderr, "reverse_c16: palloc failed\n");
 		return (NULL);
 	}
 	MemSet(new_string, 0, 16);
diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql
index 9764459922f576669c070bed81414b78db3a6598..5765560ea70ddb834856f91fb3c146eaaddb0fdc 100644
--- a/src/test/regress/sql/alter_table.sql
+++ b/src/test/regress/sql/alter_table.sql
@@ -5,7 +5,7 @@ CREATE TABLE temp (initial int4);
 
 ALTER TABLE temp ADD COLUMN a int4;
 
-ALTER TABLE temp ADD COLUMN b name;
+ALTER TABLE temp ADD COLUMN b char16;
 
 ALTER TABLE temp ADD COLUMN c text;
 
@@ -56,12 +56,12 @@ ALTER TABLE temp ADD COLUMN z int2[];
 
 INSERT INTO temp (a, b, c, d, e, f, g, h, i, j, k, l, m, n, p, q, r, s, t, u,
 	v, w, x, y, z)
-   VALUES (4, 'name', 'text', 4.1, 4.1, 2, '(4.1,4.1,3.1,3.1)', 
+   VALUES (4, 'char16', 'text', 4.1, 4.1, 2, '(4.1,4.1,3.1,3.1)', 
         'Mon May  1 00:30:30 1995', 'c', '{Mon May  1 00:30:30 1995, Monday Aug 24 14:43:07 1992, epoch}', 
 	314159, '(1,1)', 512,
 	'1 2 3 4 5 6 7 8', 'magnetic disk', '(1.1,1.1)', '(4.1,4.1,3.1,3.1)',
 	'(0,2,4.1,4.1,3.1,3.1)', '(4.1,4.1,3.1,3.1)', '["current" "infinity"]',
-	'1/3', '1,name', '{1.0,2.0,3.0,4.0}', '{1.0,2.0,3.0,4.0}', '{1,2,3,4}');
+	'1/3', '1,char16', '{1.0,2.0,3.0,4.0}', '{1.0,2.0,3.0,4.0}', '{1,2,3,4}');
 
 SELECT * FROM temp;
 
@@ -74,7 +74,7 @@ CREATE TABLE temp (
 
 ALTER TABLE temp ADD COLUMN a int4;
 
-ALTER TABLE temp ADD COLUMN b name;
+ALTER TABLE temp ADD COLUMN b char16;
 
 ALTER TABLE temp ADD COLUMN c text;
 
@@ -125,12 +125,12 @@ ALTER TABLE temp ADD COLUMN z int2[];
 
 INSERT INTO temp (a, b, c, d, e, f, g, h, i, j, k, l, m, n, p, q, r, s, t, u,
 	v, w, x, y, z)
-   VALUES (4, 'name', 'text', 4.1, 4.1, 2, '(4.1,4.1,3.1,3.1)', 
+   VALUES (4, 'char16', 'text', 4.1, 4.1, 2, '(4.1,4.1,3.1,3.1)', 
 	'Mon May  1 00:30:30 1995', 'c', '{Mon May  1 00:30:30 1995, Monday Aug 24 14:43:07 1992, epoch}',
 	 314159, '(1,1)', 512,
 	'1 2 3 4 5 6 7 8', 'magnetic disk', '(1.1,1.1)', '(4.1,4.1,3.1,3.1)',
 	'(0,2,4.1,4.1,3.1,3.1)', '(4.1,4.1,3.1,3.1)', '["current" "infinity"]',
-	'1/3', '1,name', '{1.0,2.0,3.0,4.0}', '{1.0,2.0,3.0,4.0}', '{1,2,3,4}');
+	'1/3', '1,char16', '{1.0,2.0,3.0,4.0}', '{1.0,2.0,3.0,4.0}', '{1,2,3,4}');
 
 SELECT * FROM temp;
 
diff --git a/src/test/regress/sql/arrays.sql b/src/test/regress/sql/arrays.sql
index a82a185c92266fbc6f4b096392fcca37ee95659a..117b27cf8a687942f169f99dbc25f1fda3e5a6c1 100644
--- a/src/test/regress/sql/arrays.sql
+++ b/src/test/regress/sql/arrays.sql
@@ -26,7 +26,7 @@ SELECT array_dims(arrtest.b) AS x;
 SELECT *
    FROM arrtest
    WHERE arrtest.a[1] < 5 and 
-         arrtest.c = '{"foobar"}'::_name;
+         arrtest.c = '{"foobar"}'::_char16;
 
 -- updating array subranges seems to be broken
 -- 
diff --git a/src/test/regress/sql/btree_index.sql b/src/test/regress/sql/btree_index.sql
index 71dcddd0ee22c5d874f2c251fd553b9a9d39165a..88e4dd7f455465cd008d6d77f540908c506d08b4 100644
--- a/src/test/regress/sql/btree_index.sql
+++ b/src/test/regress/sql/btree_index.sql
@@ -16,16 +16,16 @@ SELECT b.*
    WHERE b.seqno = 4500;
 
 SELECT b.*
-   FROM bt_name_heap b
-   WHERE b.seqno < '1'::name;
+   FROM bt_c16_heap b
+   WHERE b.seqno < '1'::char16;
 
 SELECT b.*
-   FROM bt_name_heap b
-   WHERE b.seqno >= '9999'::name;
+   FROM bt_c16_heap b
+   WHERE b.seqno >= '9999'::char16;
 
 SELECT b.*
-   FROM bt_name_heap b
-   WHERE b.seqno = '4500'::name;
+   FROM bt_c16_heap b
+   WHERE b.seqno = '4500'::char16;
 
 SELECT b.*
    FROM bt_txt_heap b
diff --git a/src/test/regress/sql/create_index.sql b/src/test/regress/sql/create_index.sql
index e9f93eb75b47dc25bd5c4d55e585dd4c4daf8040..5ba465e7a7e7499e673d80125f71c866a4960cb6 100644
--- a/src/test/regress/sql/create_index.sql
+++ b/src/test/regress/sql/create_index.sql
@@ -11,7 +11,7 @@ CREATE INDEX onek_unique2 ON onek USING btree(unique2 int4_ops);
 
 CREATE INDEX onek_hundred ON onek USING btree(hundred int4_ops);
 
-CREATE INDEX onek_stringu1 ON onek USING btree(stringu1 name_ops);
+CREATE INDEX onek_stringu1 ON onek USING btree(stringu1 char16_ops);
 
 CREATE INDEX tenk1_unique1 ON tenk1 USING btree(unique1 int4_ops);
 
@@ -35,13 +35,13 @@ CREATE INDEX six ON shighway USING btree (name text_ops);
 -- BTREE ascending/descending cases
 --
 -- we load int4/text from pure descending data (each key is a new
--- low key) and name/f8 from pure ascending data (each key is a new
+-- low key) and c16/f8 from pure ascending data (each key is a new
 -- high key).  we had a bug where new low keys would sometimes be
 -- "lost".
 --
 CREATE INDEX bt_i4_index ON bt_i4_heap USING btree (seqno int4_ops);
 
-CREATE INDEX bt_name_index ON bt_name_heap USING btree (seqno name_ops);
+CREATE INDEX bt_c16_index ON bt_c16_heap USING btree (seqno char16_ops);
 
 CREATE INDEX bt_txt_index ON bt_txt_heap USING btree (seqno text_ops);
 
@@ -61,7 +61,7 @@ CREATE INDEX bt_f8_index ON bt_f8_heap USING btree (seqno float8_ops);
 
 -- EXTEND INDEX onek2_u2_prtl;
 
--- CREATE INDEX onek2_stu1_prtl ON onek2 USING btree(stringu1 name_ops)
+-- CREATE INDEX onek2_stu1_prtl ON onek2 USING btree(stringu1 char16_ops)
 --	where onek2.stringu1 >= 'J' and onek2.stringu1 < 'K';
 
 --
@@ -80,7 +80,7 @@ CREATE INDEX rect2ind ON fast_emp4000 USING rtree (home_base bigbox_ops);
 --
 CREATE INDEX hash_i4_index ON hash_i4_heap USING hash (random int4_ops);
 
-CREATE INDEX hash_name_index ON hash_name_heap USING hash (random name_ops);
+CREATE INDEX hash_c16_index ON hash_c16_heap USING hash (random char16_ops);
 
 CREATE INDEX hash_txt_index ON hash_txt_heap USING hash (random text_ops);
 
diff --git a/src/test/regress/sql/create_misc.sql b/src/test/regress/sql/create_misc.sql
index 495f94506f84aae8056cbc0fe4c4d71569171ab6..58ce26a2fc2637302b7b9b641a130e2b40535759 100644
--- a/src/test/regress/sql/create_misc.sql
+++ b/src/test/regress/sql/create_misc.sql
@@ -71,96 +71,96 @@ INSERT INTO b_star (class, b) VALUES ('b', 'bumble'::text);
 
 INSERT INTO b_star (class) VALUES ('b');
 
-INSERT INTO c_star (class, a, c) VALUES ('c', 5, 'hi mom'::name);
+INSERT INTO c_star (class, a, c) VALUES ('c', 5, 'hi mom'::char16);
 
 INSERT INTO c_star (class, a) VALUES ('c', 6);
 
-INSERT INTO c_star (class, c) VALUES ('c', 'hi paul'::name);
+INSERT INTO c_star (class, c) VALUES ('c', 'hi paul'::char16);
 
 INSERT INTO c_star (class) VALUES ('c');
 
 INSERT INTO d_star (class, a, b, c, d)
-   VALUES ('d', 7, 'grumble'::text, 'hi sunita'::name, '0.0'::float8);
+   VALUES ('d', 7, 'grumble'::text, 'hi sunita'::char16, '0.0'::float8);
 
 INSERT INTO d_star (class, a, b, c)
-   VALUES ('d', 8, 'stumble'::text, 'hi koko'::name);
+   VALUES ('d', 8, 'stumble'::text, 'hi koko'::char16);
 
 INSERT INTO d_star (class, a, b, d)
    VALUES ('d', 9, 'rumble'::text, '1.1'::float8);
 
 INSERT INTO d_star (class, a, c, d)
-   VALUES ('d', 10, 'hi kristin'::name, '10.01'::float8);
+   VALUES ('d', 10, 'hi kristin'::char16, '10.01'::float8);
 
 INSERT INTO d_star (class, b, c, d)
-   VALUES ('d', 'crumble'::text, 'hi boris'::name, '100.001'::float8);
+   VALUES ('d', 'crumble'::text, 'hi boris'::char16, '100.001'::float8);
 
 INSERT INTO d_star (class, a, b)
    VALUES ('d', 11, 'fumble'::text);
 
 INSERT INTO d_star (class, a, c)
-   VALUES ('d', 12, 'hi avi'::name);
+   VALUES ('d', 12, 'hi avi'::char16);
 
 INSERT INTO d_star (class, a, d)
    VALUES ('d', 13, '1000.0001'::float8);
 
 INSERT INTO d_star (class, b, c)
-   VALUES ('d', 'tumble'::text, 'hi andrew'::name);
+   VALUES ('d', 'tumble'::text, 'hi andrew'::char16);
 
 INSERT INTO d_star (class, b, d)
    VALUES ('d', 'humble'::text, '10000.00001'::float8);
 
 INSERT INTO d_star (class, c, d)
-   VALUES ('d', 'hi ginger'::name, '100000.000001'::float8);
+   VALUES ('d', 'hi ginger'::char16, '100000.000001'::float8);
 
 INSERT INTO d_star (class, a) VALUES ('d', 14);
 
 INSERT INTO d_star (class, b) VALUES ('d', 'jumble'::text);
 
-INSERT INTO d_star (class, c) VALUES ('d', 'hi jolly'::name);
+INSERT INTO d_star (class, c) VALUES ('d', 'hi jolly'::char16);
 
 INSERT INTO d_star (class, d) VALUES ('d', '1000000.0000001'::float8);
 
 INSERT INTO d_star (class) VALUES ('d');
 
 INSERT INTO e_star (class, a, c, e)
-   VALUES ('e', 15, 'hi carol'::name, '-1'::int2);
+   VALUES ('e', 15, 'hi carol'::char16, '-1'::int2);
 
 INSERT INTO e_star (class, a, c)
-   VALUES ('e', 16, 'hi bob'::name);
+   VALUES ('e', 16, 'hi bob'::char16);
 
 INSERT INTO e_star (class, a, e)
    VALUES ('e', 17, '-2'::int2);
 
 INSERT INTO e_star (class, c, e)
-   VALUES ('e', 'hi michelle'::name, '-3'::int2);
+   VALUES ('e', 'hi michelle'::char16, '-3'::int2);
 
 INSERT INTO e_star (class, a)
    VALUES ('e', 18);
 
 INSERT INTO e_star (class, c)
-   VALUES ('e', 'hi elisa'::name);
+   VALUES ('e', 'hi elisa'::char16);
 
 INSERT INTO e_star (class, e)
    VALUES ('e', '-4'::int2);
 
 INSERT INTO f_star (class, a, c, e, f)
-   VALUES ('f', 19, 'hi claire'::name, '-5'::int2, '(1,3),(2,4)'::polygon);
+   VALUES ('f', 19, 'hi claire'::char16, '-5'::int2, '(1,3),(2,4)'::polygon);
 
 INSERT INTO f_star (class, a, c, e)
-   VALUES ('f', 20, 'hi mike'::name, '-6'::int2);
+   VALUES ('f', 20, 'hi mike'::char16, '-6'::int2);
 
 INSERT INTO f_star (class, a, c, f)
-   VALUES ('f', 21, 'hi marcel'::name, '(11,44),(22,55),(33,66)'::polygon);
+   VALUES ('f', 21, 'hi marcel'::char16, '(11,44),(22,55),(33,66)'::polygon);
 
 INSERT INTO f_star (class, a, e, f)
    VALUES ('f', 22, '-7'::int2, '(111,555),(222,666),(333,777),(444,888)'::polygon);
 
 INSERT INTO f_star (class, c, e, f)
-   VALUES ('f', 'hi keith'::name, '-8'::int2, 
+   VALUES ('f', 'hi keith'::char16, '-8'::int2, 
 	   '(1111,3333),(2222,4444)'::polygon);
 
 INSERT INTO f_star (class, a, c)
-   VALUES ('f', 24, 'hi marc'::name);
+   VALUES ('f', 24, 'hi marc'::char16);
 
 INSERT INTO f_star (class, a, e)
    VALUES ('f', 25, '-9'::int2);
@@ -169,10 +169,10 @@ INSERT INTO f_star (class, a, f)
    VALUES ('f', 26, '(11111,33333),(22222,44444)'::polygon); 
 
 INSERT INTO f_star (class, c, e)
-   VALUES ('f', 'hi allison'::name, '-10'::int2);
+   VALUES ('f', 'hi allison'::char16, '-10'::int2);
 
 INSERT INTO f_star (class, c, f)
-   VALUES ('f', 'hi jeff'::name,
+   VALUES ('f', 'hi jeff'::char16,
            '(111111,333333),(222222,444444)'::polygon);
 
 INSERT INTO f_star (class, e, f)
@@ -180,7 +180,7 @@ INSERT INTO f_star (class, e, f)
 
 INSERT INTO f_star (class, a) VALUES ('f', 27);
 
-INSERT INTO f_star (class, c) VALUES ('f', 'hi carl'::name);
+INSERT INTO f_star (class, c) VALUES ('f', 'hi carl'::char16);
 
 INSERT INTO f_star (class, e) VALUES ('f', '-12'::int2);
 
diff --git a/src/test/regress/sql/create_table.sql b/src/test/regress/sql/create_table.sql
index 7bf244b2bc11d756d769356c961326b6aca78696..7d046fb67acf03de43e1eec6bbba85f75e0118e9 100644
--- a/src/test/regress/sql/create_table.sql
+++ b/src/test/regress/sql/create_table.sql
@@ -30,9 +30,9 @@ CREATE TABLE onek (
 	tenthous	int4,
 	odd		int4,
 	even		int4,
-	stringu1	name,
-	stringu2	name,
-	string4		name
+	stringu1	char16,
+	stringu2	char16,
+	string4		char16
 );
 
 CREATE TABLE tenk1 (
@@ -49,9 +49,9 @@ CREATE TABLE tenk1 (
 	tenthous	int4,
 	odd		int4,
 	even		int4,
-	stringu1	name,
-	stringu2	name,
-	string4		name
+	stringu1	char16,
+	stringu2	char16,
+	string4		char16
 );
 
 CREATE TABLE tenk2 (
@@ -68,9 +68,9 @@ CREATE TABLE tenk2 (
 	tenthous	int4,
 	odd		int4,
 	even		int4,
-	stringu1	name,
-	stringu2	name,
-	string4		name
+	stringu1	char16,
+	stringu2	char16,
+	string4		char16
 );
 
 
@@ -83,7 +83,7 @@ CREATE TABLE person (
 
 CREATE TABLE emp (
 	salary 		int4,
-	manager 	name
+	manager 	char16
 ) INHERITS (person);
 
 
@@ -98,13 +98,13 @@ CREATE TABLE stud_emp (
 
 
 CREATE TABLE city (
-	name		name,
+	name		char16,
 	location 	box,
 	budget 		city_budget
 );
 
 CREATE TABLE dept (
-	dname		name,
+	dname		char16,
 	mgrname 	text
 );
 
@@ -153,7 +153,7 @@ CREATE TABLE b_star (
 ) INHERITS (a_star);
 
 CREATE TABLE c_star (
-	c 		name
+	c 		char16
 ) INHERITS (a_star);
 
 CREATE TABLE d_star (
@@ -176,7 +176,7 @@ CREATE TABLE aggtest (
 CREATE TABLE arrtest (
 	a 		int2[],
 	b 		int4[][][],
-	c 		name[],
+	c 		char16[],
 	d		text[][], 
 	e 		float8[]
 );
@@ -186,9 +186,9 @@ CREATE TABLE hash_i4_heap (
 	random 		int4
 );
 
-CREATE TABLE hash_name_heap (
+CREATE TABLE hash_c16_heap (
 	seqno 		int4,
-	random 		name
+	random 		char16
 );
 
 CREATE TABLE hash_txt_heap (
@@ -214,8 +214,8 @@ CREATE TABLE bt_i4_heap (
 	random 		int4
 );
 
-CREATE TABLE bt_name_heap (
-	seqno 		name,
+CREATE TABLE bt_c16_heap (
+	seqno 		char16,
 	random 		int4
 );
 
diff --git a/src/test/regress/sql/destroy.sql b/src/test/regress/sql/destroy.sql
index 4d4f5561884d8ed235a5b21f75ed1c35b8f6af64..e33abba4198a34b58733cefed13ab63a96607722 100644
--- a/src/test/regress/sql/destroy.sql
+++ b/src/test/regress/sql/destroy.sql
@@ -1,7 +1,7 @@
 --
 -- destroy.source
 --
--- $Header: /cvsroot/pgsql/src/test/regress/sql/Attic/destroy.sql,v 1.4 1998/03/30 17:28:09 momjian Exp $
+-- $Header: /cvsroot/pgsql/src/test/regress/sql/Attic/destroy.sql,v 1.5 1998/04/07 18:14:27 momjian Exp $
 --
 
 --
@@ -38,7 +38,7 @@ DROP FUNCTION boxarea(box);
 
 DROP FUNCTION interpt_pp(path,path);
 
-DROP FUNCTION reverse_name(name);
+DROP FUNCTION reverse_c16(char16);
 
 
 --
@@ -125,7 +125,7 @@ DROP INDEX six;
 
 DROP INDEX hash_i4_index;
 
-DROP INDEX hash_name_index;
+DROP INDEX hash_c16_index;
 
 DROP INDEX hash_txt_index;
 
@@ -135,7 +135,7 @@ DROP INDEX hash_f8_index;
 
 DROP INDEX bt_i4_index;
 
-DROP INDEX bt_name_index;
+DROP INDEX bt_c16_index;
 
 DROP INDEX bt_txt_index;
 
@@ -213,7 +213,7 @@ DROP TABLE  city;
 
 DROP TABLE  hash_i4_heap;
 
-DROP TABLE  hash_name_heap;
+DROP TABLE  hash_c16_heap;
 
 DROP TABLE  hash_txt_heap;
 
@@ -223,7 +223,7 @@ DROP TABLE  hash_f8_heap;
 
 DROP TABLE  bt_i4_heap;
 
-DROP TABLE  bt_name_heap;
+DROP TABLE  bt_c16_heap;
 
 DROP TABLE  bt_txt_heap;
 
diff --git a/src/test/regress/sql/hash_index.sql b/src/test/regress/sql/hash_index.sql
index e7e9059924ede8aebb61f4be94c560f81fab8ae2..7c0cc6b33086d1a441713fd4436c5990d5a4c330 100644
--- a/src/test/regress/sql/hash_index.sql
+++ b/src/test/regress/sql/hash_index.sql
@@ -16,15 +16,15 @@ SELECT hash_i4_heap.*
 -- hash index
 -- grep 1505703298 hash.data
 --
-SELECT hash_name_heap.*
-   WHERE hash_name_heap.random = '1505703298'::name;
+SELECT hash_c16_heap.*
+   WHERE hash_c16_heap.random = '1505703298'::char16;
 
 --
 -- hash index
 -- grep 7777777 hash.data
 --
-SELECT hash_name_heap.*
-   WHERE hash_name_heap.random = '7777777'::name;
+SELECT hash_c16_heap.*
+   WHERE hash_c16_heap.random = '7777777'::char16;
 
 --
 -- hash index
@@ -87,24 +87,24 @@ SELECT h.seqno AS i20000
    FROM hash_i4_heap h
    WHERE h.random = 1492795354;
 
-UPDATE hash_name_heap 
-   SET random = '0123456789abcdef'::name
-   WHERE hash_name_heap.seqno = 6543;
+UPDATE hash_c16_heap 
+   SET random = '0123456789abcdef'::char16
+   WHERE hash_c16_heap.seqno = 6543;
 
 SELECT h.seqno AS i6543, h.random AS c0_to_f
-   FROM hash_name_heap h
-   WHERE h.random = '0123456789abcdef'::name;
+   FROM hash_c16_heap h
+   WHERE h.random = '0123456789abcdef'::char16;
 
-UPDATE hash_name_heap
+UPDATE hash_c16_heap
    SET seqno = 20000
-   WHERE hash_name_heap.random = '76652222'::name;
+   WHERE hash_c16_heap.random = '76652222'::char16;
 
 --
 -- this is the row we just replaced; index scan should return zero rows 
 --
 SELECT h.seqno AS emptyset
-   FROM hash_name_heap h
-   WHERE h.random = '76652222'::name;
+   FROM hash_c16_heap h
+   WHERE h.random = '76652222'::char16;
 
 UPDATE hash_txt_heap 
    SET random = '0123456789abcdefghijklmnop'::text
diff --git a/src/test/regress/sql/name.sql b/src/test/regress/sql/name.sql
index 11235caaa3d181b7be2a96ec8e2e89902d064d4e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/src/test/regress/sql/name.sql
+++ b/src/test/regress/sql/name.sql
@@ -1,54 +0,0 @@
---**************** testing built-in type name **************
---
--- all inputs are silently truncated at NAMEDATALEN (32) characters
---
-
--- fixed-length by reference
-SELECT 'name string'::name = 'name string'::name AS "True";
-
-SELECT 'name string'::name = 'name string '::name AS "False";
-
---
---
---
-
-CREATE TABLE NAME_TBL(f1 name);
-
-INSERT INTO NAME_TBL(f1) VALUES ('ABCDEFGHIJKLMNOP');
-
-INSERT INTO NAME_TBL(f1) VALUES ('abcdefghijklmnop');
-
-INSERT INTO NAME_TBL(f1) VALUES ('asdfghjkl;');
-
-INSERT INTO NAME_TBL(f1) VALUES ('343f%2a');
-
-INSERT INTO NAME_TBL(f1) VALUES ('d34aaasdf');
-
-INSERT INTO NAME_TBL(f1) VALUES ('');
-
-INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ');
-
-
-SELECT '' AS seven, NAME_TBL.*;
-
-SELECT '' AS six, c.f1 FROM NAME_TBL c WHERE c.f1 <> 'ABCDEFGHIJKLMNOP';
-
-SELECT '' AS one, c.f1 FROM NAME_TBL c WHERE c.f1 = 'ABCDEFGHIJKLMNOP';
-
-SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 < 'ABCDEFGHIJKLMNOP';
-
-SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 <= 'ABCDEFGHIJKLMNOP';
-
-SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 > 'ABCDEFGHIJKLMNOP';
-
-SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 >= 'ABCDEFGHIJKLMNOP';
-
-SELECT '' AS seven, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*';
-
-SELECT '' AS zero, c.f1 FROM NAME_TBL c WHERE c.f1 !~ '.*';
-
-SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '[0-9]';
-
-SELECT '' AS two, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*asdf.*';
-
-DROP TABLE NAME_TBL;
diff --git a/src/test/regress/sql/oidname.sql b/src/test/regress/sql/oidname.sql
index d8d5522b65e97b0c117c7405fb758e5fab85d3a6..65fccc3c06ff4a5095e4f083068cf4a5f1fad8d3 100644
--- a/src/test/regress/sql/oidname.sql
+++ b/src/test/regress/sql/oidname.sql
@@ -10,11 +10,11 @@ INSERT INTO OIDNAME_TBL(f1) VALUES ('1235,efgh');
 
 INSERT INTO OIDNAME_TBL(f1) VALUES ('987,XXXX');
 
--- no name component 
+-- no char16 component 
 INSERT INTO OIDNAME_TBL(f1) VALUES ('123456');
 
--- name component too long 
-INSERT INTO OIDNAME_TBL(f1) VALUES ('123456,abcdefghijklmnopqrsutvwyz0123456789');
+-- char16 component too long 
+INSERT INTO OIDNAME_TBL(f1) VALUES ('123456,abcdefghijklmnopqrsutvwyz');
 
 -- bad inputs 
 INSERT INTO OIDNAME_TBL(f1) VALUES ('');
diff --git a/src/test/regress/sql/tests b/src/test/regress/sql/tests
index a7a061b9be53e71e9d5ea575d52aa39a5e8889e0..79513431f17ecf2e99372f51d4e9a1d21312ca83 100644
--- a/src/test/regress/sql/tests
+++ b/src/test/regress/sql/tests
@@ -1,6 +1,9 @@
 boolean
 char
-name
+char2
+char4
+char8
+char16
 varchar
 text
 strings
diff --git a/src/tools/pgindent/pgindent b/src/tools/pgindent/pgindent
index 8b4be4ade1cb78ba2a55d345317de4d426e4a4ba..36711a3496a58f284d042971a150fa9fea79dc9f 100755
--- a/src/tools/pgindent/pgindent
+++ b/src/tools/pgindent/pgindent
@@ -672,6 +672,8 @@ do
 -Tcat_t \
 -Tcc_t \
 -Tchar \
+-Tchar16 \
+-Tchar8 \
 -TcharPP \
 -Tclock_t \
 -Tclockid_t \