*** configure.in.orig	Mon Dec  3 13:15:16 2001
--- configure.in	Mon Dec  3 13:17:01 2001
***************
*** 812,817 ****
--- 812,835 ----
  ##
  ## Functions, global variables
  ##
+ 
+ dnl borrowed from the GNU Java compiler (From Bruno Haible.)
+ 
+ AC_DEFUN([AM_LANGINFO],
+ [
+   AC_CACHE_CHECK([for nl_langinfo], am_cv_langinfo,
+     [AC_TRY_LINK([#include <langinfo.h>],
+       [char* cs = nl_langinfo(CODESET);],
+       am_cv_langinfo=yes,
+       am_cv_langinfo=no)
+     ])
+   if test $am_cv_langinfo = yes; then
+     AC_DEFINE(HAVE_LANGINFO, 1,
+       [Define if you have <langinfo.h> and nl_langinfo().])
+   fi
+ ])
+ 
+ AM_LANGINFO
  PGAC_VAR_INT_TIMEZONE
  AC_FUNC_ACCEPT_ARGTYPES
  PGAC_FUNC_GETTIMEOFDAY_1ARG
*** src/backend/utils/adt/formatting.c.orig	Mon Dec  3 13:15:16 2001
--- src/backend/utils/adt/formatting.c	Mon Dec  3 13:15:16 2001
***************
*** 74,79 ****
--- 74,83 ----
  #include <unistd.h>
  #ifdef USE_LOCALE
  #include <locale.h>
+ #  ifdef HAVE_LANGINFO
+ #define USE_LANGINFO
+ #include <langinfo.h>
+ #  endif
  #endif
  #include <math.h>
  #include <float.h>
***************
*** 168,173 ****
--- 172,199 ----
  	"August", "September", "October", "November", "December", NULL
  };
  
