package org.exist.xquery.modules.sql; import java.sql.Types; import org.exist.xquery.value.Type; /** * Utility class for converting to/from SQL types and escaping XML text and attributes. * * @author Adam Retter <adam@exist-db.org> * @author Robert Walpole <robert.walpole@metoffice.gov.uk> * @serial 2010-07-23 * @version 1.0 * */ public final class SQLUtils { public static int sqlTypeFromString( String sqlType ) { sqlType = sqlType.toUpperCase(); switch (sqlType) { case "ARRAY": return (Types.ARRAY); case "BIGINT": return (Types.BIGINT); case "BINARY": return (Types.BINARY); case "BIT": return (Types.BIT); case "BLOB": return (Types.BLOB); case "BOOLEAN": return (Types.BOOLEAN); case "CHAR": return (Types.CHAR); case "CLOB": return (Types.CLOB); case "DECIMAL": return (Types.DECIMAL); case "DOUBLE": return (Types.DOUBLE); case "FLOAT": return (Types.FLOAT); case "LONGVARCHAR": return (Types.LONGVARCHAR); case "NUMERIC": return (Types.NUMERIC); case "SMALLINT": return (Types.SMALLINT); case "TINYINT": return (Types.TINYINT); case "INTEGER": return (Types.INTEGER); case "VARCHAR": return (Types.VARCHAR); case "SQLXML": return Types.SQLXML; case "TIMESTAMP": return Types.TIMESTAMP; default: return (Types.VARCHAR); //default } } /** * Converts a SQL data type to an XML data type. * * @param sqlType The SQL data type as specified by JDBC * * @return The XML Type as specified by eXist */ public static int sqlTypeToXMLType( int sqlType ) { switch (sqlType) { case Types.ARRAY: { return (Type.NODE); } case Types.BIGINT: { return (Type.INT); } case Types.BINARY: { return (Type.BASE64_BINARY); } case Types.BIT: { return (Type.INT); } case Types.BLOB: { return (Type.BASE64_BINARY); } case Types.BOOLEAN: { return (Type.BOOLEAN); } case Types.CHAR: { return (Type.STRING); } case Types.CLOB: { return (Type.STRING); } case Types.DECIMAL: { return (Type.DECIMAL); } case Types.DOUBLE: { return (Type.DOUBLE); } case Types.FLOAT: { return (Type.FLOAT); } case Types.LONGVARCHAR: { return (Type.STRING); } case Types.NUMERIC: { return (Type.NUMBER); } case Types.SMALLINT: { return (Type.INT); } case Types.TINYINT: { return (Type.INT); } case Types.INTEGER: { return (Type.INTEGER); } case Types.VARCHAR: { return (Type.STRING); } case Types.SQLXML: { return (Type.NODE); } case Types.TIMESTAMP: { return Type.DATE_TIME; } default: { return (Type.ANY_TYPE); } } } public static String escapeXmlText( String text ) { String work = null; if( text != null ) { work = text.replaceAll( "\\&", "\\&" ); work = work.replaceAll( "<", "\\<" ); work = work.replaceAll( ">", "\\>" ); } return( work ); } public static String escapeXmlAttr( String attr ) { String work = null; if( attr != null ) { work = escapeXmlText( attr ); work = work.replaceAll( "'", "\\'" ); work = work.replaceAll( "\"", "\\"" ); } return( work ); } }