All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hsqldb.types.Types Maven / Gradle / Ivy

There is a newer version: 2.7.2
Show newest version
/* Copyright (c) 2001-2019, The HSQL Development Group
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.
 *
 * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * Neither the name of the HSQL Development Group nor the names of its
 * contributors may be used to endorse or promote products derived from this
 * software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */


package org.hsqldb.types;

import org.hsqldb.error.Error;
import org.hsqldb.error.ErrorCode;
import org.hsqldb.lib.HashSet;
import org.hsqldb.lib.IntValueHashMap;
import org.hsqldb.persist.HsqlDatabaseProperties;

// campbell-burnet@users 20051207 - patch 1.8.x initial JDBC 4.0 support work
// fredt@users - 2.0.0 code changes

/**
 * Defines the constants that are used to identify SQL types for HSQLDB JDBC
 * interface type reporting. The actual type constant values are equivalent
 * to those defined in the latest java.sql.Types, where available,
 * or those defined by ansi/iso SQL 2003 otherwise. A type sub-identifier
 * has been added to differentiate HSQLDB-specific type specializations.
 *
 * @author Campbell Burnet (campbell-burnet@users dot sourceforge.net)
 * @version 2.5.0
 * @since 1.7.2
 */
public class Types {

    /**
     * Names of types returned by JDBC methods and accepted as
     * library and user function arguments
     */
    public static final String DecimalClassName   = "java.math.BigDecimal";
    public static final String DateClassName      = "java.sql.Date";
    public static final String TimeClassName      = "java.sql.Time";
    public static final String TimestampClassName = "java.sql.Timestamp";
    public static final String BlobClassName      = "java.sql.Blob";
    public static final String ClobClassName      = "java.sql.Clob";
    /*
     SQL specifies predefined data types named by the following s:
     CHARACTER, CHARACTER VARYING, CHARACTER LARGE OBJECT, BINARY LARGE OBJECT,
     NUMERIC, DECIMAL, SMALLINT, INTEGER, BIGINT, FLOAT, REAL, DOUBLE PRECISION,
     BOOLEAN, DATE, TIME, TIMESTAMP, and INTERVAL. Also BINARY and VARBINARY
     in SQL post-2003
     SQL 2003 adds DATALINK in Part 9: Management of External Data (SQL/MED)
     and adds XML in Part 14: XML-Related Specifications (SQL/XML)
     */

    // CLI type list from Table 37
    public static final int SQL_CHAR              = 1;
    public static final int SQL_NUMERIC           = 2;
    public static final int SQL_DECIMAL           = 3;
    public static final int SQL_INTEGER           = 4;
    public static final int SQL_SMALLINT          = 5;
    public static final int SQL_FLOAT             = 6;
    public static final int SQL_REAL              = 7;
    public static final int SQL_DOUBLE            = 8;
    public static final int SQL_VARCHAR           = 12;
    public static final int SQL_BOOLEAN           = 16;
    public static final int SQL_USER_DEFINED_TYPE = 17;
    public static final int SQL_ROW               = 19;
    public static final int SQL_REF               = 20;
    public static final int SQL_BIGINT            = 25;             // different in JDBC
    public static final int SQL_BLOB              = 30;             // different in JDBC
    public static final int SQL_CLOB              = 40;             // different in JDBC
    public static final int SQL_ARRAY             = 50;             // different in JDBC - not predefined
    public static final int SQL_MULTISET = 55;                      //
    public static final int SQL_BINARY   = 60;                      // different in JDBC -in SQL post-2003
    public static final int SQL_VARBINARY = 61;                     // different in JDBC - in SQL post-2003
    public static final int SQL_DATE                      = 91;
    public static final int SQL_TIME                      = 92;
    public static final int SQL_TIMESTAMP                 = 93;     //
    public static final int SQL_TIME_WITH_TIME_ZONE       = 94;
    public static final int SQL_TIMESTAMP_WITH_TIME_ZONE  = 95;     //
    public static final int SQL_INTERVAL_YEAR             = 101;    //
    public static final int SQL_INTERVAL_MONTH            = 102;
    public static final int SQL_INTERVAL_DAY              = 103;
    public static final int SQL_INTERVAL_HOUR             = 104;
    public static final int SQL_INTERVAL_MINUTE           = 105;
    public static final int SQL_INTERVAL_SECOND           = 106;
    public static final int SQL_INTERVAL_YEAR_TO_MONTH    = 107;
    public static final int SQL_INTERVAL_DAY_TO_HOUR      = 108;
    public static final int SQL_INTERVAL_DAY_TO_MINUTE    = 109;
    public static final int SQL_INTERVAL_DAY_TO_SECOND    = 110;
    public static final int SQL_INTERVAL_HOUR_TO_MINUTE   = 111;
    public static final int SQL_INTERVAL_HOUR_TO_SECOND   = 112;
    public static final int SQL_INTERVAL_MINUTE_TO_SECOND = 113;

