提交 e2a618fe 编写于 作者: T Tatsuo Ishii

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)
上级 d5740d7e
......@@ -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
......
/* $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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册