From: Tatsuo Ishii Date: Wed, 19 Feb 2003 14:31:26 +0000 (+0000) Subject: Fix for GUC client_encoding variable not being handled X-Git-Tag: REL9_0_0~15717 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=e2a618fe25f9e02f17dacff4c3d2f117b56c7715;p=pg-rex%2Fsyncrep.git 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 Date: Wed, 29 Jan 2003 22:24:04 +0900 (JST) --- diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 3ad2c50a84..36dd3c7b5c 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -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 diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c index d66444d78d..560dffa858 100644 --- a/src/backend/utils/mb/mbutils.c +++ b/src/backend/utils/mb/mbutils.c @@ -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 diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h index a73a16277b..3df5e3eab7 100644 --- a/src/include/mb/pg_wchar.h +++ b/src/include/mb/pg_wchar.h @@ -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); diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index dd651fd213..32ef6e115a 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -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;