    // units or components not in SQL or JDBC lists, used with TRUNCATE, ROUND and other functions
    public static final int DTI_TIMEZONE_HOUR    = 121;
    public static final int DTI_TIMEZONE_MINUTE  = 122;
    public static final int DTI_DAY_OF_WEEK      = 123;
    public static final int DTI_DAY_OF_MONTH     = 124;
    public static final int DTI_DAY_OF_YEAR      = 125;
    public static final int DTI_WEEK_OF_YEAR     = 126;
    public static final int DTI_QUARTER          = 127;
    public static final int DTI_DAY_NAME         = 128;
    public static final int DTI_MONTH_NAME       = 129;
    public static final int DTI_SECONDS_MIDNIGHT = 130;
    public static final int DTI_ISO_YEAR         = 131;
    public static final int DTI_MILLISECOND      = 132;
    public static final int DTI_MICROSECOND      = 133;
    public static final int DTI_NANOSECOND       = 134;
    public static final int DTI_TIMEZONE         = 135;

    // used where local defines are used in the same range as SQL type numbers
    public static final int SQL_TYPE_NUMBER_LIMIT = 256;

    // These values are not in table 37 of the SQL CLI 2003 FCD, but some
    // are found in tables 6-9 and some are found in Annex A1:
    // c Header File SQLCLI.H and/or addenda in other documents,
    // such as:
    // SQL 2003 Part 9: Management of External Data (SQL/MED) : DATALINK
    // SQL 2003 Part 14: XML-Related Specifications (SQL/XML) : XML
    public static final int SQL_BIT         = 14;                   // is in SQL99 but removed from 2003
    public static final int SQL_BIT_VARYING = 15;                   // is in SQL99 but removed from 2003
    public static final int SQL_DATALINK         = 70;
    public static final int SQL_UDT              = 17;
    public static final int SQL_UDT_LOCATOR      = 18;
    public static final int SQL_BLOB_LOCATOR     = 31;
    public static final int SQL_CLOB_LOCATOR     = 41;
    public static final int SQL_ARRAY_LOCATOR    = 51;
    public static final int SQL_MULTISET_LOCATOR = 56;
    public static final int SQL_ALL_TYPES        = 0;
    public static final int SQL_DATETIME         = 9;               // collective name
    public static final int SQL_INTERVAL         = 10;              // collective name
    public static final int SQL_XML              = 137;

    // These values are taken from various SQL CLI header files
    public static final int SQL_NCHAR         = (-8);
    public static final int SQL_WCHAR         = (-8);
    public static final int SQL_WVARCHAR      = (-9);
    public static final int SQL_NVARCHAR      = (-9);
    public static final int SQL_WLONGVARCHAR  = (-10);
    public static final int SQL_NTEXT         = (-10);
    public static final int SQL_LONGVARBINARY = (-4);
    public static final int SQL_IMAGE         = (-4);
    public static final int SQL_GUID          = (-11);
    public static final int SQL_VARIANT       = (-150);

    // SQL_UDT subcodes
    public static final int SQL_SUB_DISTINCT   = 1;
    public static final int SQL_SUB_STRUCTURED = 2;