+ #ifdef USE_LANGINFO
+ static nl_item months_nl_map[] = {
+ 	MON_1, MON_2, MON_3, MON_4, MON_5, MON_6, 
+ 	MON_7, MON_8, MON_9, MON_10, MON_11, MON_12
+ };
+ 
+ static nl_item months_abbr_nl_map[] = {
+ 	ABMON_1, ABMON_2, ABMON_3, ABMON_4, ABMON_5, ABMON_6, 
+ 	ABMON_7, ABMON_8, ABMON_9, ABMON_10, ABMON_11, ABMON_12
+ };
+ 
+ static nl_item days_nl_map[] = {
+ 	DAY_1, DAY_2, DAY_3, DAY_4, DAY_5, DAY_6, DAY_7
+ };
+ 
+ static nl_item days_abbr_nl_map[] = {
+ 	ABDAY_1, ABDAY_2, ABDAY_3, ABDAY_4, ABDAY_5, ABDAY_6, ABDAY_7
+ };
+ 
+ #endif
+ 
+ 
  /* ----------
   * AC / DC
   * ----------
***************
*** 2116,2156 ****
--- 2142,2216 ----
  			}
  			break;
  		case DCH_MONTH:
+ #ifdef      USE_LANGINFO
+ 			strcpy(inout, nl_langinfo(months_nl_map[tm->tm_mon - 1]));
+ 			inout = str_toupper(inout);
+ 			return strlen(p_inout) - 1;
+ #else
  			strcpy(inout, months_full[tm->tm_mon - 1]);
  			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, str_toupper(inout));
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
  				return 8;
+ #endif
  
  		case DCH_Month:
+ #ifdef      USE_LANGINFO
+ 			strcpy(inout, nl_langinfo(months_nl_map[tm->tm_mon - 1]));
+ 			return strlen(p_inout) - 1;			
+ #else			
  			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, months_full[tm->tm_mon - 1]);
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
  				return 8;
+ #endif
  
  		case DCH_month:
+ #ifdef      USE_LANGINFO
+ 			strcpy(inout, nl_langinfo(months_nl_map[tm->tm_mon - 1]));
+ 			inout = str_tolower(inout);
+ 			return strlen(p_inout) - 1;
+ #else			
  			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, months_full[tm->tm_mon - 1]);
  			*inout = tolower((unsigned char) *inout);
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
  				return 8;
+ #endif
  
  		case DCH_MON:
+ #ifdef      USE_LANGINFO
+ 			strcpy(inout, nl_langinfo(months_abbr_nl_map[tm->tm_mon - 1]));
+ 			inout = str_toupper(inout);			
+ 			return strlen(p_inout) - 1;			
+ #else			
  			strcpy(inout, months[tm->tm_mon - 1]);
  			inout = str_toupper(inout);
  			return 2;
+ #endif
  
  		case DCH_Mon:
+ #ifdef      USE_LANGINFO
+ 			strcpy(inout, nl_langinfo(months_abbr_nl_map[tm->tm_mon - 1]));
+ 			return strlen(p_inout) - 1;
+ #else			
  			strcpy(inout, months[tm->tm_mon - 1]);
  			return 2;
+ #endif
  
  		case DCH_mon:
+ #ifdef      USE_LANGINFO			
+ 			strcpy(inout, nl_langinfo(months_abbr_nl_map[tm->tm_mon - 1]));
+ 			inout = str_tolower(inout);
+ 			return strlen(p_inout) - 1;
+ #else			
  			strcpy(inout, months[tm->tm_mon - 1]);
  			*inout = tolower((unsigned char) *inout);
  			return 2;
+ #endif
  
  		case DCH_MM:
  			if (flag == TO_CHAR)
***************
*** 2179,2220 ****
  			}
  			break;
  		case DCH_DAY:
  			strcpy(inout, days[tm->tm_wday]);
  			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, str_toupper(inout));
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
  				return 8;
  
  		case DCH_Day:
  			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, days[tm->tm_wday]);
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
  				return 8;
  
  		case DCH_day:
  			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, days[tm->tm_wday]);
  			*inout = tolower((unsigned char) *inout);
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
  				return 8;
  
  		case DCH_DY:
  			strcpy(inout, days[tm->tm_wday]);
  			inout = str_toupper(inout);
  			return 2;
  
  		case DCH_Dy:
  			strcpy(inout, days[tm->tm_wday]);
  			return 2;
  
  		case DCH_dy:
  			strcpy(inout, days[tm->tm_wday]);
  			*inout = tolower((unsigned char) *inout);
  			return 2;
! 
  		case DCH_DDD:
  			if (flag == TO_CHAR)
  			{
--- 2239,2314 ----
  			}
  			break;
  		case DCH_DAY:
+ #ifdef      USE_LANGINFO	
+ 			strcpy(inout, nl_langinfo(days_nl_map[tm->tm_wday]));
+ 			inout = str_toupper(inout);
+ 			return strlen(p_inout) - 1;			
+ #else
  			strcpy(inout, days[tm->tm_wday]);
  			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, str_toupper(inout));
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
  				return 8;
+ #endif
  
  		case DCH_Day:
+ #ifdef      USE_LANGINFO
+ 			strcpy(inout, nl_langinfo(days_nl_map[tm->tm_wday]));
+ 			return strlen(p_inout) - 1;
+ #else
  			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, days[tm->tm_wday]);
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
  				return 8;
+ #endif
  
  		case DCH_day:
+ #ifdef      USE_LANGINFO
+ 			strcpy(inout, nl_langinfo(days_nl_map[tm->tm_wday]));
+ 			inout = str_tolower(inout);
+ 			return strlen(p_inout) - 1;
+ #else
  			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, days[tm->tm_wday]);
  			*inout = tolower((unsigned char) *inout);
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
  				return 8;
+ #endif
  
  		case DCH_DY:
+ #ifdef      USE_LANGINFO
+ 			strcpy(inout, nl_langinfo(days_abbr_nl_map[tm->tm_wday]));
+ 			inout = str_toupper(inout);
+ 			return strlen(p_inout) - 1;
+ #else
  			strcpy(inout, days[tm->tm_wday]);
  			inout = str_toupper(inout);
  			return 2;
+ #endif
  
  		case DCH_Dy:
+ #ifdef      USE_LANGINFO
+ 			strcpy(inout, nl_langinfo(days_abbr_nl_map[tm->tm_wday]));
+ 			return strlen(p_inout) - 1;			
+ #else
  			strcpy(inout, days[tm->tm_wday]);
  			return 2;
+ #endif
  
  		case DCH_dy:
+ #ifdef      USE_LANGINFO
+ 			strcpy(inout, nl_langinfo(days_abbr_nl_map[tm->tm_wday]));
+ 			inout = str_tolower(inout);
+ 			return strlen(p_inout) - 1;			
+ #else
  			strcpy(inout, days[tm->tm_wday]);
  			*inout = tolower((unsigned char) *inout);
  			return 2;
! #endif
! 			
  		case DCH_DDD:
  			if (flag == TO_CHAR)
  			{
*** src/bin/psql/tab-complete.c.orig	Mon Dec  3 13:15:16 2001
--- src/bin/psql/tab-complete.c	Mon Dec  3 13:15:16 2001
***************
*** 141,147 ****
  								 * a good idea. */
  	{"RULE", "SELECT rulename FROM pg_rules WHERE substr(rulename,1,%d)='%s'"},
  	{"SEQUENCE", "SELECT relname FROM pg_class WHERE relkind='S' and substr(relname,1,%d)='%s'"},
! 	{"TABLE", "SELECT relname FROM pg_class WHERE relkind='r' and substr(relname,1,%d)='%s'"},
  	{"TEMP", NULL},				/* for CREATE TEMP TABLE ... */
  	{"TRIGGER", "SELECT tgname FROM pg_trigger WHERE substr(tgname,1,%d)='%s'"},
  	{"TYPE", "SELECT typname FROM pg_type WHERE substr(typname,1,%d)='%s'"},
--- 141,147 ----
  								 * a good idea. */
  	{"RULE", "SELECT rulename FROM pg_rules WHERE substr(rulename,1,%d)='%s'"},
  	{"SEQUENCE", "SELECT relname FROM pg_class WHERE relkind='S' and substr(relname,1,%d)='%s'"},
! 	{"TABLE", "SELECT relname FROM pg_class WHERE (relkind='r' or relkind='v') and substr(relname,1,%d)='%s'"},
  	{"TEMP", NULL},				/* for CREATE TEMP TABLE ... */
  	{"TRIGGER", "SELECT tgname FROM pg_trigger WHERE substr(tgname,1,%d)='%s'"},
  	{"TYPE", "SELECT typname FROM pg_type WHERE substr(typname,1,%d)='%s'"},
