Re: minor changes in psql's \encoding command

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Weiping He <laser(at)zhengmai(dot)com(dot)cn>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: minor changes in psql's \encoding command
Date: 2003-01-05 03:33:39
Message-ID: 5695.1041737619@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches

Weiping He <laser(at)zhengmai(dot)com(dot)cn> writes:
> 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;
> }

I'm a bit dissatisfied with this, as (a) it fails utterly with pre-7.3
servers; (b) it fails if the server is in transaction-abort state;
(c) it fails if the client is in the middle of a query cycle already;
(d) it changes what had been an extremely cheap call into an extremely
expensive one. (I shudder to think of the implications for an app that
calls it in an inner loop, as for example per-character during display
of results.)

This is quite a large change from the old behavior to support what seems
an unusual corner case. How many clients have need to change encoding
on the fly?

I'd prefer to just document that PQclientEncoding is untrustworthy if
the client sets the encoding directly (rather than via PGCLIENTENCODING
or PQsetClientEncoding), and similarly that psql's \encoding is not
trustworthy if one goes behind its back.

regards, tom lane

In response to

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Weiping He 2003-01-05 05:13:38 Re: minor changes in psql's \encoding command
Previous Message Weiping He 2003-01-05 03:16:20 minor changes in psql's \encoding command