diff --git a/doc/src/sgml/charset.sgml b/doc/src/sgml/charset.sgml index 4356e6d01e6a7a626cf5de4d6c79b37a4bcfa695..a4093a2382f5658c3852bec57e69622704386d24 100644 --- a/doc/src/sgml/charset.sgml +++ b/doc/src/sgml/charset.sgml @@ -1,4 +1,4 @@ -<!-- $Header: /cvsroot/pgsql/doc/src/sgml/charset.sgml,v 2.26 2002/08/08 08:21:52 ishii Exp $ --> +<!-- $Header: /cvsroot/pgsql/doc/src/sgml/charset.sgml,v 2.27 2002/08/14 02:45:09 ishii Exp $ --> <chapter id="charset"> <title>Localization</> @@ -649,8 +649,7 @@ $ <userinput>psql -l</userinput> </row> <row> <entry><literal>LATIN5</literal></entry> - <entry><literal>LATIN5</literal>, <literal>UNICODE</literal>, - <literal>MULE_INTERNAL</literal> + <entry><literal>LATIN5</literal>, <literal>UNICODE</literal> </entry> </row> <row> @@ -687,6 +686,7 @@ $ <userinput>psql -l</userinput> <entry><literal>ISO_8859_5</literal></entry> <entry><literal>ISO_8859_5</literal>, <literal>UNICODE</literal>, + <literal>MULE_INTERNAL</literal>, <literal>WIN</literal>, <literal>ALT</literal>, <literal>KOI8</literal> @@ -727,13 +727,17 @@ $ <userinput>psql -l</userinput> <literal>WIN1256</literal>, <literal>TCVN</literal>, <literal>WIN874</literal>, + <literal>GB18030</literal>, + <literal>WIN1250</literal> </entry> </row> <row> <entry><literal>MULE_INTERNAL</literal></entry> <entry><literal>EUC_JP</literal>, <literal>SJIS</literal>, <literal>EUC_KR</literal>, <literal>EUC_CN</literal>, <literal>EUC_TW</literal>, <literal>BIG5</literal>, <literal>LATIN1</literal> to <literal>LATIN5</literal>, - <literal>WIN</literal>, <literal>ALT</literal>, <literal>WIN1250</literal></entry> + <literal>WIN</literal>, <literal>ALT</literal>, + <literal>WIN1250</literal>, + <literal>BIG5</literal>, <literal>ISO_8859_5</literal>, <literal>KOI8</literal></entry> </row> <row> <entry><literal>KOI8</literal></entry> diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 475af47464973861b7cd7d9594004cf5bc95dcef..f136088fe84ea2253c6f013c0aaffb52852ed6be 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.110 2002/08/09 16:45:13 tgl Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.111 2002/08/14 02:45:09 ishii Exp $ PostgreSQL documentation --> @@ -970,9 +970,16 @@ PostgreSQL documentation <entry>destination encoding</entry> </row> </thead> + <tbody> <row> - <entry>ascii_to_utf8</entry> + <entry>ascii_to_mic</entry> + <entry>SQL_ASCII</entry> + <entry>MULE_INTERNAL</entry> + </row> + + <row> + <entry>ascii_to_utf_8</entry> <entry>SQL_ASCII</entry> <entry>UNICODE</entry> </row> @@ -990,13 +997,19 @@ PostgreSQL documentation </row> <row> - <entry>big5_to_utf8</entry> + <entry>big5_to_utf_8</entry> <entry>BIG5</entry> <entry>UNICODE</entry> </row> <row> - <entry>euc_cn_to_utf8</entry> + <entry>euc_cn_to_mic</entry> + <entry>EUC_CN</entry> + <entry>MULE_INTERNAL</entry> + </row> + + <row> + <entry>euc_cn_to_utf_8</entry> <entry>EUC_CN</entry> <entry>UNICODE</entry> </row> @@ -1014,13 +1027,19 @@ PostgreSQL documentation </row> <row> - <entry>euc_jp_to_utf8</entry> + <entry>euc_jp_to_utf_8</entry> <entry>EUC_JP</entry> <entry>UNICODE</entry> </row> <row> - <entry>euc_kr_to_utf8</entry> + <entry>euc_kr_to_mic</entry> + <entry>EUC_KR</entry> + <entry>MULE_INTERNAL</entry> + </row> + + <row> + <entry>euc_kr_to_utf_8</entry> <entry>EUC_KR</entry> <entry>UNICODE</entry> </row> @@ -1038,137 +1057,293 @@ PostgreSQL documentation </row> <row> - <entry>euc_tw_to_utf8</entry> + <entry>euc_tw_to_utf_8</entry> <entry>EUC_TW</entry> <entry>UNICODE</entry> </row> <row> - <entry>gb18030_to_utf8</entry> + <entry>gb18030_to_utf_8</entry> <entry>GB18030</entry> <entry>UNICODE</entry> </row> <row> - <entry>gbk_to_utf8</entry> + <entry>gbk_to_utf_8</entry> <entry>GBK</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_10_to_utf8</entry> + <entry>iso_8859_10_to_utf_8</entry> <entry>LATIN6</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_13_to_utf8</entry> + <entry>iso_8859_13_to_utf_8</entry> <entry>LATIN7</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_14_to_utf8</entry> + <entry>iso_8859_14_to_utf_8</entry> <entry>LATIN8</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_15_to_utf8</entry> + <entry>iso_8859_15_to_utf_8</entry> <entry>LATIN9</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_16_to_utf8</entry> + <entry>iso_8859_16_to_utf_8</entry> <entry>LATIN10</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_1_to_utf8</entry> + <entry>iso_8859_1_to_mic</entry> + <entry>LATIN1</entry> + <entry>MULE_INTERNAL</entry> + </row> + + <row> + <entry>iso_8859_1_to_utf_8</entry> <entry>LATIN1</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_2_to_utf8</entry> + <entry>iso_8859_2_to_mic</entry> + <entry>LATIN2</entry> + <entry>MULE_INTERNAL</entry> + </row> + + <row> + <entry>iso_8859_2_to_utf_8</entry> <entry>LATIN2</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_3_to_utf8</entry> + <entry>iso_8859_2_to_win1250</entry> + <entry>LATIN2</entry> + <entry>WIN1250</entry> + </row> + + <row> + <entry>iso_8859_3_to_mic</entry> + <entry>LATIN3</entry> + <entry>MULE_INTERNAL</entry> + </row> + + <row> + <entry>iso_8859_3_to_utf_8</entry> <entry>LATIN3</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_4_to_utf8</entry> + <entry>iso_8859_4_to_mic</entry> + <entry>LATIN4</entry> + <entry>MULE_INTERNAL</entry> + </row> + + <row> + <entry>iso_8859_4_to_utf_8</entry> <entry>LATIN4</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_5_to_utf8</entry> + <entry>iso_8859_5_to_koi8r</entry> + <entry>ISO_8859_5</entry> + <entry>KOI8</entry> + </row> + + <row> + <entry>iso_8859_5_to_mic</entry> + <entry>ISO_8859_5</entry> + <entry>MULE_INTERNAL</entry> + </row> + + <row> + <entry>iso_8859_5_to_utf_8</entry> <entry>ISO_8859_5</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_6_to_utf8</entry> + <entry>iso_8859_5_to_win1251</entry> + <entry>ISO_8859_5</entry> + <entry>WIN</entry> + </row> + + <row> + <entry>iso_8859_5_to_win866</entry> + <entry>ISO_8859_5</entry> + <entry>ALT</entry> + </row> + + <row> + <entry>iso_8859_6_to_utf_8</entry> <entry>ISO_8859_6</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_7_to_utf8</entry> + <entry>iso_8859_7_to_utf_8</entry> <entry>ISO_8859_7</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_8_to_utf8</entry> + <entry>iso_8859_8_to_utf_8</entry> <entry>ISO_8859_8</entry> <entry>UNICODE</entry> </row> <row> - <entry>iso8859_9_to_utf8</entry> + <entry>iso_8859_9_to_utf_8</entry> <entry>LATIN5</entry> <entry>UNICODE</entry> </row> <row> - <entry>johab_to_utf8</entry> + <entry>johab_to_utf_8</entry> <entry>JOHAB</entry> <entry>UNICODE</entry> </row> + <row> + <entry>koi8r_to_iso_8859_5</entry> + <entry>KOI8</entry> + <entry>ISO_8859_5</entry> + </row> + + <row> + <entry>koi8r_to_mic</entry> + <entry>KOI8</entry> + <entry>MULE_INTERNAL</entry> + </row> + + <row> + <entry>koi8r_to_utf_8</entry> + <entry>KOI8</entry> + <entry>UNICODE</entry> + </row> + + <row> + <entry>koi8r_to_win1251</entry> + <entry>KOI8</entry> + <entry>WIN</entry> + </row> + + <row> + <entry>koi8r_to_win866</entry> + <entry>KOI8</entry> + <entry>ALT</entry> + </row> + + <row> + <entry>mic_to_ascii</entry> + <entry>MULE_INTERNAL</entry> + <entry>SQL_ASCII</entry> + </row> + <row> <entry>mic_to_big5</entry> <entry>MULE_INTERNAL</entry> <entry>BIG5</entry> </row> + <row> + <entry>mic_to_euc_cn</entry> + <entry>MULE_INTERNAL</entry> + <entry>EUC_CN</entry> + </row> + <row> <entry>mic_to_euc_jp</entry> <entry>MULE_INTERNAL</entry> <entry>EUC_JP</entry> </row> + <row> + <entry>mic_to_euc_kr</entry> + <entry>MULE_INTERNAL</entry> + <entry>EUC_KR</entry> + </row> + <row> <entry>mic_to_euc_tw</entry> <entry>MULE_INTERNAL</entry> <entry>EUC_TW</entry> </row> + <row> + <entry>mic_to_iso_8859_1</entry> + <entry>MULE_INTERNAL</entry> + <entry>LATIN1</entry> + </row> + + <row> + <entry>mic_to_iso_8859_2</entry> + <entry>MULE_INTERNAL</entry> + <entry>LATIN2</entry> + </row> + + <row> + <entry>mic_to_iso_8859_3</entry> + <entry>MULE_INTERNAL</entry> + <entry>LATIN3</entry> + </row> + + <row> + <entry>mic_to_iso_8859_4</entry> + <entry>MULE_INTERNAL</entry> + <entry>LATIN4</entry> + </row> + + <row> + <entry>mic_to_iso_8859_5</entry> + <entry>MULE_INTERNAL</entry> + <entry>ISO_8859_5</entry> + </row> + + <row> + <entry>mic_to_koi8r</entry> + <entry>MULE_INTERNAL</entry> + <entry>KOI8</entry> + </row> + <row> <entry>mic_to_sjis</entry> <entry>MULE_INTERNAL</entry> <entry>SJIS</entry> </row> + <row> + <entry>mic_to_win1250</entry> + <entry>MULE_INTERNAL</entry> + <entry>WIN1250</entry> + </row> + + <row> + <entry>mic_to_win1251</entry> + <entry>MULE_INTERNAL</entry> + <entry>WIN</entry> + </row> + + <row> + <entry>mic_to_win866</entry> + <entry>MULE_INTERNAL</entry> + <entry>ALT</entry> + </row> + <row> <entry>sjis_to_euc_jp</entry> <entry>SJIS</entry> @@ -1182,179 +1357,305 @@ PostgreSQL documentation </row> <row> - <entry>sjis_to_utf8</entry> + <entry>sjis_to_utf_8</entry> <entry>SJIS</entry> <entry>UNICODE</entry> </row> <row> - <entry>tcvn_to_utf8</entry> + <entry>tcvn_to_utf_8</entry> <entry>TCVN</entry> <entry>UNICODE</entry> </row> <row> - <entry>uhc_to_utf8</entry> + <entry>uhc_to_utf_8</entry> <entry>UHC</entry> <entry>UNICODE</entry> </row> <row> - <entry>utf8_to_ascii</entry> + <entry>utf_8_to_ascii</entry> <entry>UNICODE</entry> <entry>SQL_ASCII</entry> </row> <row> - <entry>utf8_to_big5</entry> + <entry>utf_8_to_big5</entry> <entry>UNICODE</entry> <entry>BIG5</entry> </row> <row> - <entry>utf8_to_euc_cn</entry> + <entry>utf_8_to_euc_cn</entry> <entry>UNICODE</entry> <entry>EUC_CN</entry> </row> <row> - <entry>utf8_to_euc_jp</entry> + <entry>utf_8_to_euc_jp</entry> <entry>UNICODE</entry> <entry>EUC_JP</entry> </row> <row> - <entry>utf8_to_euc_kr</entry> + <entry>utf_8_to_euc_kr</entry> <entry>UNICODE</entry> <entry>EUC_KR</entry> </row> <row> - <entry>utf8_to_euc_tw</entry> + <entry>utf_8_to_euc_tw</entry> <entry>UNICODE</entry> <entry>EUC_TW</entry> </row> <row> - <entry>utf8_to_gb18030</entry> + <entry>utf_8_to_gb18030</entry> <entry>UNICODE</entry> <entry>GB18030</entry> </row> <row> - <entry>utf8_to_gbk</entry> + <entry>utf_8_to_gbk</entry> <entry>UNICODE</entry> <entry>GBK</entry> </row> <row> - <entry>utf8_to_iso8859_1</entry> + <entry>utf_8_to_iso_8859_1</entry> <entry>UNICODE</entry> <entry>LATIN1</entry> </row> <row> - <entry>utf8_to_iso8859_10</entry> + <entry>utf_8_to_iso_8859_10</entry> <entry>UNICODE</entry> <entry>LATIN6</entry> </row> <row> - <entry>utf8_to_iso8859_13</entry> + <entry>utf_8_to_iso_8859_13</entry> <entry>UNICODE</entry> <entry>LATIN7</entry> </row> <row> - <entry>utf8_to_iso8859_14</entry> + <entry>utf_8_to_iso_8859_14</entry> <entry>UNICODE</entry> <entry>LATIN8</entry> </row> <row> - <entry>utf8_to_iso8859_15</entry> + <entry>utf_8_to_iso_8859_15</entry> <entry>UNICODE</entry> <entry>LATIN9</entry> </row> <row> - <entry>utf8_to_iso8859_16</entry> + <entry>utf_8_to_iso_8859_16</entry> <entry>UNICODE</entry> <entry>LATIN10</entry> </row> <row> - <entry>utf8_to_iso8859_2</entry> + <entry>utf_8_to_iso_8859_2</entry> <entry>UNICODE</entry> <entry>LATIN2</entry> </row> <row> - <entry>utf8_to_iso8859_3</entry> + <entry>utf_8_to_iso_8859_3</entry> <entry>UNICODE</entry> <entry>LATIN3</entry> </row> <row> - <entry>utf8_to_iso8859_4</entry> + <entry>utf_8_to_iso_8859_4</entry> <entry>UNICODE</entry> <entry>LATIN4</entry> </row> <row> - <entry>utf8_to_iso8859_5</entry> + <entry>utf_8_to_iso_8859_5</entry> <entry>UNICODE</entry> <entry>ISO_8859_5</entry> </row> <row> - <entry>utf8_to_iso8859_6</entry> + <entry>utf_8_to_iso_8859_6</entry> <entry>UNICODE</entry> <entry>ISO_8859_6</entry> </row> <row> - <entry>utf8_to_iso8859_7</entry> + <entry>utf_8_to_iso_8859_7</entry> <entry>UNICODE</entry> <entry>ISO_8859_7</entry> </row> <row> - <entry>utf8_to_iso8859_8</entry> + <entry>utf_8_to_iso_8859_8</entry> <entry>UNICODE</entry> <entry>ISO_8859_8</entry> </row> <row> - <entry>utf8_to_iso8859_9</entry> + <entry>utf_8_to_iso_8859_9</entry> <entry>UNICODE</entry> <entry>LATIN5</entry> </row> <row> - <entry>utf8_to_johab</entry> + <entry>utf_8_to_johab</entry> <entry>UNICODE</entry> <entry>JOHAB</entry> </row> <row> - <entry>utf8_to_sjis</entry> + <entry>utf_8_to_koi8r</entry> + <entry>UNICODE</entry> + <entry>KOI8</entry> + </row> + + <row> + <entry>utf_8_to_sjis</entry> <entry>UNICODE</entry> <entry>SJIS</entry> </row> <row> - <entry>utf8_to_tcvn</entry> + <entry>utf_8_to_tcvn</entry> <entry>UNICODE</entry> <entry>TCVN</entry> </row> <row> - <entry>utf8_to_uhc</entry> + <entry>utf_8_to_uhc</entry> <entry>UNICODE</entry> <entry>UHC</entry> </row> + <row> + <entry>utf_8_to_win1250</entry> + <entry>UNICODE</entry> + <entry>WIN1250</entry> + </row> + + <row> + <entry>utf_8_to_win1251</entry> + <entry>UNICODE</entry> + <entry>WIN</entry> + </row> + + <row> + <entry>utf_8_to_win1256</entry> + <entry>UNICODE</entry> + <entry>WIN1256</entry> + </row> + + <row> + <entry>utf_8_to_win866</entry> + <entry>UNICODE</entry> + <entry>ALT</entry> + </row> + + <row> + <entry>utf_8_to_win874</entry> + <entry>UNICODE</entry> + <entry>WIN874</entry> + </row> + + <row> + <entry>win1250_to_iso_8859_2</entry> + <entry>WIN1250</entry> + <entry>LATIN2</entry> + </row> + + <row> + <entry>win1250_to_mic</entry> + <entry>WIN1250</entry> + <entry>MULE_INTERNAL</entry> + </row> + + <row> + <entry>win1250_to_utf_8</entry> + <entry>WIN1250</entry> + <entry>UNICODE</entry> + </row> + + <row> + <entry>win1251_to_iso_8859_5</entry> + <entry>WIN</entry> + <entry>ISO_8859_5</entry> + </row> + + <row> + <entry>win1251_to_koi8r</entry> + <entry>WIN</entry> + <entry>KOI8</entry> + </row> + + <row> + <entry>win1251_to_mic</entry> + <entry>WIN</entry> + <entry>MULE_INTERNAL</entry> + </row> + + <row> + <entry>win1251_to_utf_8</entry> + <entry>WIN</entry> + <entry>UNICODE</entry> + </row> + + <row> + <entry>win1251_to_win866</entry> + <entry>WIN</entry> + <entry>ALT</entry> + </row> + + <row> + <entry>win1256_to_utf_8</entry> + <entry>WIN1256</entry> + <entry>UNICODE</entry> + </row> + + <row> + <entry>win866_to_iso_8859_5</entry> + <entry>ALT</entry> + <entry>ISO_8859_5</entry> + </row> + + <row> + <entry>win866_to_koi8r</entry> + <entry>ALT</entry> + <entry>KOI8</entry> + </row> + + <row> + <entry>win866_to_mic</entry> + <entry>ALT</entry> + <entry>MULE_INTERNAL</entry> + </row> + + <row> + <entry>win866_to_utf_8</entry> + <entry>ALT</entry> + <entry>UNICODE</entry> + </row> + + <row> + <entry>win866_to_win1251</entry> + <entry>ALT</entry> + <entry>WIN</entry> + </row> + + <row> + <entry>win874_to_utf_8</entry> + <entry>WIN874</entry> + <entry>UNICODE</entry> + </row> + </tbody> </tgroup> </table> diff --git a/src/backend/utils/mb/conv.c b/src/backend/utils/mb/conv.c index e77167632771634585f3558e82480ee773010489..98b6b27db855f77d65586bde4407d4699b3c83b8 100644 --- a/src/backend/utils/mb/conv.c +++ b/src/backend/utils/mb/conv.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/mb/conv.c,v 1.41 2002/07/19 11:09:25 ishii Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/mb/conv.c,v 1.42 2002/08/14 02:45:10 ishii Exp $ * *------------------------------------------------------------------------- */ @@ -34,117 +34,6 @@ pg_print_bogus_char(unsigned char **mic, unsigned char **p) } #ifdef NOT_USED -/* - * EUC_KR ---> MIC - */ -static void -euc_kr2mic(unsigned char *euc, unsigned char *p, int len) -{ - int c1; - - while (len > 0 && (c1 = *euc++)) - { - if (c1 & 0x80) - { - len -= 2; - *p++ = LC_KS5601; - *p++ = c1; - *p++ = *euc++; - } - else - { /* should be ASCII */ - len--; - *p++ = c1; - } - } - *p = '\0'; -} - -/* - * MIC ---> EUC_KR - */ -static void -mic2euc_kr(unsigned char *mic, unsigned char *p, int len) -{ - int c1; - - while (len > 0 && (c1 = *mic)) - { - len -= pg_mic_mblen(mic++); - - if (c1 == LC_KS5601) - { - *p++ = *mic++; - *p++ = *mic++; - } - else if (c1 > 0x7f) - { /* cannot convert to EUC_KR! */ - mic--; - pg_print_bogus_char(&mic, &p); - } - else - { /* should be ASCII */ - *p++ = c1; - } - } - *p = '\0'; -} - -/* - * EUC_CN ---> MIC - */ -static void -euc_cn2mic(unsigned char *euc, unsigned char *p, int len) -{ - int c1; - - while (len > 0 && (c1 = *euc++)) - { - if (c1 & 0x80) - { - len -= 2; - *p++ = LC_GB2312_80; - *p++ = c1; - *p++ = *euc++; - } - else - { /* should be ASCII */ - len--; - *p++ = c1; - } - } - *p = '\0'; -} - -/* - * MIC ---> EUC_CN - */ -static void -mic2euc_cn(unsigned char *mic, unsigned char *p, int len) -{ - int c1; - - while (len > 0 && (c1 = *mic)) - { - len -= pg_mic_mblen(mic++); - - if (c1 == LC_GB2312_80) - { - *p++ = *mic++; - *p++ = *mic++; - } - else if (c1 > 0x7f) - { /* cannot convert to EUC_CN! */ - mic--; - pg_print_bogus_char(&mic, &p); - } - else - { /* should be ASCII */ - *p++ = c1; - } - } - *p = '\0'; -} /* * GB18030 ---> MIC @@ -236,10 +125,12 @@ mic2gb18030(unsigned char *mic, unsigned char *p, int len) *p = '\0'; } +#endif + /* * LATINn ---> MIC */ -static void +void latin2mic(unsigned char *l, unsigned char *p, int len, int lc) { int c1; @@ -258,7 +149,7 @@ latin2mic(unsigned char *l, unsigned char *p, int len, int lc) /* * MIC ---> LATINn */ -static void +void mic2latin(unsigned char *mic, unsigned char *p, int len, int lc) { int c1; @@ -282,47 +173,6 @@ mic2latin(unsigned char *mic, unsigned char *p, int len, int lc) *p = '\0'; } -static void -latin12mic(unsigned char *l, unsigned char *p, int len) -{ - latin2mic(l, p, len, LC_ISO8859_1); -} -static void -mic2latin1(unsigned char *mic, unsigned char *p, int len) -{ - mic2latin(mic, p, len, LC_ISO8859_1); -} -static void -latin22mic(unsigned char *l, unsigned char *p, int len) -{ - latin2mic(l, p, len, LC_ISO8859_2); -} -static void -mic2latin2(unsigned char *mic, unsigned char *p, int len) -{ - mic2latin(mic, p, len, LC_ISO8859_2); -} -static void -latin32mic(unsigned char *l, unsigned char *p, int len) -{ - latin2mic(l, p, len, LC_ISO8859_3); -} -static void -mic2latin3(unsigned char *mic, unsigned char *p, int len) -{ - mic2latin(mic, p, len, LC_ISO8859_3); -} -static void -latin42mic(unsigned char *l, unsigned char *p, int len) -{ - latin2mic(l, p, len, LC_ISO8859_4); -} -static void -mic2latin4(unsigned char *mic, unsigned char *p, int len) -{ - mic2latin(mic, p, len, LC_ISO8859_4); -} -#endif /* * ASCII ---> MIC @@ -358,32 +208,6 @@ pg_mic2ascii(unsigned char *mic, unsigned char *p, int len) *p = '\0'; } -#ifdef NOT_USED -/* - * Cyrillic support - * currently supported Cyrillic encodings: - * - * KOI8-R (this is the charset for the mule internal code - * for Cyrillic) - * ISO-8859-5 - * Microsoft's CP1251(windows-1251) - * Alternativny Variant (MS-DOS CP866) - */ - -/* koi8r2mic: KOI8-R to Mule internal code */ -static void -koi8r2mic(unsigned char *l, unsigned char *p, int len) -{ - latin2mic(l, p, len, LC_KOI8_R); -} - -/* mic2koi8r: Mule internal code to KOI8-R */ -static void -mic2koi8r(unsigned char *mic, unsigned char *p, int len) -{ - mic2latin(mic, p, len, LC_KOI8_R); -} - /* * latin2mic_with_table: a generic single byte charset encoding * conversion from a local charset to the mule internal code. @@ -392,7 +216,7 @@ mic2koi8r(unsigned char *mic, unsigned char *p, int len) * starting from 128 (0x80). each entry in the table * holds the corresponding code point for the mule internal code. */ -static void +void latin2mic_with_table( unsigned char *l, /* local charset string (source) */ unsigned char *p, /* pointer to store mule internal @@ -435,7 +259,7 @@ latin2mic_with_table( * each entry in the table * holds the corresponding code point for the local code. */ -static void +void mic2latin_with_table( unsigned char *mic, /* mule internal code * (source) */ @@ -473,221 +297,6 @@ mic2latin_with_table( *p = '\0'; } -/* iso2mic: ISO-8859-5 to Mule internal code */ -static void -iso2mic(unsigned char *l, unsigned char *p, int len) -{ - static unsigned char iso2koi[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, - 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, - 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, - 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, - 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, - 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, - 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, - 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; - - latin2mic_with_table(l, p, len, LC_KOI8_R, iso2koi); -} - -/* mic2iso: Mule internal code to ISO8859-5 */ -static void -mic2iso(unsigned char *mic, unsigned char *p, int len) -{ - static unsigned char koi2iso[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xee, 0xd0, 0xd1, 0xe6, 0xd4, 0xd5, 0xe4, 0xd3, - 0xe5, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, - 0xdf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xd6, 0xd2, - 0xec, 0xeb, 0xd7, 0xe8, 0xed, 0xe9, 0xe7, 0xea, - 0xce, 0xb0, 0xb1, 0xc6, 0xb4, 0xb5, 0xc4, 0xb3, - 0xc5, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, - 0xbf, 0xcf, 0xc0, 0xc1, 0xc2, 0xc3, 0xb6, 0xb2, - 0xcc, 0xcb, 0xb7, 0xc8, 0xcd, 0xc9, 0xc7, 0xca - }; - - mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2iso); -} - -/* win2mic: CP1251 to Mule internal code */ -static void -win12512mic(unsigned char *l, unsigned char *p, int len) -{ - static unsigned char win2koi[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, - 0xb3, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, 0xb7, - 0x00, 0x00, 0xb6, 0xa6, 0xad, 0x00, 0x00, 0x00, - 0xa3, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x00, 0xa7, - 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, - 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, - 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, - 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, - 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, - 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, - 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, - 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1 - }; - - latin2mic_with_table(l, p, len, LC_KOI8_R, win2koi); -} - -/* mic2win: Mule internal code to CP1251 */ -static void -mic2win1251(unsigned char *mic, unsigned char *p, int len) -{ - static unsigned char koi2win[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xb8, 0xba, 0x00, 0xb3, 0xbf, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xa8, 0xaa, 0x00, 0xb2, 0xaf, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, - 0xfe, 0xe0, 0xe1, 0xf6, 0xe4, 0xe5, 0xf4, 0xe3, - 0xf5, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, - 0xef, 0xff, 0xf0, 0xf1, 0xf2, 0xf3, 0xe6, 0xe2, - 0xfc, 0xfb, 0xe7, 0xf8, 0xfd, 0xf9, 0xf7, 0xfa, - 0xde, 0xc0, 0xc1, 0xd6, 0xc4, 0xc5, 0xd4, 0xc3, - 0xd5, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, - 0xcf, 0xdf, 0xd0, 0xd1, 0xd2, 0xd3, 0xc6, 0xc2, - 0xdc, 0xdb, 0xc7, 0xd8, 0xdd, 0xd9, 0xd7, 0xda - }; - - mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2win); -} - -/* alt2mic: CP866 to Mule internal code */ -static void -alt2mic(unsigned char *l, unsigned char *p, int len) -{ - static unsigned char alt2koi[] = { - 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, - 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, - 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, - 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, - 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, - 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, - 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, - 0xb3, 0xa3, 0xb4, 0xa4, 0xb7, 0xa7, 0x00, 0x00, - 0xb6, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; - - latin2mic_with_table(l, p, len, LC_KOI8_R, alt2koi); -} - -/* mic2alt: Mule internal code to CP866 */ -static void -mic2alt(unsigned char *mic, unsigned char *p, int len) -{ - static unsigned char koi2alt[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xf1, 0xf3, 0x00, 0xf9, 0xf5, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xf0, 0xf2, 0x00, 0xf8, 0xf4, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, - 0xee, 0xa0, 0xa1, 0xe6, 0xa4, 0xa5, 0xe4, 0xa3, - 0xe5, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, - 0xaf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xa6, 0xa2, - 0xec, 0xeb, 0xa7, 0xe8, 0xed, 0xe9, 0xe7, 0xea, - 0x9e, 0x80, 0x81, 0x96, 0x84, 0x85, 0x94, 0x83, - 0x95, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, - 0x8f, 0x9f, 0x90, 0x91, 0x92, 0x93, 0x86, 0x82, - 0x9c, 0x9b, 0x87, 0x98, 0x9d, 0x99, 0x97, 0x9a - }; - - mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2alt); -} - -/* - * end of Cyrillic support - */ - - -/*----------------------------------------------------------------- - * WIN1250 - * Microsoft's CP1250(windows-1250) - *-----------------------------------------------------------------*/ -static void -win12502mic(unsigned char *l, unsigned char *p, int len) -{ - static unsigned char win1250_2_iso88592[] = { - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0xA9, 0x8B, 0xA6, 0xAB, 0xAE, 0xAC, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0xB9, 0x9B, 0xB6, 0xBB, 0xBE, 0xBC, - 0xA0, 0xB7, 0xA2, 0xA3, 0xA4, 0xA1, 0x00, 0xA7, - 0xA8, 0x00, 0xAA, 0x00, 0x00, 0xAD, 0x00, 0xAF, - 0xB0, 0x00, 0xB2, 0xB3, 0xB4, 0x00, 0x00, 0x00, - 0xB8, 0xB1, 0xBA, 0x00, 0xA5, 0xBD, 0xB5, 0xBF, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF - }; - - latin2mic_with_table(l, p, len, LC_ISO8859_2, win1250_2_iso88592); -} -static void -mic2win1250(unsigned char *mic, unsigned char *p, int len) -{ - static unsigned char iso88592_2_win1250[] = { - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x00, 0x8B, 0x00, 0x00, 0x00, 0x00, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x00, - 0xA0, 0xA5, 0xA2, 0xA3, 0xA4, 0xBC, 0x8C, 0xA7, - 0xA8, 0x8A, 0xAA, 0x8D, 0x8F, 0xAD, 0x8E, 0xAF, - 0xB0, 0xB9, 0xB2, 0xB3, 0xB4, 0xBE, 0x9C, 0xA1, - 0xB8, 0x9A, 0xBA, 0x9D, 0x9F, 0xBD, 0x9E, 0xBF, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF - }; - - mic2latin_with_table(mic, p, len, LC_ISO8859_2, iso88592_2_win1250); -} -#endif - /* * comparison routine for bsearch() * this routine is intended for UTF-8 -> local code @@ -758,7 +367,7 @@ UtfToLocal(unsigned char *utf, unsigned char *iso, sizeof(pg_utf_to_local), compare1); if (p == NULL) { - elog(WARNING, "utf_to_local: could not convert UTF-8 (0x%04x). Ignored", iutf); + elog(WARNING, "UtfToLocal: could not convert UTF-8 (0x%04x). Ignored", iutf); continue; } if (p->code & 0xff000000) @@ -773,43 +382,6 @@ UtfToLocal(unsigned char *utf, unsigned char *iso, *iso = '\0'; } -#ifdef NOT_USED -/* - * Cyrillic charsets - */ - -/* - * UTF-8 --->KOI8-R - */ -static void -utf_to_KOI8R(unsigned char *utf, unsigned char *iso, int len) - -{ - utf_to_local(utf, iso, ULmap_KOI8R, sizeof(ULmap_KOI8R) / sizeof(pg_utf_to_local), len); -} - -/* - * UTF-8 --->WIN1251 - */ -static void -utf_to_WIN1251(unsigned char *utf, unsigned char *iso, int len) - -{ - utf_to_local(utf, iso, ULmap_WIN1251, sizeof(ULmap_WIN1251) / sizeof(pg_utf_to_local), len); -} - -/* - * UTF-8 --->ALT - */ -static void -utf_to_ALT(unsigned char *utf, unsigned char *iso, int len) - -{ - utf_to_local(utf, iso, ULmap_ALT, sizeof(ULmap_ALT) / sizeof(pg_utf_to_local), len); -} - -#endif - /* * local code ---> UTF-8 */ @@ -859,7 +431,7 @@ LocalToUtf(unsigned char *iso, unsigned char *utf, sizeof(pg_local_to_utf), compare2); if (p == NULL) { - elog(WARNING, "local_to_utf: could not convert (0x%04x) %s to UTF-8. Ignored", + elog(WARNING, "LocalToUtf: could not convert (0x%04x) %s to UTF-8. Ignored", iiso, (&pg_enc2name_tbl[encoding])->name); continue; } @@ -874,96 +446,3 @@ LocalToUtf(unsigned char *iso, unsigned char *utf, } *utf = '\0'; } - -#ifdef NOT_USED -/* - * KOI8-R ---> UTF-8 - */ -static void -KOI8R_to_utf(unsigned char *iso, unsigned char *utf, int len) -{ - local_to_utf(iso, utf, LUmapKOI8R, sizeof(LUmapKOI8R) / sizeof(pg_local_to_utf), PG_KOI8R, len); -} - -/* - * WIN1251 ---> UTF-8 - */ -static void -WIN1251_to_utf(unsigned char *iso, unsigned char *utf, int len) -{ - local_to_utf(iso, utf, LUmapWIN1251, sizeof(LUmapWIN1251) / sizeof(pg_local_to_utf), PG_WIN1251, len); -} - -/* - * ALT ---> UTF-8 - */ -static void -ALT_to_utf(unsigned char *iso, unsigned char *utf, int len) -{ - local_to_utf(iso, utf, LUmapALT, sizeof(LUmapALT) / sizeof(pg_local_to_utf), PG_ALT, len); -} - -/* - * UTF-8 ---> WIN1250 - */ -static void -utf_to_win1250(unsigned char *utf, unsigned char *euc, int len) - -{ - utf_to_local(utf, euc, ULmapWIN1250, - sizeof(ULmapWIN1250) / sizeof(pg_utf_to_local), len); -} - -/* - * WIN1250 ---> UTF-8 - */ -static void -win1250_to_utf(unsigned char *euc, unsigned char *utf, int len) -{ - local_to_utf(euc, utf, LUmapWIN1250, - sizeof(LUmapWIN1250) / sizeof(pg_local_to_utf), PG_WIN1250, len); -} - -/* - * UTF-8 ---> WIN1256 - */ -static void -utf_to_win1256(unsigned char *utf, unsigned char *euc, int len) - -{ - utf_to_local(utf, euc, ULmapWIN1256, - sizeof(ULmapWIN1256) / sizeof(pg_utf_to_local), len); -} - -/* - * WIN1256 ---> UTF-8 - */ -static void -win1256_to_utf(unsigned char *euc, unsigned char *utf, int len) -{ - local_to_utf(euc, utf, LUmapWIN1256, - sizeof(LUmapWIN1256) / sizeof(pg_local_to_utf), PG_WIN1256, len); -} - -/* - * UTF-8 ---> WIN874 - */ -static void -utf_to_win874(unsigned char *utf, unsigned char *euc, int len) - -{ - utf_to_local(utf, euc, ULmapWIN874, - sizeof(ULmapWIN874) / sizeof(pg_utf_to_local), len); -} - -/* - * WIN874 ---> UTF-8 - */ -static void -win874_to_utf(unsigned char *euc, unsigned char *utf, int len) -{ - local_to_utf(euc, utf, LUmapWIN874, - sizeof(LUmapWIN874) / sizeof(pg_local_to_utf), PG_WIN874, len); -} - -#endif diff --git a/src/backend/utils/mb/conversion_procs/Makefile b/src/backend/utils/mb/conversion_procs/Makefile index a1ab66bc282b669d51354a726907f84712ea37b0..75436d5dee9b502d8af76eec195d2869a4d318aa 100644 --- a/src/backend/utils/mb/conversion_procs/Makefile +++ b/src/backend/utils/mb/conversion_procs/Makefile @@ -4,7 +4,7 @@ # Makefile for utils/mb/conversion_procs # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/Makefile,v 1.3 2002/08/06 05:40:45 ishii Exp $ +# $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/Makefile,v 1.4 2002/08/14 02:45:10 ishii Exp $ # #------------------------------------------------------------------------- @@ -18,79 +18,131 @@ SQLSCRIPT = conversion_create.sql REGRESSION_SCRIPT = conversion.sql DIRS = \ - utf8_and_ascii utf8_and_iso8859_1 \ - utf8_and_euc_jp utf8_and_euc_kr utf8_and_euc_cn utf8_and_euc_tw \ - utf8_and_sjis utf8_and_big5 utf8_and_gbk utf8_and_gb18030 \ - utf8_and_uhc utf8_and_johab utf8_and_tcvn utf8_and_iso8859 \ - euc_jp_and_sjis euc_tw_and_big5 + ascii_and_mic cyrillic_and_mic euc_cn_and_mic euc_jp_and_sjis \ + euc_kr_and_mic euc_tw_and_big5 latin2_and_win1250 latin_and_mic \ + utf8_and_ascii utf8_and_big5 utf8_and_cyrillic utf8_and_euc_cn \ + utf8_and_euc_jp utf8_and_euc_kr utf8_and_euc_tw utf8_and_gb18030 \ + utf8_and_gbk utf8_and_iso8859 utf8_and_iso8859_1 utf8_and_johab \ + utf8_and_sjis utf8_and_tcvn utf8_and_uhc utf8_and_win1250 \ + utf8_and_win1256 utf8_and_win874 +# conversion_name source_encoding destination_encoding function object CONVERSIONS = \ - utf8_to_ascii UNICODE SQL_ASCII utf8_to_ascii utf8_and_ascii \ - ascii_to_utf8 SQL_ASCII UNICODE ascii_to_utf8 utf8_and_ascii \ - utf8_to_iso8859_1 UNICODE LATIN1 utf8_to_iso8859_1 utf8_and_iso8859_1 \ - iso8859_1_to_utf8 LATIN1 UNICODE iso8859_1_to_utf8 utf8_and_iso8859_1 \ - euc_jp_to_utf8 EUC_JP UNICODE euc_jp_to_utf8 utf8_and_euc_jp \ - utf8_to_euc_jp UNICODE EUC_JP utf8_to_euc_jp utf8_and_euc_jp \ - euc_kr_to_utf8 EUC_KR UNICODE euc_kr_to_utf8 utf8_and_euc_kr \ - utf8_to_euc_kr UNICODE EUC_KR utf8_to_euc_kr utf8_and_euc_kr \ - euc_cn_to_utf8 EUC_CN UNICODE euc_cn_to_utf8 utf8_and_euc_cn \ - utf8_to_euc_cn UNICODE EUC_CN utf8_to_euc_cn utf8_and_euc_cn \ - euc_tw_to_utf8 EUC_TW UNICODE euc_tw_to_utf8 utf8_and_euc_tw \ - utf8_to_euc_tw UNICODE EUC_TW utf8_to_euc_tw utf8_and_euc_tw \ - sjis_to_utf8 SJIS UNICODE sjis_to_utf8 utf8_and_sjis \ - utf8_to_sjis UNICODE SJIS utf8_to_sjis utf8_and_sjis \ - big5_to_utf8 BIG5 UNICODE big5_to_utf8 utf8_and_big5 \ - utf8_to_big5 UNICODE BIG5 utf8_to_big5 utf8_and_big5 \ - gbk_to_utf8 GBK UNICODE gbk_to_utf8 utf8_and_gbk \ - utf8_to_gbk UNICODE GBK utf8_to_gbk utf8_and_gbk \ - gb18030_to_utf8 GB18030 UNICODE gb18030_to_utf8 utf8_and_gb18030 \ - utf8_to_gb18030 UNICODE GB18030 utf8_to_gb18030 utf8_and_gb18030 \ - uhc_to_utf8 UHC UNICODE uhc_to_utf8 utf8_and_uhc \ - utf8_to_uhc UNICODE UHC utf8_to_uhc utf8_and_uhc \ - johab_to_utf8 JOHAB UNICODE johab_to_utf8 utf8_and_johab \ - utf8_to_johab UNICODE JOHAB utf8_to_johab utf8_and_johab \ - tcvn_to_utf8 TCVN UNICODE tcvn_to_utf8 utf8_and_tcvn \ - utf8_to_tcvn UNICODE TCVN utf8_to_tcvn utf8_and_tcvn \ - utf8_to_iso8859_2 UNICODE LATIN2 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_2_to_utf8 LATIN2 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso8859_3 UNICODE LATIN3 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_3_to_utf8 LATIN3 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso8859_4 UNICODE LATIN4 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_4_to_utf8 LATIN4 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso8859_9 UNICODE LATIN5 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_9_to_utf8 LATIN5 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso8859_10 UNICODE LATIN6 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_10_to_utf8 LATIN6 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso8859_13 UNICODE LATIN7 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_13_to_utf8 LATIN7 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso8859_14 UNICODE LATIN8 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_14_to_utf8 LATIN8 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso8859_15 UNICODE LATIN9 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_15_to_utf8 LATIN9 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso8859_16 UNICODE LATIN10 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_16_to_utf8 LATIN10 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso8859_5 UNICODE ISO-8859-5 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_5_to_utf8 ISO-8859-5 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso8859_6 UNICODE ISO-8859-6 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_6_to_utf8 ISO-8859-6 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso8859_7 UNICODE ISO-8859-7 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_7_to_utf8 ISO-8859-7 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso8859_8 UNICODE ISO-8859-8 utf8_to_iso8859 utf8_and_iso8859 \ - iso8859_8_to_utf8 ISO-8859-8 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + ascii_to_mic SQL_ASCII MULE_INTERNAL ascii_to_mic ascii_and_mic \ + mic_to_ascii MULE_INTERNAL SQL_ASCII mic_to_ascii ascii_and_mic \ + koi8r_to_mic KOI8R MULE_INTERNAL koi8r_to_mic cyrillic_and_mic \ + mic_to_koi8r MULE_INTERNAL KOI8R mic_to_koi8r cyrillic_and_mic \ + iso_8859_5_to_mic ISO-8859-5 MULE_INTERNAL iso_to_mic cyrillic_and_mic \ + mic_to_iso_8859_5 MULE_INTERNAL ISO-8859-5 mic_to_iso cyrillic_and_mic \ + win1251_to_mic WIN1251 MULE_INTERNAL win1251_to_mic cyrillic_and_mic \ + mic_to_win1251 MULE_INTERNAL WIN1251 mic_to_win1251 cyrillic_and_mic \ + win866_to_mic ALT MULE_INTERNAL alt_to_mic cyrillic_and_mic \ + mic_to_win866 MULE_INTERNAL ALT mic_to_alt cyrillic_and_mic \ + koi8r_to_win1251 KOI8R WIN1251 koi8r_to_win1251 cyrillic_and_mic \ + win1251_to_koi8r WIN1251 KOI8R win1251_to_koi8r cyrillic_and_mic \ + koi8r_to_win866 KOI8R ALT koi8r_to_alt cyrillic_and_mic \ + win866_to_koi8r ALT KOI8R alt_to_koi8r cyrillic_and_mic \ + win866_to_win1251 ALT WIN1251 alt_to_win1251 cyrillic_and_mic \ + win1251_to_win866 WIN1251 ALT win1251_to_alt cyrillic_and_mic \ + iso_8859_5_to_koi8r ISO-8859-5 KOI8R iso_to_koi8r cyrillic_and_mic \ + koi8r_to_iso_8859_5 KOI8R ISO-8859-5 koi8r_to_iso cyrillic_and_mic \ + iso_8859_5_to_win1251 ISO-8859-5 WIN1251 iso_to_win1251 cyrillic_and_mic \ + win1251_to_iso_8859_5 WIN1251 ISO-8859-5 win1251_to_iso cyrillic_and_mic \ + iso_8859_5_to_win866 ISO-8859-5 ALT iso_to_alt cyrillic_and_mic \ + win866_to_iso_8859_5 ALT ISO-8859-5 alt_to_iso cyrillic_and_mic \ + euc_cn_to_mic EUC_CN MULE_INTERNAL euc_cn_to_mic euc_cn_and_mic \ + mic_to_euc_cn MULE_INTERNAL EUC_CN mic_to_euc_cn euc_cn_and_mic \ euc_jp_to_sjis EUC_JP SJIS euc_jp_to_sjis euc_jp_and_sjis \ sjis_to_euc_jp SJIS EUC_JP sjis_to_euc_jp euc_jp_and_sjis \ euc_jp_to_mic EUC_JP MULE_INTERNAL euc_jp_to_mic euc_jp_and_sjis \ sjis_to_mic SJIS MULE_INTERNAL sjis_to_mic euc_jp_and_sjis \ mic_to_euc_jp MULE_INTERNAL EUC_JP mic_to_euc_jp euc_jp_and_sjis \ mic_to_sjis MULE_INTERNAL SJIS mic_to_sjis euc_jp_and_sjis \ + euc_kr_to_mic EUC_KR MULE_INTERNAL euc_kr_to_mic euc_kr_and_mic \ + mic_to_euc_kr MULE_INTERNAL EUC_KR mic_to_euc_kr euc_kr_and_mic \ euc_tw_to_big5 EUC_TW BIG5 euc_tw_to_big5 euc_tw_and_big5 \ big5_to_euc_tw BIG5 EUC_TW big5_to_euc_tw euc_tw_and_big5 \ euc_tw_to_mic EUC_TW MULE_INTERNAL euc_tw_to_mic euc_tw_and_big5 \ big5_to_mic BIG5 MULE_INTERNAL big5_to_mic euc_tw_and_big5 \ mic_to_euc_tw MULE_INTERNAL EUC_TW mic_to_euc_tw euc_tw_and_big5 \ - mic_to_big5 MULE_INTERNAL BIG5 mic_to_big5 euc_tw_and_big5 + mic_to_big5 MULE_INTERNAL BIG5 mic_to_big5 euc_tw_and_big5 \ + iso_8859_2_to_mic LATIN2 MULE_INTERNAL latin2_to_mic latin2_and_win1250 \ + mic_to_iso_8859_2 MULE_INTERNAL LATIN2 mic_to_latin2 latin2_and_win1250 \ + win1250_to_mic WIN1250 MULE_INTERNAL win1250_to_mic latin2_and_win1250 \ + mic_to_win1250 MULE_INTERNAL WIN1250 mic_to_win1250 latin2_and_win1250 \ + iso_8859_2_to_win1250 LATIN2 WIN1250 latin2_to_win1250 latin2_and_win1250 \ + win1250_to_iso_8859_2 WIN1250 LATIN2 win1250_to_latin2 latin2_and_win1250 \ + iso_8859_1_to_mic LATIN1 MULE_INTERNAL latin1_to_mic latin_and_mic \ + mic_to_iso_8859_1 MULE_INTERNAL LATIN1 mic_to_latin1 latin_and_mic \ + iso_8859_3_to_mic LATIN3 MULE_INTERNAL latin3_to_mic latin_and_mic \ + mic_to_iso_8859_3 MULE_INTERNAL LATIN3 mic_to_latin3 latin_and_mic \ + iso_8859_4_to_mic LATIN4 MULE_INTERNAL latin4_to_mic latin_and_mic \ + mic_to_iso_8859_4 MULE_INTERNAL LATIN4 mic_to_latin4 latin_and_mic \ + ascii_to_utf_8 SQL_ASCII UNICODE ascii_to_utf8 utf8_and_ascii \ + utf_8_to_ascii UNICODE SQL_ASCII utf8_to_ascii utf8_and_ascii \ + big5_to_utf_8 BIG5 UNICODE big5_to_utf8 utf8_and_big5 \ + utf_8_to_big5 UNICODE BIG5 utf8_to_big5 utf8_and_big5 \ + utf_8_to_koi8r UNICODE KOI8R utf8_to_koi8r utf8_and_cyrillic \ + koi8r_to_utf_8 KOI8R UNICODE koi8r_to_utf8 utf8_and_cyrillic \ + utf_8_to_win1251 UNICODE WIN1251 utf8_to_win1251 utf8_and_cyrillic \ + win1251_to_utf_8 WIN1251 UNICODE win1251_to_utf8 utf8_and_cyrillic \ + utf_8_to_win866 UNICODE ALT utf8_to_alt utf8_and_cyrillic \ + win866_to_utf_8 ALT UNICODE alt_to_utf8 utf8_and_cyrillic \ + euc_cn_to_utf_8 EUC_CN UNICODE euc_cn_to_utf8 utf8_and_euc_cn \ + utf_8_to_euc_cn UNICODE EUC_CN utf8_to_euc_cn utf8_and_euc_cn \ + euc_jp_to_utf_8 EUC_JP UNICODE euc_jp_to_utf8 utf8_and_euc_jp \ + utf_8_to_euc_jp UNICODE EUC_JP utf8_to_euc_jp utf8_and_euc_jp \ + euc_kr_to_utf_8 EUC_KR UNICODE euc_kr_to_utf8 utf8_and_euc_kr \ + utf_8_to_euc_kr UNICODE EUC_KR utf8_to_euc_kr utf8_and_euc_kr \ + euc_tw_to_utf_8 EUC_TW UNICODE euc_tw_to_utf8 utf8_and_euc_tw \ + utf_8_to_euc_tw UNICODE EUC_TW utf8_to_euc_tw utf8_and_euc_tw \ + gb18030_to_utf_8 GB18030 UNICODE gb18030_to_utf8 utf8_and_gb18030 \ + utf_8_to_gb18030 UNICODE GB18030 utf8_to_gb18030 utf8_and_gb18030 \ + gbk_to_utf_8 GBK UNICODE gbk_to_utf8 utf8_and_gbk \ + utf_8_to_gbk UNICODE GBK utf8_to_gbk utf8_and_gbk \ + utf_8_to_iso_8859_2 UNICODE LATIN2 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_2_to_utf_8 LATIN2 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + utf_8_to_iso_8859_3 UNICODE LATIN3 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_3_to_utf_8 LATIN3 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + utf_8_to_iso_8859_4 UNICODE LATIN4 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_4_to_utf_8 LATIN4 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + utf_8_to_iso_8859_9 UNICODE LATIN5 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_9_to_utf_8 LATIN5 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + utf_8_to_iso_8859_10 UNICODE LATIN6 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_10_to_utf_8 LATIN6 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + utf_8_to_iso_8859_13 UNICODE LATIN7 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_13_to_utf_8 LATIN7 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + utf_8_to_iso_8859_14 UNICODE LATIN8 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_14_to_utf_8 LATIN8 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + utf_8_to_iso_8859_15 UNICODE LATIN9 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_15_to_utf_8 LATIN9 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + utf_8_to_iso_8859_16 UNICODE LATIN10 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_16_to_utf_8 LATIN10 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + utf_8_to_iso_8859_5 UNICODE ISO-8859-5 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_5_to_utf_8 ISO-8859-5 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + utf_8_to_iso_8859_6 UNICODE ISO-8859-6 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_6_to_utf_8 ISO-8859-6 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + utf_8_to_iso_8859_7 UNICODE ISO-8859-7 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_7_to_utf_8 ISO-8859-7 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + utf_8_to_iso_8859_8 UNICODE ISO-8859-8 utf8_to_iso8859 utf8_and_iso8859 \ + iso_8859_8_to_utf_8 ISO-8859-8 UNICODE iso8859_to_utf8 utf8_and_iso8859 \ + iso_8859_1_to_utf_8 LATIN1 UNICODE iso8859_1_to_utf8 utf8_and_iso8859_1 \ + utf_8_to_iso_8859_1 UNICODE LATIN1 utf8_to_iso8859_1 utf8_and_iso8859_1 \ + johab_to_utf_8 JOHAB UNICODE johab_to_utf8 utf8_and_johab \ + utf_8_to_johab UNICODE JOHAB utf8_to_johab utf8_and_johab \ + sjis_to_utf_8 SJIS UNICODE sjis_to_utf8 utf8_and_sjis \ + utf_8_to_sjis UNICODE SJIS utf8_to_sjis utf8_and_sjis \ + tcvn_to_utf_8 TCVN UNICODE tcvn_to_utf8 utf8_and_tcvn \ + utf_8_to_tcvn UNICODE TCVN utf8_to_tcvn utf8_and_tcvn \ + uhc_to_utf_8 UHC UNICODE uhc_to_utf8 utf8_and_uhc \ + utf_8_to_uhc UNICODE UHC utf8_to_uhc utf8_and_uhc \ + utf_8_to_win1250 UNICODE WIN1250 utf_to_win1250 utf8_and_win1250 \ + win1250_to_utf_8 WIN1250 UNICODE win1250_to_utf utf8_and_win1250 \ + utf_8_to_win1256 UNICODE WIN1256 utf_to_win1256 utf8_and_win1256 \ + win1256_to_utf_8 WIN1256 UNICODE win1256_to_utf utf8_and_win1256 \ + utf_8_to_win874 UNICODE WIN874 utf_to_win874 utf8_and_win874 \ + win874_to_utf_8 WIN874 UNICODE win874_to_utf utf8_and_win874 -# conversion_name source_encoding destination_encoding function object $(SQLSCRIPT): Makefile @set $(CONVERSIONS) ; \ while [ "$$#" -gt 0 ] ; \ @@ -139,3 +191,4 @@ clean: distclean maintainer-clean: $(RM) $(SQLSCRIPT) @for dir in $(DIRS); do $(MAKE) -C $$dir $@; done + diff --git a/src/backend/utils/mb/conversion_procs/ascii_and_mic/Makefile b/src/backend/utils/mb/conversion_procs/ascii_and_mic/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0535440d95f5ee461b8815d9f200371cbe9c39a5 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/ascii_and_mic/Makefile @@ -0,0 +1,11 @@ +#------------------------------------------------------------------------- +# +# $Id: Makefile,v 1.1 2002/08/14 02:45:10 ishii Exp $ +# +#------------------------------------------------------------------------- +top_builddir = ../../../../../.. +include $(top_builddir)/src/Makefile.global + +NAME := ascii_and_mic + +include ../proc.mk diff --git a/src/backend/utils/mb/conversion_procs/ascii_and_mic/ascii_and_mic.c b/src/backend/utils/mb/conversion_procs/ascii_and_mic/ascii_and_mic.c new file mode 100644 index 0000000000000000000000000000000000000000..ed00f189091d14780ab2379802c3ce53576e6394 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/ascii_and_mic/ascii_and_mic.c @@ -0,0 +1,65 @@ +/*------------------------------------------------------------------------- + * + * ASCII and MULE_INTERNAL + * + * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/ascii_and_mic/ascii_and_mic.c,v 1.1 2002/08/14 02:45:10 ishii Exp $ + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" +#include "fmgr.h" +#include "mb/pg_wchar.h" + +PG_FUNCTION_INFO_V1(ascii_to_mic) +PG_FUNCTION_INFO_V1(mic_to_ascii) + +extern Datum ascii_to_mic(PG_FUNCTION_ARGS); +extern Datum mic_to_ascii(PG_FUNCTION_ARGS); + +/* ---------- + * conv_proc( + * INTEGER, -- source encoding id + * INTEGER, -- destination encoding id + * OPAQUE, -- source string (null terminated C string) + * OPAQUE, -- destination string (null terminated C string) + * INTEGER -- source string length + * ) returns INTEGER; -- dummy. returns nothing, actually. + * ---------- + */ + +Datum +ascii_to_mic(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_SQL_ASCII); + Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL); + Assert(len > 0); + + pg_ascii2mic(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +mic_to_ascii(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); + Assert(PG_GETARG_INT32(1) == PG_SQL_ASCII); + Assert(len > 0); + + pg_mic2ascii(src, dest, len); + + PG_RETURN_INT32(0); +} diff --git a/src/backend/utils/mb/conversion_procs/cyrillic_and_mic/Makefile b/src/backend/utils/mb/conversion_procs/cyrillic_and_mic/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4ab05b481f28f285ff4c504605c25bdcbf92e723 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/cyrillic_and_mic/Makefile @@ -0,0 +1,11 @@ +#------------------------------------------------------------------------- +# +# $Id: Makefile,v 1.1 2002/08/14 02:45:10 ishii Exp $ +# +#------------------------------------------------------------------------- +top_builddir = ../../../../../.. +include $(top_builddir)/src/Makefile.global + +NAME := cyrillic_and_mic + +include ../proc.mk diff --git a/src/backend/utils/mb/conversion_procs/cyrillic_and_mic/cyrillic_and_mic.c b/src/backend/utils/mb/conversion_procs/cyrillic_and_mic/cyrillic_and_mic.c new file mode 100644 index 0000000000000000000000000000000000000000..b336504edea5cf7235234e6ba390a3fa6e6b1acc --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/cyrillic_and_mic/cyrillic_and_mic.c @@ -0,0 +1,630 @@ +/*------------------------------------------------------------------------- + * + * Cyrillic and MULE_INTERNAL + * + * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/cyrillic_and_mic/cyrillic_and_mic.c,v 1.1 2002/08/14 02:45:10 ishii Exp $ + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" +#include "fmgr.h" +#include "mb/pg_wchar.h" + +#define ENCODING_GROWTH_RATE 4 + +PG_FUNCTION_INFO_V1(koi8r_to_mic) +PG_FUNCTION_INFO_V1(mic_to_koi8r) +PG_FUNCTION_INFO_V1(iso_to_mic) +PG_FUNCTION_INFO_V1(mic_to_iso) +PG_FUNCTION_INFO_V1(win1251_to_mic) +PG_FUNCTION_INFO_V1(mic_to_win1251) +PG_FUNCTION_INFO_V1(alt_to_mic) +PG_FUNCTION_INFO_V1(mic_to_alt) +PG_FUNCTION_INFO_V1(koi8r_to_win1251) +PG_FUNCTION_INFO_V1(win1251_to_koi8r) +PG_FUNCTION_INFO_V1(koi8r_to_alt) +PG_FUNCTION_INFO_V1(alt_to_koi8r) +PG_FUNCTION_INFO_V1(alt_to_win1251) +PG_FUNCTION_INFO_V1(win1251_to_alt) +PG_FUNCTION_INFO_V1(iso_to_koi8r) +PG_FUNCTION_INFO_V1(koi8r_to_iso) +PG_FUNCTION_INFO_V1(iso_to_win1251) +PG_FUNCTION_INFO_V1(win1251_to_iso) +PG_FUNCTION_INFO_V1(iso_to_alt) +PG_FUNCTION_INFO_V1(alt_to_iso) + +extern Datum koi8r_to_mic(PG_FUNCTION_ARGS); +extern Datum mic_to_koi8r(PG_FUNCTION_ARGS); +extern Datum iso_to_mic(PG_FUNCTION_ARGS); +extern Datum mic_to_iso(PG_FUNCTION_ARGS); +extern Datum win1251_to_mic(PG_FUNCTION_ARGS); +extern Datum mic_to_win1251(PG_FUNCTION_ARGS); +extern Datum alt_to_mic(PG_FUNCTION_ARGS); +extern Datum mic_to_alt(PG_FUNCTION_ARGS); +extern Datum koi8r_to_win1251(PG_FUNCTION_ARGS); +extern Datum win1251_to_koi8r(PG_FUNCTION_ARGS); +extern Datum koi8r_to_alt(PG_FUNCTION_ARGS); +extern Datum alt_to_koi8r(PG_FUNCTION_ARGS); +extern Datum alt_to_win1251(PG_FUNCTION_ARGS); +extern Datum win1251_to_alt(PG_FUNCTION_ARGS); +extern Datum iso_to_koi8r(PG_FUNCTION_ARGS); +extern Datum koi8r_to_iso(PG_FUNCTION_ARGS); +extern Datum iso_to_win1251(PG_FUNCTION_ARGS); +extern Datum win1251_to_iso(PG_FUNCTION_ARGS); +extern Datum iso_to_alt(PG_FUNCTION_ARGS); +extern Datum alt_to_iso(PG_FUNCTION_ARGS); + +/* ---------- + * conv_proc( + * INTEGER, -- source encoding id + * INTEGER, -- destination encoding id + * OPAQUE, -- source string (null terminated C string) + * OPAQUE, -- destination string (null terminated C string) + * INTEGER -- source string length + * ) returns INTEGER; -- dummy. returns nothing, actually. + * ---------- + */ + +static void koi8r2mic(unsigned char *l, unsigned char *p, int len); +static void mic2koi8r(unsigned char *mic, unsigned char *p, int len); +static void iso2mic(unsigned char *l, unsigned char *p, int len); +static void mic2iso(unsigned char *mic, unsigned char *p, int len); +static void win12512mic(unsigned char *l, unsigned char *p, int len); +static void mic2win1251(unsigned char *mic, unsigned char *p, int len); +static void alt2mic(unsigned char *l, unsigned char *p, int len); +static void mic2alt(unsigned char *mic, unsigned char *p, int len); + +Datum +koi8r_to_mic(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_KOI8R); + Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL); + Assert(len > 0); + + koi8r2mic(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +mic_to_koi8r(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); + Assert(PG_GETARG_INT32(1) == PG_KOI8R); + Assert(len > 0); + + mic2koi8r(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +iso_to_mic(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_ISO_8859_5); + Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL); + Assert(len > 0); + + iso2mic(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +mic_to_iso(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); + Assert(PG_GETARG_INT32(1) == PG_ISO_8859_5); + Assert(len > 0); + + mic2iso(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +win1251_to_mic(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_WIN1251); + Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL); + Assert(len > 0); + + win12512mic(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +mic_to_win1251(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); + Assert(PG_GETARG_INT32(1) == PG_WIN1251); + Assert(len > 0); + + mic2win1251(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +alt_to_mic(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_ALT); + Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL); + Assert(len > 0); + + alt2mic(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +mic_to_alt(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); + Assert(PG_GETARG_INT32(1) == PG_ALT); + Assert(len > 0); + + mic2alt(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +koi8r_to_win1251(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_KOI8R); + Assert(PG_GETARG_INT32(1) == PG_WIN1251); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + koi8r2mic(src, buf, len); + mic2win1251(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +Datum +win1251_to_koi8r(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_WIN1251); + Assert(PG_GETARG_INT32(1) == PG_KOI8R); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + win12512mic(src, buf, len); + mic2koi8r(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +Datum +koi8r_to_alt(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_KOI8R); + Assert(PG_GETARG_INT32(1) == PG_ALT); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + koi8r2mic(src, buf, len); + mic2alt(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +Datum +alt_to_koi8r(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_ALT); + Assert(PG_GETARG_INT32(1) == PG_KOI8R); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + alt2mic(src, buf, len); + mic2koi8r(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +Datum +alt_to_win1251(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_ALT); + Assert(PG_GETARG_INT32(1) == PG_WIN1251); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + alt2mic(src, buf, len); + mic2win1251(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +Datum +win1251_to_alt(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_WIN1251); + Assert(PG_GETARG_INT32(1) == PG_ALT); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + win12512mic(src, buf, len); + mic2alt(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +Datum +iso_to_koi8r(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_ISO_8859_5); + Assert(PG_GETARG_INT32(1) == PG_KOI8R); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + iso2mic(src, buf, len); + mic2koi8r(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +Datum +koi8r_to_iso(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_KOI8R); + Assert(PG_GETARG_INT32(1) == PG_ISO_8859_5); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + koi8r2mic(src, buf, len); + mic2iso(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +Datum +iso_to_win1251(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_ISO_8859_5); + Assert(PG_GETARG_INT32(1) == PG_WIN1251); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + iso2mic(src, buf, len); + mic2win1251(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +Datum +win1251_to_iso(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_WIN1251); + Assert(PG_GETARG_INT32(1) == PG_ISO_8859_5); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + win12512mic(src, buf, len); + mic2win1251(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +Datum +iso_to_alt(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_ISO_8859_5); + Assert(PG_GETARG_INT32(1) == PG_ALT); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + iso2mic(src, buf, len); + mic2alt(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +Datum +alt_to_iso(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_ALT); + Assert(PG_GETARG_INT32(1) == PG_ISO_8859_5); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + alt2mic(src, buf, len); + mic2alt(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +/* + * Cyrillic support + * currently supported Cyrillic encodings: + * + * KOI8-R (this is the charset for the mule internal code + * for Cyrillic) + * ISO-8859-5 + * Microsoft's CP1251(windows-1251) + * Alternativny Variant (MS-DOS CP866) + */ + +/* koi8r2mic: KOI8-R to Mule internal code */ +static void +koi8r2mic(unsigned char *l, unsigned char *p, int len) +{ + latin2mic(l, p, len, LC_KOI8_R); +} + +/* mic2koi8r: Mule internal code to KOI8-R */ +static void +mic2koi8r(unsigned char *mic, unsigned char *p, int len) +{ + mic2latin(mic, p, len, LC_KOI8_R); +} + +/* iso2mic: ISO-8859-5 to Mule internal code */ +static void +iso2mic(unsigned char *l, unsigned char *p, int len) +{ + static unsigned char iso2koi[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, + 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, + 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, + 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, + 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, + 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + latin2mic_with_table(l, p, len, LC_KOI8_R, iso2koi); +} + +/* mic2iso: Mule internal code to ISO8859-5 */ +static void +mic2iso(unsigned char *mic, unsigned char *p, int len) +{ + static unsigned char koi2iso[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xee, 0xd0, 0xd1, 0xe6, 0xd4, 0xd5, 0xe4, 0xd3, + 0xe5, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, + 0xdf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xd6, 0xd2, + 0xec, 0xeb, 0xd7, 0xe8, 0xed, 0xe9, 0xe7, 0xea, + 0xce, 0xb0, 0xb1, 0xc6, 0xb4, 0xb5, 0xc4, 0xb3, + 0xc5, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, + 0xbf, 0xcf, 0xc0, 0xc1, 0xc2, 0xc3, 0xb6, 0xb2, + 0xcc, 0xcb, 0xb7, 0xc8, 0xcd, 0xc9, 0xc7, 0xca + }; + + mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2iso); +} + +/* win2mic: CP1251 to Mule internal code */ +static void +win12512mic(unsigned char *l, unsigned char *p, int len) +{ + static unsigned char win2koi[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, + 0xb3, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, 0xb7, + 0x00, 0x00, 0xb6, 0xa6, 0xad, 0x00, 0x00, 0x00, + 0xa3, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x00, 0xa7, + 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, + 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, + 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, + 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, + 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, + 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1 + }; + + latin2mic_with_table(l, p, len, LC_KOI8_R, win2koi); +} + +/* mic2win: Mule internal code to CP1251 */ +static void +mic2win1251(unsigned char *mic, unsigned char *p, int len) +{ + static unsigned char koi2win[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xb8, 0xba, 0x00, 0xb3, 0xbf, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xa8, 0xaa, 0x00, 0xb2, 0xaf, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, + 0xfe, 0xe0, 0xe1, 0xf6, 0xe4, 0xe5, 0xf4, 0xe3, + 0xf5, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, + 0xef, 0xff, 0xf0, 0xf1, 0xf2, 0xf3, 0xe6, 0xe2, + 0xfc, 0xfb, 0xe7, 0xf8, 0xfd, 0xf9, 0xf7, 0xfa, + 0xde, 0xc0, 0xc1, 0xd6, 0xc4, 0xc5, 0xd4, 0xc3, + 0xd5, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, + 0xcf, 0xdf, 0xd0, 0xd1, 0xd2, 0xd3, 0xc6, 0xc2, + 0xdc, 0xdb, 0xc7, 0xd8, 0xdd, 0xd9, 0xd7, 0xda + }; + + mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2win); +} + +/* alt2mic: CP866 to Mule internal code */ +static void +alt2mic(unsigned char *l, unsigned char *p, int len) +{ + static unsigned char alt2koi[] = { + 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, + 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, + 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, + 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, + 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, + 0xb3, 0xa3, 0xb4, 0xa4, 0xb7, 0xa7, 0x00, 0x00, + 0xb6, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + latin2mic_with_table(l, p, len, LC_KOI8_R, alt2koi); +} + +/* mic2alt: Mule internal code to CP866 */ +static void +mic2alt(unsigned char *mic, unsigned char *p, int len) +{ + static unsigned char koi2alt[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf1, 0xf3, 0x00, 0xf9, 0xf5, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf0, 0xf2, 0x00, 0xf8, 0xf4, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, + 0xee, 0xa0, 0xa1, 0xe6, 0xa4, 0xa5, 0xe4, 0xa3, + 0xe5, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, + 0xaf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xa6, 0xa2, + 0xec, 0xeb, 0xa7, 0xe8, 0xed, 0xe9, 0xe7, 0xea, + 0x9e, 0x80, 0x81, 0x96, 0x84, 0x85, 0x94, 0x83, + 0x95, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, + 0x8f, 0x9f, 0x90, 0x91, 0x92, 0x93, 0x86, 0x82, + 0x9c, 0x9b, 0x87, 0x98, 0x9d, 0x99, 0x97, 0x9a + }; + + mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2alt); +} + diff --git a/src/backend/utils/mb/conversion_procs/euc_cn_and_mic/Makefile b/src/backend/utils/mb/conversion_procs/euc_cn_and_mic/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ef0cc1b5ffe74baded5f0b8214aa0cf380c4ee2c --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/euc_cn_and_mic/Makefile @@ -0,0 +1,11 @@ +#------------------------------------------------------------------------- +# +# $Id: Makefile,v 1.1 2002/08/14 02:45:10 ishii Exp $ +# +#------------------------------------------------------------------------- +top_builddir = ../../../../../.. +include $(top_builddir)/src/Makefile.global + +NAME := euc_cn_and_mic + +include ../proc.mk diff --git a/src/backend/utils/mb/conversion_procs/euc_cn_and_mic/euc_cn_and_mic.c b/src/backend/utils/mb/conversion_procs/euc_cn_and_mic/euc_cn_and_mic.c new file mode 100644 index 0000000000000000000000000000000000000000..29b1442b607089be0dd9a96982a0276e457ac801 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/euc_cn_and_mic/euc_cn_and_mic.c @@ -0,0 +1,124 @@ +/*------------------------------------------------------------------------- + * + * EUC_CN and MULE_INTERNAL + * + * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/euc_cn_and_mic/euc_cn_and_mic.c,v 1.1 2002/08/14 02:45:10 ishii Exp $ + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" +#include "fmgr.h" +#include "mb/pg_wchar.h" + +PG_FUNCTION_INFO_V1(euc_cn_to_mic) +PG_FUNCTION_INFO_V1(mic_to_euc_cn) + +extern Datum euc_cn_to_mic(PG_FUNCTION_ARGS); +extern Datum mic_to_euc_cn(PG_FUNCTION_ARGS); + +/* ---------- + * conv_proc( + * INTEGER, -- source encoding id + * INTEGER, -- destination encoding id + * OPAQUE, -- source string (null terminated C string) + * OPAQUE, -- destination string (null terminated C string) + * INTEGER -- source string length + * ) returns INTEGER; -- dummy. returns nothing, actually. + * ---------- + */ + +static void euc_cn2mic(unsigned char *euc, unsigned char *p, int len); +static void mic2euc_cn(unsigned char *mic, unsigned char *p, int len); + +Datum +euc_cn_to_mic(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_EUC_CN); + Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL); + Assert(len > 0); + + euc_cn2mic(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +mic_to_euc_cn(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); + Assert(PG_GETARG_INT32(1) == PG_EUC_CN); + Assert(len > 0); + + mic2euc_cn(src, dest, len); + + PG_RETURN_INT32(0); +} + +/* + * EUC_CN ---> MIC + */ +static void +euc_cn2mic(unsigned char *euc, unsigned char *p, int len) +{ + int c1; + + while (len > 0 && (c1 = *euc++)) + { + if (c1 & 0x80) + { + len -= 2; + *p++ = LC_GB2312_80; + *p++ = c1; + *p++ = *euc++; + } + else + { /* should be ASCII */ + len--; + *p++ = c1; + } + } + *p = '\0'; +} + +/* + * MIC ---> EUC_CN + */ +static void +mic2euc_cn(unsigned char *mic, unsigned char *p, int len) +{ + int c1; + + while (len > 0 && (c1 = *mic)) + { + len -= pg_mic_mblen(mic++); + + if (c1 == LC_GB2312_80) + { + *p++ = *mic++; + *p++ = *mic++; + } + else if (c1 > 0x7f) + { /* cannot convert to EUC_CN! */ + mic--; + pg_print_bogus_char(&mic, &p); + } + else + { /* should be ASCII */ + *p++ = c1; + } + } + *p = '\0'; +} diff --git a/src/backend/utils/mb/conversion_procs/euc_kr_and_mic/Makefile b/src/backend/utils/mb/conversion_procs/euc_kr_and_mic/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..20e78f3b23384a32a085cfe35dd44475f5200f7e --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/euc_kr_and_mic/Makefile @@ -0,0 +1,11 @@ +#------------------------------------------------------------------------- +# +# $Id: Makefile,v 1.1 2002/08/14 02:45:10 ishii Exp $ +# +#------------------------------------------------------------------------- +top_builddir = ../../../../../.. +include $(top_builddir)/src/Makefile.global + +NAME := euc_kr_and_mic + +include ../proc.mk diff --git a/src/backend/utils/mb/conversion_procs/euc_kr_and_mic/euc_kr_and_mic.c b/src/backend/utils/mb/conversion_procs/euc_kr_and_mic/euc_kr_and_mic.c new file mode 100644 index 0000000000000000000000000000000000000000..4c0d09758b543487246976d85e1dce1b5fa99b2e --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/euc_kr_and_mic/euc_kr_and_mic.c @@ -0,0 +1,125 @@ +/*------------------------------------------------------------------------- + * + * EUC_KR and MULE_INTERNAL + * + * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/euc_kr_and_mic/euc_kr_and_mic.c,v 1.1 2002/08/14 02:45:10 ishii Exp $ + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" +#include "fmgr.h" +#include "mb/pg_wchar.h" + +PG_FUNCTION_INFO_V1(euc_kr_to_mic) +PG_FUNCTION_INFO_V1(mic_to_euc_kr) + +extern Datum euc_kr_to_mic(PG_FUNCTION_ARGS); +extern Datum mic_to_euc_kr(PG_FUNCTION_ARGS); + +/* ---------- + * conv_proc( + * INTEGER, -- source encoding id + * INTEGER, -- destination encoding id + * OPAQUE, -- source string (null terminated C string) + * OPAQUE, -- destination string (null terminated C string) + * INTEGER -- source string length + * ) returns INTEGER; -- dummy. returns nothing, actually. + * ---------- + */ + +static void euc_kr2mic(unsigned char *euc, unsigned char *p, int len); +static void mic2euc_kr(unsigned char *mic, unsigned char *p, int len); + +Datum +euc_kr_to_mic(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_EUC_KR); + Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL); + Assert(len > 0); + + euc_kr2mic(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +mic_to_euc_kr(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); + Assert(PG_GETARG_INT32(1) == PG_EUC_KR); + Assert(len > 0); + + mic2euc_kr(src, dest, len); + + PG_RETURN_INT32(0); +} + +/* + * EUC_KR ---> MIC + */ +static void +euc_kr2mic(unsigned char *euc, unsigned char *p, int len) +{ + int c1; + + while (len > 0 && (c1 = *euc++)) + { + if (c1 & 0x80) + { + len -= 2; + *p++ = LC_KS5601; + *p++ = c1; + *p++ = *euc++; + } + else + { /* should be ASCII */ + len--; + *p++ = c1; + } + } + *p = '\0'; +} + +/* + * MIC ---> EUC_KR + */ +static void +mic2euc_kr(unsigned char *mic, unsigned char *p, int len) +{ + int c1; + + while (len > 0 && (c1 = *mic)) + { + len -= pg_mic_mblen(mic++); + + if (c1 == LC_KS5601) + { + *p++ = *mic++; + *p++ = *mic++; + } + else if (c1 > 0x7f) + { /* cannot convert to EUC_KR! */ + mic--; + pg_print_bogus_char(&mic, &p); + } + else + { /* should be ASCII */ + *p++ = c1; + } + } + *p = '\0'; +} + diff --git a/src/backend/utils/mb/conversion_procs/latin2_and_win1250/Makefile b/src/backend/utils/mb/conversion_procs/latin2_and_win1250/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d6197c16ce404665e1a9d21466f8797680868d02 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/latin2_and_win1250/Makefile @@ -0,0 +1,11 @@ +#------------------------------------------------------------------------- +# +# $Id: Makefile,v 1.1 2002/08/14 02:45:10 ishii Exp $ +# +#------------------------------------------------------------------------- +top_builddir = ../../../../../.. +include $(top_builddir)/src/Makefile.global + +NAME := latin2_and_win1250 + +include ../proc.mk diff --git a/src/backend/utils/mb/conversion_procs/latin2_and_win1250/latin2_and_win1250.c b/src/backend/utils/mb/conversion_procs/latin2_and_win1250/latin2_and_win1250.c new file mode 100644 index 0000000000000000000000000000000000000000..1f75394d04c58c1037c10c1816b81fbeca71f82b --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/latin2_and_win1250/latin2_and_win1250.c @@ -0,0 +1,216 @@ +/*------------------------------------------------------------------------- + * + * LATIN2 and WIN1250 + * + * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/latin2_and_win1250/latin2_and_win1250.c,v 1.1 2002/08/14 02:45:10 ishii Exp $ + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" +#include "fmgr.h" +#include "mb/pg_wchar.h" + +#define ENCODING_GROWTH_RATE 4 + +PG_FUNCTION_INFO_V1(latin2_to_mic) +PG_FUNCTION_INFO_V1(mic_to_latin2) +PG_FUNCTION_INFO_V1(win1250_to_mic) +PG_FUNCTION_INFO_V1(mic_to_win1250) +PG_FUNCTION_INFO_V1(latin2_to_win1250) +PG_FUNCTION_INFO_V1(win1250_to_latin2) + +extern Datum latin2_to_mic(PG_FUNCTION_ARGS); +extern Datum mic_to_latin2(PG_FUNCTION_ARGS); +extern Datum win1250_to_mic(PG_FUNCTION_ARGS); +extern Datum mic_to_win1250(PG_FUNCTION_ARGS); +extern Datum latin2_to_win1250(PG_FUNCTION_ARGS); +extern Datum win1250_to_latin2(PG_FUNCTION_ARGS); + +/* ---------- + * conv_proc( + * INTEGER, -- source encoding id + * INTEGER, -- destination encoding id + * OPAQUE, -- source string (null terminated C string) + * OPAQUE, -- destination string (null terminated C string) + * INTEGER -- source string length + * ) returns INTEGER; -- dummy. returns nothing, actually. + * ---------- + */ + +static void latin22mic(unsigned char *l, unsigned char *p, int len); +static void mic2latin2(unsigned char *mic, unsigned char *p, int len); +static void win12502mic(unsigned char *l, unsigned char *p, int len); +static void mic2win1250(unsigned char *mic, unsigned char *p, int len); + +Datum +latin2_to_mic(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_LATIN2); + Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL); + Assert(len > 0); + + latin22mic(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +mic_to_latin2(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); + Assert(PG_GETARG_INT32(1) == PG_LATIN2); + Assert(len > 0); + + mic2latin2(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +win1250_to_mic(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_WIN1250); + Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL); + Assert(len > 0); + + win12502mic(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +mic_to_win1250(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); + Assert(PG_GETARG_INT32(1) == PG_WIN1250); + Assert(len > 0); + + mic2win1250(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +latin2_to_win1250(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_LATIN2); + Assert(PG_GETARG_INT32(1) == PG_WIN1250); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + latin22mic(src, buf, len); + mic2win1250(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +Datum +win1250_to_latin2(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + unsigned char *buf; + + Assert(PG_GETARG_INT32(0) == PG_WIN1250); + Assert(PG_GETARG_INT32(1) == PG_LATIN2); + Assert(len > 0); + + buf = palloc(len * ENCODING_GROWTH_RATE); + win12502mic(src, buf, len); + mic2latin2(buf, dest, strlen(buf)); + pfree(buf); + + PG_RETURN_INT32(0); +} + +static void +latin22mic(unsigned char *l, unsigned char *p, int len) +{ + latin2mic(l, p, len, LC_ISO8859_2); +} +static void +mic2latin2(unsigned char *mic, unsigned char *p, int len) +{ + mic2latin(mic, p, len, LC_ISO8859_2); +} + +/*----------------------------------------------------------------- + * WIN1250 + * Microsoft's CP1250(windows-1250) + *-----------------------------------------------------------------*/ +static void +win12502mic(unsigned char *l, unsigned char *p, int len) +{ + static unsigned char win1250_2_iso88592[] = { + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0xA9, 0x8B, 0xA6, 0xAB, 0xAE, 0xAC, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0xB9, 0x9B, 0xB6, 0xBB, 0xBE, 0xBC, + 0xA0, 0xB7, 0xA2, 0xA3, 0xA4, 0xA1, 0x00, 0xA7, + 0xA8, 0x00, 0xAA, 0x00, 0x00, 0xAD, 0x00, 0xAF, + 0xB0, 0x00, 0xB2, 0xB3, 0xB4, 0x00, 0x00, 0x00, + 0xB8, 0xB1, 0xBA, 0x00, 0xA5, 0xBD, 0xB5, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF + }; + + latin2mic_with_table(l, p, len, LC_ISO8859_2, win1250_2_iso88592); +} +static void +mic2win1250(unsigned char *mic, unsigned char *p, int len) +{ + static unsigned char iso88592_2_win1250[] = { + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x00, 0x8B, 0x00, 0x00, 0x00, 0x00, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x00, + 0xA0, 0xA5, 0xA2, 0xA3, 0xA4, 0xBC, 0x8C, 0xA7, + 0xA8, 0x8A, 0xAA, 0x8D, 0x8F, 0xAD, 0x8E, 0xAF, + 0xB0, 0xB9, 0xB2, 0xB3, 0xB4, 0xBE, 0x9C, 0xA1, + 0xB8, 0x9A, 0xBA, 0x9D, 0x9F, 0xBD, 0x9E, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF + }; + + mic2latin_with_table(mic, p, len, LC_ISO8859_2, iso88592_2_win1250); +} diff --git a/src/backend/utils/mb/conversion_procs/latin_and_mic/Makefile b/src/backend/utils/mb/conversion_procs/latin_and_mic/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..42f204c66295ccd9272c6be09c2ef056b21734a0 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/latin_and_mic/Makefile @@ -0,0 +1,11 @@ +#------------------------------------------------------------------------- +# +# $Id: Makefile,v 1.1 2002/08/14 02:45:10 ishii Exp $ +# +#------------------------------------------------------------------------- +top_builddir = ../../../../../.. +include $(top_builddir)/src/Makefile.global + +NAME := latin_and_mic + +include ../proc.mk diff --git a/src/backend/utils/mb/conversion_procs/latin_and_mic/latin_and_mic.c b/src/backend/utils/mb/conversion_procs/latin_and_mic/latin_and_mic.c new file mode 100644 index 0000000000000000000000000000000000000000..a019fc274ffab4c470412a25209ac3f911611693 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/latin_and_mic/latin_and_mic.c @@ -0,0 +1,175 @@ +/*------------------------------------------------------------------------- + * + * LATINn and MULE_INTERNAL + * + * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/latin_and_mic/latin_and_mic.c,v 1.1 2002/08/14 02:45:10 ishii Exp $ + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" +#include "fmgr.h" +#include "mb/pg_wchar.h" + +PG_FUNCTION_INFO_V1(latin1_to_mic) +PG_FUNCTION_INFO_V1(mic_to_latin1) +PG_FUNCTION_INFO_V1(latin3_to_mic) +PG_FUNCTION_INFO_V1(mic_to_latin3) +PG_FUNCTION_INFO_V1(latin4_to_mic) +PG_FUNCTION_INFO_V1(mic_to_latin4) + +extern Datum latin1_to_mic(PG_FUNCTION_ARGS); +extern Datum mic_to_latin1(PG_FUNCTION_ARGS); +extern Datum latin3_to_mic(PG_FUNCTION_ARGS); +extern Datum mic_to_latin3(PG_FUNCTION_ARGS); +extern Datum latin4_to_mic(PG_FUNCTION_ARGS); +extern Datum mic_to_latin4(PG_FUNCTION_ARGS); + +/* ---------- + * conv_proc( + * INTEGER, -- source encoding id + * INTEGER, -- destination encoding id + * OPAQUE, -- source string (null terminated C string) + * OPAQUE, -- destination string (null terminated C string) + * INTEGER -- source string length + * ) returns INTEGER; -- dummy. returns nothing, actually. + * ---------- + */ + +static void latin12mic(unsigned char *l, unsigned char *p, int len); +static void mic2latin1(unsigned char *mic, unsigned char *p, int len); +static void latin32mic(unsigned char *l, unsigned char *p, int len); +static void mic2latin3(unsigned char *mic, unsigned char *p, int len); +static void latin42mic(unsigned char *l, unsigned char *p, int len); +static void mic2latin4(unsigned char *mic, unsigned char *p, int len); + +Datum +latin1_to_mic(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_LATIN1); + Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL); + Assert(len > 0); + + latin12mic(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +mic_to_latin1(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); + Assert(PG_GETARG_INT32(1) == PG_LATIN1); + Assert(len > 0); + + mic2latin1(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +latin3_to_mic(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_LATIN3); + Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL); + Assert(len > 0); + + latin32mic(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +mic_to_latin3(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); + Assert(PG_GETARG_INT32(1) == PG_LATIN3); + Assert(len > 0); + + mic2latin3(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum +latin4_to_mic(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_LATIN4); + Assert(PG_GETARG_INT32(1) == PG_MULE_INTERNAL); + Assert(len > 0); + + latin42mic(src, dest, len); + + PG_RETURN_INT32(0); +} + +Datum mic_to_latin4(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_MULE_INTERNAL); + Assert(PG_GETARG_INT32(1) == PG_LATIN4); + Assert(len > 0); + + mic2latin4(src, dest, len); + + PG_RETURN_INT32(0); +} + +static void +latin12mic(unsigned char *l, unsigned char *p, int len) +{ + latin2mic(l, p, len, LC_ISO8859_1); +} +static void +mic2latin1(unsigned char *mic, unsigned char *p, int len) +{ + mic2latin(mic, p, len, LC_ISO8859_1); +} +static void +latin32mic(unsigned char *l, unsigned char *p, int len) +{ + latin2mic(l, p, len, LC_ISO8859_3); +} +static void +mic2latin3(unsigned char *mic, unsigned char *p, int len) +{ + mic2latin(mic, p, len, LC_ISO8859_3); +} +static void +latin42mic(unsigned char *l, unsigned char *p, int len) +{ + latin2mic(l, p, len, LC_ISO8859_4); +} +static void +mic2latin4(unsigned char *mic, unsigned char *p, int len) +{ + mic2latin(mic, p, len, LC_ISO8859_4); +} + diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ec0e7af1be8769b9f76a584b20579d8d9d1d8ec3 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/Makefile @@ -0,0 +1,11 @@ +#------------------------------------------------------------------------- +# +# $Id: Makefile,v 1.1 2002/08/14 02:45:10 ishii Exp $ +# +#------------------------------------------------------------------------- +top_builddir = ../../../../../.. +include $(top_builddir)/src/Makefile.global + +NAME := utf8_and_cyrillic + +include ../proc.mk diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c b/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c new file mode 100644 index 0000000000000000000000000000000000000000..cc16a46aca847a22158b33aeaf5b3a06942c4cf0 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c @@ -0,0 +1,149 @@ +/*------------------------------------------------------------------------- + * + * UTF8 and Cyrillic + * + * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c,v 1.1 2002/08/14 02:45:10 ishii Exp $ + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" +#include "fmgr.h" +#include "mb/pg_wchar.h" +#include "../../Unicode/utf8_to_koi8r.map" +#include "../../Unicode/koi8r_to_utf8.map" +#include "../../Unicode/utf8_to_win1251.map" +#include "../../Unicode/win1251_to_utf8.map" +#include "../../Unicode/utf8_to_alt.map" +#include "../../Unicode/alt_to_utf8.map" + +PG_FUNCTION_INFO_V1(utf8_to_koi8r) +PG_FUNCTION_INFO_V1(koi8r_to_utf8) +PG_FUNCTION_INFO_V1(utf8_to_win1251) +PG_FUNCTION_INFO_V1(win1251_to_utf8) +PG_FUNCTION_INFO_V1(utf8_to_alt) +PG_FUNCTION_INFO_V1(alt_to_utf8) + +extern Datum utf8_to_koi8r(PG_FUNCTION_ARGS); +extern Datum koi8r_to_utf8(PG_FUNCTION_ARGS); +extern Datum utf8_to_win1251(PG_FUNCTION_ARGS); +extern Datum win1251_to_utf8(PG_FUNCTION_ARGS); +extern Datum utf8_to_alt(PG_FUNCTION_ARGS); +extern Datum alt_to_utf8(PG_FUNCTION_ARGS); + +/* ---------- + * conv_proc( + * INTEGER, -- source encoding id + * INTEGER, -- destination encoding id + * OPAQUE, -- source string (null terminated C string) + * OPAQUE, -- destination string (null terminated C string) + * INTEGER -- source string length + * ) returns INTEGER; -- dummy. returns nothing, actually. + * ---------- + */ + +Datum +utf8_to_koi8r(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_UTF8); + Assert(PG_GETARG_INT32(1) == PG_KOI8R); + Assert(len > 0); + + UtfToLocal(src, dest, ULmap_KOI8R, + sizeof(ULmap_KOI8R) / sizeof(pg_utf_to_local), len); + + PG_RETURN_INT32(0); +} + +Datum +koi8r_to_utf8(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_KOI8R); + Assert(PG_GETARG_INT32(1) == PG_UTF8); + Assert(len > 0); + + LocalToUtf(src, dest, LUmapKOI8R, + sizeof(LUmapKOI8R) / sizeof(pg_local_to_utf), PG_KOI8R, len); + + PG_RETURN_INT32(0); +} + +Datum +utf8_to_win1251(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_UTF8); + Assert(PG_GETARG_INT32(1) == PG_WIN1251); + Assert(len > 0); + + UtfToLocal(src, dest, ULmap_WIN1251, + sizeof(ULmap_WIN1251) / sizeof(pg_utf_to_local), len); + + PG_RETURN_INT32(0); +} + +Datum +win1251_to_utf8(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_WIN1251); + Assert(PG_GETARG_INT32(1) == PG_UTF8); + Assert(len > 0); + + LocalToUtf(src, dest, LUmapWIN1251, + sizeof(LUmapWIN1251) / sizeof(pg_local_to_utf), PG_WIN1251, len); + + PG_RETURN_INT32(0); +} + +Datum +utf8_to_alt(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_UTF8); + Assert(PG_GETARG_INT32(1) == PG_ALT); + Assert(len > 0); + + UtfToLocal(src, dest, ULmap_ALT, + sizeof(ULmap_ALT) / sizeof(pg_utf_to_local), len); + + PG_RETURN_INT32(0); +} + +Datum +alt_to_utf8(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_ALT); + Assert(PG_GETARG_INT32(1) == PG_UTF8); + Assert(len > 0); + + LocalToUtf(src, dest, LUmapALT, + sizeof(LUmapALT) / sizeof(pg_local_to_utf), PG_ALT, len); + + PG_RETURN_INT32(0); +} diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win1250/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_win1250/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..14f7d074ece3794f41f2b938f48cbe49dc51f0c3 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/utf8_and_win1250/Makefile @@ -0,0 +1,11 @@ +#------------------------------------------------------------------------- +# +# $Id: Makefile,v 1.1 2002/08/14 02:45:10 ishii Exp $ +# +#------------------------------------------------------------------------- +top_builddir = ../../../../../.. +include $(top_builddir)/src/Makefile.global + +NAME := utf8_and_win1250 + +include ../proc.mk diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win1250/utf8_and_win1250.c b/src/backend/utils/mb/conversion_procs/utf8_and_win1250/utf8_and_win1250.c new file mode 100644 index 0000000000000000000000000000000000000000..8e61fce00cb1f43540673989685c0702498f17ad --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/utf8_and_win1250/utf8_and_win1250.c @@ -0,0 +1,69 @@ +/*------------------------------------------------------------------------- + * + * WIN1250 and UTF-8 + * + * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win1250/Attic/utf8_and_win1250.c,v 1.1 2002/08/14 02:45:10 ishii Exp $ + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" +#include "fmgr.h" +#include "mb/pg_wchar.h" +#include "../../Unicode/utf8_to_win1250.map" +#include "../../Unicode/win1250_to_utf8.map" + +PG_FUNCTION_INFO_V1(utf_to_win1250) +PG_FUNCTION_INFO_V1(win1250_to_utf) + +extern Datum utf_to_win1250(PG_FUNCTION_ARGS); +extern Datum win1250_to_utf(PG_FUNCTION_ARGS); + +/* ---------- + * conv_proc( + * INTEGER, -- source encoding id + * INTEGER, -- destination encoding id + * OPAQUE, -- source string (null terminated C string) + * OPAQUE, -- destination string (null terminated C string) + * INTEGER -- source string length + * ) returns INTEGER; -- dummy. returns nothing, actually. + * ---------- + */ + +Datum +utf_to_win1250(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_UTF8); + Assert(PG_GETARG_INT32(1) == PG_WIN1250); + Assert(len > 0); + + UtfToLocal(src, dest, ULmapWIN1250, + sizeof(ULmapWIN1250) / sizeof(pg_utf_to_local), len); + + PG_RETURN_INT32(0); +} + +Datum +win1250_to_utf(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_WIN1250); + Assert(PG_GETARG_INT32(1) == PG_UTF8); + Assert(len > 0); + + LocalToUtf(src, dest, LUmapWIN1250, + sizeof(LUmapWIN1250) / sizeof(pg_local_to_utf), PG_WIN1250, len); + + PG_RETURN_INT32(0); +} diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win1256/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_win1256/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..19c59ebfae884550764d356ace03cc0d4dcecf29 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/utf8_and_win1256/Makefile @@ -0,0 +1,11 @@ +#------------------------------------------------------------------------- +# +# $Id: Makefile,v 1.1 2002/08/14 02:45:10 ishii Exp $ +# +#------------------------------------------------------------------------- +top_builddir = ../../../../../.. +include $(top_builddir)/src/Makefile.global + +NAME := utf8_and_win1256 + +include ../proc.mk diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win1256/utf8_and_win1256.c b/src/backend/utils/mb/conversion_procs/utf8_and_win1256/utf8_and_win1256.c new file mode 100644 index 0000000000000000000000000000000000000000..55818f40bbe4c64c2facd1d089362dfb88543268 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/utf8_and_win1256/utf8_and_win1256.c @@ -0,0 +1,69 @@ +/*------------------------------------------------------------------------- + * + * WIN1256 and UTF-8 + * + * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win1256/Attic/utf8_and_win1256.c,v 1.1 2002/08/14 02:45:10 ishii Exp $ + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" +#include "fmgr.h" +#include "mb/pg_wchar.h" +#include "../../Unicode/utf8_to_win1256.map" +#include "../../Unicode/win1256_to_utf8.map" + +PG_FUNCTION_INFO_V1(utf_to_win1256) +PG_FUNCTION_INFO_V1(win1256_to_utf) + +extern Datum utf_to_win1256(PG_FUNCTION_ARGS); +extern Datum win1256_to_utf(PG_FUNCTION_ARGS); + +/* ---------- + * conv_proc( + * INTEGER, -- source encoding id + * INTEGER, -- destination encoding id + * OPAQUE, -- source string (null terminated C string) + * OPAQUE, -- destination string (null terminated C string) + * INTEGER -- source string length + * ) returns INTEGER; -- dummy. returns nothing, actually. + * ---------- + */ + +Datum +utf_to_win1256(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_UTF8); + Assert(PG_GETARG_INT32(1) == PG_WIN1256); + Assert(len > 0); + + UtfToLocal(src, dest, ULmapWIN1256, + sizeof(ULmapWIN1256) / sizeof(pg_utf_to_local), len); + + PG_RETURN_INT32(0); +} + +Datum +win1256_to_utf(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_WIN1256); + Assert(PG_GETARG_INT32(1) == PG_UTF8); + Assert(len > 0); + + LocalToUtf(src, dest, LUmapWIN1256, + sizeof(LUmapWIN1256) / sizeof(pg_local_to_utf), PG_WIN1256, len); + + PG_RETURN_INT32(0); +} diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win874/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_win874/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..80fe59a317ca76f5a6bbbd586d2b4c45095b6d7f --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/utf8_and_win874/Makefile @@ -0,0 +1,11 @@ +#------------------------------------------------------------------------- +# +# $Id: Makefile,v 1.1 2002/08/14 02:45:10 ishii Exp $ +# +#------------------------------------------------------------------------- +top_builddir = ../../../../../.. +include $(top_builddir)/src/Makefile.global + +NAME := utf8_and_win874 + +include ../proc.mk diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win874/utf8_and_win874.c b/src/backend/utils/mb/conversion_procs/utf8_and_win874/utf8_and_win874.c new file mode 100644 index 0000000000000000000000000000000000000000..f343dba68605985d3e0225e40db8a2e54a5d7765 --- /dev/null +++ b/src/backend/utils/mb/conversion_procs/utf8_and_win874/utf8_and_win874.c @@ -0,0 +1,69 @@ +/*------------------------------------------------------------------------- + * + * WIN874 and UTF-8 + * + * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/utf8_and_win874/Attic/utf8_and_win874.c,v 1.1 2002/08/14 02:45:10 ishii Exp $ + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" +#include "fmgr.h" +#include "mb/pg_wchar.h" +#include "../../Unicode/utf8_to_win874.map" +#include "../../Unicode/win874_to_utf8.map" + +PG_FUNCTION_INFO_V1(utf_to_win874) +PG_FUNCTION_INFO_V1(win874_to_utf) + +extern Datum utf_to_win874(PG_FUNCTION_ARGS); +extern Datum win874_to_utf(PG_FUNCTION_ARGS); + +/* ---------- + * conv_proc( + * INTEGER, -- source encoding id + * INTEGER, -- destination encoding id + * OPAQUE, -- source string (null terminated C string) + * OPAQUE, -- destination string (null terminated C string) + * INTEGER -- source string length + * ) returns INTEGER; -- dummy. returns nothing, actually. + * ---------- + */ + +Datum +utf_to_win874(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_UTF8); + Assert(PG_GETARG_INT32(1) == PG_WIN874); + Assert(len > 0); + + UtfToLocal(src, dest, ULmapWIN874, + sizeof(ULmapWIN874) / sizeof(pg_utf_to_local), len); + + PG_RETURN_INT32(0); +} + +Datum +win874_to_utf(PG_FUNCTION_ARGS) +{ + unsigned char *src = PG_GETARG_CSTRING(2); + unsigned char *dest = PG_GETARG_CSTRING(3); + int len = PG_GETARG_INT32(4); + + Assert(PG_GETARG_INT32(0) == PG_WIN874); + Assert(PG_GETARG_INT32(1) == PG_UTF8); + Assert(len > 0); + + LocalToUtf(src, dest, LUmapWIN874, + sizeof(LUmapWIN874) / sizeof(pg_local_to_utf), PG_WIN874, len); + + PG_RETURN_INT32(0); +} diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h index f54000e4e8792bdb0ee507d55972a803112d97b7..f89b5e7f3f659d0f3773f882e0ab996b3ce19b3c 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.41 2002/07/29 08:04:55 ishii Exp $ */ +/* $Id: pg_wchar.h,v 1.42 2002/08/14 02:45:10 ishii Exp $ */ #ifndef PG_WCHAR_H #define PG_WCHAR_H @@ -327,5 +327,9 @@ extern char *pg_verifymbstr(const unsigned char *mbstr, int len); extern void pg_ascii2mic(unsigned char *src, unsigned char *dest, int len); extern void pg_mic2ascii(unsigned char *src, unsigned char *dest, int len); extern void pg_print_bogus_char(unsigned char **mic, unsigned char **p); +extern void latin2mic(unsigned char *l, unsigned char *p, int len, int lc); +extern void mic2latin(unsigned char *mic, unsigned char *p, int len, int lc); +extern void latin2mic_with_table(unsigned char *l, unsigned char *p, int len, int lc, unsigned char *tab); +extern void mic2latin_with_table(unsigned char *mic, unsigned char *p, int len, int lc, unsigned char *tab); #endif /* PG_WCHAR_H */ diff --git a/src/test/regress/expected/conversion.out b/src/test/regress/expected/conversion.out index f1f496464b140ced68b01bd9ee0d7fd5dcc47fb6..dbe76e09746f7231036b2549d7b07f385a41a3a7 100644 --- a/src/test/regress/expected/conversion.out +++ b/src/test/regress/expected/conversion.out @@ -25,190 +25,684 @@ DROP CONVERSION myconv; DROP CONVERSION mydef; -- -- make sure all pre-defined conversions are fine. --- UNICODE --> SQL_ASCII -SELECT CONVERT('foo' USING utf8_to_ascii); +-- SQL_ASCII --> MULE_INTERNAL +SELECT CONVERT('foo' USING ascii_to_mic); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'SQL_ASCII', 'MULE_INTERNAL'); + convert +--------- + foo +(1 row) + +-- MULE_INTERNAL --> SQL_ASCII +SELECT CONVERT('foo' USING mic_to_ascii); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'MULE_INTERNAL', 'SQL_ASCII'); + convert +--------- + foo +(1 row) + +-- KOI8R --> MULE_INTERNAL +SELECT CONVERT('foo' USING koi8r_to_mic); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'KOI8R', 'MULE_INTERNAL'); + convert +--------- + foo +(1 row) + +-- MULE_INTERNAL --> KOI8R +SELECT CONVERT('foo' USING mic_to_koi8r); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'MULE_INTERNAL', 'KOI8R'); + convert +--------- + foo +(1 row) + +-- ISO-8859-5 --> MULE_INTERNAL +SELECT CONVERT('foo' USING iso_8859_5_to_mic); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'ISO-8859-5', 'MULE_INTERNAL'); + convert +--------- + foo +(1 row) + +-- MULE_INTERNAL --> ISO-8859-5 +SELECT CONVERT('foo' USING mic_to_iso_8859_5); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'MULE_INTERNAL', 'ISO-8859-5'); + convert +--------- + foo +(1 row) + +-- WIN1251 --> MULE_INTERNAL +SELECT CONVERT('foo' USING win1251_to_mic); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'WIN1251', 'MULE_INTERNAL'); + convert +--------- + foo +(1 row) + +-- MULE_INTERNAL --> WIN1251 +SELECT CONVERT('foo' USING mic_to_win1251); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'MULE_INTERNAL', 'WIN1251'); + convert +--------- + foo +(1 row) + +-- ALT --> MULE_INTERNAL +SELECT CONVERT('foo' USING win866_to_mic); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'ALT', 'MULE_INTERNAL'); + convert +--------- + foo +(1 row) + +-- MULE_INTERNAL --> ALT +SELECT CONVERT('foo' USING mic_to_win866); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'MULE_INTERNAL', 'ALT'); + convert +--------- + foo +(1 row) + +-- KOI8R --> WIN1251 +SELECT CONVERT('foo' USING koi8r_to_win1251); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'KOI8R', 'WIN1251'); + convert +--------- + foo +(1 row) + +-- WIN1251 --> KOI8R +SELECT CONVERT('foo' USING win1251_to_koi8r); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'WIN1251', 'KOI8R'); + convert +--------- + foo +(1 row) + +-- KOI8R --> ALT +SELECT CONVERT('foo' USING koi8r_to_win866); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'KOI8R', 'ALT'); + convert +--------- + foo +(1 row) + +-- ALT --> KOI8R +SELECT CONVERT('foo' USING win866_to_koi8r); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'ALT', 'KOI8R'); + convert +--------- + foo +(1 row) + +-- ALT --> WIN1251 +SELECT CONVERT('foo' USING win866_to_win1251); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'ALT', 'WIN1251'); + convert +--------- + foo +(1 row) + +-- WIN1251 --> ALT +SELECT CONVERT('foo' USING win1251_to_win866); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'WIN1251', 'ALT'); + convert +--------- + foo +(1 row) + +-- ISO-8859-5 --> KOI8R +SELECT CONVERT('foo' USING iso_8859_5_to_koi8r); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'ISO-8859-5', 'KOI8R'); + convert +--------- + foo +(1 row) + +-- KOI8R --> ISO-8859-5 +SELECT CONVERT('foo' USING koi8r_to_iso_8859_5); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'KOI8R', 'ISO-8859-5'); + convert +--------- + foo +(1 row) + +-- ISO-8859-5 --> WIN1251 +SELECT CONVERT('foo' USING iso_8859_5_to_win1251); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'ISO-8859-5', 'WIN1251'); + convert +--------- + foo +(1 row) + +-- WIN1251 --> ISO-8859-5 +SELECT CONVERT('foo' USING win1251_to_iso_8859_5); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'WIN1251', 'ISO-8859-5'); + convert +--------- + foo +(1 row) + +-- ISO-8859-5 --> ALT +SELECT CONVERT('foo' USING iso_8859_5_to_win866); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'ISO-8859-5', 'ALT'); + convert +--------- + foo +(1 row) + +-- ALT --> ISO-8859-5 +SELECT CONVERT('foo' USING win866_to_iso_8859_5); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'ALT', 'ISO-8859-5'); + convert +--------- + foo +(1 row) + +-- EUC_CN --> MULE_INTERNAL +SELECT CONVERT('foo' USING euc_cn_to_mic); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'EUC_CN', 'MULE_INTERNAL'); + convert +--------- + foo +(1 row) + +-- MULE_INTERNAL --> EUC_CN +SELECT CONVERT('foo' USING mic_to_euc_cn); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_CN'); + convert +--------- + foo +(1 row) + +-- EUC_JP --> SJIS +SELECT CONVERT('foo' USING euc_jp_to_sjis); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'EUC_JP', 'SJIS'); + convert +--------- + foo +(1 row) + +-- SJIS --> EUC_JP +SELECT CONVERT('foo' USING sjis_to_euc_jp); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'SJIS', 'EUC_JP'); + convert +--------- + foo +(1 row) + +-- EUC_JP --> MULE_INTERNAL +SELECT CONVERT('foo' USING euc_jp_to_mic); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'EUC_JP', 'MULE_INTERNAL'); + convert +--------- + foo +(1 row) + +-- SJIS --> MULE_INTERNAL +SELECT CONVERT('foo' USING sjis_to_mic); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'SJIS', 'MULE_INTERNAL'); + convert +--------- + foo +(1 row) + +-- MULE_INTERNAL --> EUC_JP +SELECT CONVERT('foo' USING mic_to_euc_jp); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_JP'); + convert +--------- + foo +(1 row) + +-- MULE_INTERNAL --> SJIS +SELECT CONVERT('foo' USING mic_to_sjis); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'MULE_INTERNAL', 'SJIS'); + convert +--------- + foo +(1 row) + +-- EUC_KR --> MULE_INTERNAL +SELECT CONVERT('foo' USING euc_kr_to_mic); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'EUC_KR', 'MULE_INTERNAL'); + convert +--------- + foo +(1 row) + +-- MULE_INTERNAL --> EUC_KR +SELECT CONVERT('foo' USING mic_to_euc_kr); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_KR'); + convert +--------- + foo +(1 row) + +-- EUC_TW --> BIG5 +SELECT CONVERT('foo' USING euc_tw_to_big5); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'EUC_TW', 'BIG5'); + convert +--------- + foo +(1 row) + +-- BIG5 --> EUC_TW +SELECT CONVERT('foo' USING big5_to_euc_tw); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'BIG5', 'EUC_TW'); + convert +--------- + foo +(1 row) + +-- EUC_TW --> MULE_INTERNAL +SELECT CONVERT('foo' USING euc_tw_to_mic); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'EUC_TW', 'MULE_INTERNAL'); + convert +--------- + foo +(1 row) + +-- BIG5 --> MULE_INTERNAL +SELECT CONVERT('foo' USING big5_to_mic); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'BIG5', 'MULE_INTERNAL'); + convert +--------- + foo +(1 row) + +-- MULE_INTERNAL --> EUC_TW +SELECT CONVERT('foo' USING mic_to_euc_tw); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_TW'); + convert +--------- + foo +(1 row) + +-- MULE_INTERNAL --> BIG5 +SELECT CONVERT('foo' USING mic_to_big5); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'MULE_INTERNAL', 'BIG5'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UNICODE', 'SQL_ASCII'); +-- LATIN2 --> MULE_INTERNAL +SELECT CONVERT('foo' USING iso_8859_2_to_mic); convert --------- foo (1 row) --- SQL_ASCII --> UNICODE -SELECT CONVERT('foo' USING ascii_to_utf8); +SELECT CONVERT('foo', 'LATIN2', 'MULE_INTERNAL'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'SQL_ASCII', 'UNICODE'); +-- MULE_INTERNAL --> LATIN2 +SELECT CONVERT('foo' USING mic_to_iso_8859_2); convert --------- foo (1 row) --- UNICODE --> LATIN1 -SELECT CONVERT('foo' USING utf8_to_iso8859_1); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'LATIN2'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UNICODE', 'LATIN1'); +-- WIN1250 --> MULE_INTERNAL +SELECT CONVERT('foo' USING win1250_to_mic); convert --------- foo (1 row) --- LATIN1 --> UNICODE -SELECT CONVERT('foo' USING iso8859_1_to_utf8); +SELECT CONVERT('foo', 'WIN1250', 'MULE_INTERNAL'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'LATIN1', 'UNICODE'); +-- MULE_INTERNAL --> WIN1250 +SELECT CONVERT('foo' USING mic_to_win1250); convert --------- foo (1 row) --- EUC_JP --> UNICODE -SELECT CONVERT('foo' USING euc_jp_to_utf8); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'WIN1250'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'EUC_JP', 'UNICODE'); +-- LATIN2 --> WIN1250 +SELECT CONVERT('foo' USING iso_8859_2_to_win1250); convert --------- foo (1 row) --- UNICODE --> EUC_JP -SELECT CONVERT('foo' USING utf8_to_euc_jp); +SELECT CONVERT('foo', 'LATIN2', 'WIN1250'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UNICODE', 'EUC_JP'); +-- WIN1250 --> LATIN2 +SELECT CONVERT('foo' USING win1250_to_iso_8859_2); convert --------- foo (1 row) --- EUC_KR --> UNICODE -SELECT CONVERT('foo' USING euc_kr_to_utf8); +SELECT CONVERT('foo', 'WIN1250', 'LATIN2'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'EUC_KR', 'UNICODE'); +-- LATIN1 --> MULE_INTERNAL +SELECT CONVERT('foo' USING iso_8859_1_to_mic); convert --------- foo (1 row) --- UNICODE --> EUC_KR -SELECT CONVERT('foo' USING utf8_to_euc_kr); +SELECT CONVERT('foo', 'LATIN1', 'MULE_INTERNAL'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UNICODE', 'EUC_KR'); +-- MULE_INTERNAL --> LATIN1 +SELECT CONVERT('foo' USING mic_to_iso_8859_1); convert --------- foo (1 row) --- EUC_CN --> UNICODE -SELECT CONVERT('foo' USING euc_cn_to_utf8); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'LATIN1'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'EUC_CN', 'UNICODE'); +-- LATIN3 --> MULE_INTERNAL +SELECT CONVERT('foo' USING iso_8859_3_to_mic); convert --------- foo (1 row) --- UNICODE --> EUC_CN -SELECT CONVERT('foo' USING utf8_to_euc_cn); +SELECT CONVERT('foo', 'LATIN3', 'MULE_INTERNAL'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UNICODE', 'EUC_CN'); +-- MULE_INTERNAL --> LATIN3 +SELECT CONVERT('foo' USING mic_to_iso_8859_3); convert --------- foo (1 row) --- EUC_TW --> UNICODE -SELECT CONVERT('foo' USING euc_tw_to_utf8); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'LATIN3'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'EUC_TW', 'UNICODE'); +-- LATIN4 --> MULE_INTERNAL +SELECT CONVERT('foo' USING iso_8859_4_to_mic); convert --------- foo (1 row) --- UNICODE --> EUC_TW -SELECT CONVERT('foo' USING utf8_to_euc_tw); +SELECT CONVERT('foo', 'LATIN4', 'MULE_INTERNAL'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UNICODE', 'EUC_TW'); +-- MULE_INTERNAL --> LATIN4 +SELECT CONVERT('foo' USING mic_to_iso_8859_4); convert --------- foo (1 row) --- SJIS --> UNICODE -SELECT CONVERT('foo' USING sjis_to_utf8); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'LATIN4'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'SJIS', 'UNICODE'); +-- SQL_ASCII --> UNICODE +SELECT CONVERT('foo' USING ascii_to_utf_8); convert --------- foo (1 row) --- UNICODE --> SJIS -SELECT CONVERT('foo' USING utf8_to_sjis); +SELECT CONVERT('foo', 'SQL_ASCII', 'UNICODE'); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UNICODE', 'SJIS'); +-- UNICODE --> SQL_ASCII +SELECT CONVERT('foo' USING utf_8_to_ascii); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'UNICODE', 'SQL_ASCII'); convert --------- foo (1 row) -- BIG5 --> UNICODE -SELECT CONVERT('foo' USING big5_to_utf8); +SELECT CONVERT('foo' USING big5_to_utf_8); convert --------- foo @@ -221,7 +715,7 @@ SELECT CONVERT('foo', 'BIG5', 'UNICODE'); (1 row) -- UNICODE --> BIG5 -SELECT CONVERT('foo' USING utf8_to_big5); +SELECT CONVERT('foo' USING utf_8_to_big5); convert --------- foo @@ -233,138 +727,242 @@ SELECT CONVERT('foo', 'UNICODE', 'BIG5'); foo (1 row) --- GBK --> UNICODE -SELECT CONVERT('foo' USING gbk_to_utf8); +-- UNICODE --> KOI8R +SELECT CONVERT('foo' USING utf_8_to_koi8r); convert --------- foo (1 row) -SELECT CONVERT('foo', 'GBK', 'UNICODE'); +SELECT CONVERT('foo', 'UNICODE', 'KOI8R'); convert --------- foo (1 row) --- UNICODE --> GBK -SELECT CONVERT('foo' USING utf8_to_gbk); +-- KOI8R --> UNICODE +SELECT CONVERT('foo' USING koi8r_to_utf_8); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UNICODE', 'GBK'); +SELECT CONVERT('foo', 'KOI8R', 'UNICODE'); convert --------- foo (1 row) --- GB18030 --> UNICODE -SELECT CONVERT('foo' USING gb18030_to_utf8); +-- UNICODE --> WIN1251 +SELECT CONVERT('foo' USING utf_8_to_win1251); convert --------- foo (1 row) -SELECT CONVERT('foo', 'GB18030', 'UNICODE'); +SELECT CONVERT('foo', 'UNICODE', 'WIN1251'); convert --------- foo (1 row) --- UNICODE --> GB18030 -SELECT CONVERT('foo' USING utf8_to_gb18030); +-- WIN1251 --> UNICODE +SELECT CONVERT('foo' USING win1251_to_utf_8); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UNICODE', 'GB18030'); +SELECT CONVERT('foo', 'WIN1251', 'UNICODE'); convert --------- foo (1 row) --- UHC --> UNICODE -SELECT CONVERT('foo' USING uhc_to_utf8); +-- UNICODE --> ALT +SELECT CONVERT('foo' USING utf_8_to_win866); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UHC', 'UNICODE'); +SELECT CONVERT('foo', 'UNICODE', 'ALT'); convert --------- foo (1 row) --- UNICODE --> UHC -SELECT CONVERT('foo' USING utf8_to_uhc); +-- ALT --> UNICODE +SELECT CONVERT('foo' USING win866_to_utf_8); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UNICODE', 'UHC'); +SELECT CONVERT('foo', 'ALT', 'UNICODE'); convert --------- foo (1 row) --- JOHAB --> UNICODE -SELECT CONVERT('foo' USING johab_to_utf8); +-- EUC_CN --> UNICODE +SELECT CONVERT('foo' USING euc_cn_to_utf_8); convert --------- foo (1 row) -SELECT CONVERT('foo', 'JOHAB', 'UNICODE'); +SELECT CONVERT('foo', 'EUC_CN', 'UNICODE'); convert --------- foo (1 row) --- UNICODE --> JOHAB -SELECT CONVERT('foo' USING utf8_to_johab); +-- UNICODE --> EUC_CN +SELECT CONVERT('foo' USING utf_8_to_euc_cn); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UNICODE', 'JOHAB'); +SELECT CONVERT('foo', 'UNICODE', 'EUC_CN'); convert --------- foo (1 row) --- TCVN --> UNICODE -SELECT CONVERT('foo' USING tcvn_to_utf8); +-- EUC_JP --> UNICODE +SELECT CONVERT('foo' USING euc_jp_to_utf_8); convert --------- foo (1 row) -SELECT CONVERT('foo', 'TCVN', 'UNICODE'); +SELECT CONVERT('foo', 'EUC_JP', 'UNICODE'); convert --------- foo (1 row) --- UNICODE --> TCVN -SELECT CONVERT('foo' USING utf8_to_tcvn); +-- UNICODE --> EUC_JP +SELECT CONVERT('foo' USING utf_8_to_euc_jp); convert --------- foo (1 row) -SELECT CONVERT('foo', 'UNICODE', 'TCVN'); +SELECT CONVERT('foo', 'UNICODE', 'EUC_JP'); + convert +--------- + foo +(1 row) + +-- EUC_KR --> UNICODE +SELECT CONVERT('foo' USING euc_kr_to_utf_8); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'EUC_KR', 'UNICODE'); + convert +--------- + foo +(1 row) + +-- UNICODE --> EUC_KR +SELECT CONVERT('foo' USING utf_8_to_euc_kr); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'UNICODE', 'EUC_KR'); + convert +--------- + foo +(1 row) + +-- EUC_TW --> UNICODE +SELECT CONVERT('foo' USING euc_tw_to_utf_8); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'EUC_TW', 'UNICODE'); + convert +--------- + foo +(1 row) + +-- UNICODE --> EUC_TW +SELECT CONVERT('foo' USING utf_8_to_euc_tw); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'UNICODE', 'EUC_TW'); + convert +--------- + foo +(1 row) + +-- GB18030 --> UNICODE +SELECT CONVERT('foo' USING gb18030_to_utf_8); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'GB18030', 'UNICODE'); + convert +--------- + foo +(1 row) + +-- UNICODE --> GB18030 +SELECT CONVERT('foo' USING utf_8_to_gb18030); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'UNICODE', 'GB18030'); + convert +--------- + foo +(1 row) + +-- GBK --> UNICODE +SELECT CONVERT('foo' USING gbk_to_utf_8); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'GBK', 'UNICODE'); + convert +--------- + foo +(1 row) + +-- UNICODE --> GBK +SELECT CONVERT('foo' USING utf_8_to_gbk); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'UNICODE', 'GBK'); convert --------- foo (1 row) -- UNICODE --> LATIN2 -SELECT CONVERT('foo' USING utf8_to_iso8859_2); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_2); convert --------- foo @@ -377,7 +975,7 @@ SELECT CONVERT('foo', 'UNICODE', 'LATIN2'); (1 row) -- LATIN2 --> UNICODE -SELECT CONVERT('foo' USING iso8859_2_to_utf8); +SELECT CONVERT('foo' USING iso_8859_2_to_utf_8); convert --------- foo @@ -390,7 +988,7 @@ SELECT CONVERT('foo', 'LATIN2', 'UNICODE'); (1 row) -- UNICODE --> LATIN3 -SELECT CONVERT('foo' USING utf8_to_iso8859_3); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_3); convert --------- foo @@ -403,7 +1001,7 @@ SELECT CONVERT('foo', 'UNICODE', 'LATIN3'); (1 row) -- LATIN3 --> UNICODE -SELECT CONVERT('foo' USING iso8859_3_to_utf8); +SELECT CONVERT('foo' USING iso_8859_3_to_utf_8); convert --------- foo @@ -416,7 +1014,7 @@ SELECT CONVERT('foo', 'LATIN3', 'UNICODE'); (1 row) -- UNICODE --> LATIN4 -SELECT CONVERT('foo' USING utf8_to_iso8859_4); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_4); convert --------- foo @@ -429,7 +1027,7 @@ SELECT CONVERT('foo', 'UNICODE', 'LATIN4'); (1 row) -- LATIN4 --> UNICODE -SELECT CONVERT('foo' USING iso8859_4_to_utf8); +SELECT CONVERT('foo' USING iso_8859_4_to_utf_8); convert --------- foo @@ -442,7 +1040,7 @@ SELECT CONVERT('foo', 'LATIN4', 'UNICODE'); (1 row) -- UNICODE --> LATIN5 -SELECT CONVERT('foo' USING utf8_to_iso8859_9); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_9); convert --------- foo @@ -455,7 +1053,7 @@ SELECT CONVERT('foo', 'UNICODE', 'LATIN5'); (1 row) -- LATIN5 --> UNICODE -SELECT CONVERT('foo' USING iso8859_9_to_utf8); +SELECT CONVERT('foo' USING iso_8859_9_to_utf_8); convert --------- foo @@ -468,7 +1066,7 @@ SELECT CONVERT('foo', 'LATIN5', 'UNICODE'); (1 row) -- UNICODE --> LATIN6 -SELECT CONVERT('foo' USING utf8_to_iso8859_10); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_10); convert --------- foo @@ -481,7 +1079,7 @@ SELECT CONVERT('foo', 'UNICODE', 'LATIN6'); (1 row) -- LATIN6 --> UNICODE -SELECT CONVERT('foo' USING iso8859_10_to_utf8); +SELECT CONVERT('foo' USING iso_8859_10_to_utf_8); convert --------- foo @@ -494,7 +1092,7 @@ SELECT CONVERT('foo', 'LATIN6', 'UNICODE'); (1 row) -- UNICODE --> LATIN7 -SELECT CONVERT('foo' USING utf8_to_iso8859_13); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_13); convert --------- foo @@ -507,7 +1105,7 @@ SELECT CONVERT('foo', 'UNICODE', 'LATIN7'); (1 row) -- LATIN7 --> UNICODE -SELECT CONVERT('foo' USING iso8859_13_to_utf8); +SELECT CONVERT('foo' USING iso_8859_13_to_utf_8); convert --------- foo @@ -520,7 +1118,7 @@ SELECT CONVERT('foo', 'LATIN7', 'UNICODE'); (1 row) -- UNICODE --> LATIN8 -SELECT CONVERT('foo' USING utf8_to_iso8859_14); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_14); convert --------- foo @@ -533,7 +1131,7 @@ SELECT CONVERT('foo', 'UNICODE', 'LATIN8'); (1 row) -- LATIN8 --> UNICODE -SELECT CONVERT('foo' USING iso8859_14_to_utf8); +SELECT CONVERT('foo' USING iso_8859_14_to_utf_8); convert --------- foo @@ -546,7 +1144,7 @@ SELECT CONVERT('foo', 'LATIN8', 'UNICODE'); (1 row) -- UNICODE --> LATIN9 -SELECT CONVERT('foo' USING utf8_to_iso8859_15); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_15); convert --------- foo @@ -559,7 +1157,7 @@ SELECT CONVERT('foo', 'UNICODE', 'LATIN9'); (1 row) -- LATIN9 --> UNICODE -SELECT CONVERT('foo' USING iso8859_15_to_utf8); +SELECT CONVERT('foo' USING iso_8859_15_to_utf_8); convert --------- foo @@ -572,7 +1170,7 @@ SELECT CONVERT('foo', 'LATIN9', 'UNICODE'); (1 row) -- UNICODE --> LATIN10 -SELECT CONVERT('foo' USING utf8_to_iso8859_16); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_16); convert --------- foo @@ -585,7 +1183,7 @@ SELECT CONVERT('foo', 'UNICODE', 'LATIN10'); (1 row) -- LATIN10 --> UNICODE -SELECT CONVERT('foo' USING iso8859_16_to_utf8); +SELECT CONVERT('foo' USING iso_8859_16_to_utf_8); convert --------- foo @@ -598,7 +1196,7 @@ SELECT CONVERT('foo', 'LATIN10', 'UNICODE'); (1 row) -- UNICODE --> ISO-8859-5 -SELECT CONVERT('foo' USING utf8_to_iso8859_5); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_5); convert --------- foo @@ -611,7 +1209,7 @@ SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-5'); (1 row) -- ISO-8859-5 --> UNICODE -SELECT CONVERT('foo' USING iso8859_5_to_utf8); +SELECT CONVERT('foo' USING iso_8859_5_to_utf_8); convert --------- foo @@ -624,7 +1222,7 @@ SELECT CONVERT('foo', 'ISO-8859-5', 'UNICODE'); (1 row) -- UNICODE --> ISO-8859-6 -SELECT CONVERT('foo' USING utf8_to_iso8859_6); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_6); convert --------- foo @@ -637,7 +1235,7 @@ SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-6'); (1 row) -- ISO-8859-6 --> UNICODE -SELECT CONVERT('foo' USING iso8859_6_to_utf8); +SELECT CONVERT('foo' USING iso_8859_6_to_utf_8); convert --------- foo @@ -650,7 +1248,7 @@ SELECT CONVERT('foo', 'ISO-8859-6', 'UNICODE'); (1 row) -- UNICODE --> ISO-8859-7 -SELECT CONVERT('foo' USING utf8_to_iso8859_7); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_7); convert --------- foo @@ -663,7 +1261,7 @@ SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-7'); (1 row) -- ISO-8859-7 --> UNICODE -SELECT CONVERT('foo' USING iso8859_7_to_utf8); +SELECT CONVERT('foo' USING iso_8859_7_to_utf_8); convert --------- foo @@ -676,7 +1274,7 @@ SELECT CONVERT('foo', 'ISO-8859-7', 'UNICODE'); (1 row) -- UNICODE --> ISO-8859-8 -SELECT CONVERT('foo' USING utf8_to_iso8859_8); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_8); convert --------- foo @@ -689,7 +1287,7 @@ SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-8'); (1 row) -- ISO-8859-8 --> UNICODE -SELECT CONVERT('foo' USING iso8859_8_to_utf8); +SELECT CONVERT('foo' USING iso_8859_8_to_utf_8); convert --------- foo @@ -701,157 +1299,209 @@ SELECT CONVERT('foo', 'ISO-8859-8', 'UNICODE'); foo (1 row) --- EUC_JP --> SJIS -SELECT CONVERT('foo' USING euc_jp_to_sjis); +-- LATIN1 --> UNICODE +SELECT CONVERT('foo' USING iso_8859_1_to_utf_8); convert --------- foo (1 row) -SELECT CONVERT('foo', 'EUC_JP', 'SJIS'); +SELECT CONVERT('foo', 'LATIN1', 'UNICODE'); convert --------- foo (1 row) --- SJIS --> EUC_JP -SELECT CONVERT('foo' USING sjis_to_euc_jp); +-- UNICODE --> LATIN1 +SELECT CONVERT('foo' USING utf_8_to_iso_8859_1); convert --------- foo (1 row) -SELECT CONVERT('foo', 'SJIS', 'EUC_JP'); +SELECT CONVERT('foo', 'UNICODE', 'LATIN1'); convert --------- foo (1 row) --- EUC_JP --> MULE_INTERNAL -SELECT CONVERT('foo' USING euc_jp_to_mic); +-- JOHAB --> UNICODE +SELECT CONVERT('foo' USING johab_to_utf_8); convert --------- foo (1 row) -SELECT CONVERT('foo', 'EUC_JP', 'MULE_INTERNAL'); +SELECT CONVERT('foo', 'JOHAB', 'UNICODE'); convert --------- foo (1 row) --- SJIS --> MULE_INTERNAL -SELECT CONVERT('foo' USING sjis_to_mic); +-- UNICODE --> JOHAB +SELECT CONVERT('foo' USING utf_8_to_johab); convert --------- foo (1 row) -SELECT CONVERT('foo', 'SJIS', 'MULE_INTERNAL'); +SELECT CONVERT('foo', 'UNICODE', 'JOHAB'); convert --------- foo (1 row) --- MULE_INTERNAL --> EUC_JP -SELECT CONVERT('foo' USING mic_to_euc_jp); +-- SJIS --> UNICODE +SELECT CONVERT('foo' USING sjis_to_utf_8); convert --------- foo (1 row) -SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_JP'); +SELECT CONVERT('foo', 'SJIS', 'UNICODE'); convert --------- foo (1 row) --- MULE_INTERNAL --> SJIS -SELECT CONVERT('foo' USING mic_to_sjis); +-- UNICODE --> SJIS +SELECT CONVERT('foo' USING utf_8_to_sjis); convert --------- foo (1 row) -SELECT CONVERT('foo', 'MULE_INTERNAL', 'SJIS'); +SELECT CONVERT('foo', 'UNICODE', 'SJIS'); convert --------- foo (1 row) --- EUC_TW --> BIG5 -SELECT CONVERT('foo' USING euc_tw_to_big5); +-- TCVN --> UNICODE +SELECT CONVERT('foo' USING tcvn_to_utf_8); convert --------- foo (1 row) -SELECT CONVERT('foo', 'EUC_TW', 'BIG5'); +SELECT CONVERT('foo', 'TCVN', 'UNICODE'); convert --------- foo (1 row) --- BIG5 --> EUC_TW -SELECT CONVERT('foo' USING big5_to_euc_tw); +-- UNICODE --> TCVN +SELECT CONVERT('foo' USING utf_8_to_tcvn); convert --------- foo (1 row) -SELECT CONVERT('foo', 'BIG5', 'EUC_TW'); +SELECT CONVERT('foo', 'UNICODE', 'TCVN'); convert --------- foo (1 row) --- EUC_TW --> MULE_INTERNAL -SELECT CONVERT('foo' USING euc_tw_to_mic); +-- UHC --> UNICODE +SELECT CONVERT('foo' USING uhc_to_utf_8); convert --------- foo (1 row) -SELECT CONVERT('foo', 'EUC_TW', 'MULE_INTERNAL'); +SELECT CONVERT('foo', 'UHC', 'UNICODE'); convert --------- foo (1 row) --- BIG5 --> MULE_INTERNAL -SELECT CONVERT('foo' USING big5_to_mic); +-- UNICODE --> UHC +SELECT CONVERT('foo' USING utf_8_to_uhc); convert --------- foo (1 row) -SELECT CONVERT('foo', 'BIG5', 'MULE_INTERNAL'); +SELECT CONVERT('foo', 'UNICODE', 'UHC'); convert --------- foo (1 row) --- MULE_INTERNAL --> EUC_TW -SELECT CONVERT('foo' USING mic_to_euc_tw); +-- UNICODE --> WIN1250 +SELECT CONVERT('foo' USING utf_8_to_win1250); convert --------- foo (1 row) -SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_TW'); +SELECT CONVERT('foo', 'UNICODE', 'WIN1250'); convert --------- foo (1 row) --- MULE_INTERNAL --> BIG5 -SELECT CONVERT('foo' USING mic_to_big5); +-- WIN1250 --> UNICODE +SELECT CONVERT('foo' USING win1250_to_utf_8); convert --------- foo (1 row) -SELECT CONVERT('foo', 'MULE_INTERNAL', 'BIG5'); +SELECT CONVERT('foo', 'WIN1250', 'UNICODE'); + convert +--------- + foo +(1 row) + +-- UNICODE --> WIN1256 +SELECT CONVERT('foo' USING utf_8_to_win1256); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'UNICODE', 'WIN1256'); + convert +--------- + foo +(1 row) + +-- WIN1256 --> UNICODE +SELECT CONVERT('foo' USING win1256_to_utf_8); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'WIN1256', 'UNICODE'); + convert +--------- + foo +(1 row) + +-- UNICODE --> WIN874 +SELECT CONVERT('foo' USING utf_8_to_win874); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'UNICODE', 'WIN874'); + convert +--------- + foo +(1 row) + +-- WIN874 --> UNICODE +SELECT CONVERT('foo' USING win874_to_utf_8); + convert +--------- + foo +(1 row) + +SELECT CONVERT('foo', 'WIN874', 'UNICODE'); convert --------- foo diff --git a/src/test/regress/sql/conversion.sql b/src/test/regress/sql/conversion.sql index e4639d86278720f95dbee032ef4da7a435e68399..d95b91975f90eee1eb7dc0bfa36009d60923df32 100644 --- a/src/test/regress/sql/conversion.sql +++ b/src/test/regress/sql/conversion.sql @@ -23,198 +23,348 @@ DROP CONVERSION myconv; DROP CONVERSION mydef; -- -- make sure all pre-defined conversions are fine. --- UNICODE --> SQL_ASCII -SELECT CONVERT('foo' USING utf8_to_ascii); -SELECT CONVERT('foo', 'UNICODE', 'SQL_ASCII'); +-- SQL_ASCII --> MULE_INTERNAL +SELECT CONVERT('foo' USING ascii_to_mic); +SELECT CONVERT('foo', 'SQL_ASCII', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> SQL_ASCII +SELECT CONVERT('foo' USING mic_to_ascii); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'SQL_ASCII'); +-- KOI8R --> MULE_INTERNAL +SELECT CONVERT('foo' USING koi8r_to_mic); +SELECT CONVERT('foo', 'KOI8R', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> KOI8R +SELECT CONVERT('foo' USING mic_to_koi8r); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'KOI8R'); +-- ISO-8859-5 --> MULE_INTERNAL +SELECT CONVERT('foo' USING iso_8859_5_to_mic); +SELECT CONVERT('foo', 'ISO-8859-5', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> ISO-8859-5 +SELECT CONVERT('foo' USING mic_to_iso_8859_5); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'ISO-8859-5'); +-- WIN1251 --> MULE_INTERNAL +SELECT CONVERT('foo' USING win1251_to_mic); +SELECT CONVERT('foo', 'WIN1251', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> WIN1251 +SELECT CONVERT('foo' USING mic_to_win1251); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'WIN1251'); +-- ALT --> MULE_INTERNAL +SELECT CONVERT('foo' USING win866_to_mic); +SELECT CONVERT('foo', 'ALT', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> ALT +SELECT CONVERT('foo' USING mic_to_win866); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'ALT'); +-- KOI8R --> WIN1251 +SELECT CONVERT('foo' USING koi8r_to_win1251); +SELECT CONVERT('foo', 'KOI8R', 'WIN1251'); +-- WIN1251 --> KOI8R +SELECT CONVERT('foo' USING win1251_to_koi8r); +SELECT CONVERT('foo', 'WIN1251', 'KOI8R'); +-- KOI8R --> ALT +SELECT CONVERT('foo' USING koi8r_to_win866); +SELECT CONVERT('foo', 'KOI8R', 'ALT'); +-- ALT --> KOI8R +SELECT CONVERT('foo' USING win866_to_koi8r); +SELECT CONVERT('foo', 'ALT', 'KOI8R'); +-- ALT --> WIN1251 +SELECT CONVERT('foo' USING win866_to_win1251); +SELECT CONVERT('foo', 'ALT', 'WIN1251'); +-- WIN1251 --> ALT +SELECT CONVERT('foo' USING win1251_to_win866); +SELECT CONVERT('foo', 'WIN1251', 'ALT'); +-- ISO-8859-5 --> KOI8R +SELECT CONVERT('foo' USING iso_8859_5_to_koi8r); +SELECT CONVERT('foo', 'ISO-8859-5', 'KOI8R'); +-- KOI8R --> ISO-8859-5 +SELECT CONVERT('foo' USING koi8r_to_iso_8859_5); +SELECT CONVERT('foo', 'KOI8R', 'ISO-8859-5'); +-- ISO-8859-5 --> WIN1251 +SELECT CONVERT('foo' USING iso_8859_5_to_win1251); +SELECT CONVERT('foo', 'ISO-8859-5', 'WIN1251'); +-- WIN1251 --> ISO-8859-5 +SELECT CONVERT('foo' USING win1251_to_iso_8859_5); +SELECT CONVERT('foo', 'WIN1251', 'ISO-8859-5'); +-- ISO-8859-5 --> ALT +SELECT CONVERT('foo' USING iso_8859_5_to_win866); +SELECT CONVERT('foo', 'ISO-8859-5', 'ALT'); +-- ALT --> ISO-8859-5 +SELECT CONVERT('foo' USING win866_to_iso_8859_5); +SELECT CONVERT('foo', 'ALT', 'ISO-8859-5'); +-- EUC_CN --> MULE_INTERNAL +SELECT CONVERT('foo' USING euc_cn_to_mic); +SELECT CONVERT('foo', 'EUC_CN', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> EUC_CN +SELECT CONVERT('foo' USING mic_to_euc_cn); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_CN'); +-- EUC_JP --> SJIS +SELECT CONVERT('foo' USING euc_jp_to_sjis); +SELECT CONVERT('foo', 'EUC_JP', 'SJIS'); +-- SJIS --> EUC_JP +SELECT CONVERT('foo' USING sjis_to_euc_jp); +SELECT CONVERT('foo', 'SJIS', 'EUC_JP'); +-- EUC_JP --> MULE_INTERNAL +SELECT CONVERT('foo' USING euc_jp_to_mic); +SELECT CONVERT('foo', 'EUC_JP', 'MULE_INTERNAL'); +-- SJIS --> MULE_INTERNAL +SELECT CONVERT('foo' USING sjis_to_mic); +SELECT CONVERT('foo', 'SJIS', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> EUC_JP +SELECT CONVERT('foo' USING mic_to_euc_jp); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_JP'); +-- MULE_INTERNAL --> SJIS +SELECT CONVERT('foo' USING mic_to_sjis); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'SJIS'); +-- EUC_KR --> MULE_INTERNAL +SELECT CONVERT('foo' USING euc_kr_to_mic); +SELECT CONVERT('foo', 'EUC_KR', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> EUC_KR +SELECT CONVERT('foo' USING mic_to_euc_kr); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_KR'); +-- EUC_TW --> BIG5 +SELECT CONVERT('foo' USING euc_tw_to_big5); +SELECT CONVERT('foo', 'EUC_TW', 'BIG5'); +-- BIG5 --> EUC_TW +SELECT CONVERT('foo' USING big5_to_euc_tw); +SELECT CONVERT('foo', 'BIG5', 'EUC_TW'); +-- EUC_TW --> MULE_INTERNAL +SELECT CONVERT('foo' USING euc_tw_to_mic); +SELECT CONVERT('foo', 'EUC_TW', 'MULE_INTERNAL'); +-- BIG5 --> MULE_INTERNAL +SELECT CONVERT('foo' USING big5_to_mic); +SELECT CONVERT('foo', 'BIG5', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> EUC_TW +SELECT CONVERT('foo' USING mic_to_euc_tw); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_TW'); +-- MULE_INTERNAL --> BIG5 +SELECT CONVERT('foo' USING mic_to_big5); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'BIG5'); +-- LATIN2 --> MULE_INTERNAL +SELECT CONVERT('foo' USING iso_8859_2_to_mic); +SELECT CONVERT('foo', 'LATIN2', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> LATIN2 +SELECT CONVERT('foo' USING mic_to_iso_8859_2); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'LATIN2'); +-- WIN1250 --> MULE_INTERNAL +SELECT CONVERT('foo' USING win1250_to_mic); +SELECT CONVERT('foo', 'WIN1250', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> WIN1250 +SELECT CONVERT('foo' USING mic_to_win1250); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'WIN1250'); +-- LATIN2 --> WIN1250 +SELECT CONVERT('foo' USING iso_8859_2_to_win1250); +SELECT CONVERT('foo', 'LATIN2', 'WIN1250'); +-- WIN1250 --> LATIN2 +SELECT CONVERT('foo' USING win1250_to_iso_8859_2); +SELECT CONVERT('foo', 'WIN1250', 'LATIN2'); +-- LATIN1 --> MULE_INTERNAL +SELECT CONVERT('foo' USING iso_8859_1_to_mic); +SELECT CONVERT('foo', 'LATIN1', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> LATIN1 +SELECT CONVERT('foo' USING mic_to_iso_8859_1); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'LATIN1'); +-- LATIN3 --> MULE_INTERNAL +SELECT CONVERT('foo' USING iso_8859_3_to_mic); +SELECT CONVERT('foo', 'LATIN3', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> LATIN3 +SELECT CONVERT('foo' USING mic_to_iso_8859_3); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'LATIN3'); +-- LATIN4 --> MULE_INTERNAL +SELECT CONVERT('foo' USING iso_8859_4_to_mic); +SELECT CONVERT('foo', 'LATIN4', 'MULE_INTERNAL'); +-- MULE_INTERNAL --> LATIN4 +SELECT CONVERT('foo' USING mic_to_iso_8859_4); +SELECT CONVERT('foo', 'MULE_INTERNAL', 'LATIN4'); -- SQL_ASCII --> UNICODE -SELECT CONVERT('foo' USING ascii_to_utf8); +SELECT CONVERT('foo' USING ascii_to_utf_8); SELECT CONVERT('foo', 'SQL_ASCII', 'UNICODE'); --- UNICODE --> LATIN1 -SELECT CONVERT('foo' USING utf8_to_iso8859_1); -SELECT CONVERT('foo', 'UNICODE', 'LATIN1'); --- LATIN1 --> UNICODE -SELECT CONVERT('foo' USING iso8859_1_to_utf8); -SELECT CONVERT('foo', 'LATIN1', 'UNICODE'); +-- UNICODE --> SQL_ASCII +SELECT CONVERT('foo' USING utf_8_to_ascii); +SELECT CONVERT('foo', 'UNICODE', 'SQL_ASCII'); +-- BIG5 --> UNICODE +SELECT CONVERT('foo' USING big5_to_utf_8); +SELECT CONVERT('foo', 'BIG5', 'UNICODE'); +-- UNICODE --> BIG5 +SELECT CONVERT('foo' USING utf_8_to_big5); +SELECT CONVERT('foo', 'UNICODE', 'BIG5'); +-- UNICODE --> KOI8R +SELECT CONVERT('foo' USING utf_8_to_koi8r); +SELECT CONVERT('foo', 'UNICODE', 'KOI8R'); +-- KOI8R --> UNICODE +SELECT CONVERT('foo' USING koi8r_to_utf_8); +SELECT CONVERT('foo', 'KOI8R', 'UNICODE'); +-- UNICODE --> WIN1251 +SELECT CONVERT('foo' USING utf_8_to_win1251); +SELECT CONVERT('foo', 'UNICODE', 'WIN1251'); +-- WIN1251 --> UNICODE +SELECT CONVERT('foo' USING win1251_to_utf_8); +SELECT CONVERT('foo', 'WIN1251', 'UNICODE'); +-- UNICODE --> ALT +SELECT CONVERT('foo' USING utf_8_to_win866); +SELECT CONVERT('foo', 'UNICODE', 'ALT'); +-- ALT --> UNICODE +SELECT CONVERT('foo' USING win866_to_utf_8); +SELECT CONVERT('foo', 'ALT', 'UNICODE'); +-- EUC_CN --> UNICODE +SELECT CONVERT('foo' USING euc_cn_to_utf_8); +SELECT CONVERT('foo', 'EUC_CN', 'UNICODE'); +-- UNICODE --> EUC_CN +SELECT CONVERT('foo' USING utf_8_to_euc_cn); +SELECT CONVERT('foo', 'UNICODE', 'EUC_CN'); -- EUC_JP --> UNICODE -SELECT CONVERT('foo' USING euc_jp_to_utf8); +SELECT CONVERT('foo' USING euc_jp_to_utf_8); SELECT CONVERT('foo', 'EUC_JP', 'UNICODE'); -- UNICODE --> EUC_JP -SELECT CONVERT('foo' USING utf8_to_euc_jp); +SELECT CONVERT('foo' USING utf_8_to_euc_jp); SELECT CONVERT('foo', 'UNICODE', 'EUC_JP'); -- EUC_KR --> UNICODE -SELECT CONVERT('foo' USING euc_kr_to_utf8); +SELECT CONVERT('foo' USING euc_kr_to_utf_8); SELECT CONVERT('foo', 'EUC_KR', 'UNICODE'); -- UNICODE --> EUC_KR -SELECT CONVERT('foo' USING utf8_to_euc_kr); +SELECT CONVERT('foo' USING utf_8_to_euc_kr); SELECT CONVERT('foo', 'UNICODE', 'EUC_KR'); --- EUC_CN --> UNICODE -SELECT CONVERT('foo' USING euc_cn_to_utf8); -SELECT CONVERT('foo', 'EUC_CN', 'UNICODE'); --- UNICODE --> EUC_CN -SELECT CONVERT('foo' USING utf8_to_euc_cn); -SELECT CONVERT('foo', 'UNICODE', 'EUC_CN'); -- EUC_TW --> UNICODE -SELECT CONVERT('foo' USING euc_tw_to_utf8); +SELECT CONVERT('foo' USING euc_tw_to_utf_8); SELECT CONVERT('foo', 'EUC_TW', 'UNICODE'); -- UNICODE --> EUC_TW -SELECT CONVERT('foo' USING utf8_to_euc_tw); +SELECT CONVERT('foo' USING utf_8_to_euc_tw); SELECT CONVERT('foo', 'UNICODE', 'EUC_TW'); --- SJIS --> UNICODE -SELECT CONVERT('foo' USING sjis_to_utf8); -SELECT CONVERT('foo', 'SJIS', 'UNICODE'); --- UNICODE --> SJIS -SELECT CONVERT('foo' USING utf8_to_sjis); -SELECT CONVERT('foo', 'UNICODE', 'SJIS'); --- BIG5 --> UNICODE -SELECT CONVERT('foo' USING big5_to_utf8); -SELECT CONVERT('foo', 'BIG5', 'UNICODE'); --- UNICODE --> BIG5 -SELECT CONVERT('foo' USING utf8_to_big5); -SELECT CONVERT('foo', 'UNICODE', 'BIG5'); --- GBK --> UNICODE -SELECT CONVERT('foo' USING gbk_to_utf8); -SELECT CONVERT('foo', 'GBK', 'UNICODE'); --- UNICODE --> GBK -SELECT CONVERT('foo' USING utf8_to_gbk); -SELECT CONVERT('foo', 'UNICODE', 'GBK'); -- GB18030 --> UNICODE -SELECT CONVERT('foo' USING gb18030_to_utf8); +SELECT CONVERT('foo' USING gb18030_to_utf_8); SELECT CONVERT('foo', 'GB18030', 'UNICODE'); -- UNICODE --> GB18030 -SELECT CONVERT('foo' USING utf8_to_gb18030); +SELECT CONVERT('foo' USING utf_8_to_gb18030); SELECT CONVERT('foo', 'UNICODE', 'GB18030'); --- UHC --> UNICODE -SELECT CONVERT('foo' USING uhc_to_utf8); -SELECT CONVERT('foo', 'UHC', 'UNICODE'); --- UNICODE --> UHC -SELECT CONVERT('foo' USING utf8_to_uhc); -SELECT CONVERT('foo', 'UNICODE', 'UHC'); --- JOHAB --> UNICODE -SELECT CONVERT('foo' USING johab_to_utf8); -SELECT CONVERT('foo', 'JOHAB', 'UNICODE'); --- UNICODE --> JOHAB -SELECT CONVERT('foo' USING utf8_to_johab); -SELECT CONVERT('foo', 'UNICODE', 'JOHAB'); --- TCVN --> UNICODE -SELECT CONVERT('foo' USING tcvn_to_utf8); -SELECT CONVERT('foo', 'TCVN', 'UNICODE'); --- UNICODE --> TCVN -SELECT CONVERT('foo' USING utf8_to_tcvn); -SELECT CONVERT('foo', 'UNICODE', 'TCVN'); +-- GBK --> UNICODE +SELECT CONVERT('foo' USING gbk_to_utf_8); +SELECT CONVERT('foo', 'GBK', 'UNICODE'); +-- UNICODE --> GBK +SELECT CONVERT('foo' USING utf_8_to_gbk); +SELECT CONVERT('foo', 'UNICODE', 'GBK'); -- UNICODE --> LATIN2 -SELECT CONVERT('foo' USING utf8_to_iso8859_2); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_2); SELECT CONVERT('foo', 'UNICODE', 'LATIN2'); -- LATIN2 --> UNICODE -SELECT CONVERT('foo' USING iso8859_2_to_utf8); +SELECT CONVERT('foo' USING iso_8859_2_to_utf_8); SELECT CONVERT('foo', 'LATIN2', 'UNICODE'); -- UNICODE --> LATIN3 -SELECT CONVERT('foo' USING utf8_to_iso8859_3); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_3); SELECT CONVERT('foo', 'UNICODE', 'LATIN3'); -- LATIN3 --> UNICODE -SELECT CONVERT('foo' USING iso8859_3_to_utf8); +SELECT CONVERT('foo' USING iso_8859_3_to_utf_8); SELECT CONVERT('foo', 'LATIN3', 'UNICODE'); -- UNICODE --> LATIN4 -SELECT CONVERT('foo' USING utf8_to_iso8859_4); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_4); SELECT CONVERT('foo', 'UNICODE', 'LATIN4'); -- LATIN4 --> UNICODE -SELECT CONVERT('foo' USING iso8859_4_to_utf8); +SELECT CONVERT('foo' USING iso_8859_4_to_utf_8); SELECT CONVERT('foo', 'LATIN4', 'UNICODE'); -- UNICODE --> LATIN5 -SELECT CONVERT('foo' USING utf8_to_iso8859_9); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_9); SELECT CONVERT('foo', 'UNICODE', 'LATIN5'); -- LATIN5 --> UNICODE -SELECT CONVERT('foo' USING iso8859_9_to_utf8); +SELECT CONVERT('foo' USING iso_8859_9_to_utf_8); SELECT CONVERT('foo', 'LATIN5', 'UNICODE'); -- UNICODE --> LATIN6 -SELECT CONVERT('foo' USING utf8_to_iso8859_10); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_10); SELECT CONVERT('foo', 'UNICODE', 'LATIN6'); -- LATIN6 --> UNICODE -SELECT CONVERT('foo' USING iso8859_10_to_utf8); +SELECT CONVERT('foo' USING iso_8859_10_to_utf_8); SELECT CONVERT('foo', 'LATIN6', 'UNICODE'); -- UNICODE --> LATIN7 -SELECT CONVERT('foo' USING utf8_to_iso8859_13); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_13); SELECT CONVERT('foo', 'UNICODE', 'LATIN7'); -- LATIN7 --> UNICODE -SELECT CONVERT('foo' USING iso8859_13_to_utf8); +SELECT CONVERT('foo' USING iso_8859_13_to_utf_8); SELECT CONVERT('foo', 'LATIN7', 'UNICODE'); -- UNICODE --> LATIN8 -SELECT CONVERT('foo' USING utf8_to_iso8859_14); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_14); SELECT CONVERT('foo', 'UNICODE', 'LATIN8'); -- LATIN8 --> UNICODE -SELECT CONVERT('foo' USING iso8859_14_to_utf8); +SELECT CONVERT('foo' USING iso_8859_14_to_utf_8); SELECT CONVERT('foo', 'LATIN8', 'UNICODE'); -- UNICODE --> LATIN9 -SELECT CONVERT('foo' USING utf8_to_iso8859_15); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_15); SELECT CONVERT('foo', 'UNICODE', 'LATIN9'); -- LATIN9 --> UNICODE -SELECT CONVERT('foo' USING iso8859_15_to_utf8); +SELECT CONVERT('foo' USING iso_8859_15_to_utf_8); SELECT CONVERT('foo', 'LATIN9', 'UNICODE'); -- UNICODE --> LATIN10 -SELECT CONVERT('foo' USING utf8_to_iso8859_16); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_16); SELECT CONVERT('foo', 'UNICODE', 'LATIN10'); -- LATIN10 --> UNICODE -SELECT CONVERT('foo' USING iso8859_16_to_utf8); +SELECT CONVERT('foo' USING iso_8859_16_to_utf_8); SELECT CONVERT('foo', 'LATIN10', 'UNICODE'); -- UNICODE --> ISO-8859-5 -SELECT CONVERT('foo' USING utf8_to_iso8859_5); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_5); SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-5'); -- ISO-8859-5 --> UNICODE -SELECT CONVERT('foo' USING iso8859_5_to_utf8); +SELECT CONVERT('foo' USING iso_8859_5_to_utf_8); SELECT CONVERT('foo', 'ISO-8859-5', 'UNICODE'); -- UNICODE --> ISO-8859-6 -SELECT CONVERT('foo' USING utf8_to_iso8859_6); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_6); SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-6'); -- ISO-8859-6 --> UNICODE -SELECT CONVERT('foo' USING iso8859_6_to_utf8); +SELECT CONVERT('foo' USING iso_8859_6_to_utf_8); SELECT CONVERT('foo', 'ISO-8859-6', 'UNICODE'); -- UNICODE --> ISO-8859-7 -SELECT CONVERT('foo' USING utf8_to_iso8859_7); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_7); SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-7'); -- ISO-8859-7 --> UNICODE -SELECT CONVERT('foo' USING iso8859_7_to_utf8); +SELECT CONVERT('foo' USING iso_8859_7_to_utf_8); SELECT CONVERT('foo', 'ISO-8859-7', 'UNICODE'); -- UNICODE --> ISO-8859-8 -SELECT CONVERT('foo' USING utf8_to_iso8859_8); +SELECT CONVERT('foo' USING utf_8_to_iso_8859_8); SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-8'); -- ISO-8859-8 --> UNICODE -SELECT CONVERT('foo' USING iso8859_8_to_utf8); +SELECT CONVERT('foo' USING iso_8859_8_to_utf_8); SELECT CONVERT('foo', 'ISO-8859-8', 'UNICODE'); --- EUC_JP --> SJIS -SELECT CONVERT('foo' USING euc_jp_to_sjis); -SELECT CONVERT('foo', 'EUC_JP', 'SJIS'); --- SJIS --> EUC_JP -SELECT CONVERT('foo' USING sjis_to_euc_jp); -SELECT CONVERT('foo', 'SJIS', 'EUC_JP'); --- EUC_JP --> MULE_INTERNAL -SELECT CONVERT('foo' USING euc_jp_to_mic); -SELECT CONVERT('foo', 'EUC_JP', 'MULE_INTERNAL'); --- SJIS --> MULE_INTERNAL -SELECT CONVERT('foo' USING sjis_to_mic); -SELECT CONVERT('foo', 'SJIS', 'MULE_INTERNAL'); --- MULE_INTERNAL --> EUC_JP -SELECT CONVERT('foo' USING mic_to_euc_jp); -SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_JP'); --- MULE_INTERNAL --> SJIS -SELECT CONVERT('foo' USING mic_to_sjis); -SELECT CONVERT('foo', 'MULE_INTERNAL', 'SJIS'); --- EUC_TW --> BIG5 -SELECT CONVERT('foo' USING euc_tw_to_big5); -SELECT CONVERT('foo', 'EUC_TW', 'BIG5'); --- BIG5 --> EUC_TW -SELECT CONVERT('foo' USING big5_to_euc_tw); -SELECT CONVERT('foo', 'BIG5', 'EUC_TW'); --- EUC_TW --> MULE_INTERNAL -SELECT CONVERT('foo' USING euc_tw_to_mic); -SELECT CONVERT('foo', 'EUC_TW', 'MULE_INTERNAL'); --- BIG5 --> MULE_INTERNAL -SELECT CONVERT('foo' USING big5_to_mic); -SELECT CONVERT('foo', 'BIG5', 'MULE_INTERNAL'); --- MULE_INTERNAL --> EUC_TW -SELECT CONVERT('foo' USING mic_to_euc_tw); -SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_TW'); --- MULE_INTERNAL --> BIG5 -SELECT CONVERT('foo' USING mic_to_big5); -SELECT CONVERT('foo', 'MULE_INTERNAL', 'BIG5'); +-- LATIN1 --> UNICODE +SELECT CONVERT('foo' USING iso_8859_1_to_utf_8); +SELECT CONVERT('foo', 'LATIN1', 'UNICODE'); +-- UNICODE --> LATIN1 +SELECT CONVERT('foo' USING utf_8_to_iso_8859_1); +SELECT CONVERT('foo', 'UNICODE', 'LATIN1'); +-- JOHAB --> UNICODE +SELECT CONVERT('foo' USING johab_to_utf_8); +SELECT CONVERT('foo', 'JOHAB', 'UNICODE'); +-- UNICODE --> JOHAB +SELECT CONVERT('foo' USING utf_8_to_johab); +SELECT CONVERT('foo', 'UNICODE', 'JOHAB'); +-- SJIS --> UNICODE +SELECT CONVERT('foo' USING sjis_to_utf_8); +SELECT CONVERT('foo', 'SJIS', 'UNICODE'); +-- UNICODE --> SJIS +SELECT CONVERT('foo' USING utf_8_to_sjis); +SELECT CONVERT('foo', 'UNICODE', 'SJIS'); +-- TCVN --> UNICODE +SELECT CONVERT('foo' USING tcvn_to_utf_8); +SELECT CONVERT('foo', 'TCVN', 'UNICODE'); +-- UNICODE --> TCVN +SELECT CONVERT('foo' USING utf_8_to_tcvn); +SELECT CONVERT('foo', 'UNICODE', 'TCVN'); +-- UHC --> UNICODE +SELECT CONVERT('foo' USING uhc_to_utf_8); +SELECT CONVERT('foo', 'UHC', 'UNICODE'); +-- UNICODE --> UHC +SELECT CONVERT('foo' USING utf_8_to_uhc); +SELECT CONVERT('foo', 'UNICODE', 'UHC'); +-- UNICODE --> WIN1250 +SELECT CONVERT('foo' USING utf_8_to_win1250); +SELECT CONVERT('foo', 'UNICODE', 'WIN1250'); +-- WIN1250 --> UNICODE +SELECT CONVERT('foo' USING win1250_to_utf_8); +SELECT CONVERT('foo', 'WIN1250', 'UNICODE'); +-- UNICODE --> WIN1256 +SELECT CONVERT('foo' USING utf_8_to_win1256); +SELECT CONVERT('foo', 'UNICODE', 'WIN1256'); +-- WIN1256 --> UNICODE +SELECT CONVERT('foo' USING win1256_to_utf_8); +SELECT CONVERT('foo', 'WIN1256', 'UNICODE'); +-- UNICODE --> WIN874 +SELECT CONVERT('foo' USING utf_8_to_win874); +SELECT CONVERT('foo', 'UNICODE', 'WIN874'); +-- WIN874 --> UNICODE +SELECT CONVERT('foo' USING win874_to_utf_8); +SELECT CONVERT('foo', 'WIN874', 'UNICODE'); -- -- return to the super user --