mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Fix for GUC client_encoding variable not being handled
correctly. See following thread for more details. Subject: [HACKERS] client_encoding directive is ignored in postgresql.conf From: Tatsuo Ishii <t-ishii@sra.co.jp> Date: Wed, 29 Jan 2003 22:24:04 +0900 (JST)
This commit is contained in:
		@@ -8,7 +8,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 * IDENTIFICATION
 | 
			
		||||
 *	  $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.118 2002/11/21 06:36:08 tgl Exp $
 | 
			
		||||
 *	  $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.119 2003/02/19 14:31:26 ishii Exp $
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 *-------------------------------------------------------------------------
 | 
			
		||||
@@ -397,6 +397,9 @@ InitPostgres(const char *dbname, const char *username)
 | 
			
		||||
	/* set default namespace search path */
 | 
			
		||||
	InitializeSearchPath();
 | 
			
		||||
 | 
			
		||||
	/* initialize client encoding */
 | 
			
		||||
	InitializeClientEncoding();
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Set up process-exit callback to do pre-shutdown cleanup.  This
 | 
			
		||||
	 * should be last because we want shmem_exit to call this routine
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 * (currently mule internal code (mic) is used)
 | 
			
		||||
 * Tatsuo Ishii
 | 
			
		||||
 *
 | 
			
		||||
 * $Header: /cvsroot/pgsql/src/backend/utils/mb/mbutils.c,v 1.37 2002/11/26 02:22:29 ishii Exp $
 | 
			
		||||
 * $Header: /cvsroot/pgsql/src/backend/utils/mb/mbutils.c,v 1.38 2003/02/19 14:31:26 ishii Exp $
 | 
			
		||||
 */
 | 
			
		||||
#include "postgres.h"
 | 
			
		||||
 | 
			
		||||
@@ -37,6 +37,8 @@ static unsigned char *perform_default_encoding_conversion(unsigned char *src,
 | 
			
		||||
									int len, bool is_client_to_server);
 | 
			
		||||
static int cliplen(const unsigned char *str, int len, int limit);
 | 
			
		||||
 | 
			
		||||
/* Flag to we need to initialize client encoding info */
 | 
			
		||||
static bool need_to_init_client_encoding = -1;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Set the client encoding and save fmgrinfo for the converion
 | 
			
		||||
@@ -58,6 +60,13 @@ SetClientEncoding(int encoding, bool doit)
 | 
			
		||||
	if (!PG_VALID_FE_ENCODING(encoding))
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	/* If we cannot actualy set client encoding info, remeber it
 | 
			
		||||
	 * so that we could set it using InitializeClientEncoding()
 | 
			
		||||
	 * in InitPostgres()
 | 
			
		||||
	 */
 | 
			
		||||
	if (current_server_encoding != encoding && !IsTransactionState())
 | 
			
		||||
		need_to_init_client_encoding = encoding;
 | 
			
		||||
 | 
			
		||||
	if (current_server_encoding == encoding ||
 | 
			
		||||
	(current_server_encoding == PG_SQL_ASCII || encoding == PG_SQL_ASCII))
 | 
			
		||||
	{
 | 
			
		||||
@@ -115,6 +124,19 @@ SetClientEncoding(int encoding, bool doit)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Initialize client encoding if necessary.
 | 
			
		||||
 * called from InitPostgres() once during backend starting up.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
InitializeClientEncoding()
 | 
			
		||||
{
 | 
			
		||||
	if (need_to_init_client_encoding > 0)
 | 
			
		||||
	{
 | 
			
		||||
		SetClientEncoding(need_to_init_client_encoding, 1);
 | 
			
		||||
		need_to_init_client_encoding = -1;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * returns the current client encoding */
 | 
			
		||||
int
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: pg_wchar.h,v 1.44 2002/09/04 20:31:42 momjian Exp $ */
 | 
			
		||||
/* $Id: pg_wchar.h,v 1.45 2003/02/19 14:31:26 ishii Exp $ */
 | 
			
		||||
 | 
			
		||||
#ifndef PG_WCHAR_H
 | 
			
		||||
#define PG_WCHAR_H
 | 
			
		||||
@@ -295,6 +295,7 @@ extern int	pg_database_encoding_max_length(void);
 | 
			
		||||
 | 
			
		||||
extern void SetDefaultClientEncoding(void);
 | 
			
		||||
extern int	SetClientEncoding(int encoding, bool doit);
 | 
			
		||||
extern void	InitializeClientEncoding(void);
 | 
			
		||||
extern int	pg_get_client_encoding(void);
 | 
			
		||||
extern const char *pg_get_client_encoding_name(void);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 * IDENTIFICATION
 | 
			
		||||
 *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.223 2003/02/14 01:24:26 tgl Exp $
 | 
			
		||||
 *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.224 2003/02/19 14:31:26 ishii Exp $
 | 
			
		||||
 *
 | 
			
		||||
 *-------------------------------------------------------------------------
 | 
			
		||||
 */
 | 
			
		||||
@@ -1744,7 +1744,7 @@ PQsetenvPoll(PGconn *conn)
 | 
			
		||||
						 * server for it.  We must use begin/commit in
 | 
			
		||||
						 * case autocommit is off by default.
 | 
			
		||||
						 */
 | 
			
		||||
						if (!PQsendQuery(conn, "begin; select getdatabaseencoding(); commit"))
 | 
			
		||||
						if (!PQsendQuery(conn, "begin; select pg_client_encoding(); commit"))
 | 
			
		||||
							goto error_return;
 | 
			
		||||
 | 
			
		||||
						conn->setenv_state = SETENV_STATE_ENCODINGS_WAIT;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user