@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $ PostgreSQL : pgsql / src / backend / commands / conversioncmds . c , v 1.23 2005 / 10 / 15 02 : 49 : 15 momjian Exp $
* $ PostgreSQL : pgsql / src / backend / commands / conversioncmds . c , v 1.23 .2 .1 2009 / 02 / 27 16 : 35 : 42 heikki Exp $
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
@ -47,6 +47,7 @@ CreateConversionCommand(CreateConversionStmt *stmt)
const char * to_encoding_name = stmt - > to_encoding_name ;
List * func_name = stmt - > func_name ;
static Oid funcargs [ ] = { INT4OID , INT4OID , CSTRINGOID , INTERNALOID , INT4OID } ;
char result [ 1 ] ;
/* Convert list of names to a name and namespace */
namespaceId = QualifiedNameGetCreationNamespace ( stmt - > conversion_name ,
@ -86,6 +87,19 @@ CreateConversionCommand(CreateConversionStmt *stmt)
aclcheck_error ( aclresult , ACL_KIND_PROC ,
NameListToString ( func_name ) ) ;
/*
* Check that the conversion function is suitable for the requested
* source and target encodings . We do that by calling the function with
* an empty string ; the conversion function should throw an error if it
* can ' t perform the requested conversion .
*/
OidFunctionCall5 ( funcoid ,
Int32GetDatum ( from_encoding ) ,
Int32GetDatum ( to_encoding ) ,
CStringGetDatum ( " " ) ,
CStringGetDatum ( result ) ,
Int32GetDatum ( 0 ) ) ;
/*
* All seem ok , go ahead ( possible failure would be a duplicate conversion
* name )