    // non-standard type not in JDBC or SQL CLI
    public static final int VARCHAR_IGNORECASE = 100;

    /**
     * The constant in the Java programming language, sometimes referred to
     * as a type code, that identifies the generic SQL type
     * ARRAY.
     *
     * @since JDK 1.2
     */
    public static final int ARRAY = 2003;

    /**
     * 

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * BIGINT. */ public static final int BIGINT = -5; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * BINARY. */ public static final int BINARY = -2; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * BIT. */ public static final int BIT = -7; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type * BLOB. * * @since JDK 1.2 */ public static final int BLOB = 2004; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type * BOOLEAN. * * @since JDK 1.4 */ public static final int BOOLEAN = SQL_BOOLEAN; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * CHAR. */ public static final int CHAR = SQL_CHAR; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type * CLOB * * @since JDK 1.2 */ public static final int CLOB = 2005; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type DATALINK. * * @since JDK 1.4 */ public static final int DATALINK = 70; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * DATE. */ public static final int DATE = SQL_DATE; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * DECIMAL. */ public static final int DECIMAL = SQL_DECIMAL; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type * DISTINCT. * * @since JDK 1.2 */ public static final int DISTINCT = 2001; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * DOUBLE. */ public static final int DOUBLE = SQL_DOUBLE; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * FLOAT. */ public static final int FLOAT = SQL_FLOAT; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * INTEGER. */ public static final int INTEGER = SQL_INTEGER; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type * JAVA_OBJECT. * * @since JDK 1.2 */ public static final int JAVA_OBJECT = 2000; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * LONGVARBINARY. */ public static final int LONGVARBINARY = -4; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * LONGVARCHAR. */ public static final int LONGVARCHAR = -1; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * MULTISET. */ public static final int MULTISET = 0; // no java.sql.Types definition /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * NULL. */ public static final int NULL = 0; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * NUMERIC. */ public static final int NUMERIC = SQL_NUMERIC; /** * The constant in the Java programming language that indicates * that the SQL type is database-specific and * gets mapped to a Java object that can be accessed via * the methods getObject and setObject. */ public static final int OTHER = 1111; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * REAL. */ public static final int REAL = SQL_REAL; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type * REF. * * @since JDK 1.2 */ public static final int REF = 2006; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type * REF_CURSOR. * * @since JDK 1.8 */ public static final int REF_CURSOR = 2012; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * SMALLINT. */ public static final int SMALLINT = SQL_SMALLINT; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type * STRUCT. * * @since JDK 1.2 */ public static final int STRUCT = 2002; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * TIME. */ public static final int TIME = SQL_TIME; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * TIME_WITH_TIMEZONE . * * @since JDK 1.8 */ public static final int TIME_WITH_TIMEZONE = 2013; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * TIMESTAMP. */ public static final int TIMESTAMP = SQL_TIMESTAMP; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * TIMESTAMP_WITH_TIMEZONE . * * @since JDK 1.8 */ public static final int TIMESTAMP_WITH_TIMEZONE = 2014; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * TINYINT. */ public static final int TINYINT = -6; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * VARBINARY. */ public static final int VARBINARY = -3; /** *

The constant in the Java programming language, sometimes referred * to as a type code, that identifies the generic SQL type * VARCHAR. */ public static final int VARCHAR = SQL_VARCHAR; // /** // *

The constant in the Java programming language, sometimes referred // * to as a type code, that identifies the recent SQL 2003 SQL type // * XML. // * // * @since SQL 2003 // * @deprecated // * @see #SQLXML // */ // public static final int XML = 137; //------------------------- JDBC 4.0 ----------------------------------- /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type ROWID * * @since JDK 1.6, HSQLDB 1.8.x * */ public static final int ROWID = 2008; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type NCHAR * * @since JDK 1.6, HSQLDB 1.8.x */ public static final int NCHAR = -8; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type NVARCHAR. * * @since JDK 1.6, HSQLDB 1.8.x */ public static final int NVARCHAR = -9; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type LONGNVARCHAR. * * @since JDK 1.6, HSQLDB 1.8.x */ public static final int LONGNVARCHAR = -10; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type NCLOB. * * @since JDK 1.6, HSQLDB 1.8.x */ public static final int NCLOB = 2007; /** * The constant in the Java programming language, sometimes referred to * as a type code, that identifies the generic SQL type XML. * * @since JDK 1.6, HSQLDB 1.8.x */ public static final int SQLXML = 2009; //----------------------------- End JDBC 4.0 ------------------------------- /** * The default HSQLODB type sub-identifier. This indicates that an * HSQLDB type with this sub-type, if supported, is the very closest * thing HSQLDB offers to the JDBC/SQL2003 type */ public static final int TYPE_SUB_DEFAULT = 1; /** * Every (type,type-sub) combination known in the HSQLDB context. * Not every combination need be supported as a table or procedure * column type -- such determinations are handled in DITypeInfo. */ public static final int[][] ALL_TYPES = { { SQL_ARRAY, TYPE_SUB_DEFAULT }, { SQL_BIGINT, TYPE_SUB_DEFAULT }, { SQL_BINARY, TYPE_SUB_DEFAULT }, { SQL_VARBINARY, TYPE_SUB_DEFAULT }, { SQL_BLOB, TYPE_SUB_DEFAULT }, { SQL_BOOLEAN, TYPE_SUB_DEFAULT }, { SQL_CHAR, TYPE_SUB_DEFAULT }, { SQL_CLOB, TYPE_SUB_DEFAULT }, { DATALINK, TYPE_SUB_DEFAULT }, { SQL_DATE, TYPE_SUB_DEFAULT }, { SQL_DECIMAL, TYPE_SUB_DEFAULT }, { DISTINCT, TYPE_SUB_DEFAULT }, { SQL_DOUBLE, TYPE_SUB_DEFAULT }, { SQL_FLOAT, TYPE_SUB_DEFAULT }, { SQL_INTEGER, TYPE_SUB_DEFAULT }, { JAVA_OBJECT, TYPE_SUB_DEFAULT }, { SQL_NCHAR, TYPE_SUB_DEFAULT }, { NCLOB, TYPE_SUB_DEFAULT }, { SQL_ALL_TYPES, TYPE_SUB_DEFAULT }, { SQL_NUMERIC, TYPE_SUB_DEFAULT }, { SQL_NVARCHAR, TYPE_SUB_DEFAULT }, { OTHER, TYPE_SUB_DEFAULT }, { SQL_REAL, TYPE_SUB_DEFAULT }, { SQL_REF, TYPE_SUB_DEFAULT }, { ROWID, TYPE_SUB_DEFAULT }, { SQL_SMALLINT, TYPE_SUB_DEFAULT }, { STRUCT, TYPE_SUB_DEFAULT }, { SQL_TIME, TYPE_SUB_DEFAULT }, { SQL_TIMESTAMP, TYPE_SUB_DEFAULT }, { TINYINT, TYPE_SUB_DEFAULT }, { SQL_VARCHAR, TYPE_SUB_DEFAULT }, { SQL_XML, TYPE_SUB_DEFAULT } }; // lookup for types static final IntValueHashMap javaTypeNumbers; // campbell-burnet@users - We can't handle method invocations in // Function.java whose number class is // narrower than the corresponding internal // wrapper private static final HashSet illegalParameterClasses; static { javaTypeNumbers = new IntValueHashMap(32); javaTypeNumbers.put("int", Types.SQL_INTEGER); javaTypeNumbers.put("java.lang.Integer", Types.SQL_INTEGER); javaTypeNumbers.put("double", Types.SQL_DOUBLE); javaTypeNumbers.put("java.lang.Double", Types.SQL_DOUBLE); javaTypeNumbers.put("java.lang.String", Types.SQL_VARCHAR); javaTypeNumbers.put("java.lang.CharSequence", Types.SQL_VARCHAR); javaTypeNumbers.put(DateClassName, Types.SQL_DATE); javaTypeNumbers.put(TimeClassName, Types.SQL_TIME); javaTypeNumbers.put(TimestampClassName, Types.SQL_TIMESTAMP); javaTypeNumbers.put(BlobClassName, Types.SQL_BLOB); javaTypeNumbers.put(ClobClassName, Types.SQL_CLOB); javaTypeNumbers.put("java.util.Date", Types.SQL_DATE); javaTypeNumbers.put(DecimalClassName, Types.SQL_DECIMAL); javaTypeNumbers.put("boolean", Types.SQL_BOOLEAN); javaTypeNumbers.put("java.lang.Boolean", Types.SQL_BOOLEAN); javaTypeNumbers.put("byte", Types.TINYINT); javaTypeNumbers.put("java.lang.Byte", Types.TINYINT); javaTypeNumbers.put("short", Types.SQL_SMALLINT); javaTypeNumbers.put("java.lang.Short", Types.SQL_SMALLINT); javaTypeNumbers.put("long", Types.SQL_BIGINT); javaTypeNumbers.put("java.lang.Long", Types.SQL_BIGINT); javaTypeNumbers.put("[B", Types.SQL_VARBINARY); javaTypeNumbers.put("java.lang.Object", Types.OTHER); javaTypeNumbers.put("java.lang.Void", Types.SQL_ALL_TYPES); javaTypeNumbers.put("java.util.UUID", Types.SQL_GUID); javaTypeNumbers.put("java.time.LocalDate", Types.SQL_DATE); javaTypeNumbers.put("java.time.LocalTime", Types.SQL_TIME); javaTypeNumbers.put("java.time.LocalDateTime", Types.SQL_TIMESTAMP); javaTypeNumbers.put("java.time.OffsetDateTime", Types.SQL_TIMESTAMP_WITH_TIME_ZONE); javaTypeNumbers.put("java.time.OffsetTime", Types.SQL_TIME_WITH_TIME_ZONE); javaTypeNumbers.put("java.time.Duration", Types.SQL_INTERVAL_SECOND); javaTypeNumbers.put("java.time.Period", Types.SQL_INTERVAL_MONTH); illegalParameterClasses = new HashSet(); illegalParameterClasses.add(Byte.TYPE); illegalParameterClasses.add(Short.TYPE); illegalParameterClasses.add(Float.TYPE); illegalParameterClasses.add(Byte.class); illegalParameterClasses.add(Short.class); illegalParameterClasses.add(Float.class); // } /** * Retrieves the type object corresponding to the class * of an IN, IN OUT or OUT parameter or a return type.

* * * @param c a Class instance * @return java.sql.Types int value * @throws org.hsqldb.HsqlException */ public static Type getParameterSQLType(Class c) { String name; int typeCode; if (c == null) { throw Error.runtimeError(ErrorCode.U_S0500, "Types"); } if (Void.TYPE.equals(c)) { return Type.SQL_ALL_TYPES; } name = c.getName(); typeCode = javaTypeNumbers.get(name, Integer.MIN_VALUE); if (typeCode != Integer.MIN_VALUE) { return Type.getDefaultTypeWithSize(typeCode); } if (c.isArray()) { Class c1 = c.getComponentType(); name = c1.getName(); typeCode = javaTypeNumbers.get(name, Integer.MIN_VALUE); if (typeCode == Types.SQL_ALL_TYPES) { return null; } if (typeCode != Integer.MIN_VALUE) { return Type.getDefaultTypeWithSize(typeCode); } return null; } if (name.equals("java.sql.Array")) { return Type.getDefaultArrayType(Types.SQL_ALL_TYPES); } return null; } public static boolean acceptsZeroPrecision(int type) { switch (type) { case Types.SQL_TIME : case Types.SQL_TIMESTAMP : return true; default : return false; } } public static boolean requiresPrecision(int type) { switch (type) { case Types.SQL_BIT_VARYING : case Types.SQL_VARBINARY : case Types.SQL_VARCHAR : case Types.SQL_NVARCHAR : return true; default : return false; } } /** * Types that accept precision params in column definition or casts. */ public static boolean acceptsPrecision(int type) { switch (type) { case Types.LONGVARCHAR : case Types.LONGVARBINARY : case Types.SQL_ARRAY : case Types.SQL_BINARY : case Types.SQL_BIT : case Types.SQL_BIT_VARYING : case Types.SQL_BLOB : case Types.SQL_CHAR : case Types.SQL_NCHAR : case Types.SQL_CLOB : case Types.NCLOB : case Types.SQL_VARBINARY : case Types.SQL_VARCHAR : case Types.SQL_NVARCHAR : case Types.VARCHAR_IGNORECASE : case Types.SQL_DECIMAL : case Types.SQL_NUMERIC : case Types.SQL_FLOAT : case Types.SQL_TIME : case Types.SQL_TIMESTAMP : case Types.SQL_INTERVAL_YEAR : case Types.SQL_INTERVAL_YEAR_TO_MONTH : case Types.SQL_INTERVAL_MONTH : case Types.SQL_INTERVAL_DAY : case Types.SQL_INTERVAL_DAY_TO_HOUR : case Types.SQL_INTERVAL_DAY_TO_MINUTE : case Types.SQL_INTERVAL_DAY_TO_SECOND : case Types.SQL_INTERVAL_HOUR : case Types.SQL_INTERVAL_HOUR_TO_MINUTE : case Types.SQL_INTERVAL_HOUR_TO_SECOND : case Types.SQL_INTERVAL_MINUTE : case Types.SQL_INTERVAL_MINUTE_TO_SECOND : case Types.SQL_INTERVAL_SECOND : return true; default : return false; } } public static boolean acceptsScaleCreateParam(int type) { switch (type) { case Types.SQL_INTERVAL_SECOND : return true; case Types.SQL_DECIMAL : case Types.SQL_NUMERIC : return true; default : return false; } } /** * A reasonable/customizable number to avoid the shortcomings/defects * associated with doing a dynamic scan of results to determine * the value. In practice, it turns out that single query yielding * widely varying values for display size of CHAR and VARCHAR columns * on repeated execution results in patently poor usability, as some fairly * high-profile, otherwise "enterprise-quality" RAD tools depend on * on the first value returned to lay out forms and limit the size of * single line edit controls, set corresponding local datastore storage * sizes, etc. In practice, It also turns out that many tools (due to * the original lack of PreparedStatement.getMetaData() in JDK 1.1) emulate * a SQL_DESCRIBE by executing a query hopefully guaranteed to return no * or very few rows for example: select ... from ... where 1=0. * Using the dynamic scan of 1.7.2 RC5 and previous, therefore, the * minimum display size value (1) was often being generated during * a tool's describe phase. Upon subsequent "real" retrievals, some * tools complain that CHAR and VARCHAR result values exceeded the * originally reported display size and refused to fetch further values. */ public static final int MAX_CHAR_OR_VARCHAR_DISPLAY_SIZE = MAX_CHAR_OR_VARCHAR_DISPLAY_SIZE(); // So that the variable can be both public static final and // customizable through system properties if required. // // 32766 (0x7ffe) seems to be a magic number over which several // rather high-profile RAD tools start to have problems // regarding layout and allocation stress. It is gently // recommended that LONGVARCHAR be used for larger values in RAD // tool layout & presentation use cases until such time as we provide // true BLOB support (at which point, LONGVARCHAR will most likely become // an alias for CLOB). // // Most GUI tools seem to handle LONGVARCHAR gracefully by: // // 1.) refusing to directly display such columns in graphical query results // 2.) providing other means to retrieve and display such values private static int MAX_CHAR_OR_VARCHAR_DISPLAY_SIZE() { try { return Integer.getInteger( HsqlDatabaseProperties.system_max_char_or_varchar_display_size, 32766).intValue(); } catch (SecurityException e) { return 32766; } } public static boolean isSearchable(int type) { switch (type) { case Types.SQL_BLOB : case Types.SQL_CLOB : case Types.NCLOB : case Types.JAVA_OBJECT : case Types.STRUCT : case Types.OTHER : case Types.ROWID : return false; case Types.SQL_ARRAY : default : return true; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy