diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 0306f7cf05ca1125950fe53e685fb7208faee670..f7b2334f3dcbb776dc055b732c3535e9000b4500 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -356,10 +356,16 @@
       </thead>
       <tbody>
        <row>
-	<entry>to_ascii(text [,name|int])</entry>
+	<entry>ascii(text)</entry>
+	<entry>int</entry>
+	<entry>returns the decimal representation of the first character from text</entry>
+	<entry>ascii('x')</entry>
+       </row>
+       <row>
+	<entry>btrim(text,set)</entry>
 	<entry>text</entry>
-	<entry>convert text from multibyte encoding to ASCII</entry>
-	<entry>to_ascii('Karel')</entry>
+	<entry>both (left and right) trim characters from text</entry>
+	<entry>btrim('xxxtrimxxx','x')</entry>
        </row>
        <row>
 	<entry>char(text)</entry>
@@ -374,6 +380,12 @@
 	<entry>char(varchar 'varchar string')</entry>
        </row>
        <row>
+       <row>
+	<entry>chr(int)</entry>
+	<entry>text</entry>
+	<entry>returns the character having the binary equivalent to int</entry>
+	<entry>chr(65)</entry>
+       </row>
 	<entry>initcap(text)</entry>
 	<entry>text</entry>
 	<entry>first letter of each word to upper case</entry>
@@ -392,10 +404,10 @@
 	<entry>ltrim('xxxxtrim','x')</entry>
        </row>
        <row>
-	<entry>textpos(text,text)</entry>
+	<entry>repeat(text,int)</entry>
 	<entry>text</entry>
-	<entry>locate specified substring</entry>
-	<entry>position('high','ig')</entry>
+	<entry>repeat text by int</entry>
+	<entry>repeat('Pg', 4)</entry>
        </row>
        <row>
 	<entry>rpad(text,int,text)</entry>
@@ -427,12 +439,24 @@
 	<entry>convert varchar to text type</entry>
 	<entry>text(varchar 'varchar string')</entry>
        </row>
+       <row>
+	<entry>textpos(text,text)</entry>
+	<entry>text</entry>
+	<entry>locate specified substring</entry>
+	<entry>position('high','ig')</entry>
+       </row>
+       <row>
+	<entry>to_ascii(text [,name|int])</entry>
+	<entry>text</entry>
+	<entry>convert text from multibyte encoding to ASCII</entry>
+	<entry>to_ascii('Karel')</entry>
+       </row>
        <row>
 	<entry>translate(text,from,to)</entry>
 	<entry>text</entry>
 	<entry>convert character in string</entry>
 	<entry>translate('12345', '1', 'a')</entry>
