summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorTatsuo Ishii2001-09-06 04:57:30 +0000
committerTatsuo Ishii2001-09-06 04:57:30 +0000
commit227767112c3d3a6562b27e0a0da064d8b8ca1ebf (patch)
tree83793014a004ba5098dba7f6c31ec6992049c80d /src/include
parent50aa3020ac925d3f537fe580e218f8d9cec9fc5b (diff)
Commit Karel's patch.
------------------------------------------------------------------- Subject: Re: [PATCHES] encoding names From: Karel Zak <zakkr@zf.jcu.cz> To: Peter Eisentraut <peter_e@gmx.net> Cc: pgsql-patches <pgsql-patches@postgresql.org> Date: Fri, 31 Aug 2001 17:24:38 +0200 On Thu, Aug 30, 2001 at 01:30:40AM +0200, Peter Eisentraut wrote: > > - convert encoding 'name' to 'id' > > I thought we decided not to add functions returning "new" names until we > know exactly what the new names should be, and pending schema Ok, the patch not to add functions. > better > > ...(): encoding name too long Fixed. I found new bug in command/variable.c in parse_client_encoding(), nobody probably never see this error: if (pg_set_client_encoding(encoding)) { elog(ERROR, "Conversion between %s and %s is not supported", value, GetDatabaseEncodingName()); } because pg_set_client_encoding() returns -1 for error and 0 as true. It's fixed too. IMHO it can be apply. Karel PS: * following files are renamed: src/utils/mb/Unicode/KOI8_to_utf8.map --> src/utils/mb/Unicode/koi8r_to_utf8.map src/utils/mb/Unicode/WIN_to_utf8.map --> src/utils/mb/Unicode/win1251_to_utf8.map src/utils/mb/Unicode/utf8_to_KOI8.map --> src/utils/mb/Unicode/utf8_to_koi8r.map src/utils/mb/Unicode/utf8_to_WIN.map --> src/utils/mb/Unicode/utf8_to_win1251.map * new file: src/utils/mb/encname.c * removed file: src/utils/mb/common.c -- Karel Zak <zakkr@zf.jcu.cz> http://home.zf.jcu.cz/~zakkr/ C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz
Diffstat (limited to 'src/include')
-rw-r--r--src/include/catalog/pg_proc.h4
-rw-r--r--src/include/mb/pg_wchar.h215
-rw-r--r--src/include/utils/builtins.h5
3 files changed, 155 insertions, 69 deletions
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index fbea1d09a5c..fc1a5a73b67 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_proc.h,v 1.208 2001/09/06 03:22:42 momjian Exp $
+ * $Id: pg_proc.h,v 1.209 2001/09/06 04:57:29 ishii Exp $
*
* NOTES
* The script catalog/genbki.sh reads this file and generates .bki
@@ -2136,6 +2136,8 @@ DATA(insert OID = 937 ( substring PGUID 14 f t t t 2 f 25 "25 23" 100 0 0 1
DESCR("return portion of string");
/* for multi-byte support */
+
+/* old encoding names - back compatibility only */
DATA(insert OID = 1039 ( getdatabaseencoding PGUID 12 f t f t 0 f 19 "0" 100 0 0 100 getdatabaseencoding - ));
DESCR("encoding name of current database");
diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h
index 6df58708f67..ed1a6e19093 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.28 2001/08/15 07:07:40 ishii Exp $ */
+/* $Id: pg_wchar.h,v 1.29 2001/09/06 04:57:29 ishii Exp $ */
#ifndef PG_WCHAR_H
#define PG_WCHAR_H
@@ -12,30 +12,9 @@
#define pfree free
#endif
-#define SQL_ASCII 0 /* SQL/ASCII */
-#define EUC_JP 1 /* EUC for Japanese */
-#define EUC_CN 2 /* EUC for Chinese */
-#define EUC_KR 3 /* EUC for Korean */
-#define EUC_TW 4 /* EUC for Taiwan */
-#define UNICODE 5 /* Unicode UTF-8 */
-#define MULE_INTERNAL 6 /* Mule internal code */
-#define LATIN1 7 /* ISO-8859 Latin 1 */
-#define LATIN2 8 /* ISO-8859 Latin 2 */
-#define LATIN3 9 /* ISO-8859 Latin 3 */
-#define LATIN4 10 /* ISO-8859 Latin 4 */
-#define LATIN5 11 /* ISO-8859 Latin 5 */
-#define LATIN6 12 /* ISO-8859 Latin 6 */
-#define LATIN7 13 /* ISO-8859 Latin 7 */
-#define LATIN8 14 /* ISO-8859 Latin 8 */
-#define LATIN9 15 /* ISO-8859 Latin 9 */
-#define KOI8 16 /* KOI8-R/U */
-#define WIN 17 /* windows-1251 */
-#define ALT 18 /* Alternativny Variant (MS-DOS CP866) */
-/* followings are for client encoding only */
-#define SJIS 32 /* Shift JIS */
-#define BIG5 33 /* Big5 */
-#define WIN1250 34 /* windows-1250 */
-
+/*
+ * The pg_wchar
+ */
#ifdef MULTIBYTE
typedef unsigned int pg_wchar;
@@ -67,12 +46,12 @@ typedef unsigned int pg_wchar;
#define LC_ISO8859_5 0x8d /* ISO8859 Latin 5 */
#define LC_JISX0201K 0x89 /* Japanese 1 byte kana */
#define LC_JISX0201R 0x8a /* Japanese 1 byte Roman */
-#define LC_KOI8_R 0x8c /* Cyrillic KOI8-R */
-#define LC_KOI8_U 0x8c /* Cyrillic KOI8-U */
+#define LC_KOI8_R 0x8c /* Cyrillic KOI8-R */
+#define LC_KOI8_U 0x8c /* Cyrillic KOI8-U */
#define LC_GB2312_80 0x91 /* Chinese */
-#define LC_JISX0208 0x92 /* Japanese Kanji */
-#define LC_KS5601 0x93 /* Korean */
-#define LC_JISX0212 0x94 /* Japanese Kanji (JISX0212) */
+#define LC_JISX0208 0x92 /* Japanese Kanji */
+#define LC_KS5601 0x93 /* Korean */
+#define LC_JISX0212 0x94 /* Japanese Kanji (JISX0212) */
#define LC_CNS11643_1 0x95 /* CNS 11643-1992 Plane 1 */
#define LC_CNS11643_2 0x96 /* CNS 11643-1992 Plane 2 */
#define LC_CNS11643_3 0xf6 /* CNS 11643-1992 Plane 3 */
@@ -81,27 +60,129 @@ typedef unsigned int pg_wchar;
#define LC_CNS11643_6 0xf9 /* CNS 11643-1992 Plane 6 */
#define LC_CNS11643_7 0xfa /* CNS 11643-1992 Plane 7 */
+/*
+ * Encoding numeral identificators
+ *
+ * WARNING: the order of this table must be same as order
+ * in the pg_enconv[] (mb/conv.c) and pg_enc2name[] (mb/names.c) array!
+ *
+ * If you add some encoding don'y forget check
+ * PG_ENCODING_[BE|FE]_LAST macros.
+ *
+ * The PG_SQL_ASCII is default encoding and must be = 0.
+ */
+typedef enum pg_enc
+{
+ PG_SQL_ASCII = 0, /* SQL/ASCII */
+ PG_EUC_JP, /* EUC for Japanese */
+ PG_EUC_CN, /* EUC for Chinese */
+ PG_EUC_KR, /* EUC for Korean */
+ PG_EUC_TW, /* EUC for Taiwan */
+ PG_UTF8, /* Unicode UTF-8 */
+ PG_MULE_INTERNAL, /* Mule internal code */
+ PG_LATIN1, /* ISO-8859 Latin 1 */
+ PG_LATIN2, /* ISO-8859 Latin 2 */
+ PG_LATIN3, /* ISO-8859 Latin 3 */
+ PG_LATIN4, /* ISO-8859 Latin 4 */
+ PG_LATIN5, /* ISO-8859 Latin 5 */
+ PG_KOI8R, /* KOI8-R */
+ PG_WIN1251, /* windows-1251 (was: WIN) */
+ PG_ALT, /* (MS-DOS CP866) */
+
+ /* followings are for client encoding only */
+ PG_SJIS, /* Shift JIS */
+ PG_BIG5, /* Big5 */
+ PG_WIN1250, /* windows-1250 */
+
+ _PG_LAST_ENCODING_ /* mark only */
+
+} pg_enc;
+
+#define PG_ENCODING_BE_LAST PG_ALT
+#define PG_ENCODING_FE_LAST PG_WIN1250
+
+
#ifdef MULTIBYTE
-typedef struct
+
+/*
+ * Please use these tests before access to pg_encconv_tbl[]
+ * or to other places...
+ */
+#define PG_VALID_BE_ENCODING(_enc) \
+ ((_enc) >= 0 && (_enc) <= PG_ENCODING_BE_LAST)
+
+#define PG_ENCODING_IS_CLIEN_ONLY(_enc) \
+ (((_enc) > PG_ENCODING_BE_LAST && (_enc) <= PG_ENCODING_FE_LAST)
+
+#define PG_VALID_ENCODING(_enc) \
+ ((_enc) >= 0 && (_enc) < _PG_LAST_ENCODING_)
+
+/* On FE are possible all encodings
+ */
+#define PG_VALID_FE_ENCODING(_enc) PG_VALID_ENCODING(_enc)
+
+/*
+ * Encoding names with all aliases
+ */
+typedef struct pg_encname
+{
+ char *name;
+ pg_enc encoding;
+} pg_encname;
+
+extern pg_encname pg_encname_tbl[];
+extern unsigned int pg_encname_tbl_sz;
+
+/*
+ * Careful:
+ *
+ * if (PG_VALID_ENCODING(encoding))
+ * pg_enc2name_tbl[ encoding ];
+ */
+typedef struct pg_enc2name
{
- int encoding; /* encoding symbol value */
- char *name; /* encoding name */
- int is_client_only; /* 0: server/client both supported 1:
- * client only */
- void (*to_mic) (); /* client encoding to MIC */
- void (*from_mic) (); /* MIC to client encoding */
- void (*to_unicode) (); /* client encoding to UTF-8 */
- void (*from_unicode) (); /* UTF-8 to client encoding */
-} pg_encoding_conv_tbl;
-
-extern pg_encoding_conv_tbl pg_conv_tbl[];
+ char *name;
+ pg_enc encoding;
+} pg_enc2name;
+
+extern pg_enc2name pg_enc2name_tbl[];
+
+extern pg_encname *pg_char_to_encname_struct(const char *name);
+extern int pg_char_to_encoding(const char *s);
+extern const char *pg_encoding_to_char(int encoding);
+
+/*
+ * The backend encoding conversion routines
+ * Careful:
+ *
+ * if (PG_VALID_ENCODING(enc))
+ * pg_encconv_tbl[ enc ]->foo
+ */
+#ifndef FRONTEND
+typedef struct pg_enconv
+{
+ pg_enc encoding; /* encoding identificator */
+ void (*to_mic) (); /* client encoding to MIC */
+ void (*from_mic) (); /* MIC to client encoding */
+ void (*to_unicode) (); /* client encoding to UTF-8 */
+ void (*from_unicode) (); /* UTF-8 to client encoding */
+} pg_enconv;
+
+extern pg_enconv pg_enconv_tbl[];
+extern pg_enconv *pg_get_enconv_by_encoding(int encoding);
+
+#endif /* FRONTEND */
+
+/*
+ * pg_wchar stuff
+ */
typedef struct
{
- int (*mb2wchar_with_len) (); /* convert a multi-byte
- * string to a wchar */
- int (*mblen) (); /* returns the length of a multi-byte word */
-} pg_wchar_tbl;
+ int (*mb2wchar_with_len) (); /* convert a multi-byte
+ * string to a wchar */
+ int (*mblen) (); /* returns the length of a multi-byte word */
+} pg_wchar_tbl;
extern pg_wchar_tbl pg_wchar_table[];
@@ -110,25 +191,25 @@ extern pg_wchar_tbl pg_wchar_table[];
*/
typedef struct
{
- unsigned int utf; /* UTF-8 */
- unsigned int code; /* local code */
-} pg_utf_to_local;
+ unsigned int utf; /* UTF-8 */
+ unsigned int code; /* local code */
+} pg_utf_to_local;
/*
* local code to UTF-8 conversion map
*/
typedef struct
{
- unsigned int code; /* local code */
- unsigned int utf; /* UTF-8 */
-} pg_local_to_utf;
+ unsigned int code; /* local code */
+ unsigned int utf; /* UTF-8 */
+} pg_local_to_utf;
extern int pg_mb2wchar(const unsigned char *, pg_wchar *);
extern int pg_mb2wchar_with_len(const unsigned char *, pg_wchar *, int);
extern int pg_char_and_wchar_strcmp(const char *, const pg_wchar *);
extern int pg_wchar_strncmp(const pg_wchar *, const pg_wchar *, size_t);
extern int pg_char_and_wchar_strncmp(const char *, const pg_wchar *, size_t);
-extern size_t pg_wchar_strlen(const pg_wchar *);
+extern size_t pg_wchar_strlen(const pg_wchar *);
extern int pg_mblen(const unsigned char *);
extern int pg_encoding_mblen(int, const unsigned char *);
extern int pg_mule_mblen(const unsigned char *);
@@ -137,25 +218,25 @@ extern int pg_mbstrlen(const unsigned char *);
extern int pg_mbstrlen_with_len(const unsigned char *, int);
extern int pg_mbcliplen(const unsigned char *, int, int);
extern int pg_mbcharcliplen(const unsigned char *, int, int);
-extern pg_encoding_conv_tbl *pg_get_encent_by_encoding(int);
-extern int pg_set_client_encoding(int);
-extern int pg_get_client_encoding(void);
-extern unsigned char *pg_client_to_server(unsigned char *, int);
-extern unsigned char *pg_server_to_client(unsigned char *, int);
-extern int pg_valid_client_encoding(const char *);
-extern pg_encoding_conv_tbl *pg_get_enc_ent(int);
+
+extern int pg_set_client_encoding(int);
+extern int pg_get_client_encoding(void);
+extern const char *pg_get_client_encoding_name(void);
+
+extern void SetDatabaseEncoding(int);
+extern int GetDatabaseEncoding(void);
+extern const char *GetDatabaseEncodingName(void);
+
+extern int pg_valid_client_encoding(const char *name);
+extern int pg_valid_server_encoding(const char *name);
+
extern int pg_utf_mblen(const unsigned char *);
extern int pg_find_encoding_converters(int, int, void (**)(), void (**)());
extern unsigned char *pg_do_encoding_conversion(unsigned char *, int, void (*)(), void (*)());
-/* internally-used versions of functions. The PG_xxx forms of these
- * functions have fmgr-compatible interfaves.
- */
-extern const char *pg_encoding_to_char(int);
-extern int pg_char_to_encoding(const char *);
+extern unsigned char *pg_client_to_server(unsigned char *, int);
+extern unsigned char *pg_server_to_client(unsigned char *, int);
-extern int GetDatabaseEncoding(void);
-extern void SetDatabaseEncoding(int);
extern unsigned short BIG5toCNS(unsigned short, unsigned char *);
extern unsigned short CNStoBIG5(unsigned short, unsigned char);
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h
index bb91e1166e1..cb3a0a8913b 100644
--- a/src/include/utils/builtins.h
+++ b/src/include/utils/builtins.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: builtins.h,v 1.162 2001/08/15 07:07:40 ishii Exp $
+ * $Id: builtins.h,v 1.163 2001/09/06 04:57:29 ishii Exp $
*
*-------------------------------------------------------------------------
*/
@@ -579,8 +579,11 @@ extern Datum RI_FKey_setdefault_upd(PG_FUNCTION_ARGS);
* since pg_proc.h has references to them.
*/
extern Datum getdatabaseencoding(PG_FUNCTION_ARGS);
+extern Datum database_character_set(PG_FUNCTION_ARGS);
extern Datum PG_encoding_to_char(PG_FUNCTION_ARGS);
extern Datum PG_char_to_encoding(PG_FUNCTION_ARGS);
+extern Datum PG_character_set_name(PG_FUNCTION_ARGS);
+extern Datum PG_character_set_id(PG_FUNCTION_ARGS);
extern Datum pg_convert(PG_FUNCTION_ARGS);
extern Datum pg_convert2(PG_FUNCTION_ARGS);