Class HSQLPlatform

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable, org.eclipse.persistence.internal.core.databaseaccess.CorePlatform<org.eclipse.persistence.internal.helper.ConversionManager>, org.eclipse.persistence.internal.databaseaccess.Platform

    public class HSQLPlatform
    extends DatabasePlatform

    Purpose: Provides HSQL specific behavior. Support HSQL functionality as of 1.8.1.

    Includes:

    • DDL creation
    • IDENTITY sequencing
    • SEQUENCE objects
    • Functions
    • Pagination
    See Also:
    Serialized Form
    Since:
    TOPLink/Java 4.5
    • Field Summary

      • Fields inherited from class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform

        batchWritingMechanism, castSizeForVarcharParameter, classTypes, cursorCode, DEFAULT_MAX_BATCH_WRITING_SIZE, DEFAULT_PARAMETERIZED_MAX_BATCH_WRITING_SIZE, driverName, driverSupportsNationalCharacterVarying, fieldTypes, IS_VALID_TIMEOUT, isCastRequired, maxBatchWritingSize, partitioningCallback, pingSQL, printInnerJoinInWhereClause, printOuterJoinInWhereClause, shouldBindAllParameters, shouldBindLiterals, shouldBindPartialParameters, shouldCacheAllStatements, shouldCreateIndicesOnForeignKeys, shouldForceBindAllParameters, shouldForceFieldNamesToUpperCase, shouldIgnoreCaseOnFieldComparisons, shouldOptimizeDataConversion, shouldTrimStrings, statementCacheSize, storedProcedureTerminationToken, stringBindingSize, structConverters, supportsAutoCommit, tableCreationSuffix, transactionIsolation, typeConverters, Types_NCLOB, Types_SQLXML, useJDBCStoredProcedureSyntax, useNationalCharacterVarying, useRownumFiltering, usesBatchWriting, usesByteArrayBinding, usesJDBCBatchWriting, usesNativeBatchWriting, usesNativeSQL, usesStreamsForBinding, usesStringBinding
      • Fields inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform

        conversionManager, dataTypesConvertedFromAClass, dataTypesConvertedToAClass, defaultNativeSequenceToTable, defaultSeqenceAtNextValue, defaultSequence, endDelimiter, platformOperators, sequences, sequencesLock, startDelimiter, supportsReturnGeneratedKeys, tableQualifier, timestampQuery
    • Constructor Summary

      Constructors 
      Constructor Description
      HSQLPlatform()  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean allowBindingForSelectClause()  
      protected java.util.Hashtable buildFieldTypes()  
      ValueReadQuery buildSelectQueryForIdentity()  
      ValueReadQuery buildSelectQueryForSequenceObject​(java.lang.String seqName, java.lang.Integer size)  
      java.io.Writer buildSequenceObjectCreationWriter​(java.io.Writer writer, java.lang.String fullSeqName, int increment, int start)
      INTERNAL: HSQL requires START WITH first.
      int computeMaxRowsForSQL​(int firstResultIndex, int maxResults)
      INTERNAL: Use the JDBC maxResults and firstResultIndex setting to compute a value to use when limiting the results of a query in SQL.
      protected java.lang.String getCreateTempTableSqlPrefix()  
      ValueReadQuery getTimestampQuery()  
      protected ExpressionOperator greatest()
      INTERNAL: Build HSQL equivalent to GREATEST(x, y) HSQL: CASE WHEN x >= y THEN x ELSE y
      protected void initializePlatformOperators()  
      boolean isAlterSequenceObjectSupported()  
      boolean isDynamicSQLRequiredForFunctions()
      INTERNAL HSQL has some issues with using parameters on certain functions and relations.
      boolean isHSQL()  
      void printFieldIdentityClause​(java.io.Writer writer)  
      void printSQLSelectStatement​(org.eclipse.persistence.internal.databaseaccess.DatabaseCall call, org.eclipse.persistence.internal.expressions.ExpressionSQLPrinter printer, org.eclipse.persistence.internal.expressions.SQLSelectStatement statement)
      Print the pagination SQL using HSQL syntax "SELECT LIMIT <first> <max>".
      protected ExpressionOperator rightTrim2()
      INTERNAL: Build HSQL equivalent to RTRIM(string_exp, character).
      boolean shouldUseJDBCOuterJoinSyntax()
      JDBC escape syntax for outer joins is not supported (not required).
      boolean supportsGlobalTempTables()  
      boolean supportsIdentity()  
      boolean supportsNestingOuterJoins()
      Does not allow nesting outer joins, i.e. each join must be followed by the ON clause.
      boolean supportsSequenceObjects()  
      boolean supportsUniqueColumns()
      HSQL (1.8.1) does not support the UNIQUE key word in a column, but does support unique constraints defined separately.
      static ExpressionOperator toNumberOperator()
      INTERNAL: Use CONVERT function for toNumber.
      static ExpressionOperator trimOperator()
      INTERNAL: Use TRIM(FROM ?)
      void writeUpdateOriginalFromTempTableSql​(java.io.Writer writer, org.eclipse.persistence.internal.helper.DatabaseTable table, java.util.Collection pkFields, java.util.Collection assignedFields)
      INTERNAL: HSQL does not allow multiple fields to be set as a list, so each field needs to be set one by one.
      • Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform

        addBatch, addStructConverter, allowsSizeInProcedureArguments, appendBoolean, appendByteArray, appendCalendar, appendDate, appendLiteralToCall, appendLiteralToCallWithBinding, appendNumber, appendParameter, appendParameterInternal, appendString, appendTime, appendTimestamp, autoCommit, beginTransaction, buildBatchCriteria, buildBatchCriteriaForComplexId, buildCallWithReturning, buildClassTypes, buildCreateIndex, buildCreateIndex, buildDropIndex, buildDropIndex, buildProcedureCallString, buildSequenceObjectAlterIncrementWriter, buildSequenceObjectDeletionWriter, canBatchWriteWithOptimisticLocking, canBuildCallWithReturning, checkTableExists, commitTransaction, convertToDatabaseType, copyInto, createArray, createArray, createPlatformDefaultSequence, createStruct, createStruct, createStruct, dontBindUpdateAllQueryUsingTempTables, executeBatch, executeStoredProcedure, freeTemporaryObject, getAssignmentString, getBatchBeginString, getBatchDelimiterString, getBatchEndString, getBatchRowCountAssignString, getBatchRowCountDeclareString, getBatchRowCountReturnString, getBatchWritingMechanism, getCastSizeForVarcharParameter, getClassTypes, getConnection, getConnectionUserName, getConstraintDeletionString, getCreateDatabaseSchemaString, getCreateTempTableSqlBodyForTable, getCreateTempTableSqlSuffix, getCreateViewString, getCreationInOutputProcedureToken, getCreationOutputProcedureToken, getCursorCode, getCustomModifyValueForCall, getDefaultSequenceTableName, getDriverSupportsNVarChar, getDropCascadeString, getDropDatabaseSchemaString, getFieldTypeDefinition, getFieldTypes, getFunctionCallHeader, getIdentifierQuoteCharacter, getIndexNamePrefix, getInOutputProcedureToken, getInputProcedureToken, getJDBCOuterJoinString, getJDBCType, getJDBCType, getJDBCTypeForSetNull, getJdbcTypeName, getMaxBatchWritingSize, getMaxFieldNameSize, getMaxForeignKeyNameSize, getMaxIndexNameSize, getMaxUniqueKeyNameSize, getNoWaitString, getObjectFromResultSet, getOutputProcedureToken, getParameterValueFromDatabaseCall, getParameterValueFromDatabaseCall, getPartitioningCallback, getPingSQL, getProcedureArgument, getProcedureArgument, getProcedureArgumentString, getProcedureAsString, getProcedureBeginString, getProcedureCallHeader, getProcedureCallTail, getProcedureEndString, getProcedureOptionList, getQualifiedName, getQualifiedSequenceTableName, getRefValue, getRefValue, getSelectForUpdateNoWaitString, getSelectForUpdateOfString, getSelectForUpdateString, getSelectForUpdateWaitString, getSequenceCounterFieldName, getSequenceNameFieldName, getSequencePreallocationSize, getSequenceTableName, getStatementCacheSize, getStoredProcedureParameterPrefix, getStoredProcedureTerminationToken, getStringBindingSize, getStructConverters, getTableCreationSuffix, getTableExistsQuery, getTempTableForTable, getTransactionIsolation, getTypeConverters, getUniqueConstraintDeletionString, getUseNationalCharacterVaryingTypeForString, getVPDClearIdentifierQuery, getVPDCreationFunctionString, getVPDCreationPolicyString, getVPDDeletionString, getVPDSetIdentifierQuery, hasPartitioningCallback, initialize, initializeConnectionData, isCastRequired, isForUpdateCompatibleWithDistinct, isInformixOuterJoin, isJDBCExecuteCompliant, isLobCompatibleWithDistinct, isLockTimeoutException, isNullAllowedInSelectClause, isOutputAllowWithResultSet, isRowCountOutputParameterRequired, isXDBDocument, maximumNumericValues, minimumNumericValues, minimumTimeIncrement, prepareBatchStatement, printFieldNotNullClause, printFieldNullClause, printFieldTypeSize, printFieldTypeSize, printFieldUnique, printFieldUnique, printStoredFunctionReturnKeyWord, printValuelist, printValuelist, registerOutputParameter, registerOutputParameter, registerOutputParameter, registerOutputParameter, requiresNamedPrimaryKeyConstraints, requiresProcedureBrackets, requiresProcedureCallBrackets, requiresProcedureCallOuputToken, requiresTableInIndexDropDDL, requiresTypeNameToRegisterOutputParameter, requiresUniqueConstraintCreationOnTableCreate, retrieveFirstPrimaryKeyOrOne, rollbackTransaction, setBatchWritingMechanism, setCastSizeForVarcharParameter, setClassTypes, setCursorCode, setDriverName, setDriverSupportsNVarChar, setFieldTypes, setIsCastRequired, setMaxBatchWritingSize, setNullFromDatabaseField, setNullFromDatabaseField, setParameterValueInDatabaseCall, setParameterValueInDatabaseCall, setPartitioningCallback, setPingSQL, setPrintInnerJoinInWhereClause, setPrintOuterJoinInWhereClause, setSequenceCounterFieldName, setSequenceNameFieldName, setSequenceTableName, setShouldBindAllParameters, setShouldBindLiterals, setShouldBindPartialParameters, setShouldCacheAllStatements, setShouldCreateIndicesOnForeignKeys, setShouldForceBindAllParameters, setShouldForceFieldNamesToUpperCase, setShouldIgnoreCaseOnFieldComparisons, setShouldOptimizeDataConversion, setShouldTrimStrings, setShouldUseRownumFiltering, setStatementCacheSize, setStoredProcedureTerminationToken, setStringBindingSize, setSupportsAutoCommit, setTableCreationSuffix, setTransactionIsolation, setUseJDBCStoredProcedureSyntax, setUseNationalCharacterVaryingTypeForString, setUsesBatchWriting, setUsesByteArrayBinding, setUsesJDBCBatchWriting, setUsesNativeBatchWriting, setUsesNativeSQL, setUsesStreamsForBinding, setUsesStringBinding, shouldAlwaysUseTempStorageForModifyAll, shouldBindAllParameters, shouldBindLiterals, shouldBindPartialParameters, shouldCacheAllStatements, shouldCreateIndicesForPrimaryKeys, shouldCreateIndicesOnForeignKeys, shouldCreateIndicesOnUniqueKeys, shouldForceBindAllParameters, shouldForceFieldNamesToUpperCase, shouldIgnoreCaseOnFieldComparisons, shouldIgnoreException, shouldOptimizeDataConversion, shouldPrintAliasForUpdate, shouldPrintConstraintNameAfter, shouldPrintFieldIdentityClause, shouldPrintForUpdateClause, shouldPrintInnerJoinInWhereClause, shouldPrintInOutputTokenBeforeType, shouldPrintInputTokenAtStart, shouldPrintLockingClauseAfterWhereClause, shouldPrintOuterJoinInWhereClause, shouldPrintOutputTokenAtStart, shouldPrintOutputTokenBeforeType, shouldPrintStoredProcedureArgumentNameInCall, shouldPrintStoredProcedureVariablesAfterBeginString, shouldTempTableSpecifyPrimaryKeys, shouldTrimStrings, shouldUseCustomModifyForCall, shouldUseGetSetNString, shouldUseRownumFiltering, supportsANSIInnerJoinSyntax, supportsAutoCommit, supportsAutoConversionToNumericForArithmeticOperations, supportsConnectionUserName, supportsCountDistinctWithMultipleFields, supportsDeleteOnCascade, supportsForeignKeyConstraints, supportsIndexes, supportsIndividualTableLocking, supportsLocalTempTables, supportsLockingQueriesWithMultipleTables, supportsOrderByParameters, supportsOuterJoinsWithBrackets, supportsPrimaryKeyConstraint, supportsStoredFunctions, supportsTempTables, supportsUniqueKeyConstraints, supportsVPD, supportsWaitForUpdate, usesBatchWriting, usesByteArrayBinding, usesJDBCBatchWriting, usesNativeBatchWriting, usesNativeSQL, usesSequenceTable, usesStreamsForBinding, usesStringBinding, wasFailureCommunicationBased, writeAddColumnClause, writeAutoAssignmentSetClause, writeAutoJoinWhereClause, writeCleanUpTempTableSql, writeCreateTempTableSql, writeDeleteFromTargetTableUsingTempTableSql, writeFields, writeFieldsAutoClause, writeFieldsList, writeInsertIntoTableSql, writeJoinWhereClause, writeLOB, writeParameterMarker, writeTableCreationSuffix
      • Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform

        addOperator, addSequence, addSequence, buildNativeCall, buildSelectQueryForIdentity, buildSelectQueryForSequenceObject, clone, convertObject, convertObject, createConnectionCustomizer, createExpressionFor, getConversionManager, getDataTypesConvertedFrom, getDataTypesConvertedTo, getDefaultNativeSequenceToTable, getDefaultSeqenceAtNextValue, getDefaultSequence, getDefaultSequenceToWrite, getDriverVersion, getEndDelimiter, getINClauseLimit, getOperator, getPlatformOperators, getSelectSequenceQuery, getSequence, getSequences, getSequencesToWrite, getStartDelimiter, getTableQualifier, getTimestampFromServer, getUpdateSequenceQuery, hasDefaultSequence, initializeDefaultQueries, isAccess, isAttunity, isCloudscape, isDB2, isDB2Z, isDBase, isDerby, isFirebird, isH2, isHANA, isInformix, isMaxDB, isMySQL, isODBC, isOracle, isOracle23, isOracle9, isPervasive, isPointBase, isPostgreSQL, isSQLAnywhere, isSQLServer, isSybase, isSymfoware, isTimesTen, isTimesTen7, removeAllSequences, removeSequence, sequencesAfterCloneCleanup, setConversionManager, setDefaultNativeSequenceToTable, setDefaultSeqenceAtNextValue, setDefaultSequence, setEndDelimiter, setSelectSequenceNumberQuery, setSequencePreallocationSize, setSequences, setStartDelimiter, setSupportsReturnGeneratedKeys, setTableQualifier, setTimestampQuery, setUpdateSequenceQuery, shouldNativeSequenceUseTransaction, shouldPrepare, shouldSelectDistinctIncludeOrderBy, shouldSelectIncludeOrderBy, supportsNativeSequenceNumbers, supportsReturnGeneratedKeys, toString, usesPlatformDefaultSequence
      • Methods inherited from class java.lang.Object

        equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • HSQLPlatform

        public HSQLPlatform()
    • Method Detail

      • buildFieldTypes

        protected java.util.Hashtable buildFieldTypes()
        Overrides:
        buildFieldTypes in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • initializePlatformOperators

        protected void initializePlatformOperators()
        Overrides:
        initializePlatformOperators in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • toNumberOperator

        public static ExpressionOperator toNumberOperator()
        INTERNAL: Use CONVERT function for toNumber.
      • trimOperator

        public static ExpressionOperator trimOperator()
        INTERNAL: Use TRIM(FROM ?) function for trim.
      • rightTrim2

        protected ExpressionOperator rightTrim2()
        INTERNAL: Build HSQL equivalent to RTRIM(string_exp, character). HSQL: TRIM(TRAILING character FROM string_exp)
      • greatest

        protected ExpressionOperator greatest()
        INTERNAL: Build HSQL equivalent to GREATEST(x, y) HSQL: CASE WHEN x >= y THEN x ELSE y
      • isHSQL

        public boolean isHSQL()
        Specified by:
        isHSQL in interface org.eclipse.persistence.internal.databaseaccess.Platform
        Overrides:
        isHSQL in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • supportsUniqueColumns

        public boolean supportsUniqueColumns()
        HSQL (1.8.1) does not support the UNIQUE key word in a column, but does support unique constraints defined separately. This allows the column setting to be generated as a constraint.
        Overrides:
        supportsUniqueColumns in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • supportsIdentity

        public boolean supportsIdentity()
        Overrides:
        supportsIdentity in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • buildSelectQueryForIdentity

        public ValueReadQuery buildSelectQueryForIdentity()
        Overrides:
        buildSelectQueryForIdentity in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • printFieldIdentityClause

        public void printFieldIdentityClause​(java.io.Writer writer)
                                      throws ValidationException
        Overrides:
        printFieldIdentityClause in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        ValidationException
      • isDynamicSQLRequiredForFunctions

        public boolean isDynamicSQLRequiredForFunctions()
        INTERNAL HSQL has some issues with using parameters on certain functions and relations. This allows statements to disable binding only in these cases.
        Overrides:
        isDynamicSQLRequiredForFunctions in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • allowBindingForSelectClause

        public boolean allowBindingForSelectClause()
        Overrides:
        allowBindingForSelectClause in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • shouldUseJDBCOuterJoinSyntax

        public boolean shouldUseJDBCOuterJoinSyntax()
        JDBC escape syntax for outer joins is not supported (not required).
        Overrides:
        shouldUseJDBCOuterJoinSyntax in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • supportsNestingOuterJoins

        public boolean supportsNestingOuterJoins()
        Does not allow nesting outer joins, i.e. each join must be followed by the ON clause.
        Overrides:
        supportsNestingOuterJoins in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • supportsSequenceObjects

        public boolean supportsSequenceObjects()
        Overrides:
        supportsSequenceObjects in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • isAlterSequenceObjectSupported

        public boolean isAlterSequenceObjectSupported()
        Overrides:
        isAlterSequenceObjectSupported in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • buildSelectQueryForSequenceObject

        public ValueReadQuery buildSelectQueryForSequenceObject​(java.lang.String seqName,
                                                                java.lang.Integer size)
        Overrides:
        buildSelectQueryForSequenceObject in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • supportsGlobalTempTables

        public boolean supportsGlobalTempTables()
        Overrides:
        supportsGlobalTempTables in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getCreateTempTableSqlPrefix

        protected java.lang.String getCreateTempTableSqlPrefix()
        Overrides:
        getCreateTempTableSqlPrefix in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • writeUpdateOriginalFromTempTableSql

        public void writeUpdateOriginalFromTempTableSql​(java.io.Writer writer,
                                                        org.eclipse.persistence.internal.helper.DatabaseTable table,
                                                        java.util.Collection pkFields,
                                                        java.util.Collection assignedFields)
                                                 throws java.io.IOException
        INTERNAL: HSQL does not allow multiple fields to be set as a list, so each field needs to be set one by one.
        Overrides:
        writeUpdateOriginalFromTempTableSql in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        java.io.IOException
      • computeMaxRowsForSQL

        public int computeMaxRowsForSQL​(int firstResultIndex,
                                        int maxResults)
        INTERNAL: Use the JDBC maxResults and firstResultIndex setting to compute a value to use when limiting the results of a query in SQL. These limits tend to be used in two ways. 1. MaxRows is the index of the last row to be returned (like JDBC maxResults) 2. MaxRows is the number of rows to be returned HSQL uses case #2 and therefore the maxResults has to be altered based on the firstResultIndex.
        Overrides:
        computeMaxRowsForSQL in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • printSQLSelectStatement

        public void printSQLSelectStatement​(org.eclipse.persistence.internal.databaseaccess.DatabaseCall call,
                                            org.eclipse.persistence.internal.expressions.ExpressionSQLPrinter printer,
                                            org.eclipse.persistence.internal.expressions.SQLSelectStatement statement)
        Print the pagination SQL using HSQL syntax "SELECT LIMIT <first> <max>".
        Overrides:
        printSQLSelectStatement in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getTimestampQuery

        public ValueReadQuery getTimestampQuery()
        Specified by:
        getTimestampQuery in interface org.eclipse.persistence.internal.databaseaccess.Platform
        Overrides:
        getTimestampQuery in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • buildSequenceObjectCreationWriter

        public java.io.Writer buildSequenceObjectCreationWriter​(java.io.Writer writer,
                                                                java.lang.String fullSeqName,
                                                                int increment,
                                                                int start)
                                                         throws java.io.IOException
        INTERNAL: HSQL requires START WITH first.
        Overrides:
        buildSequenceObjectCreationWriter in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        java.io.IOException