alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

HSQLDB example source code file (DITypeInfo.java)

This example HSQLDB source code file (DITypeInfo.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - HSQLDB tags/keywords

boolean, boolean, ditypeinfo, exception, exception, integer, integer, jdbc, long, n/a, sql_bit_varying, sql_udt, string, string, util

The HSQLDB DITypeInfo.java source code

/* Copyright (c) 2001-2008, 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;

import java.util.Locale;

import org.hsqldb.resources.BundleHandler;
import org.hsqldb.store.ValuePool;

/**
 * Provides information intrinsic to each standard data type known to
 * HSQLDB.  This includes all types for which standard type codes are known
 * at the time of writing and thus includes types that may not yet be
 * supported as table or procedure columns. <p>
 *
 * @author  boucherb@users
 * @version 1.8.0
 * @since 1.7.2
 */
final class DITypeInfo {

    // related to DatabaseMetaDataValues
    static final int columnNoNulls  = 0;
    static final int columnNullable = 1;
    static final int typePredNone   = 0;
    static final int typePredChar   = 1;
    static final int typePredBasic  = 2;
    static final int typeSearchable = 3;

    /** BundleHandler id for create params resource bundle. */
    private int hnd_create_params = -1;

    /** BundleHandler id for local names resource bundle. */
    private int hnd_local_names = -1;

    /** BundleHandler id for data type remarks resource bundle. */
    private int hnd_remarks = -1;

    /** The SQL type code on which this object is reporting. */
    private int type = Types.NULL;

    /** The HSQLDB subtype code on which this object is reporting. */
    private int typeSub = Types.TYPE_SUB_DEFAULT;
    boolean     locale_set;

    /** Creates a new DITypeInfo object having the default Locale. */
    DITypeInfo() {

        // boucherb@users 20050515 - patch 1.8.0 - make setLocale lazy
        //setLocale(Locale.getDefault());
    }

    /**
     * Retrieves the maximum Integer.MAX_VALUE bounded length, in bytes, for
     * character types. <p>
     *
     * @return the maximum Integer.MAX_VALUE bounded length, in
     *    bytes, for character types
     */
    Integer getCharOctLen() {
        return null;
    }

    /**
     * Retrieves the maximum Long.MAX_VALUE bounded length, in bytes, for
     * character types. <p>
     *
     * @return the maximum Long.MAX_VALUE bounded length, in
     *    bytes, for character types
     */
    Long getCharOctLenAct() {

        switch (type) {

            case Types.CHAR :
            case Types.LONGVARCHAR :
            case Types.VARCHAR :
                return ValuePool.getLong(2L * Integer.MAX_VALUE);

            case Types.CLOB :
                return ValuePool.getLong(Long.MAX_VALUE);

            default :
                return null;
        }
    }

    /**
     * Retrieves the fully-qualified name of the Java class whose instances
     * are manufactured by HSQLDB to store table column values in
     * memory. <p>
     *
     * This is also typically the fully-qualified name of the Java class whose
     * instances are manufactured by HSQLDB in response to
     * jdbcResultSet.getObject(int). <p>
     *
     * @return the fully-qualified name of the Java class whose
     *    instances are manufactured by HSQLDB to store
     *    table column values in memory
     */
    String getColStClsName() {
        return Types.getColStClsName(type);
    }

    /**
     * Retrieves a character sequence representing a CSV list, in
     * DDL declaraion order, of the create parameters for the type. <p>
     *
     * @return a character sequence representing a CSV
     *    list, in DDL declaraion order, of the create
     *    parameters for the type.
     */
    String getCreateParams() {

        if (!locale_set) {
            setLocale(Locale.getDefault());
        }

        String names;

        switch (type) {

            case Types.CHAR :
            case Types.VARCHAR :
                names = "LENGTH";
                break;

            case Types.DECIMAL :
            case Types.NUMERIC :
                names = "PRECISION,SCALE";
                break;

            case Types.FLOAT :
            case Types.TIMESTAMP :
                names = "PRECISION";
                break;

            default :
                names = null;
                break;
        }

        return names;
    }

    /**
     * Retrieves the fully-qualified name of the HSQLDB-provided java.sql
     * interface implementation class whose instances would be manufactured
     * by HSQLDB to retrieve column values of this type, if the
     * the type does not have a standard Java mapping.  <p>
     *
     * This value is simply the expected class name, regardless of whether
     * HSQLDB, the specific HSQLDB distribution instance or the hosting JVM
     * actually provide or support such implementations. That is, as of a
     * specific release, HSQLDB may not yet provide such an implementation
     * or may not automatically map to it or may not support it as a table
     * column type, the version of java.sql may not define the interface to
     * implement and the HSQLDB jar may not contain the implementation
     * classes, even if they are defined in the corresponding release
     * and build options and are supported under the hosting JVM's java.sql
     * version.<p>
     *
     * @return the fully-qualified name of the HSQLDB-provided java.sql
     *    interface implementation class whose instances would
     *    be manufactured by HSQLDB to retrieve column values of
     *    this type, given that the type does not have a standard Java
     *    mapping and regardless of whether a class with the indicated
     *    name is actually implemented or available on the class path
     */
    String getCstMapClsName() {

        switch (type) {

            case Types.ARRAY :
                return "org.hsqldb.jdbc.jdbcArray";

            case Types.BLOB :
                return "org.hsqldb.jdbc.jdbcBlob";

            case Types.CLOB :
                return "org.hsqldb.jdbc.jdbcClob";

            case Types.DISTINCT :
                return "org.hsqldb.jdbc.jdbcDistinct";

            case Types.REF :
                return "org.hsqldb.jdbc.jdbcRef";

            case Types.STRUCT :
                return "org.hsqldb.jdbc.jdbcStruct";

            default :
                return null;
        }
    }

// NOTES:
// From recent usability testing, this patch and the corresponding patch in
// jdbcResultSetMetaData together provide better compatibility with existing
// tools than through the previous method of dynamically scanning each result
// in jdbcResultSetMetaData.  This is especially true given that many tools use
// the display size to set their internal max # of characters reserved for
// result columns at said position. Also, since adding implementation of
// ResultSetMetaData retreived from PreparedStatement's getMetaData method,
// there exists the case where there is no data to scan in order to determine
// an approximation.  Finally, since for plain old Statement objects the only
// way to get metadata is to execute the query and since the scan approximation
// can vary from one execution to the next, it turns out it's much "safer" and
// more usable in a tool setting to simply indicate a large but expected
// acceptable number of characters, rather than report either a number generally
// too large to handle or a number too small to hold the actual expected maximum
// number of characters for result colums of CHAR or VARCHAR types

    /**
     * Retrieves the maximum length that a String representation of
     * the type may have. <p>
     *
     * The calculation follows these rules: <p>
     *
     * <ol>
     * <li>Long character and datetime types:

* * The maximum length/precision, repectively.<p> * * <li>CHAR and VARCHAR types:

* * The value of the system property hsqldb.max_xxxchar_display_size * or the magic value 32766 (0x7FFE) (tested usable/accepted by most * tools and compatible with assumptions made by java.io read/write * UTF) when the system property is not defined or is not accessible, * due to security constraints. <p> * * <li>Number types:

* * The max precision, plus the length of the negation character (1), * plus (if applicable) the maximum number of characters that may * occupy the exponent character sequence. <p> * * <li>BOOLEAN/BIT types:

* * The length of the character sequence "false" (5), the longer of the * two boolean value String representations. <p> * * <li>All remaining types:

* * The result of whatever calculation must be performed to determine * the maximum length of the type's String representation. If the * maximum display size is unknown, unknowable or inapplicable, then * zero is returned. <p> * * </ol> * * @return the maximum length that a String representation of * the type may have, or zero (0) if unknown or unknowable */ int getMaxDisplaySize() { return Types.getMaxDisplaySize(type); } /** * Retrieves the data type, as an Integer. <p> * * @return the data type, as an Integer. */ Integer getDataType() { return ValuePool.getInt(type); } /** * Retrieves the data subtype, as an Integer. <p> * * @return the data subtype, as an Integer */ Integer getDataTypeSub() { return ValuePool.getInt(typeSub); } /** * Retrieves the implied or single permitted scale for exact numeric * types, when no scale is declared or no scale declaration is * permitted. <p> * * @return the implied or single permitted scale for exact numeric * types, when no scale is declared or no scale declaration * is permitted */ Integer getDefaultScale() { switch (type) { case Types.BIGINT : case Types.INTEGER : case Types.SMALLINT : case Types.TINYINT : return ValuePool.getInt(0); default : return null; } } /** * Retrieves null (not implemented). <p> * * @return null (not implemented) */ Integer getIntervalPrecision() { return null; } /** * Retrieves the character(s) prefixing a literal of this type. <p> * * @return the character(s) prefixing a literal of this type. */ String getLiteralPrefix() { switch (type) { case Types.BINARY : case Types.BLOB : case Types.CHAR : case Types.CLOB : case Types.LONGVARBINARY : case Types.LONGVARCHAR : case Types.VARBINARY : case Types.VARCHAR : return "'"; case Types.DATALINK : return "'"; // hypothetically: "{url '"; case Types.DATE : return "'"; // or JDBC escape: "{d '"; case Types.OTHER : return "'"; // hypothetically: "{o '"; or new "pkg.cls"(...) case Types.TIME : return "'"; // or JDBC escape: "{t '"; case Types.TIMESTAMP : return "'"; // or JDBC escape: "{ts '"; case Types.XML : return "'"; // hypothetically: "{xml '"; default : return null; } } /** * Retrieves the character(s) terminating a literal of this type. <p> * * @return the character(s) terminating a literal of this type */ String getLiteralSuffix() { switch (type) { case Types.BINARY : case Types.BLOB : case Types.CHAR : case Types.CLOB : case Types.LONGVARBINARY : case Types.LONGVARCHAR : case Types.VARBINARY : case Types.VARCHAR : return "'"; case Types.DATALINK : case Types.DATE : case Types.OTHER : case Types.TIME : case Types.TIMESTAMP : case Types.XML : return "'"; // or JDBC close escape: "'}"; default : return null; } } /** * Retrieves a localized representation of the type's name, for human * consumption only. <p> * * @return a localized representation of the type's name */ String getLocalName() { if (!locale_set) { setLocale(Locale.getDefault()); } String key = this.getTypeName(); return BundleHandler.getString(hnd_local_names, key); } /** * Retrieves the maximum Short.MAX_VALUE bounded scale supported * for the type. <p> * * @return the maximum Short.MAX_VALUE bounded scale supported * for the type */ Integer getMaxScale() { switch (type) { case Types.BIGINT : case Types.DATE : case Types.TIME : case Types.INTEGER : case Types.SMALLINT : case Types.TINYINT : return ValuePool.getInt(0); case Types.TIMESTAMP : return ValuePool.getInt(6); case Types.DECIMAL : case Types.NUMERIC : return ValuePool.getInt(Short.MAX_VALUE); case Types.FLOAT : case Types.REAL : case Types.DOUBLE : return ValuePool.getInt(306); default : return null; } } /** * Retrieves the maximum Integer.MAX_VALUE bounded scale supported for * the type. <p> * * @return the maximum Integer.MAX_VALUE bounded scale supported * for the type */ Integer getMaxScaleAct() { switch (type) { case Types.DECIMAL : case Types.NUMERIC : return ValuePool.getInt(Integer.MAX_VALUE); default : return getMaxScale(); } } /** * Retrieves the minumum Short.MIN_VALUE bounded scale supported for * the type. <p> * * @return the minumum Short.MIN_VALUE bounded scale * supported for the type */ Integer getMinScale() { switch (type) { case Types.BIGINT : case Types.DATE : case Types.INTEGER : case Types.SMALLINT : case Types.TIME : case Types.TIMESTAMP : case Types.TINYINT : case Types.DECIMAL : case Types.NUMERIC : return ValuePool.getInt(0); case Types.FLOAT : case Types.REAL : case Types.DOUBLE : return ValuePool.getInt(-324); default : return null; } } /** * Retrieves the minumum Integer.MIN_VALUE bounded scale supported * for the type. <p> * * @return the minumum Integer.MIN_VALUE bounded scale supported * for the type */ Integer getMinScaleAct() { return getMinScale(); } /** * Retrieves the DatabaseMetaData default nullability code for * the type. <p> * * @return the DatabaseMetaData nullability code for the type. */ Integer getNullability() { return ValuePool.getInt(columnNullable); } /** * Retrieves the number base which is to be used to interpret the value * reported by getPrecision(). <p> * * @return the number base which is to be used to interpret the * value reported by getPrecision() */ Integer getNumPrecRadix() { switch (type) { case Types.BIGINT : case Types.DECIMAL : case Types.DOUBLE : case Types.INTEGER : case Types.NUMERIC : case Types.REAL : case Types.SMALLINT : case Types.TINYINT : return ValuePool.getInt(10); case Types.FLOAT : return ValuePool.getInt(2); default : return null; } } /** * Retrieves the maximum Integer.MAX_VALUE bounded length or precision for * the type. <p> * * @return the maximum Integer.MAX_VALUE bounded length or * precision for the type */ Integer getPrecision() { int p = Types.getPrecision(type); return p == 0 ? null : ValuePool.getInt(p); } /** * Retrieves the maximum Long.MAX_VALUE bounded length or precision for * the type. <p> * * @return the maximum Long.MAX_VALUE bounded length or * precision for the type */ Long getPrecisionAct() { Integer temp = getPrecision(); if (temp == null) { return ValuePool.getLong(Long.MAX_VALUE); } else { return ValuePool.getLong(temp.longValue()); } } /** * Retrieves the localized remarks (if any) on the type. <p> * * @return the localized remarks on the type. */ String getRemarks() { if (!locale_set) { setLocale(Locale.getDefault()); } String key = this.getTypeName(); return BundleHandler.getString(hnd_remarks, key); } /** * Retrieves the DatabaseMetaData searchability code for the type. <p> * * @return the DatabaseMetaData searchability code for the type */ Integer getSearchability() { return Types.isSearchable(type) ? ValuePool.getInt(typeSearchable) : ValuePool.getInt(typePredNone); } /** * Retrieves the SQL CLI data type code for the type. <p> * * @return the SQL CLI data type code for the type */ Integer getSqlDataType() { // values from SQL200n SQL CLI spec, or DITypes (which in turn borrows // first from java.sql.Types and then SQL200n SQL CLI spec) if there // was no corresponding value in SQL CLI switch (type) { case Types.ARRAY : return ValuePool.getInt(Types.SQL_ARRAY); // SQL_ARRAY case Types.BIGINT : return ValuePool.getInt(Types.SQL_BIGINT); // SQL_BIGINT case Types.BINARY : return ValuePool.getInt(Types.SQL_BLOB); // fredt- was SQL_BIT_VARYING case Types.BOOLEAN : return ValuePool.getInt(Types.SQL_BOOLEAN); // SQL_BOOLEAN case Types.BLOB : return ValuePool.getInt(Types.SQL_BLOB); // SQL_BLOB case Types.CHAR : return ValuePool.getInt(Types.SQL_CHAR); // SQL_CHAR case Types.CLOB : return ValuePool.getInt(Types.SQL_CLOB); // SQL_CLOB case Types.DATALINK : return ValuePool.getInt(Types.SQL_DATALINK); // SQL_DATALINK case Types.DATE : // NO: This is the _concise_ code, whereas what we want to // return here is the Data Type Code column value from // Table 38 in the SQL 200n FCD. This method is used // by DatabaseInformationMain to list the sql type // column in the SYSTEM_TYPEINFO table, which is specified // by JDBC as the sql data type code, not the concise code. // That is why there is a sql datetime sub column // specified as well. // return ValuePool.getInt(Types.SQL_DATE); // fredt - was SQL_DATETIME return ValuePool.getInt(Types.SQL_DATETIME); case Types.DECIMAL : return ValuePool.getInt(Types.SQL_DECIMAL); // SQL_DECIMAL case Types.DISTINCT : return ValuePool.getInt(Types.SQL_UDT); // SQL_UDT case Types.DOUBLE : return ValuePool.getInt(Types.SQL_DOUBLE); // SQL_DOUBLE case Types.FLOAT : return ValuePool.getInt(Types.SQL_FLOAT); // SQL_FLOAT case Types.INTEGER : return ValuePool.getInt(Types.SQL_INTEGER); // SQL_INTEGER case Types.JAVA_OBJECT : return ValuePool.getInt(Types.JAVA_OBJECT); // N/A - maybe SQL_UDT? case Types.LONGVARBINARY : return ValuePool.getInt(Types.SQL_BLOB); // was SQL_BIT_VARYING case Types.LONGVARCHAR : return ValuePool.getInt(Types.SQL_CLOB); // case Types.NULL : return ValuePool.getInt(Types.SQL_ALL_TYPES); // SQL_ALL_TYPES case Types.NUMERIC : return ValuePool.getInt(Types.SQL_NUMERIC); // SQL_NUMERIC case Types.OTHER : return ValuePool.getInt(Types.OTHER); // N/A - maybe SQL_UDT? case Types.REAL : return ValuePool.getInt(Types.SQL_REAL); // SQL_REAL case Types.REF : return ValuePool.getInt(Types.SQL_REF); // SQL_REF case Types.SMALLINT : return ValuePool.getInt(Types.SQL_SMALLINT); // SQL_SMALLINTEGER case Types.STRUCT : return ValuePool.getInt(Types.SQL_UDT); // SQL_UDT case Types.TIME : // NO: This is the _concise_ code, whereas what we want to // return here is the Data Type Code column value from // Table 38 in the SQL 200n FCD. This method is used // by DatabaseInformationMain to list the sql type // column in the SYSTEM_TYPEINFO table, which is specified // by JDBC as the sql data type code, not the concise code. // That is why there is a sql datetime sub column // specified as well. // return ValuePool.getInt(Types.SQL_TIME); // fredt - was SQL_DATETIME return ValuePool.getInt(Types.SQL_DATETIME); case Types.TIMESTAMP : // NO: This is the _concise_ code, whereas what we want to // return here is the Data Type Code column value from // Table 38 in the SQL CLI 200n FCD. This method is used // by DatabaseInformationMain to list the sql type // column in the SYSTEM_TYPEINFO table, which is specified // by JDBC as the sql data type code, not the concise code. // That is why there is a sql datetime sub column // specified as well. // return ValuePool.getInt(Types.SQL_TIMESTAMP); // fredt - was SQL_DATETIME return ValuePool.getInt(Types.SQL_DATETIME); case Types.TINYINT : return ValuePool.getInt(Types.TINYINT); // N/A case Types.VARBINARY : return ValuePool.getInt(Types.SQL_BLOB); // SQL_BIT_VARYING case Types.VARCHAR : return ValuePool.getInt(Types.SQL_VARCHAR); // SQL_VARCHAR case Types.XML : return ValuePool.getInt(Types.SQL_XML); // SQL_XML default : return null; } } /** * Retrieves the SQL CLI datetime subcode for the type. <p> * * @return the SQL CLI datetime subcode for the type */ Integer getSqlDateTimeSub() { switch (type) { case Types.DATE : return ValuePool.getInt(1); case Types.TIME : return ValuePool.getInt(2); case Types.TIMESTAMP : return ValuePool.getInt(3); default : return null; } } /** * Retrieve the fully qualified name of the recommended standard Java * primitive, class or java.sql interface mapping for the type. <p> * * @return the fully qualified name of the recommended standard Java * primitive, class or java.sql interface mapping for * the type */ String getStdMapClsName() { switch (type) { case Types.ARRAY : return "java.sql.Array"; case Types.BIGINT : return "long"; case Types.BINARY : case Types.LONGVARBINARY : case Types.VARBINARY : return "[B"; case Types.BOOLEAN : return "boolean"; case Types.BLOB : return "java.sql.Blob"; case Types.CHAR : case Types.LONGVARCHAR : case Types.VARCHAR : return "java.lang.String"; case Types.CLOB : return "java.sql.Clob"; case Types.DATALINK : return "java.net.URL"; case Types.DATE : return "java.sql.Date"; case Types.DECIMAL : case Types.NUMERIC : return "java.math.BigDecimal"; case Types.DISTINCT : case Types.JAVA_OBJECT : case Types.OTHER : case Types.XML : // ??? return "java.lang.Object"; case Types.REAL : return "float"; case Types.FLOAT : case Types.DOUBLE : return "double"; case Types.INTEGER : return "int"; case Types.NULL : return "null"; case Types.REF : return "java.sql.Ref"; case Types.SMALLINT : return "short"; case Types.STRUCT : return "java.sql.Struct"; case Types.TIME : return "java.sql.Time"; case Types.TIMESTAMP : return "java.sql.Timestamp"; case Types.TINYINT : return "byte"; default : return null; } } /** * Retrieves the data type as an int. <p> * * @return the data type as an int */ int getTypeCode() { return type; } /** * Retrieves the canonical data type name HSQLDB associates with * the type. <p> * * This typically matches the designated JDBC name, with one or * two exceptions. <p> * * @return the canonical data type name HSQLDB associates with the type */ String getTypeName() { return typeSub == Types.TYPE_SUB_IGNORECASE ? Types.getTypeName(Types.VARCHAR_IGNORECASE) : Types.getTypeName(type); } /** * Retrieves the HSQLDB data subtype as an int. <p> * * @return the HSQLDB data subtype as an int */ int getTypeSub() { return this.typeSub; } /** * Retrieves whether the type can be an IDENTITY type. <p> * * @return whether the type can be an IDENTITY type. */ Boolean isAutoIncrement() { switch (type) { case Types.DECIMAL : case Types.DOUBLE : case Types.FLOAT : case Types.NUMERIC : case Types.REAL : case Types.SMALLINT : case Types.TINYINT : return Boolean.FALSE; case Types.BIGINT : case Types.INTEGER : return Boolean.TRUE; default : return null; } } /** * Retrieves whether the type is case-sensitive in collations and * comparisons. <p> * * @return whether the type is case-sensitive in collations and * comparisons. */ Boolean isCaseSensitive() { return typeSub == Types.TYPE_SUB_IGNORECASE ? Boolean.FALSE : Types.isCaseSensitive( type); } /** * Retrieves whether, under the current release, class path and hosting * JVM, HSQLDB supports storing this type in table columns. <p> * * This value also typically represents whether HSQLDB supports retrieving * values of this type in the columns of ResultSets. * @return whether, under the current release, class path * and hosting JVM, HSQLDB supports storing this * type in table columns */ Boolean isColStClsSupported() { return ValuePool.getBoolean(type == Types.NULL ? true : getColStClsName() != null); } /** * Retrieves whether values of this type have a fixed precision and * scale. <p> * * @return whether values of this type have a fixed * precision and scale. */ Boolean isFixedPrecisionScale() { switch (type) { case Types.BIGINT : case Types.DECIMAL : case Types.DOUBLE : case Types.FLOAT : case Types.INTEGER : case Types.NUMERIC : case Types.REAL : case Types.SMALLINT : case Types.TINYINT : return Boolean.FALSE; default : return null; } } /** * Retrieve whether the fully qualified name reported by getStdMapClsName() * is supported as a jdbcResultSet.getXXX return type under the current * HSQLDB release, class path and hosting JVM. <p> * * @return whether the fully qualified name reported by getStdMapClsName() * is supported as a jdbcResultSet.getXXX return type under the current * HSQLDB release, class path and hosting JVM. */ Boolean isStdMapClsSupported() { // its ok to use Class.forName here instead of nameSpace.classForName, // because all standard map classes are loaded by the boot loader boolean isSup = false; switch (type) { case Types.ARRAY : { try { Class.forName("java.sql.Array"); isSup = true; } catch (Exception e) { isSup = false; } break; } case Types.BLOB : { try { Class.forName("java.sql.Blob"); isSup = true; } catch (Exception e) { isSup = false; } break; } case Types.CLOB : { try { Class.forName("java.sql.Clob"); isSup = true; } catch (Exception e) { isSup = false; } break; } case Types.DISTINCT : { isSup = false; break; } case Types.REF : { try { Class.forName("java.sql.Ref"); isSup = true; } catch (Exception e) { isSup = false; } break; } case Types.STRUCT : { try { Class.forName("java.sql.Struct"); isSup = true; } catch (Exception e) { isSup = false; } break; } default : { isSup = (getStdMapClsName() != null); break; } } return ValuePool.getBoolean(isSup); } /** * Retrieves whether, under the current release, class path and * hosting JVM, HSQLDB supports passing or receiving this type as * the value of a procedure column. <p> * * @return whether, under the current release, class path and * hosting JVM, HSQLDB supports passing or receiving * this type as the value of a procedure column. */ Boolean isSupportedAsPCol() { switch (type) { case Types.NULL : // - for void return type case Types.JAVA_OBJECT : // - for Connection as first parm and // Object for return type case Types.ARRAY : // - for Object[] row of Trigger.fire() return Boolean.TRUE; default : return isSupportedAsTCol(); } } /** * Retrieves whether, under the current release, class path and * hosting JVM, HSQLDB supports this as the type of a table * column. <p> * * @return whether, under the current release, class path * and hosting JVM, HSQLDB supports this type * as the values of a table column */ Boolean isSupportedAsTCol() { String columnTypeName; if (type == Types.NULL) { return Boolean.FALSE; } columnTypeName = Types.getTypeString(type); return ValuePool.getBoolean(columnTypeName != null); } /** * Retrieves whether values of this type are unsigned. <p> * * @return whether values of this type are unsigned */ Boolean isUnsignedAttribute() { return Types.isUnsignedAttribute(type); } /** * Assigns the Locale object used to retrieve this object's * resource bundle dependent values. <p> * * @param l the Locale object used to retrieve this object's resource * bundle dependent values */ void setLocale(Locale l) { if (l == null) { hnd_create_params = hnd_local_names = hnd_remarks = -1; locale_set = false; return; } Locale oldLocale; synchronized (BundleHandler.class) { oldLocale = BundleHandler.getLocale(); BundleHandler.setLocale(l); hnd_create_params = BundleHandler.getBundleHandle("data-type-create-parameters", null); hnd_local_names = BundleHandler.getBundleHandle("data-type-names", null); hnd_remarks = BundleHandler.getBundleHandle("data-type-remarks", null); BundleHandler.setLocale(oldLocale); locale_set = true; } } /** * Assigns the SQL data type code on which this object is to report. <p> * * @param type the SQL data type code on which this object is to report */ void setTypeCode(int type) { this.type = type; } /** * Assigns the HSQLDB data subtype code on which this object is * to report. <p> * * @param typeSub the HSQLDB data subtype code on which this object * is to report */ void setTypeSub(int typeSub) { this.typeSub = typeSub; } }

Other HSQLDB examples (source code examples)

Here is a short list of links related to this HSQLDB DITypeInfo.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.