Add SQL99 CONVERT() function.

This commit is contained in:
Tatsuo Ishii 2002-08-06 05:40:47 +00:00
parent 34f03b1630
commit 6206a880cf
15 changed files with 1237 additions and 211 deletions

View File

@ -1,5 +1,5 @@
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.107 2002/08/04 19:51:30 momjian Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.108 2002/08/06 05:40:44 ishii Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
@ -857,6 +857,19 @@ PostgreSQL documentation
<entry><literal>4</literal></entry> <entry><literal>4</literal></entry>
</row> </row>
<row>
<entry><function>convert</function>(<parameter>string</parameter>
using <parameter>conversion_name</parameter>)</entry>
<entry><type>text</type></entry>
<entry>Change encoding using specified conversion name.
Conversions can be defined by <command>CREATE CONVERSION</command>.
Also there are some pre-defined conversion names.
See <xref linkend="conversion-names"> for available
conversion names. </entry>
<entry><literal>convert('PostgreSQL' using iso8859_1_to_utf8)</literal></entry>
<entry><literal>'PostgreSQL' in UNICODE(UTF-8) encoding</literal></entry>
</row>
<row> <row>
<entry><function>lower</function>(<parameter>string</parameter>)</entry> <entry><function>lower</function>(<parameter>string</parameter>)</entry>
<entry><type>text</type></entry> <entry><type>text</type></entry>
@ -947,6 +960,405 @@ PostgreSQL documentation
</tgroup> </tgroup>
</table> </table>
<table id="conversion-names">
<title>Available conversion names</title>
<tgroup cols="3">
<thead>
<row>
<entry>conversion</entry>
<entry>source encoding</entry>
<entry>destination encoding</entry>
</row>
</thead>
<tbody>
<row>
<entry>ascii_to_utf8</entry>
<entry>SQL_ASCII</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>big5_to_euc_tw</entry>
<entry>BIG5</entry>
<entry>EUC_TW</entry>
</row>
<row>
<entry>big5_to_mic</entry>
<entry>BIG5</entry>
<entry>MULE_INTERNAL</entry>
</row>
<row>
<entry>big5_to_utf8</entry>
<entry>BIG5</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>euc_cn_to_utf8</entry>
<entry>EUC_CN</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>euc_jp_to_mic</entry>
<entry>EUC_JP</entry>
<entry>MULE_INTERNAL</entry>
</row>
<row>
<entry>euc_jp_to_sjis</entry>
<entry>EUC_JP</entry>
<entry>SJIS</entry>
</row>
<row>
<entry>euc_jp_to_utf8</entry>
<entry>EUC_JP</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>euc_kr_to_utf8</entry>
<entry>EUC_KR</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>euc_tw_to_big5</entry>
<entry>EUC_TW</entry>
<entry>BIG5</entry>
</row>
<row>
<entry>euc_tw_to_mic</entry>
<entry>EUC_TW</entry>
<entry>MULE_INTERNAL</entry>
</row>
<row>
<entry>euc_tw_to_utf8</entry>
<entry>EUC_TW</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>gb18030_to_utf8</entry>
<entry>GB18030</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>gbk_to_utf8</entry>
<entry>GBK</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_10_to_utf8</entry>
<entry>LATIN6</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_13_to_utf8</entry>
<entry>LATIN7</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_14_to_utf8</entry>
<entry>LATIN8</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_15_to_utf8</entry>
<entry>LATIN9</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_16_to_utf8</entry>
<entry>LATIN10</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_1_to_utf8</entry>
<entry>LATIN1</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_2_to_utf8</entry>
<entry>LATIN2</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_3_to_utf8</entry>
<entry>LATIN3</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_4_to_utf8</entry>
<entry>LATIN4</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_5_to_utf8</entry>
<entry>ISO_8859_5</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_6_to_utf8</entry>
<entry>ISO_8859_6</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_7_to_utf8</entry>
<entry>ISO_8859_7</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_8_to_utf8</entry>
<entry>ISO_8859_8</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>iso8859_9_to_utf8</entry>
<entry>LATIN5</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>johab_to_utf8</entry>
<entry>JOHAB</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>mic_to_big5</entry>
<entry>MULE_INTERNAL</entry>
<entry>BIG5</entry>
</row>
<row>
<entry>mic_to_euc_jp</entry>
<entry>MULE_INTERNAL</entry>
<entry>EUC_JP</entry>
</row>
<row>
<entry>mic_to_euc_tw</entry>
<entry>MULE_INTERNAL</entry>
<entry>EUC_TW</entry>
</row>
<row>
<entry>mic_to_sjis</entry>
<entry>MULE_INTERNAL</entry>
<entry>SJIS</entry>
</row>
<row>
<entry>sjis_to_euc_jp</entry>
<entry>SJIS</entry>
<entry>EUC_JP</entry>
</row>
<row>
<entry>sjis_to_mic</entry>
<entry>SJIS</entry>
<entry>MULE_INTERNAL</entry>
</row>
<row>
<entry>sjis_to_utf8</entry>
<entry>SJIS</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>tcvn_to_utf8</entry>
<entry>TCVN</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>uhc_to_utf8</entry>
<entry>UHC</entry>
<entry>UNICODE</entry>
</row>
<row>
<entry>utf8_to_ascii</entry>
<entry>UNICODE</entry>
<entry>SQL_ASCII</entry>
</row>
<row>
<entry>utf8_to_big5</entry>
<entry>UNICODE</entry>
<entry>BIG5</entry>
</row>
<row>
<entry>utf8_to_euc_cn</entry>
<entry>UNICODE</entry>
<entry>EUC_CN</entry>
</row>
<row>
<entry>utf8_to_euc_jp</entry>
<entry>UNICODE</entry>
<entry>EUC_JP</entry>
</row>
<row>
<entry>utf8_to_euc_kr</entry>
<entry>UNICODE</entry>
<entry>EUC_KR</entry>
</row>
<row>
<entry>utf8_to_euc_tw</entry>
<entry>UNICODE</entry>
<entry>EUC_TW</entry>
</row>
<row>
<entry>utf8_to_gb18030</entry>
<entry>UNICODE</entry>
<entry>GB18030</entry>
</row>
<row>
<entry>utf8_to_gbk</entry>
<entry>UNICODE</entry>
<entry>GBK</entry>
</row>
<row>
<entry>utf8_to_iso8859_1</entry>
<entry>UNICODE</entry>
<entry>LATIN1</entry>
</row>
<row>
<entry>utf8_to_iso8859_10</entry>
<entry>UNICODE</entry>
<entry>LATIN6</entry>
</row>
<row>
<entry>utf8_to_iso8859_13</entry>
<entry>UNICODE</entry>
<entry>LATIN7</entry>
</row>
<row>
<entry>utf8_to_iso8859_14</entry>
<entry>UNICODE</entry>
<entry>LATIN8</entry>
</row>
<row>
<entry>utf8_to_iso8859_15</entry>
<entry>UNICODE</entry>
<entry>LATIN9</entry>
</row>
<row>
<entry>utf8_to_iso8859_16</entry>
<entry>UNICODE</entry>
<entry>LATIN10</entry>
</row>
<row>
<entry>utf8_to_iso8859_2</entry>
<entry>UNICODE</entry>
<entry>LATIN2</entry>
</row>
<row>
<entry>utf8_to_iso8859_3</entry>
<entry>UNICODE</entry>
<entry>LATIN3</entry>
</row>
<row>
<entry>utf8_to_iso8859_4</entry>
<entry>UNICODE</entry>
<entry>LATIN4</entry>
</row>
<row>
<entry>utf8_to_iso8859_5</entry>
<entry>UNICODE</entry>
<entry>ISO_8859_5</entry>
</row>
<row>
<entry>utf8_to_iso8859_6</entry>
<entry>UNICODE</entry>
<entry>ISO_8859_6</entry>
</row>
<row>
<entry>utf8_to_iso8859_7</entry>
<entry>UNICODE</entry>
<entry>ISO_8859_7</entry>
</row>
<row>
<entry>utf8_to_iso8859_8</entry>
<entry>UNICODE</entry>
<entry>ISO_8859_8</entry>
</row>
<row>
<entry>utf8_to_iso8859_9</entry>
<entry>UNICODE</entry>
<entry>LATIN5</entry>
</row>
<row>
<entry>utf8_to_johab</entry>
<entry>UNICODE</entry>
<entry>JOHAB</entry>
</row>
<row>
<entry>utf8_to_sjis</entry>
<entry>UNICODE</entry>
<entry>SJIS</entry>
</row>
<row>
<entry>utf8_to_tcvn</entry>
<entry>UNICODE</entry>
<entry>TCVN</entry>
</row>
<row>
<entry>utf8_to_uhc</entry>
<entry>UNICODE</entry>
<entry>UHC</entry>
</row>
</tbody>
</tgroup>
</table>
<para> <para>
Additional string manipulation functions are available and are Additional string manipulation functions are available and are
listed below. Some of them are used internally to implement the listed below. Some of them are used internally to implement the

View File

@ -13,7 +13,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/namespace.c,v 1.27 2002/07/29 23:46:35 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/catalog/namespace.c,v 1.28 2002/08/06 05:40:44 ishii Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -1238,6 +1238,43 @@ PopSpecialNamespace(Oid namespaceId)
namespaceSearchPathValid = false; namespaceSearchPathValid = false;
} }
/*
* FindConversionByName - find a conversion by possibly qualified name
*/
Oid FindConversionByName(List *name)
{
char *conversion_name;
Oid namespaceId;
Oid conoid;
List *lptr;
/* Convert list of names to a name and namespace */
namespaceId = QualifiedNameGetCreationNamespace(name, &conversion_name);
if (length(name) > 1)
{
/* Check we have usage rights in target namespace */
if (pg_namespace_aclcheck(namespaceId, GetUserId(), ACL_USAGE) != ACLCHECK_OK)
return InvalidOid;
return FindConversion(conversion_name, namespaceId);
}
recomputeNamespacePath();
foreach(lptr, namespaceSearchPath)
{
Oid namespaceId = (Oid) lfirsti(lptr);
conoid = FindConversion(conversion_name, namespaceId);
if (OidIsValid(conoid))
return conoid;
}
/* Not found in path */
return InvalidOid;
}
/* /*
* FindDefaultConversionProc - find default encoding cnnversion proc * FindDefaultConversionProc - find default encoding cnnversion proc
*/ */

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_conversion.c,v 1.4 2002/08/05 03:29:16 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/catalog/pg_conversion.c,v 1.5 2002/08/06 05:40:45 ishii Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -221,7 +221,7 @@ RemoveConversionById(Oid conversionOid)
if (HeapTupleIsValid(tuple = heap_getnext(scan, ForwardScanDirection))) if (HeapTupleIsValid(tuple = heap_getnext(scan, ForwardScanDirection)))
simple_heap_delete(rel, &tuple->t_self); simple_heap_delete(rel, &tuple->t_self);
else else
elog(ERROR, "Conversion %u does not exist", conversionOid); elog(ERROR, "conversion %u does not exist", conversionOid);
heap_endscan(scan); heap_endscan(scan);
heap_close(rel, RowExclusiveLock); heap_close(rel, RowExclusiveLock);
} }
@ -233,47 +233,6 @@ RemoveConversionById(Oid conversionOid)
* If found, returns the procedure's oid, otherwise InvalidOid. * If found, returns the procedure's oid, otherwise InvalidOid.
* --------------- * ---------------
*/ */
#ifdef NOT_USED
Oid FindDefaultConversion(Oid name_space, int4 for_encoding, int4 to_encoding)
{
Relation rel;
HeapScanDesc scan;
ScanKeyData scanKeyData;
HeapTuple tuple;
Form_pg_conversion body;
Oid proc = InvalidOid;
/* Check we have usage rights in target namespace */
if (pg_namespace_aclcheck(name_space, GetUserId(), ACL_USAGE) != ACLCHECK_OK)
return InvalidOid;
ScanKeyEntryInitialize(&scanKeyData,
0,
Anum_pg_conversion_connamespace,
F_OIDEQ,
ObjectIdGetDatum(name_space));
rel = heap_openr(ConversionRelationName, AccessShareLock);
scan = heap_beginscan(rel, SnapshotNow,
1, &scanKeyData);
while (HeapTupleIsValid(tuple = heap_getnext(scan, ForwardScanDirection)))
{
body = (Form_pg_conversion)GETSTRUCT(tuple);
if (body->conforencoding == for_encoding &&
body->contoencoding == to_encoding &&
body->condefault == TRUE)
{
proc = body->conproc;
break;
}
}
heap_endscan(scan);
heap_close(rel, AccessShareLock);
return proc;
}
#endif
Oid FindDefaultConversion(Oid name_space, int4 for_encoding, int4 to_encoding) Oid FindDefaultConversion(Oid name_space, int4 for_encoding, int4 to_encoding)
{ {
CatCList *catlist; CatCList *catlist;
@ -309,34 +268,27 @@ Oid FindDefaultConversion(Oid name_space, int4 for_encoding, int4 to_encoding)
/* ---------------- /* ----------------
* FindConversionByName * FindConversionByName
* *
* Find conversion proc by possibly qualified conversion name. * Find conversion by namespace and conversion name.
* Returns conversion oid.
* --------------- * ---------------
*/ */
Oid FindConversionByName(List *name) Oid FindConversion(const char *conname, Oid connamespace)
{ {
HeapTuple tuple; HeapTuple tuple;
char *conversion_name;
Oid namespaceId;
Oid procoid; Oid procoid;
Oid conoid;
AclResult aclresult; AclResult aclresult;
/* Convert list of names to a name and namespace */ /* search pg_conversion by connamespace and conversion name */
namespaceId = QualifiedNameGetCreationNamespace(name, &conversion_name);
/* Check we have usage rights in target namespace */
if (pg_namespace_aclcheck(namespaceId, GetUserId(), ACL_USAGE) != ACLCHECK_OK)
return InvalidOid;
/* search pg_conversion by namespaceId and conversion name */
tuple = SearchSysCache(CONNAMESP, tuple = SearchSysCache(CONNAMESP,
PointerGetDatum(conversion_name), PointerGetDatum(conname),
ObjectIdGetDatum(namespaceId), ObjectIdGetDatum(connamespace),
0,0); 0,0);
if (!HeapTupleIsValid(tuple)) if (!HeapTupleIsValid(tuple))
return InvalidOid; return InvalidOid;
procoid = ((Form_pg_conversion)GETSTRUCT(tuple))->conproc; procoid = ((Form_pg_conversion)GETSTRUCT(tuple))->conproc;
conoid = HeapTupleGetOid(tuple);
ReleaseSysCache(tuple); ReleaseSysCache(tuple);
@ -345,6 +297,69 @@ Oid FindConversionByName(List *name)
if (aclresult != ACLCHECK_OK) if (aclresult != ACLCHECK_OK)
return InvalidOid; return InvalidOid;
return procoid; return conoid;
} }
/*
* Execute SQL99's CONVERT function.
*
* CONVERT <left paren> <character value expression>
* USING <form-of-use conversion name> <right paren>
*
* TEXT convert3(TEXT string, OID conversion_oid);
*/
Datum
pg_convert3(PG_FUNCTION_ARGS)
{
text *string = PG_GETARG_TEXT_P(0);
Oid convoid = PG_GETARG_OID(1);
HeapTuple tuple;
Form_pg_conversion body;
text *retval;
unsigned char *str;
unsigned char *result;
int len;
if (!OidIsValid(convoid))
elog(ERROR, "Conversion does not exist");
/* make sure that source string is null terminated */
len = VARSIZE(string) - VARHDRSZ;
str = palloc(len + 1);
memcpy(str, VARDATA(string), len);
*(str + len) = '\0';
tuple = SearchSysCache(CONOID,
ObjectIdGetDatum(convoid),
0,0,0);
if (!HeapTupleIsValid(tuple))
elog(ERROR, "Conversion %u search from syscache failed", convoid);
result = palloc(len * 4 + 1);
body = (Form_pg_conversion)GETSTRUCT(tuple);
OidFunctionCall5(body->conproc,
Int32GetDatum(body->conforencoding),
Int32GetDatum(body->contoencoding),
CStringGetDatum(str),
CStringGetDatum(result),
Int32GetDatum(len));
ReleaseSysCache(tuple);
/* build text data type structre. we cannot use textin() here,
since textin assumes that input string encoding is same as
database encoding. */
len = strlen(result) + VARHDRSZ;
retval = palloc(len);
VARATT_SIZEP(retval) = len;
memcpy(VARDATA(retval), result, len - VARHDRSZ);
pfree(result);
pfree(str);
/* free memory if allocated by the toaster */
PG_FREE_IF_COPY(string, 0);
PG_RETURN_TEXT_P(retval);
}

View File

@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.356 2002/08/05 02:30:50 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.357 2002/08/06 05:40:45 ishii Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
@ -53,6 +53,7 @@
#include "access/htup.h" #include "access/htup.h"
#include "catalog/index.h" #include "catalog/index.h"
#include "catalog/namespace.h" #include "catalog/namespace.h"
#include "catalog/pg_conversion.h"
#include "catalog/pg_type.h" #include "catalog/pg_type.h"
#include "nodes/makefuncs.h" #include "nodes/makefuncs.h"
#include "nodes/params.h" #include "nodes/params.h"
@ -216,7 +217,8 @@ static void doNegateFloat(Value *v);
insert_target_list, def_list, opt_indirection, insert_target_list, def_list, opt_indirection,
group_clause, TriggerFuncArgs, select_limit, group_clause, TriggerFuncArgs, select_limit,
opt_select_limit, opclass_item_list, trans_options, opt_select_limit, opclass_item_list, trans_options,
TableFuncElementList, OptTableFuncElementList TableFuncElementList, OptTableFuncElementList,
convert_args
%type <range> into_clause, OptTempTableName %type <range> into_clause, OptTempTableName
@ -232,7 +234,7 @@ static void doNegateFloat(Value *v);
%type <jtype> join_type %type <jtype> join_type
%type <list> extract_list, overlay_list, position_list %type <list> extract_list, overlay_list, position_list
%type <list> substr_list, trim_list %type <list> substr_list, trim_list, convert_list
%type <ival> opt_interval %type <ival> opt_interval
%type <node> overlay_placing, substr_from, substr_for %type <node> overlay_placing, substr_from, substr_for
@ -329,7 +331,7 @@ static void doNegateFloat(Value *v);
CACHE, CALLED, CASCADE, CASE, CAST, CHAIN, CHAR_P, CACHE, CALLED, CASCADE, CASE, CAST, CHAIN, CHAR_P,
CHARACTER, CHARACTERISTICS, CHECK, CHECKPOINT, CLASS, CLOSE, CHARACTER, CHARACTERISTICS, CHECK, CHECKPOINT, CLASS, CLOSE,
CLUSTER, COALESCE, COLLATE, COLUMN, COMMENT, COMMIT, CLUSTER, COALESCE, COLLATE, COLUMN, COMMENT, COMMIT,
COMMITTED, CONSTRAINT, CONSTRAINTS, CONVERSION_P, COPY, CREATE, CREATEDB, COMMITTED, CONSTRAINT, CONSTRAINTS, CONVERSION_P, CONVERT, COPY, CREATE, CREATEDB,
CREATEUSER, CROSS, CURRENT_DATE, CURRENT_TIME, CREATEUSER, CROSS, CURRENT_DATE, CURRENT_TIME,
CURRENT_TIMESTAMP, CURRENT_USER, CURSOR, CYCLE, CURRENT_TIMESTAMP, CURRENT_USER, CURSOR, CYCLE,
@ -6253,6 +6255,15 @@ c_expr: columnref { $$ = (Node *) $1; }
n->agg_distinct = FALSE; n->agg_distinct = FALSE;
$$ = (Node *)n; $$ = (Node *)n;
} }
| CONVERT '(' convert_list ')'
{
FuncCall *n = makeNode(FuncCall);
n->funcname = SystemFuncName("convert");
n->args = $3;
n->agg_star = FALSE;
n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| select_with_parens %prec UMINUS | select_with_parens %prec UMINUS
{ {
SubLink *n = makeNode(SubLink); SubLink *n = makeNode(SubLink);
@ -6418,6 +6429,48 @@ trim_list: a_expr FROM expr_list { $$ = lappend($3, $1); }
| expr_list { $$ = $1; } | expr_list { $$ = $1; }
; ;
/* CONVERT() arguments. We accept followings:
* SQL99 syntax
* o CONVERT(TEXT string USING conversion_name)
*
* Function calls
* o CONVERT(TEXT string, NAME src_encoding_name, NAME dest_encoding_name)
* o CONVERT(TEXT string, NAME encoding_name)
*/
convert_list:
a_expr USING any_name
{
Oid oid = FindConversionByName($3);
Const *convoid = makeNode(Const);
if (!OidIsValid(oid))
{
elog(ERROR, "Conversion \"%s\" does not exist",
NameListToString($3));
}
convoid->consttype = OIDOID;
convoid->constlen = sizeof(Oid);
convoid->constvalue = oid;
convoid->constisnull = FALSE;
convoid->constbyval = TRUE;
convoid->constisset = FALSE;
convoid->constiscast = FALSE;
$$ = makeList2($1, convoid);
}
| convert_args
{
$$ = $1;
}
| /*EMPTY*/
{ $$ = NIL; }
;
convert_args: a_expr { $$ = makeList1($1); }
| convert_args ',' a_expr { $$ = lappend($1, $3); }
;
in_expr: select_with_parens in_expr: select_with_parens
{ {
SubLink *n = makeNode(SubLink); SubLink *n = makeNode(SubLink);

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.123 2002/07/29 22:14:11 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.124 2002/08/06 05:40:45 ishii Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -80,6 +80,7 @@ static const ScanKeyword ScanKeywords[] = {
{"constraint", CONSTRAINT}, {"constraint", CONSTRAINT},
{"constraints", CONSTRAINTS}, {"constraints", CONSTRAINTS},
{"conversion", CONVERSION_P}, {"conversion", CONVERSION_P},
{"convert", CONVERT},
{"copy", COPY}, {"copy", COPY},
{"create", CREATE}, {"create", CREATE},
{"createdb", CREATEDB}, {"createdb", CREATEDB},

View File

@ -4,7 +4,7 @@
# Makefile for utils/mb # Makefile for utils/mb
# #
# IDENTIFICATION # IDENTIFICATION
# $Header: /cvsroot/pgsql/src/backend/utils/mb/Makefile,v 1.18 2002/07/18 02:02:30 ishii Exp $ # $Header: /cvsroot/pgsql/src/backend/utils/mb/Makefile,v 1.19 2002/08/06 05:40:45 ishii Exp $
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
@ -24,7 +24,7 @@ clean distclean maintainer-clean:
SUBSYS.o: $(OBJS) SUBSYS.o: $(OBJS)
@for dir in $(DIRS); do $(MAKE) -C $$dir all || exit; done @for dir in $(DIRS); do $(MAKE) -C $$dir all || exit; done
$(LD) $(LDREL) $(LDOUT) SUBSYS.o $(OBJS) $(LD) $(LDREL) $(LDOUT) $@ $^
depend dep: depend dep:
$(CC) -MM $(CFLAGS) *.c >depend $(CC) -MM $(CFLAGS) *.c >depend

View File

@ -4,7 +4,7 @@
# Makefile for utils/mb/conversion_procs # Makefile for utils/mb/conversion_procs
# #
# IDENTIFICATION # IDENTIFICATION
# $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/Makefile,v 1.2 2002/07/18 22:58:08 petere Exp $ # $Header: /cvsroot/pgsql/src/backend/utils/mb/conversion_procs/Makefile,v 1.3 2002/08/06 05:40:45 ishii Exp $
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
@ -14,6 +14,9 @@ include $(top_builddir)/src/Makefile.global
SQLSCRIPT = conversion_create.sql SQLSCRIPT = conversion_create.sql
# This file can be placed as src/test/regress/conversion.sql
REGRESSION_SCRIPT = conversion.sql
DIRS = \ DIRS = \
utf8_and_ascii utf8_and_iso8859_1 \ 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_euc_jp utf8_and_euc_kr utf8_and_euc_cn utf8_and_euc_tw \
@ -21,9 +24,7 @@ DIRS = \
utf8_and_uhc utf8_and_johab utf8_and_tcvn utf8_and_iso8859 \ utf8_and_uhc utf8_and_johab utf8_and_tcvn utf8_and_iso8859 \
euc_jp_and_sjis euc_tw_and_big5 euc_jp_and_sjis euc_tw_and_big5
# conversion_name source_encoding destination_encoding function object CONVERSIONS = \
$(SQLSCRIPT): Makefile
@set \
utf8_to_ascii UNICODE SQL_ASCII utf8_to_ascii utf8_and_ascii \ utf8_to_ascii UNICODE SQL_ASCII utf8_to_ascii utf8_and_ascii \
ascii_to_utf8 SQL_ASCII UNICODE ascii_to_utf8 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 \ utf8_to_iso8859_1 UNICODE LATIN1 utf8_to_iso8859_1 utf8_and_iso8859_1 \
@ -87,8 +88,11 @@ $(SQLSCRIPT): Makefile
euc_tw_to_mic EUC_TW MULE_INTERNAL euc_tw_to_mic 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 \ 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_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
; \
# conversion_name source_encoding destination_encoding function object
$(SQLSCRIPT): Makefile
@set $(CONVERSIONS) ; \
while [ "$$#" -gt 0 ] ; \ while [ "$$#" -gt 0 ] ; \
do \ do \
name=$$1;shift; \ name=$$1;shift; \
@ -102,6 +106,22 @@ $(SQLSCRIPT): Makefile
echo "CREATE DEFAULT CONVERSION pg_catalog.$$name FOR '$$se' TO '$$de' FROM $$func;"; \ echo "CREATE DEFAULT CONVERSION pg_catalog.$$name FOR '$$se' TO '$$de' FROM $$func;"; \
done > $@ done > $@
$(REGRESSION_SCRIPT): Makefile
@cp regress_prolog $@; \
set $(CONVERSIONS) ; \
while [ "$$#" -gt 0 ] ; \
do \
name=$$1;shift; \
se=$$1;shift; \
de=$$1; shift; \
func=$$1; shift; \
obj=$$1; shift; \
echo "-- $$se --> $$de"; \
echo "SELECT CONVERT('foo' USING $$name);"; \
echo "SELECT CONVERT('foo', '$$se', '$$de');"; \
done >> $@; \
cat regress_epilogue >> $@;
install: all installdirs install: all installdirs
$(INSTALL_DATA) $(SQLSCRIPT) $(DESTDIR)$(datadir) $(INSTALL_DATA) $(SQLSCRIPT) $(DESTDIR)$(datadir)
@for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done @for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done

View File

@ -0,0 +1,5 @@
--
-- return to the super user
--
RESET SESSION AUTHORIZATION;
DROP USER foo;

View File

@ -0,0 +1,25 @@
--
-- create user defined conversion
--
CREATE USER foo WITH NOCREATEDB NOCREATEUSER;
SET SESSION AUTHORIZATION foo;
CREATE CONVERSION myconv FOR 'LATIN1' TO 'UNICODE' FROM iso8859_1_to_utf8;
--
-- cannot make same name conversion in same schema
--
CREATE CONVERSION myconv FOR 'LATIN1' TO 'UNICODE' FROM iso8859_1_to_utf8;
--
-- create default conversion with qualified name
--
CREATE DEFAULT CONVERSION public.mydef FOR 'LATIN1' TO 'UNICODE' FROM iso8859_1_to_utf8;
--
-- cannot make default conversion with same shcema/for_encoding/to_encoding
--
CREATE DEFAULT CONVERSION public.mydef2 FOR 'LATIN1' TO 'UNICODE' FROM iso8859_1_to_utf8;
--
-- drop user defined conversion
--
DROP CONVERSION myconv;
DROP CONVERSION mydef;
--
-- make sure all pre-defined conversions are fine.

View File

@ -37,7 +37,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: catversion.h,v 1.145 2002/08/04 19:48:10 momjian Exp $ * $Id: catversion.h,v 1.146 2002/08/06 05:40:45 ishii Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -53,6 +53,6 @@
*/ */
/* yyyymmddN */ /* yyyymmddN */
#define CATALOG_VERSION_NO 200208041 #define CATALOG_VERSION_NO 200208061
#endif #endif

View File

@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: namespace.h,v 1.17 2002/07/29 23:46:35 tgl Exp $ * $Id: namespace.h,v 1.18 2002/08/06 05:40:45 ishii Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -80,6 +80,7 @@ extern bool isTempNamespace(Oid namespaceId);
extern void PushSpecialNamespace(Oid namespaceId); extern void PushSpecialNamespace(Oid namespaceId);
extern void PopSpecialNamespace(Oid namespaceId); extern void PopSpecialNamespace(Oid namespaceId);
extern Oid FindConversionByName(List *conname);
extern Oid FindDefaultConversionProc(int4 for_encoding, int4 to_encoding); extern Oid FindDefaultConversionProc(int4 for_encoding, int4 to_encoding);
/* initialization & transaction cleanup code */ /* initialization & transaction cleanup code */

View File

@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: pg_conversion.h,v 1.3 2002/08/04 06:54:10 thomas Exp $ * $Id: pg_conversion.h,v 1.4 2002/08/06 05:40:45 ishii Exp $
* *
* NOTES * NOTES
* the genbki.sh script reads this file and generates .bki * the genbki.sh script reads this file and generates .bki
@ -90,7 +90,9 @@ extern Oid ConversionCreate(const char *conname, Oid connamespace,
extern void ConversionDrop(const char *conname, Oid connamespace, extern void ConversionDrop(const char *conname, Oid connamespace,
int32 conowner, DropBehavior behavior); int32 conowner, DropBehavior behavior);
extern void RemoveConversionById(Oid conversionOid); extern void RemoveConversionById(Oid conversionOid);
extern Oid FindDefaultConversion(Oid name_space, int4 for_encoding, int4 to_encoding); extern Oid FindConversion(const char *conname, Oid connamespace);
extern Oid FindConversionByName(List *conname); extern Oid FindDefaultConversion(Oid connamespace, int4 for_encoding, int4 to_encoding);
extern Datum pg_convert3(PG_FUNCTION_ARGS);
#endif /* PG_CONVERSION_H */ #endif /* PG_CONVERSION_H */

View File

@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: pg_proc.h,v 1.251 2002/08/04 23:46:38 tgl Exp $ * $Id: pg_proc.h,v 1.252 2002/08/06 05:40:45 ishii Exp $
* *
* NOTES * NOTES
* The script catalog/genbki.sh reads this file and generates .bki * The script catalog/genbki.sh reads this file and generates .bki
@ -2149,6 +2149,9 @@ DESCR("convert string with specified destination encoding name");
DATA(insert OID = 1813 ( convert PGNSP PGUID 12 f f t f s 3 25 "25 19 19" pg_convert2 - _null_ )); DATA(insert OID = 1813 ( convert PGNSP PGUID 12 f f t f s 3 25 "25 19 19" pg_convert2 - _null_ ));
DESCR("convert string with specified encoding names"); DESCR("convert string with specified encoding names");
DATA(insert OID = 90 ( convert PGNSP PGUID 12 f f t f s 2 25 "25 26" pg_convert3 - _null_ ));
DESCR("convert string with specified conversion oid");
DATA(insert OID = 1264 ( pg_char_to_encoding PGNSP PGUID 12 f f t f s 1 23 "19" PG_char_to_encoding - _null_ )); DATA(insert OID = 1264 ( pg_char_to_encoding PGNSP PGUID 12 f f t f s 1 23 "19" PG_char_to_encoding - _null_ ));
DESCR("convert encoding name to encoding id"); DESCR("convert encoding name to encoding id");

View File

@ -25,454 +25,840 @@ DROP CONVERSION myconv;
DROP CONVERSION mydef; DROP CONVERSION mydef;
-- --
-- make sure all pre-defined conversions are fine. -- make sure all pre-defined conversions are fine.
-- -- UNICODE --> SQL_ASCII
-- UNICODE -> SQL_ASCII SELECT CONVERT('foo' USING utf8_to_ascii);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'SQL_ASCII'); SELECT CONVERT('foo', 'UNICODE', 'SQL_ASCII');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- SQL_ASCII -> UNICODE -- SQL_ASCII --> UNICODE
SELECT CONVERT('foo' USING ascii_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'SQL_ASCII', 'UNICODE'); SELECT CONVERT('foo', 'SQL_ASCII', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> LATIN1 -- UNICODE --> LATIN1
SELECT CONVERT('foo' USING utf8_to_iso8859_1);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'LATIN1'); SELECT CONVERT('foo', 'UNICODE', 'LATIN1');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- LATIN1 -> UNICODE -- LATIN1 --> UNICODE
SELECT CONVERT('foo' USING iso8859_1_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'LATIN1', 'UNICODE'); SELECT CONVERT('foo', 'LATIN1', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- EUC_JP -> UNICODE -- EUC_JP --> UNICODE
SELECT CONVERT('foo' USING euc_jp_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'EUC_JP', 'UNICODE'); SELECT CONVERT('foo', 'EUC_JP', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> EUC_JP -- UNICODE --> EUC_JP
SELECT CONVERT('foo' USING utf8_to_euc_jp);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'EUC_JP'); SELECT CONVERT('foo', 'UNICODE', 'EUC_JP');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- EUC_KR -> UNICODE -- EUC_KR --> UNICODE
SELECT CONVERT('foo' USING euc_kr_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'EUC_KR', 'UNICODE'); SELECT CONVERT('foo', 'EUC_KR', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> EUC_KR -- UNICODE --> EUC_KR
SELECT CONVERT('foo' USING utf8_to_euc_kr);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'EUC_KR'); SELECT CONVERT('foo', 'UNICODE', 'EUC_KR');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- EUC_CN -> UNICODE -- EUC_CN --> UNICODE
SELECT CONVERT('foo' USING euc_cn_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'EUC_CN', 'UNICODE'); SELECT CONVERT('foo', 'EUC_CN', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> EUC_CN -- UNICODE --> EUC_CN
SELECT CONVERT('foo' USING utf8_to_euc_cn);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'EUC_CN'); SELECT CONVERT('foo', 'UNICODE', 'EUC_CN');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- EUC_TW -> UNICODE -- EUC_TW --> UNICODE
SELECT CONVERT('foo' USING euc_tw_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'EUC_TW', 'UNICODE'); SELECT CONVERT('foo', 'EUC_TW', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> EUC_TW -- UNICODE --> EUC_TW
SELECT CONVERT('foo' USING utf8_to_euc_tw);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'EUC_TW'); SELECT CONVERT('foo', 'UNICODE', 'EUC_TW');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- SJIS -> UNICODE -- SJIS --> UNICODE
SELECT CONVERT('foo' USING sjis_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'SJIS', 'UNICODE'); SELECT CONVERT('foo', 'SJIS', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> SJIS -- UNICODE --> SJIS
SELECT CONVERT('foo' USING utf8_to_sjis);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'SJIS'); SELECT CONVERT('foo', 'UNICODE', 'SJIS');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- BIG5 -> UNICODE -- BIG5 --> UNICODE
SELECT CONVERT('foo' USING big5_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'BIG5', 'UNICODE'); SELECT CONVERT('foo', 'BIG5', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> BIG5 -- UNICODE --> BIG5
SELECT CONVERT('foo' USING utf8_to_big5);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'BIG5'); SELECT CONVERT('foo', 'UNICODE', 'BIG5');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- GBK -> UNICODE -- GBK --> UNICODE
SELECT CONVERT('foo' USING gbk_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'GBK', 'UNICODE'); SELECT CONVERT('foo', 'GBK', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> GBK -- UNICODE --> GBK
SELECT CONVERT('foo' USING utf8_to_gbk);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'GBK'); SELECT CONVERT('foo', 'UNICODE', 'GBK');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- GB18030 -> UNICODE -- GB18030 --> UNICODE
SELECT CONVERT('foo' USING gb18030_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'GB18030', 'UNICODE'); SELECT CONVERT('foo', 'GB18030', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> GB18030 -- UNICODE --> GB18030
SELECT CONVERT('foo' USING utf8_to_gb18030);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'GB18030'); SELECT CONVERT('foo', 'UNICODE', 'GB18030');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UHC -> UNICODE -- UHC --> UNICODE
SELECT CONVERT('foo' USING uhc_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UHC', 'UNICODE'); SELECT CONVERT('foo', 'UHC', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> UHC -- UNICODE --> UHC
SELECT CONVERT('foo' USING utf8_to_uhc);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'UHC'); SELECT CONVERT('foo', 'UNICODE', 'UHC');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- JOHAB -> UNICODE -- JOHAB --> UNICODE
SELECT CONVERT('foo' USING johab_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'JOHAB', 'UNICODE'); SELECT CONVERT('foo', 'JOHAB', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> JOHAB -- UNICODE --> JOHAB
SELECT CONVERT('foo' USING utf8_to_johab);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'JOHAB'); SELECT CONVERT('foo', 'UNICODE', 'JOHAB');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- TCVN -> UNICODE -- TCVN --> UNICODE
SELECT CONVERT('foo' USING tcvn_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'TCVN', 'UNICODE'); SELECT CONVERT('foo', 'TCVN', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> TCVN -- UNICODE --> TCVN
SELECT CONVERT('foo' USING utf8_to_tcvn);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'TCVN'); SELECT CONVERT('foo', 'UNICODE', 'TCVN');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> LATIN2 -- UNICODE --> LATIN2
SELECT CONVERT('foo' USING utf8_to_iso8859_2);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'LATIN2'); SELECT CONVERT('foo', 'UNICODE', 'LATIN2');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- LATIN2 -> UNICODE -- LATIN2 --> UNICODE
SELECT CONVERT('foo' USING iso8859_2_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'LATIN2', 'UNICODE'); SELECT CONVERT('foo', 'LATIN2', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> LATIN3 -- UNICODE --> LATIN3
SELECT CONVERT('foo' USING utf8_to_iso8859_3);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'LATIN3'); SELECT CONVERT('foo', 'UNICODE', 'LATIN3');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- LATIN3 -> UNICODE -- LATIN3 --> UNICODE
SELECT CONVERT('foo' USING iso8859_3_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'LATIN3', 'UNICODE'); SELECT CONVERT('foo', 'LATIN3', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> LATIN4 -- UNICODE --> LATIN4
SELECT CONVERT('foo' USING utf8_to_iso8859_4);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'LATIN4'); SELECT CONVERT('foo', 'UNICODE', 'LATIN4');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- LATIN4 -> UNICODE -- LATIN4 --> UNICODE
SELECT CONVERT('foo' USING iso8859_4_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'LATIN4', 'UNICODE'); SELECT CONVERT('foo', 'LATIN4', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> LATIN5 -- UNICODE --> LATIN5
SELECT CONVERT('foo' USING utf8_to_iso8859_9);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'LATIN5'); SELECT CONVERT('foo', 'UNICODE', 'LATIN5');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- LATIN5 -> UNICODE -- LATIN5 --> UNICODE
SELECT CONVERT('foo' USING iso8859_9_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'LATIN5', 'UNICODE'); SELECT CONVERT('foo', 'LATIN5', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> LATIN6 -- UNICODE --> LATIN6
SELECT CONVERT('foo' USING utf8_to_iso8859_10);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'LATIN6'); SELECT CONVERT('foo', 'UNICODE', 'LATIN6');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- LATIN6 -> UNICODE -- LATIN6 --> UNICODE
SELECT CONVERT('foo' USING iso8859_10_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'LATIN6', 'UNICODE'); SELECT CONVERT('foo', 'LATIN6', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> LATIN7 -- UNICODE --> LATIN7
SELECT CONVERT('foo' USING utf8_to_iso8859_13);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'LATIN7'); SELECT CONVERT('foo', 'UNICODE', 'LATIN7');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- LATIN7 -> UNICODE -- LATIN7 --> UNICODE
SELECT CONVERT('foo' USING iso8859_13_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'LATIN7', 'UNICODE'); SELECT CONVERT('foo', 'LATIN7', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> LATIN8 -- UNICODE --> LATIN8
SELECT CONVERT('foo' USING utf8_to_iso8859_14);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'LATIN8'); SELECT CONVERT('foo', 'UNICODE', 'LATIN8');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- LATIN8 -> UNICODE -- LATIN8 --> UNICODE
SELECT CONVERT('foo' USING iso8859_14_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'LATIN8', 'UNICODE'); SELECT CONVERT('foo', 'LATIN8', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> LATIN9 -- UNICODE --> LATIN9
SELECT CONVERT('foo' USING utf8_to_iso8859_15);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'LATIN9'); SELECT CONVERT('foo', 'UNICODE', 'LATIN9');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- LATIN9 -> UNICODE -- LATIN9 --> UNICODE
SELECT CONVERT('foo' USING iso8859_15_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'LATIN9', 'UNICODE'); SELECT CONVERT('foo', 'LATIN9', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> LATIN10 -- UNICODE --> LATIN10
SELECT CONVERT('foo' USING utf8_to_iso8859_16);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'LATIN10'); SELECT CONVERT('foo', 'UNICODE', 'LATIN10');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- LATIN10 -> UNICODE -- LATIN10 --> UNICODE
SELECT CONVERT('foo' USING iso8859_16_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'LATIN10', 'UNICODE'); SELECT CONVERT('foo', 'LATIN10', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> ISO-8859-5 -- UNICODE --> ISO-8859-5
SELECT CONVERT('foo' USING utf8_to_iso8859_5);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-5'); SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-5');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- ISO-8859-5 -> UNICODE -- ISO-8859-5 --> UNICODE
SELECT CONVERT('foo' USING iso8859_5_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'ISO-8859-5', 'UNICODE'); SELECT CONVERT('foo', 'ISO-8859-5', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> ISO-8859-6 -- UNICODE --> ISO-8859-6
SELECT CONVERT('foo' USING utf8_to_iso8859_6);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-6'); SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-6');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- ISO-8859-6 -> UNICODE -- ISO-8859-6 --> UNICODE
SELECT CONVERT('foo' USING iso8859_6_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'ISO-8859-6', 'UNICODE'); SELECT CONVERT('foo', 'ISO-8859-6', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> ISO-8859-7 -- UNICODE --> ISO-8859-7
SELECT CONVERT('foo' USING utf8_to_iso8859_7);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-7'); SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-7');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- ISO-8859-7 -> UNICODE -- ISO-8859-7 --> UNICODE
SELECT CONVERT('foo' USING iso8859_7_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'ISO-8859-7', 'UNICODE'); SELECT CONVERT('foo', 'ISO-8859-7', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- UNICODE -> ISO-8859-8 -- UNICODE --> ISO-8859-8
SELECT CONVERT('foo' USING utf8_to_iso8859_8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-8'); SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-8');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- ISO-8859-8 -> UNICODE -- ISO-8859-8 --> UNICODE
SELECT CONVERT('foo' USING iso8859_8_to_utf8);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'ISO-8859-8', 'UNICODE'); SELECT CONVERT('foo', 'ISO-8859-8', 'UNICODE');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- EUC_JP -> SJIS -- EUC_JP --> SJIS
SELECT CONVERT('foo' USING euc_jp_to_sjis);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'EUC_JP', 'SJIS'); SELECT CONVERT('foo', 'EUC_JP', 'SJIS');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- SJIS -> EUC_JP -- SJIS --> EUC_JP
SELECT CONVERT('foo' USING sjis_to_euc_jp);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'SJIS', 'EUC_JP'); SELECT CONVERT('foo', 'SJIS', 'EUC_JP');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- EUC_JP -> MULE_INTERNAL -- EUC_JP --> MULE_INTERNAL
SELECT CONVERT('foo' USING euc_jp_to_mic);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'EUC_JP', 'MULE_INTERNAL'); SELECT CONVERT('foo', 'EUC_JP', 'MULE_INTERNAL');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- SJIS -> MULE_INTERNAL -- SJIS --> MULE_INTERNAL
SELECT CONVERT('foo' USING sjis_to_mic);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'SJIS', 'MULE_INTERNAL'); SELECT CONVERT('foo', 'SJIS', 'MULE_INTERNAL');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- MULE_INTERNAL -> EUC_JP -- MULE_INTERNAL --> EUC_JP
SELECT CONVERT('foo' USING mic_to_euc_jp);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_JP'); SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_JP');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- MULE_INTERNAL -> SJIS -- MULE_INTERNAL --> SJIS
SELECT CONVERT('foo' USING mic_to_sjis);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'MULE_INTERNAL', 'SJIS'); SELECT CONVERT('foo', 'MULE_INTERNAL', 'SJIS');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- EUC_TW -> BIG5 -- EUC_TW --> BIG5
SELECT CONVERT('foo' USING euc_tw_to_big5);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'EUC_TW', 'BIG5'); SELECT CONVERT('foo', 'EUC_TW', 'BIG5');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- BIG5 -> EUC_TW -- BIG5 --> EUC_TW
SELECT CONVERT('foo' USING big5_to_euc_tw);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'BIG5', 'EUC_TW'); SELECT CONVERT('foo', 'BIG5', 'EUC_TW');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- EUC_TW -> MULE_INTERNAL -- EUC_TW --> MULE_INTERNAL
SELECT CONVERT('foo' USING euc_tw_to_mic);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'EUC_TW', 'MULE_INTERNAL'); SELECT CONVERT('foo', 'EUC_TW', 'MULE_INTERNAL');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- BIG5 -> MULE_INTERNAL -- BIG5 --> MULE_INTERNAL
SELECT CONVERT('foo' USING big5_to_mic);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'BIG5', 'MULE_INTERNAL'); SELECT CONVERT('foo', 'BIG5', 'MULE_INTERNAL');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- MULE_INTERNAL -> EUC_TW -- MULE_INTERNAL --> EUC_TW
SELECT CONVERT('foo' USING mic_to_euc_tw);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_TW'); SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_TW');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
-- MULE_INTERNAL -> BIG5 -- MULE_INTERNAL --> BIG5
SELECT CONVERT('foo' USING mic_to_big5);
convert
---------
foo
(1 row)
SELECT CONVERT('foo', 'MULE_INTERNAL', 'BIG5'); SELECT CONVERT('foo', 'MULE_INTERNAL', 'BIG5');
convert convert
--------- ---------
foo foo
(1 row) (1 row)
--
-- return to the super user
--
RESET SESSION AUTHORIZATION; RESET SESSION AUTHORIZATION;
DROP USER foo; DROP USER foo;

View File

@ -23,134 +23,200 @@ DROP CONVERSION myconv;
DROP CONVERSION mydef; DROP CONVERSION mydef;
-- --
-- make sure all pre-defined conversions are fine. -- make sure all pre-defined conversions are fine.
-- -- UNICODE --> SQL_ASCII
-- UNICODE -> SQL_ASCII SELECT CONVERT('foo' USING utf8_to_ascii);
SELECT CONVERT('foo', 'UNICODE', 'SQL_ASCII'); SELECT CONVERT('foo', 'UNICODE', 'SQL_ASCII');
-- SQL_ASCII -> UNICODE -- SQL_ASCII --> UNICODE
SELECT CONVERT('foo' USING ascii_to_utf8);
SELECT CONVERT('foo', 'SQL_ASCII', 'UNICODE'); SELECT CONVERT('foo', 'SQL_ASCII', 'UNICODE');
-- UNICODE -> LATIN1 -- UNICODE --> LATIN1
SELECT CONVERT('foo' USING utf8_to_iso8859_1);
SELECT CONVERT('foo', 'UNICODE', 'LATIN1'); SELECT CONVERT('foo', 'UNICODE', 'LATIN1');
-- LATIN1 -> UNICODE -- LATIN1 --> UNICODE
SELECT CONVERT('foo' USING iso8859_1_to_utf8);
SELECT CONVERT('foo', 'LATIN1', 'UNICODE'); SELECT CONVERT('foo', 'LATIN1', 'UNICODE');
-- EUC_JP -> UNICODE -- EUC_JP --> UNICODE
SELECT CONVERT('foo' USING euc_jp_to_utf8);
SELECT CONVERT('foo', 'EUC_JP', 'UNICODE'); SELECT CONVERT('foo', 'EUC_JP', 'UNICODE');
-- UNICODE -> EUC_JP -- UNICODE --> EUC_JP
SELECT CONVERT('foo' USING utf8_to_euc_jp);
SELECT CONVERT('foo', 'UNICODE', 'EUC_JP'); SELECT CONVERT('foo', 'UNICODE', 'EUC_JP');
-- EUC_KR -> UNICODE -- EUC_KR --> UNICODE
SELECT CONVERT('foo' USING euc_kr_to_utf8);
SELECT CONVERT('foo', 'EUC_KR', 'UNICODE'); SELECT CONVERT('foo', 'EUC_KR', 'UNICODE');
-- UNICODE -> EUC_KR -- UNICODE --> EUC_KR
SELECT CONVERT('foo' USING utf8_to_euc_kr);
SELECT CONVERT('foo', 'UNICODE', 'EUC_KR'); SELECT CONVERT('foo', 'UNICODE', 'EUC_KR');
-- EUC_CN -> UNICODE -- EUC_CN --> UNICODE
SELECT CONVERT('foo' USING euc_cn_to_utf8);
SELECT CONVERT('foo', 'EUC_CN', 'UNICODE'); SELECT CONVERT('foo', 'EUC_CN', 'UNICODE');
-- UNICODE -> EUC_CN -- UNICODE --> EUC_CN
SELECT CONVERT('foo' USING utf8_to_euc_cn);
SELECT CONVERT('foo', 'UNICODE', 'EUC_CN'); SELECT CONVERT('foo', 'UNICODE', 'EUC_CN');
-- EUC_TW -> UNICODE -- EUC_TW --> UNICODE
SELECT CONVERT('foo' USING euc_tw_to_utf8);
SELECT CONVERT('foo', 'EUC_TW', 'UNICODE'); SELECT CONVERT('foo', 'EUC_TW', 'UNICODE');
-- UNICODE -> EUC_TW -- UNICODE --> EUC_TW
SELECT CONVERT('foo' USING utf8_to_euc_tw);
SELECT CONVERT('foo', 'UNICODE', 'EUC_TW'); SELECT CONVERT('foo', 'UNICODE', 'EUC_TW');
-- SJIS -> UNICODE -- SJIS --> UNICODE
SELECT CONVERT('foo' USING sjis_to_utf8);
SELECT CONVERT('foo', 'SJIS', 'UNICODE'); SELECT CONVERT('foo', 'SJIS', 'UNICODE');
-- UNICODE -> SJIS -- UNICODE --> SJIS
SELECT CONVERT('foo' USING utf8_to_sjis);
SELECT CONVERT('foo', 'UNICODE', 'SJIS'); SELECT CONVERT('foo', 'UNICODE', 'SJIS');
-- BIG5 -> UNICODE -- BIG5 --> UNICODE
SELECT CONVERT('foo' USING big5_to_utf8);
SELECT CONVERT('foo', 'BIG5', 'UNICODE'); SELECT CONVERT('foo', 'BIG5', 'UNICODE');
-- UNICODE -> BIG5 -- UNICODE --> BIG5
SELECT CONVERT('foo' USING utf8_to_big5);
SELECT CONVERT('foo', 'UNICODE', 'BIG5'); SELECT CONVERT('foo', 'UNICODE', 'BIG5');
-- GBK -> UNICODE -- GBK --> UNICODE
SELECT CONVERT('foo' USING gbk_to_utf8);
SELECT CONVERT('foo', 'GBK', 'UNICODE'); SELECT CONVERT('foo', 'GBK', 'UNICODE');
-- UNICODE -> GBK -- UNICODE --> GBK
SELECT CONVERT('foo' USING utf8_to_gbk);
SELECT CONVERT('foo', 'UNICODE', 'GBK'); SELECT CONVERT('foo', 'UNICODE', 'GBK');
-- GB18030 -> UNICODE -- GB18030 --> UNICODE
SELECT CONVERT('foo' USING gb18030_to_utf8);
SELECT CONVERT('foo', 'GB18030', 'UNICODE'); SELECT CONVERT('foo', 'GB18030', 'UNICODE');
-- UNICODE -> GB18030 -- UNICODE --> GB18030
SELECT CONVERT('foo' USING utf8_to_gb18030);
SELECT CONVERT('foo', 'UNICODE', 'GB18030'); SELECT CONVERT('foo', 'UNICODE', 'GB18030');
-- UHC -> UNICODE -- UHC --> UNICODE
SELECT CONVERT('foo' USING uhc_to_utf8);
SELECT CONVERT('foo', 'UHC', 'UNICODE'); SELECT CONVERT('foo', 'UHC', 'UNICODE');
-- UNICODE -> UHC -- UNICODE --> UHC
SELECT CONVERT('foo' USING utf8_to_uhc);
SELECT CONVERT('foo', 'UNICODE', 'UHC'); SELECT CONVERT('foo', 'UNICODE', 'UHC');
-- JOHAB -> UNICODE -- JOHAB --> UNICODE
SELECT CONVERT('foo' USING johab_to_utf8);
SELECT CONVERT('foo', 'JOHAB', 'UNICODE'); SELECT CONVERT('foo', 'JOHAB', 'UNICODE');
-- UNICODE -> JOHAB -- UNICODE --> JOHAB
SELECT CONVERT('foo' USING utf8_to_johab);
SELECT CONVERT('foo', 'UNICODE', 'JOHAB'); SELECT CONVERT('foo', 'UNICODE', 'JOHAB');
-- TCVN -> UNICODE -- TCVN --> UNICODE
SELECT CONVERT('foo' USING tcvn_to_utf8);
SELECT CONVERT('foo', 'TCVN', 'UNICODE'); SELECT CONVERT('foo', 'TCVN', 'UNICODE');
-- UNICODE -> TCVN -- UNICODE --> TCVN
SELECT CONVERT('foo' USING utf8_to_tcvn);
SELECT CONVERT('foo', 'UNICODE', 'TCVN'); SELECT CONVERT('foo', 'UNICODE', 'TCVN');
-- UNICODE -> LATIN2 -- UNICODE --> LATIN2
SELECT CONVERT('foo' USING utf8_to_iso8859_2);
SELECT CONVERT('foo', 'UNICODE', 'LATIN2'); SELECT CONVERT('foo', 'UNICODE', 'LATIN2');
-- LATIN2 -> UNICODE -- LATIN2 --> UNICODE
SELECT CONVERT('foo' USING iso8859_2_to_utf8);
SELECT CONVERT('foo', 'LATIN2', 'UNICODE'); SELECT CONVERT('foo', 'LATIN2', 'UNICODE');
-- UNICODE -> LATIN3 -- UNICODE --> LATIN3
SELECT CONVERT('foo' USING utf8_to_iso8859_3);
SELECT CONVERT('foo', 'UNICODE', 'LATIN3'); SELECT CONVERT('foo', 'UNICODE', 'LATIN3');
-- LATIN3 -> UNICODE -- LATIN3 --> UNICODE
SELECT CONVERT('foo' USING iso8859_3_to_utf8);
SELECT CONVERT('foo', 'LATIN3', 'UNICODE'); SELECT CONVERT('foo', 'LATIN3', 'UNICODE');
-- UNICODE -> LATIN4 -- UNICODE --> LATIN4
SELECT CONVERT('foo' USING utf8_to_iso8859_4);
SELECT CONVERT('foo', 'UNICODE', 'LATIN4'); SELECT CONVERT('foo', 'UNICODE', 'LATIN4');
-- LATIN4 -> UNICODE -- LATIN4 --> UNICODE
SELECT CONVERT('foo' USING iso8859_4_to_utf8);
SELECT CONVERT('foo', 'LATIN4', 'UNICODE'); SELECT CONVERT('foo', 'LATIN4', 'UNICODE');
-- UNICODE -> LATIN5 -- UNICODE --> LATIN5
SELECT CONVERT('foo' USING utf8_to_iso8859_9);
SELECT CONVERT('foo', 'UNICODE', 'LATIN5'); SELECT CONVERT('foo', 'UNICODE', 'LATIN5');
-- LATIN5 -> UNICODE -- LATIN5 --> UNICODE
SELECT CONVERT('foo' USING iso8859_9_to_utf8);
SELECT CONVERT('foo', 'LATIN5', 'UNICODE'); SELECT CONVERT('foo', 'LATIN5', 'UNICODE');
-- UNICODE -> LATIN6 -- UNICODE --> LATIN6
SELECT CONVERT('foo' USING utf8_to_iso8859_10);
SELECT CONVERT('foo', 'UNICODE', 'LATIN6'); SELECT CONVERT('foo', 'UNICODE', 'LATIN6');
-- LATIN6 -> UNICODE -- LATIN6 --> UNICODE
SELECT CONVERT('foo' USING iso8859_10_to_utf8);
SELECT CONVERT('foo', 'LATIN6', 'UNICODE'); SELECT CONVERT('foo', 'LATIN6', 'UNICODE');
-- UNICODE -> LATIN7 -- UNICODE --> LATIN7
SELECT CONVERT('foo' USING utf8_to_iso8859_13);
SELECT CONVERT('foo', 'UNICODE', 'LATIN7'); SELECT CONVERT('foo', 'UNICODE', 'LATIN7');
-- LATIN7 -> UNICODE -- LATIN7 --> UNICODE
SELECT CONVERT('foo' USING iso8859_13_to_utf8);
SELECT CONVERT('foo', 'LATIN7', 'UNICODE'); SELECT CONVERT('foo', 'LATIN7', 'UNICODE');
-- UNICODE -> LATIN8 -- UNICODE --> LATIN8
SELECT CONVERT('foo' USING utf8_to_iso8859_14);
SELECT CONVERT('foo', 'UNICODE', 'LATIN8'); SELECT CONVERT('foo', 'UNICODE', 'LATIN8');
-- LATIN8 -> UNICODE -- LATIN8 --> UNICODE
SELECT CONVERT('foo' USING iso8859_14_to_utf8);
SELECT CONVERT('foo', 'LATIN8', 'UNICODE'); SELECT CONVERT('foo', 'LATIN8', 'UNICODE');
-- UNICODE -> LATIN9 -- UNICODE --> LATIN9
SELECT CONVERT('foo' USING utf8_to_iso8859_15);
SELECT CONVERT('foo', 'UNICODE', 'LATIN9'); SELECT CONVERT('foo', 'UNICODE', 'LATIN9');
-- LATIN9 -> UNICODE -- LATIN9 --> UNICODE
SELECT CONVERT('foo' USING iso8859_15_to_utf8);
SELECT CONVERT('foo', 'LATIN9', 'UNICODE'); SELECT CONVERT('foo', 'LATIN9', 'UNICODE');
-- UNICODE -> LATIN10 -- UNICODE --> LATIN10
SELECT CONVERT('foo' USING utf8_to_iso8859_16);
SELECT CONVERT('foo', 'UNICODE', 'LATIN10'); SELECT CONVERT('foo', 'UNICODE', 'LATIN10');
-- LATIN10 -> UNICODE -- LATIN10 --> UNICODE
SELECT CONVERT('foo' USING iso8859_16_to_utf8);
SELECT CONVERT('foo', 'LATIN10', 'UNICODE'); SELECT CONVERT('foo', 'LATIN10', 'UNICODE');
-- UNICODE -> ISO-8859-5 -- UNICODE --> ISO-8859-5
SELECT CONVERT('foo' USING utf8_to_iso8859_5);
SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-5'); SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-5');
-- ISO-8859-5 -> UNICODE -- ISO-8859-5 --> UNICODE
SELECT CONVERT('foo' USING iso8859_5_to_utf8);
SELECT CONVERT('foo', 'ISO-8859-5', 'UNICODE'); SELECT CONVERT('foo', 'ISO-8859-5', 'UNICODE');
-- UNICODE -> ISO-8859-6 -- UNICODE --> ISO-8859-6
SELECT CONVERT('foo' USING utf8_to_iso8859_6);
SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-6'); SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-6');
-- ISO-8859-6 -> UNICODE -- ISO-8859-6 --> UNICODE
SELECT CONVERT('foo' USING iso8859_6_to_utf8);
SELECT CONVERT('foo', 'ISO-8859-6', 'UNICODE'); SELECT CONVERT('foo', 'ISO-8859-6', 'UNICODE');
-- UNICODE -> ISO-8859-7 -- UNICODE --> ISO-8859-7
SELECT CONVERT('foo' USING utf8_to_iso8859_7);
SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-7'); SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-7');
-- ISO-8859-7 -> UNICODE -- ISO-8859-7 --> UNICODE
SELECT CONVERT('foo' USING iso8859_7_to_utf8);
SELECT CONVERT('foo', 'ISO-8859-7', 'UNICODE'); SELECT CONVERT('foo', 'ISO-8859-7', 'UNICODE');
-- UNICODE -> ISO-8859-8 -- UNICODE --> ISO-8859-8
SELECT CONVERT('foo' USING utf8_to_iso8859_8);
SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-8'); SELECT CONVERT('foo', 'UNICODE', 'ISO-8859-8');
-- ISO-8859-8 -> UNICODE -- ISO-8859-8 --> UNICODE
SELECT CONVERT('foo' USING iso8859_8_to_utf8);
SELECT CONVERT('foo', 'ISO-8859-8', 'UNICODE'); SELECT CONVERT('foo', 'ISO-8859-8', 'UNICODE');
-- EUC_JP -> SJIS -- EUC_JP --> SJIS
SELECT CONVERT('foo' USING euc_jp_to_sjis);
SELECT CONVERT('foo', 'EUC_JP', 'SJIS'); SELECT CONVERT('foo', 'EUC_JP', 'SJIS');
-- SJIS -> EUC_JP -- SJIS --> EUC_JP
SELECT CONVERT('foo' USING sjis_to_euc_jp);
SELECT CONVERT('foo', 'SJIS', 'EUC_JP'); SELECT CONVERT('foo', 'SJIS', 'EUC_JP');
-- EUC_JP -> MULE_INTERNAL -- EUC_JP --> MULE_INTERNAL
SELECT CONVERT('foo' USING euc_jp_to_mic);
SELECT CONVERT('foo', 'EUC_JP', 'MULE_INTERNAL'); SELECT CONVERT('foo', 'EUC_JP', 'MULE_INTERNAL');
-- SJIS -> MULE_INTERNAL -- SJIS --> MULE_INTERNAL
SELECT CONVERT('foo' USING sjis_to_mic);
SELECT CONVERT('foo', 'SJIS', 'MULE_INTERNAL'); SELECT CONVERT('foo', 'SJIS', 'MULE_INTERNAL');
-- MULE_INTERNAL -> EUC_JP -- MULE_INTERNAL --> EUC_JP
SELECT CONVERT('foo' USING mic_to_euc_jp);
SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_JP'); SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_JP');
-- MULE_INTERNAL -> SJIS -- MULE_INTERNAL --> SJIS
SELECT CONVERT('foo' USING mic_to_sjis);
SELECT CONVERT('foo', 'MULE_INTERNAL', 'SJIS'); SELECT CONVERT('foo', 'MULE_INTERNAL', 'SJIS');
-- EUC_TW -> BIG5 -- EUC_TW --> BIG5
SELECT CONVERT('foo' USING euc_tw_to_big5);
SELECT CONVERT('foo', 'EUC_TW', 'BIG5'); SELECT CONVERT('foo', 'EUC_TW', 'BIG5');
-- BIG5 -> EUC_TW -- BIG5 --> EUC_TW
SELECT CONVERT('foo' USING big5_to_euc_tw);
SELECT CONVERT('foo', 'BIG5', 'EUC_TW'); SELECT CONVERT('foo', 'BIG5', 'EUC_TW');
-- EUC_TW -> MULE_INTERNAL -- EUC_TW --> MULE_INTERNAL
SELECT CONVERT('foo' USING euc_tw_to_mic);
SELECT CONVERT('foo', 'EUC_TW', 'MULE_INTERNAL'); SELECT CONVERT('foo', 'EUC_TW', 'MULE_INTERNAL');
-- BIG5 -> MULE_INTERNAL -- BIG5 --> MULE_INTERNAL
SELECT CONVERT('foo' USING big5_to_mic);
SELECT CONVERT('foo', 'BIG5', 'MULE_INTERNAL'); SELECT CONVERT('foo', 'BIG5', 'MULE_INTERNAL');
-- MULE_INTERNAL -> EUC_TW -- MULE_INTERNAL --> EUC_TW
SELECT CONVERT('foo' USING mic_to_euc_tw);
SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_TW'); SELECT CONVERT('foo', 'MULE_INTERNAL', 'EUC_TW');
-- MULE_INTERNAL -> BIG5 -- MULE_INTERNAL --> BIG5
SELECT CONVERT('foo' USING mic_to_big5);
SELECT CONVERT('foo', 'MULE_INTERNAL', 'BIG5'); SELECT CONVERT('foo', 'MULE_INTERNAL', 'BIG5');
--
-- return to the super user
--
RESET SESSION AUTHORIZATION; RESET SESSION AUTHORIZATION;
DROP USER foo; DROP USER foo;