]> granicus.if.org Git - postgresql/commitdiff
Change function name PQclientencoding to PQclientEncoding since
authorTatsuo Ishii <ishii@postgresql.org>
Sat, 5 Feb 2000 12:33:22 +0000 (12:33 +0000)
committerTatsuo Ishii <ishii@postgresql.org>
Sat, 5 Feb 2000 12:33:22 +0000 (12:33 +0000)
it seems more suitable for the naming convention in libpq.

New function PQsetClientEncoding added. It makes possible to change
the client encoding on the fly without setting PGCLIENTENCODING.

src/interfaces/libpq/fe-connect.c
src/interfaces/libpq/fe-print.c
src/interfaces/libpq/libpq-fe.h

index f899aaff6243f60f532a32b652d611d0e2e4c356..92d32917ef20baf836ca79a9bd8441a27623cddc 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.116 2000/01/26 05:58:45 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.117 2000/02/05 12:33:22 ishii Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -41,6 +41,7 @@
 #endif
 
 #ifdef MULTIBYTE
+#include "miscadmin.h"
 #include "mb/pg_wchar.h"
 #endif
 
@@ -2381,13 +2382,54 @@ PQbackendPID(const PGconn *conn)
 }
 
 int
-PQclientencoding(const PGconn *conn)
+PQclientEncoding(const PGconn *conn)
 {
        if (!conn || conn->status != CONNECTION_OK)
                return -1;
        return conn->client_encoding;
 }
 
+#ifdef MULTIBYTE
+int
+PQsetClientEncoding(PGconn *conn, const char *encoding)
+{
+       char qbuf[128];
+       static char query[] = "set client_encoding to '%s'";
+       PGresult *res;
+       int status;
+
+       if (!conn || conn->status != CONNECTION_OK)
+               return -1;
+
+       /* check query buffer overflow */
+       if (sizeof(qbuf) < (sizeof(query) + strlen(encoding)))
+               return -1;
+
+       /* ok, now send a query */
+       sprintf(qbuf, query, encoding);
+       res = PQexec(conn, qbuf);
+
+       if (res == (PGresult *)NULL)
+               return -1;
+       if (res->resultStatus != PGRES_COMMAND_OK)
+               status = -1;
+       else
+       {
+               /* change libpq internal encoding */
+               conn->client_encoding = pg_char_to_encoding(encoding);
+               status = 0;     /* everything is ok */
+       }
+       PQclear(res);
+       return(status);
+}
+#else
+int
+PQsetClientEncoding(PGconn *conn, const char *encoding)
+{
+       return -1;
+}
+#endif
+
 void
 PQtrace(PGconn *conn, FILE *debug_port)
 {
index 7c0e655f2a82aea6e6cd44d2c0af4150d35dba17..e54167cc1feef37a1dda2b2e6ba3741f4da41995 100644 (file)
@@ -10,7 +10,7 @@
  * didn't really belong there.
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-print.c,v 1.33 2000/01/29 16:58:51 petere Exp $
+ *       $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-print.c,v 1.34 2000/02/05 12:33:22 ishii Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -347,7 +347,7 @@ do_field(const PQprintOpt *po, const PGresult *res,
                        char            ch = '0';
 
 #ifdef MULTIBYTE
-                       for (p = pval; *p; p += PQmblen(p, PQclientencoding(res->conn)))
+                       for (p = pval; *p; p += PQmblen(p, PQclientEncoding(res->conn)))
 #else
                        for (p = pval; *p; p++)
 #endif
index 35bbb6eff3f890bc556d67f5e63a40e0ca5ded97..8acb622ad16f2481db9ed5d984d186a10d83883f 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: libpq-fe.h,v 1.58 2000/01/29 16:58:51 petere Exp $
+ * $Id: libpq-fe.h,v 1.59 2000/02/05 12:33:22 ishii Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -218,7 +218,8 @@ extern              "C"
        extern const 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      PQclientEncoding(const PGconn *conn);
+       extern int      PQsetClientEncoding(PGconn *conn, const char *encoding);
 
        /* Enable/disable tracing */
        extern void PQtrace(PGconn *conn, FILE *debug_port);