minor changes in psql's \encoding command - Mailing list pgsql-patches
From | Weiping He |
---|---|
Subject | minor changes in psql's \encoding command |
Date | |
Msg-id | 3E17A384.4070008@zhengmai.com.cn Whole thread Raw |
Responses |
Re: minor changes in psql's \encoding command
|
List | pgsql-patches |
Hi all, While developing one of our applicatins, we found that psql's meta command \encoding return different result to what "SHOW CLIENT_ENCODING" command return. And it make us somewhat difficult to determine our problem. After take a look at source of psql and libpq, I found that the \encoding command only use the encoding setting while connection was made. don't know why, but a few changes make \encoding command synchronized with "SHOW CLIENT_ENCODING" & "SET CLIENT_ENCODING TO 'something'" please apply it if it's useful. regards laser *** fe-connect.c.old Sun Jan 5 09:34:00 2003 --- fe-connect.c Sun Jan 5 09:46:25 2003 *************** *** 2730,2739 **** } int ! PQclientEncoding(const PGconn *conn) { if (!conn || conn->status != CONNECTION_OK) return -1; return conn->client_encoding; } --- 2730,2754 ---- } int ! PQclientEncoding(PGconn *conn) { + static char query[] = "show client_encoding"; + PGresult *res; + char *encoding; + if (!conn || conn->status != CONNECTION_OK) return -1; + res = PQexec(conn, query); + + if(res == (PGresult *) NULL) + return -1; + if(res->resultStatus != PGRES_TUPLES_OK) + return -1; + else{ + encoding = PQgetvalue(res, 0, 0); + conn->client_encoding = pg_char_to_encoding(encoding); + } + PQclear(res); return conn->client_encoding; } *** command.c.old Sun Jan 5 10:05:29 2003 --- command.c Sun Jan 5 10:06:17 2003 *************** *** 455,463 **** { char *encoding = scan_option(&string, OT_NORMAL, NULL, false); ! if (!encoding) /* show encoding */ puts(pg_encoding_to_char(pset.encoding)); else { /* set encoding */ --- 455,465 ---- { char *encoding = scan_option(&string, OT_NORMAL, NULL, false); ! if (!encoding){ ! pset.encoding = PQclientEncoding(pset.db); /* show encoding */ puts(pg_encoding_to_char(pset.encoding)); + } else { /* set encoding */ *** libpq-fe.h.old Sun Jan 5 09:47:59 2003 --- libpq-fe.h Sun Jan 5 09:48:22 2003 *************** *** 227,233 **** extern char *PQerrorMessage(const PGconn *conn); extern int PQsocket(const PGconn *conn); extern int PQbackendPID(const PGconn *conn); ! extern int PQclientEncoding(const PGconn *conn); extern int PQsetClientEncoding(PGconn *conn, const char *encoding); #ifdef USE_SSL --- 227,233 ---- extern char *PQerrorMessage(const PGconn *conn); extern int PQsocket(const PGconn *conn); extern int PQbackendPID(const PGconn *conn); ! extern int PQclientEncoding(PGconn *conn); extern int PQsetClientEncoding(PGconn *conn, const char *encoding); #ifdef USE_SSL
pgsql-patches by date: