<!--
-$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
-->
<entry><literal>4</literal></entry>
</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>
<entry><function>lower</function>(<parameter>string</parameter>)</entry>
<entry><type>text</type></entry>
</tgroup>
</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>
Additional string manipulation functions are available and are
listed below. Some of them are used internally to implement the
* Portions Copyright (c) 1994, Regents of the University of California
*
* 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 $
*
*-------------------------------------------------------------------------
*/
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
*/
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
if (HeapTupleIsValid(tuple = heap_getnext(scan, ForwardScanDirection)))
simple_heap_delete(rel, &tuple->t_self);
else
- elog(ERROR, "Conversion %u does not exist", conversionOid);
+ elog(ERROR, "conversion %u does not exist", conversionOid);
heap_endscan(scan);
heap_close(rel, RowExclusiveLock);
}
* 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)
{
CatCList *catlist;
/* ----------------
* 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;
- char *conversion_name;
- Oid namespaceId;
Oid procoid;
+ Oid conoid;
AclResult aclresult;
- /* Convert list of names to a name and namespace */
- 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 */
+ /* search pg_conversion by connamespace and conversion name */
tuple = SearchSysCache(CONNAMESP,
- PointerGetDatum(conversion_name),
- ObjectIdGetDatum(namespaceId),
+ PointerGetDatum(conname),
+ ObjectIdGetDatum(connamespace),
0,0);
if (!HeapTupleIsValid(tuple))
return InvalidOid;
-
procoid = ((Form_pg_conversion)GETSTRUCT(tuple))->conproc;
+ conoid = HeapTupleGetOid(tuple);
ReleaseSysCache(tuple);
if (aclresult != ACLCHECK_OK)
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);
+}
*
*
* 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
* AUTHOR DATE MAJOR EVENT
#include "access/htup.h"
#include "catalog/index.h"
#include "catalog/namespace.h"
+#include "catalog/pg_conversion.h"
#include "catalog/pg_type.h"
#include "nodes/makefuncs.h"
#include "nodes/params.h"
insert_target_list, def_list, opt_indirection,
group_clause, TriggerFuncArgs, select_limit,
opt_select_limit, opclass_item_list, trans_options,
- TableFuncElementList, OptTableFuncElementList
+ TableFuncElementList, OptTableFuncElementList,
+ convert_args
%type <range> into_clause, OptTempTableName
%type <jtype> join_type
%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 <node> overlay_placing, substr_from, substr_for
CACHE, CALLED, CASCADE, CASE, CAST, CHAIN, CHAR_P,
CHARACTER, CHARACTERISTICS, CHECK, CHECKPOINT, CLASS, CLOSE,
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,
CURRENT_TIMESTAMP, CURRENT_USER, CURSOR, CYCLE,
n->agg_distinct = FALSE;
$$ = (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
{
SubLink *n = makeNode(SubLink);
| 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
{
SubLink *n = makeNode(SubLink);
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
{"constraint", CONSTRAINT},
{"constraints", CONSTRAINTS},
{"conversion", CONVERSION_P},
+ {"convert", CONVERT},
{"copy", COPY},
{"create", CREATE},
{"createdb", CREATEDB},
# Makefile for utils/mb
#
# 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 $
#
#-------------------------------------------------------------------------
SUBSYS.o: $(OBJS)
@for dir in $(DIRS); do $(MAKE) -C $$dir all || exit; done
- $(LD) $(LDREL) $(LDOUT) SUBSYS.o $(OBJS)
+ $(LD) $(LDREL) $(LDOUT) $@ $^
depend dep:
$(CC) -MM $(CFLAGS) *.c >depend
# Makefile for utils/mb/conversion_procs
#
# 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 $
#
#-------------------------------------------------------------------------
SQLSCRIPT = conversion_create.sql
+# This file can be placed as src/test/regress/conversion.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_uhc utf8_and_johab utf8_and_tcvn utf8_and_iso8859 \
euc_jp_and_sjis euc_tw_and_big5
-# conversion_name source_encoding destination_encoding function object
-$(SQLSCRIPT): Makefile
- @set \
+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 \
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
+
+# conversion_name source_encoding destination_encoding function object
+$(SQLSCRIPT): Makefile
+ @set $(CONVERSIONS) ; \
while [ "$$#" -gt 0 ] ; \
do \
name=$$1;shift; \
echo "CREATE DEFAULT CONVERSION pg_catalog.$$name FOR '$$se' TO '$$de' FROM $$func;"; \
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_DATA) $(SQLSCRIPT) $(DESTDIR)$(datadir)
@for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done
--- /dev/null
+--
+-- return to the super user
+--
+RESET SESSION AUTHORIZATION;
+DROP USER foo;
--- /dev/null
+--
+-- 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.
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* 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 $
*
*-------------------------------------------------------------------------
*/
*/
/* yyyymmddN */
-#define CATALOG_VERSION_NO 200208041
+#define CATALOG_VERSION_NO 200208061
#endif
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* 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 $
*
*-------------------------------------------------------------------------
*/
extern void PushSpecialNamespace(Oid namespaceId);
extern void PopSpecialNamespace(Oid namespaceId);
+extern Oid FindConversionByName(List *conname);
extern Oid FindDefaultConversionProc(int4 for_encoding, int4 to_encoding);
/* initialization & transaction cleanup code */
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* 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
* the genbki.sh script reads this file and generates .bki
extern void ConversionDrop(const char *conname, Oid connamespace,
int32 conowner, DropBehavior behavior);
extern void RemoveConversionById(Oid conversionOid);
-extern Oid FindDefaultConversion(Oid name_space, int4 for_encoding, int4 to_encoding);
-extern Oid FindConversionByName(List *conname);
+extern Oid FindConversion(const char *conname, Oid connamespace);
+extern Oid FindDefaultConversion(Oid connamespace, int4 for_encoding, int4 to_encoding);
+
+extern Datum pg_convert3(PG_FUNCTION_ARGS);
#endif /* PG_CONVERSION_H */
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* 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
* The script catalog/genbki.sh reads this file and generates .bki
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");
+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_ ));
DESCR("convert encoding name to encoding id");
DROP CONVERSION mydef;
--
-- 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');
convert
---------
foo
(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');
convert
---------
foo
(1 row)
--- UNICODE -> LATIN1
+-- UNICODE --> LATIN1
+SELECT CONVERT('foo' USING utf8_to_iso8859_1);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'LATIN1');
convert
---------
foo
(1 row)
--- LATIN1 -> UNICODE
+-- LATIN1 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_1_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'LATIN1', 'UNICODE');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(1 row)
--- SJIS -> UNICODE
+-- SJIS --> UNICODE
+SELECT CONVERT('foo' USING sjis_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'SJIS', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> SJIS
+-- UNICODE --> SJIS
+SELECT CONVERT('foo' USING utf8_to_sjis);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'SJIS');
convert
---------
foo
(1 row)
--- BIG5 -> UNICODE
+-- BIG5 --> UNICODE
+SELECT CONVERT('foo' USING big5_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'BIG5', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> BIG5
+-- UNICODE --> BIG5
+SELECT CONVERT('foo' USING utf8_to_big5);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'BIG5');
convert
---------
foo
(1 row)
--- GBK -> UNICODE
+-- GBK --> UNICODE
+SELECT CONVERT('foo' USING gbk_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'GBK', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> GBK
+-- UNICODE --> GBK
+SELECT CONVERT('foo' USING utf8_to_gbk);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'GBK');
convert
---------
foo
(1 row)
--- GB18030 -> UNICODE
+-- GB18030 --> UNICODE
+SELECT CONVERT('foo' USING gb18030_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'GB18030', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> GB18030
+-- UNICODE --> GB18030
+SELECT CONVERT('foo' USING utf8_to_gb18030);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'GB18030');
convert
---------
foo
(1 row)
--- UHC -> UNICODE
+-- UHC --> UNICODE
+SELECT CONVERT('foo' USING uhc_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UHC', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> UHC
+-- UNICODE --> UHC
+SELECT CONVERT('foo' USING utf8_to_uhc);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'UHC');
convert
---------
foo
(1 row)
--- JOHAB -> UNICODE
+-- JOHAB --> UNICODE
+SELECT CONVERT('foo' USING johab_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'JOHAB', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> JOHAB
+-- UNICODE --> JOHAB
+SELECT CONVERT('foo' USING utf8_to_johab);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'JOHAB');
convert
---------
foo
(1 row)
--- TCVN -> UNICODE
+-- TCVN --> UNICODE
+SELECT CONVERT('foo' USING tcvn_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'TCVN', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> TCVN
+-- UNICODE --> TCVN
+SELECT CONVERT('foo' USING utf8_to_tcvn);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'TCVN');
convert
---------
foo
(1 row)
--- UNICODE -> LATIN2
+-- UNICODE --> LATIN2
+SELECT CONVERT('foo' USING utf8_to_iso8859_2);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'LATIN2');
convert
---------
foo
(1 row)
--- LATIN2 -> UNICODE
+-- LATIN2 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_2_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'LATIN2', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> LATIN3
+-- UNICODE --> LATIN3
+SELECT CONVERT('foo' USING utf8_to_iso8859_3);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'LATIN3');
convert
---------
foo
(1 row)
--- LATIN3 -> UNICODE
+-- LATIN3 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_3_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'LATIN3', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> LATIN4
+-- UNICODE --> LATIN4
+SELECT CONVERT('foo' USING utf8_to_iso8859_4);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'LATIN4');
convert
---------
foo
(1 row)
--- LATIN4 -> UNICODE
+-- LATIN4 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_4_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'LATIN4', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> LATIN5
+-- UNICODE --> LATIN5
+SELECT CONVERT('foo' USING utf8_to_iso8859_9);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'LATIN5');
convert
---------
foo
(1 row)
--- LATIN5 -> UNICODE
+-- LATIN5 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_9_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'LATIN5', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> LATIN6
+-- UNICODE --> LATIN6
+SELECT CONVERT('foo' USING utf8_to_iso8859_10);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'LATIN6');
convert
---------
foo
(1 row)
--- LATIN6 -> UNICODE
+-- LATIN6 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_10_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'LATIN6', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> LATIN7
+-- UNICODE --> LATIN7
+SELECT CONVERT('foo' USING utf8_to_iso8859_13);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'LATIN7');
convert
---------
foo
(1 row)
--- LATIN7 -> UNICODE
+-- LATIN7 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_13_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'LATIN7', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> LATIN8
+-- UNICODE --> LATIN8
+SELECT CONVERT('foo' USING utf8_to_iso8859_14);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'LATIN8');
convert
---------
foo
(1 row)
--- LATIN8 -> UNICODE
+-- LATIN8 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_14_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'LATIN8', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> LATIN9
+-- UNICODE --> LATIN9
+SELECT CONVERT('foo' USING utf8_to_iso8859_15);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'LATIN9');
convert
---------
foo
(1 row)
--- LATIN9 -> UNICODE
+-- LATIN9 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_15_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'LATIN9', 'UNICODE');
convert
---------
foo
(1 row)
--- UNICODE -> LATIN10
+-- UNICODE --> LATIN10
+SELECT CONVERT('foo' USING utf8_to_iso8859_16);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'UNICODE', 'LATIN10');
convert
---------
foo
(1 row)
--- LATIN10 -> UNICODE
+-- LATIN10 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_16_to_utf8);
+ convert
+---------
+ foo
+(1 row)
+
SELECT CONVERT('foo', 'LATIN10', 'UNICODE');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(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');
convert
---------
foo
(1 row)
+--
+-- return to the super user
+--
RESET SESSION AUTHORIZATION;
DROP USER foo;
DROP CONVERSION mydef;
--
-- 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');
--- SQL_ASCII -> UNICODE
+-- SQL_ASCII --> UNICODE
+SELECT CONVERT('foo' USING ascii_to_utf8);
SELECT CONVERT('foo', 'SQL_ASCII', 'UNICODE');
--- UNICODE -> LATIN1
+-- UNICODE --> LATIN1
+SELECT CONVERT('foo' USING utf8_to_iso8859_1);
SELECT CONVERT('foo', 'UNICODE', 'LATIN1');
--- LATIN1 -> UNICODE
+-- LATIN1 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_1_to_utf8);
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');
--- UNICODE -> EUC_JP
+-- UNICODE --> EUC_JP
+SELECT CONVERT('foo' USING utf8_to_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');
--- UNICODE -> EUC_KR
+-- UNICODE --> EUC_KR
+SELECT CONVERT('foo' USING utf8_to_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');
--- UNICODE -> EUC_CN
+-- UNICODE --> EUC_CN
+SELECT CONVERT('foo' USING utf8_to_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');
--- UNICODE -> EUC_TW
+-- UNICODE --> EUC_TW
+SELECT CONVERT('foo' USING utf8_to_euc_tw);
SELECT CONVERT('foo', 'UNICODE', 'EUC_TW');
--- SJIS -> UNICODE
+-- SJIS --> UNICODE
+SELECT CONVERT('foo' USING sjis_to_utf8);
SELECT CONVERT('foo', 'SJIS', 'UNICODE');
--- UNICODE -> SJIS
+-- UNICODE --> SJIS
+SELECT CONVERT('foo' USING utf8_to_sjis);
SELECT CONVERT('foo', 'UNICODE', 'SJIS');
--- BIG5 -> UNICODE
+-- BIG5 --> UNICODE
+SELECT CONVERT('foo' USING big5_to_utf8);
SELECT CONVERT('foo', 'BIG5', 'UNICODE');
--- UNICODE -> BIG5
+-- UNICODE --> BIG5
+SELECT CONVERT('foo' USING utf8_to_big5);
SELECT CONVERT('foo', 'UNICODE', 'BIG5');
--- GBK -> UNICODE
+-- GBK --> UNICODE
+SELECT CONVERT('foo' USING gbk_to_utf8);
SELECT CONVERT('foo', 'GBK', 'UNICODE');
--- UNICODE -> GBK
+-- UNICODE --> GBK
+SELECT CONVERT('foo' USING utf8_to_gbk);
SELECT CONVERT('foo', 'UNICODE', 'GBK');
--- GB18030 -> UNICODE
+-- GB18030 --> UNICODE
+SELECT CONVERT('foo' USING gb18030_to_utf8);
SELECT CONVERT('foo', 'GB18030', 'UNICODE');
--- UNICODE -> GB18030
+-- UNICODE --> GB18030
+SELECT CONVERT('foo' USING utf8_to_gb18030);
SELECT CONVERT('foo', 'UNICODE', 'GB18030');
--- UHC -> UNICODE
+-- UHC --> UNICODE
+SELECT CONVERT('foo' USING uhc_to_utf8);
SELECT CONVERT('foo', 'UHC', 'UNICODE');
--- UNICODE -> UHC
+-- UNICODE --> UHC
+SELECT CONVERT('foo' USING utf8_to_uhc);
SELECT CONVERT('foo', 'UNICODE', 'UHC');
--- JOHAB -> UNICODE
+-- JOHAB --> UNICODE
+SELECT CONVERT('foo' USING johab_to_utf8);
SELECT CONVERT('foo', 'JOHAB', 'UNICODE');
--- UNICODE -> JOHAB
+-- UNICODE --> JOHAB
+SELECT CONVERT('foo' USING utf8_to_johab);
SELECT CONVERT('foo', 'UNICODE', 'JOHAB');
--- TCVN -> UNICODE
+-- TCVN --> UNICODE
+SELECT CONVERT('foo' USING tcvn_to_utf8);
SELECT CONVERT('foo', 'TCVN', 'UNICODE');
--- UNICODE -> TCVN
+-- UNICODE --> TCVN
+SELECT CONVERT('foo' USING utf8_to_tcvn);
SELECT CONVERT('foo', 'UNICODE', 'TCVN');
--- UNICODE -> LATIN2
+-- UNICODE --> LATIN2
+SELECT CONVERT('foo' USING utf8_to_iso8859_2);
SELECT CONVERT('foo', 'UNICODE', 'LATIN2');
--- LATIN2 -> UNICODE
+-- LATIN2 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_2_to_utf8);
SELECT CONVERT('foo', 'LATIN2', 'UNICODE');
--- UNICODE -> LATIN3
+-- UNICODE --> LATIN3
+SELECT CONVERT('foo' USING utf8_to_iso8859_3);
SELECT CONVERT('foo', 'UNICODE', 'LATIN3');
--- LATIN3 -> UNICODE
+-- LATIN3 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_3_to_utf8);
SELECT CONVERT('foo', 'LATIN3', 'UNICODE');
--- UNICODE -> LATIN4
+-- UNICODE --> LATIN4
+SELECT CONVERT('foo' USING utf8_to_iso8859_4);
SELECT CONVERT('foo', 'UNICODE', 'LATIN4');
--- LATIN4 -> UNICODE
+-- LATIN4 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_4_to_utf8);
SELECT CONVERT('foo', 'LATIN4', 'UNICODE');
--- UNICODE -> LATIN5
+-- UNICODE --> LATIN5
+SELECT CONVERT('foo' USING utf8_to_iso8859_9);
SELECT CONVERT('foo', 'UNICODE', 'LATIN5');
--- LATIN5 -> UNICODE
+-- LATIN5 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_9_to_utf8);
SELECT CONVERT('foo', 'LATIN5', 'UNICODE');
--- UNICODE -> LATIN6
+-- UNICODE --> LATIN6
+SELECT CONVERT('foo' USING utf8_to_iso8859_10);
SELECT CONVERT('foo', 'UNICODE', 'LATIN6');
--- LATIN6 -> UNICODE
+-- LATIN6 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_10_to_utf8);
SELECT CONVERT('foo', 'LATIN6', 'UNICODE');
--- UNICODE -> LATIN7
+-- UNICODE --> LATIN7
+SELECT CONVERT('foo' USING utf8_to_iso8859_13);
SELECT CONVERT('foo', 'UNICODE', 'LATIN7');
--- LATIN7 -> UNICODE
+-- LATIN7 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_13_to_utf8);
SELECT CONVERT('foo', 'LATIN7', 'UNICODE');
--- UNICODE -> LATIN8
+-- UNICODE --> LATIN8
+SELECT CONVERT('foo' USING utf8_to_iso8859_14);
SELECT CONVERT('foo', 'UNICODE', 'LATIN8');
--- LATIN8 -> UNICODE
+-- LATIN8 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_14_to_utf8);
SELECT CONVERT('foo', 'LATIN8', 'UNICODE');
--- UNICODE -> LATIN9
+-- UNICODE --> LATIN9
+SELECT CONVERT('foo' USING utf8_to_iso8859_15);
SELECT CONVERT('foo', 'UNICODE', 'LATIN9');
--- LATIN9 -> UNICODE
+-- LATIN9 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_15_to_utf8);
SELECT CONVERT('foo', 'LATIN9', 'UNICODE');
--- UNICODE -> LATIN10
+-- UNICODE --> LATIN10
+SELECT CONVERT('foo' USING utf8_to_iso8859_16);
SELECT CONVERT('foo', 'UNICODE', 'LATIN10');
--- LATIN10 -> UNICODE
+-- LATIN10 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_16_to_utf8);
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');
--- ISO-8859-5 -> UNICODE
+-- ISO-8859-5 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_5_to_utf8);
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');
--- ISO-8859-6 -> UNICODE
+-- ISO-8859-6 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_6_to_utf8);
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');
--- ISO-8859-7 -> UNICODE
+-- ISO-8859-7 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_7_to_utf8);
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');
--- ISO-8859-8 -> UNICODE
+-- ISO-8859-8 --> UNICODE
+SELECT CONVERT('foo' USING iso8859_8_to_utf8);
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');
--- SJIS -> EUC_JP
+-- SJIS --> EUC_JP
+SELECT CONVERT('foo' USING sjis_to_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');
--- SJIS -> MULE_INTERNAL
+-- SJIS --> MULE_INTERNAL
+SELECT CONVERT('foo' USING sjis_to_mic);
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');
--- MULE_INTERNAL -> SJIS
+-- MULE_INTERNAL --> SJIS
+SELECT CONVERT('foo' USING mic_to_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');
--- BIG5 -> EUC_TW
+-- BIG5 --> EUC_TW
+SELECT CONVERT('foo' USING big5_to_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');
--- BIG5 -> MULE_INTERNAL
+-- BIG5 --> MULE_INTERNAL
+SELECT CONVERT('foo' USING big5_to_mic);
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');
--- MULE_INTERNAL -> BIG5
+-- MULE_INTERNAL --> BIG5
+SELECT CONVERT('foo' USING mic_to_big5);
SELECT CONVERT('foo', 'MULE_INTERNAL', 'BIG5');
+--
+-- return to the super user
+--
RESET SESSION AUTHORIZATION;
DROP USER foo;