-       </row>
+       </row>       
        <row>
 	<entry>varchar(char)</entry>
 	<entry>varchar</entry>
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 0165ef15c215f211ab2454b094543630843e672d..888f8f8e144bef8582d1643ddea75fdd80611c29 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- *	$Id: analyze.c,v 1.157 2000/09/12 21:07:00 tgl Exp $
+ *	$Id: analyze.c,v 1.158 2000/09/25 12:58:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1083,7 +1083,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
 				foreach(fkattrs, fkconstraint->fk_attrs) {
 					found=0;
 					fkattr=lfirst(fkattrs);
-					foreach(cols, columns) {
+					foreach(cols, stmt->tableElts) {
 						col=lfirst(cols);
 						if (strcmp(col->colname, fkattr->name)==0) {
 							found=1;
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c
index 8dcce7f1d90e34497ab14f52dcdf7d74c01fe49a..748bb694d7987ef9d5624e18eea1565669a56db1 100644
--- a/src/backend/utils/adt/formatting.c
+++ b/src/backend/utils/adt/formatting.c
@@ -1,7 +1,7 @@
 /* -----------------------------------------------------------------------
  * formatting.c
  *
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/formatting.c,v 1.21 2000/08/29 04:41:47 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/formatting.c,v 1.22 2000/09/25 12:58:47 momjian Exp $
  *
  *
  *	 Portions Copyright (c) 1999-2000, PostgreSQL, Inc
@@ -1742,7 +1742,7 @@ dch_time(int arg, char *inout, int suf, int flag, FormatNode *node)
 			break;
 		case DCH_tz:
 		case DCH_TZ:
-			if (flag == TO_CHAR)
+			if (flag == TO_CHAR && tzn)
 			{
 				int siz = strlen(tzn);
 				
@@ -2452,7 +2452,7 @@ timestamp_to_char(PG_FUNCTION_ARGS)
 	len = VARSIZE(fmt) - VARHDRSZ;
 
 	if (len <= 0 || TIMESTAMP_NOT_FINITE(dt))
-		return DirectFunctionCall1(textin, CStringGetDatum(""));
+		PG_RETURN_NULL();
 
 	ZERO_tm(tm);	
 	tzn = NULL;
@@ -2552,7 +2552,12 @@ timestamp_to_char(PG_FUNCTION_ARGS)
 	 * needs, now it must be re-allocate to result real size
 	 * ----------
 	 */
-	len = strlen(VARDATA(result));
+	if (!(len = strlen(VARDATA(result))))
+	{
+		pfree(result);
+		PG_RETURN_NULL();
+	}
+	
 	result_tmp = result;
 	result = (text *) palloc(len + 1 + VARHDRSZ);
 
@@ -4017,12 +4022,17 @@ do { \
 	if (flag)							\
 		pfree(format);						\
 									\
-	/* ----------						\
+	/* ----------							\
 	 * for result is allocated max memory, which current format-picture\
 	 * needs, now it must be re-allocate to result real size	\
 	 * ----------							\
 	 */								\
-	len		= strlen(VARDATA(result));			\
+	if (!(len = strlen(VARDATA(result))))				\
+	{								\
+		pfree(result);						\
+		PG_RETURN_NULL();					\
+	}								\
+									\
 	result_tmp	= result;					\
 	result		= (text *) palloc( len + 1 + VARHDRSZ);		\
 									\
diff --git a/src/backend/utils/adt/oracle_compat.c b/src/backend/utils/adt/oracle_compat.c
index db49f7d9e8bd02a17a7e9bf98a24da9dfeeb8a57..8b483ee5c60c0c6248a72badb90aaf09dd23340d 100644
--- a/src/backend/utils/adt/oracle_compat.c
+++ b/src/backend/utils/adt/oracle_compat.c
@@ -1,7 +1,7 @@
 /*
  *	Edmund Mergl <E.Mergl@bawue.de>
  *
- *	$Header: /cvsroot/pgsql/src/backend/utils/adt/oracle_compat.c,v 1.27 2000/07/06 05:48:11 tgl Exp $
+ *	$Header: /cvsroot/pgsql/src/backend/utils/adt/oracle_compat.c,v 1.28 2000/09/25 12:58:47 momjian Exp $
  *
  */
 
@@ -515,6 +515,20 @@ translate(PG_FUNCTION_ARGS)
 	PG_RETURN_TEXT_P(result);
 }
 
+/********************************************************************
+ *
+ * ascii
+ *
+ * Syntax:
+ *
+ *	 int ascii(text string)
+ *
+ * Purpose:
+ *
+ *	 Returns the decimal representation of the first character from
+ *	 string.
+ *
+ ********************************************************************/
 
 Datum
 ascii(PG_FUNCTION_ARGS)
@@ -527,12 +541,25 @@ ascii(PG_FUNCTION_ARGS)
 	PG_RETURN_INT32((int32) *((unsigned char *) VARDATA(string)));
 }
 
+/********************************************************************
+ *
+ * chr
+ *
+ * Syntax:
+ *
+ *	 text chr(int val)
+ *
+ * Purpose:
+ *
+ *	Returns the character having the binary equivalent to val
+ *
+ ********************************************************************/
 
 Datum
-ichar(PG_FUNCTION_ARGS)
+chr(PG_FUNCTION_ARGS)
 {
-	int32		cvalue = PG_GETARG_INT32(0);
-	text	   *result;
+	int32	cvalue = PG_GETARG_INT32(0);
+	text	*result;
 
 	result = (text *) palloc(VARHDRSZ + 1);
 	VARATT_SIZEP(result) = VARHDRSZ + 1;
@@ -541,17 +568,30 @@ ichar(PG_FUNCTION_ARGS)
 	PG_RETURN_TEXT_P(result);
 }
 
+/********************************************************************
+ *
+ * repeat
+ *
+ * Syntax:
+ *
+ *	 text repeat(text string, int val)
+ *
+ * Purpose:
+ *
+ *	Repeat string by val. 
+ *
+ ********************************************************************/
 
 Datum
 repeat(PG_FUNCTION_ARGS)
 {
-	text	   *string = PG_GETARG_TEXT_P(0);
-	int32		count = PG_GETARG_INT32(1);
-	text	   *result;
-	int			slen,
-				tlen;
-	int			i;
-	char	   *cp;
+	text	*string = PG_GETARG_TEXT_P(0);
+	int32	count = PG_GETARG_INT32(1);
+	text	*result;
+	int	slen,
+		tlen;
+	int	i;
+	char	*cp;
 
 	if (count < 0)
 		count = 0;
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 4f2043fb02a4bc43f3571e298e742c808cafc0fe..920aaa442d0467ffb3010e6ba1c673322b5fe9ff 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_proc.h,v 1.167 2000/09/19 18:18:01 petere Exp $
+ * $Id: pg_proc.h,v 1.168 2000/09/25 12:58:47 momjian Exp $
  *
  * NOTES
  *	  The script catalog/genbki.sh reads this file and generates .bki
@@ -2036,7 +2036,7 @@ DESCR("convert int4 to varchar");
 
 DATA(insert OID = 1620 (  ascii				PGUID 12 f t t t 1 f 23 "25" 100 0 0 100	ascii - ));
 DESCR("convert first char to int4");
-DATA(insert OID = 1621 (  ichar				PGUID 12 f t t t 1 f 25 "23" 100 0 0 100	ichar - ));
+DATA(insert OID = 1621 (  chr				PGUID 12 f t t t 1 f 25 "23" 100 0 0 100	chr - ));
 DESCR("convert int4 to char");
 DATA(insert OID = 1622 (  repeat			PGUID 12 f t t t 2 f 25 "25 23" 100 0 0 100  repeat - ));
 DESCR("replicate string int4 times");