Class DatabasePlatform

    • Field Detail

      • fieldTypes

        protected transient Map<Class,​FieldTypeDefinition> fieldTypes
        Holds a map of values used to map JAVA types to database types for table creation
      • usesNativeSQL

        protected boolean usesNativeSQL
        Indicates that native SQL should be used for literal values instead of ODBC escape format Only used with Oracle, Sybase & DB2
      • usesByteArrayBinding

        protected boolean usesByteArrayBinding
        Indicates that binding will be used for BLOB data. NOTE: does not work well with ODBC.
      • usesBatchWriting

        protected boolean usesBatchWriting
        Batch all write statements
      • shouldBindAllParameters

        protected boolean shouldBindAllParameters
        Bind all arguments to any SQL statement.
      • shouldForceBindAllParameters

        protected boolean shouldForceBindAllParameters
        Bind all arguments to any SQL statement.
      • shouldCacheAllStatements

        protected boolean shouldCacheAllStatements
        Cache all prepared statements, this requires full parameter binding as well.
      • statementCacheSize

        protected int statementCacheSize
        The statement cache size for prepare parameterized statements.
      • shouldForceFieldNamesToUpperCase

        protected boolean shouldForceFieldNamesToUpperCase
        Can be used if the app expects upper case but the database is not return consistent case, i.e. different databases.
      • shouldTrimStrings

        protected boolean shouldTrimStrings
        Indicates (if true) to remove blanks characters from the right of CHAR strings.
      • usesStreamsForBinding

        protected boolean usesStreamsForBinding
        Indicates that streams will be used to store BLOB data. NOTE: does not work with ODBC
      • stringBindingSize

        protected int stringBindingSize
        Indicates the size above which strings will be bound NOTE: does not work with ODBC
      • usesStringBinding

        protected boolean usesStringBinding
        Indicates that strings will above the stringBindingSize will be bound NOTE: does not work with ODBC
      • maxBatchWritingSize

        protected int maxBatchWritingSize
        Allow for the batch size to be set as many database have strict limits.
      • castSizeForVarcharParameter

        protected int castSizeForVarcharParameter
        used for casting of input parameters in certain DBs
      • usesJDBCBatchWriting

        protected boolean usesJDBCBatchWriting
        Allow for our batch writing support to be used in JDK 1.2.
      • usesNativeBatchWriting

        protected boolean usesNativeBatchWriting
        bug 4241441: Allow custom batch writing to enable batching with optimistic locking.
      • batchWritingMechanism

        protected BatchWritingMechanism batchWritingMechanism
        Allow for a custom batch writing mechanism.
      • printOuterJoinInWhereClause

        protected Boolean printOuterJoinInWhereClause
        Allow configuration option to use Where clause outer joining or From clause joining.
      • printInnerJoinInWhereClause

        protected Boolean printInnerJoinInWhereClause
        Allow configuration option to use Where clause joining or From clause joining.
      • cursorCode

        protected int cursorCode
        Allow for the code that is used for preparing cursored outs for a storedprocedure to be settable.
      • transactionIsolation

        protected int transactionIsolation
        The transaction isolation level to be set on the connection (optional).
      • supportsAutoCommit

        protected boolean supportsAutoCommit
        Some JDBC drivers do not support AutoCommit in the way EclipseLink expects. (e.g. Attunity Connect, JConnect)
      • shouldOptimizeDataConversion

        protected boolean shouldOptimizeDataConversion
        Allow for driver level data conversion optimization to be disabled, required because some drivers can loose precision.
      • classTypes

        protected transient Map<String,​Class> classTypes
        Stores mapping of class types to database types for schema creation.
      • shouldIgnoreCaseOnFieldComparisons

        public static boolean shouldIgnoreCaseOnFieldComparisons
        Allow for case in field names to be ignored as some databases are not case sensitive and when using custom this can be an issue.
      • DEFAULT_MAX_BATCH_WRITING_SIZE

        public static final int DEFAULT_MAX_BATCH_WRITING_SIZE
        Bug#3214927 The default is 32000 for DynamicSQLBatchWritingMechanism. It would become 100 when switched to ParameterizedSQLBatchWritingMechanism.
        See Also:
        Constant Field Values
      • DEFAULT_PARAMETERIZED_MAX_BATCH_WRITING_SIZE

        public static final int DEFAULT_PARAMETERIZED_MAX_BATCH_WRITING_SIZE
        See Also:
        Constant Field Values
      • IS_VALID_TIMEOUT

        public static final int IS_VALID_TIMEOUT
        Timeout used is isValid() check for dead connections.
        See Also:
        Constant Field Values
      • pingSQL

        protected String pingSQL
        This attribute will store the SQL query that will be used to 'ping' the database connection in order to check the health of a connection.
      • structConverters

        protected Map<String,​StructConverter> structConverters
        The following two maps, provide two ways of looking up StructConverters. They can be looked up by java Class or by Struct type
      • useRownumFiltering

        protected boolean useRownumFiltering
        Some platforms allow a query's maxRows and FirstResult settings to be specified in SQL. This setting allows it to be enabled/disabled
      • isCastRequired

        protected boolean isCastRequired
        Allow platform specific cast to be enabled.
      • shouldBindLiterals

        protected boolean shouldBindLiterals
        Allow user to require literals to be bound.
      • tableCreationSuffix

        protected String tableCreationSuffix
        String used on all table creation statements generated from the DefaultTableGenerator with a session using this project. This value will be appended to CreationSuffix strings stored within the DatabaseTable creationSuffix.
      • storedProcedureTerminationToken

        protected String storedProcedureTerminationToken
        The delimiter between stored procedures in multiple stored procedure calls.
      • partitioningCallback

        protected DataPartitioningCallback partitioningCallback
        Used to integrate with data partitioning in an external DataSource such as UCP.
      • shouldCreateIndicesOnForeignKeys

        protected boolean shouldCreateIndicesOnForeignKeys
        Allows auto-indexing for foreign keys to be set.
      • useJDBCStoredProcedureSyntax

        protected Boolean useJDBCStoredProcedureSyntax
      • driverName

        protected String driverName
      • driverSupportsNationalCharacterVarying

        protected boolean driverSupportsNationalCharacterVarying
        True if the current jdbc driver supports get/setNString methods
      • useNationalCharacterVarying

        protected boolean useNationalCharacterVarying
        If true, the platform should map String columns to a type that supports national characters.
    • Constructor Detail

      • DatabasePlatform

        public DatabasePlatform()
        Creates an instance of default database platform.
    • Method Detail

      • hasPartitioningCallback

        public boolean hasPartitioningCallback()
        Check if has callback. Used to integrate with data partitioning in an external DataSource such as UCP.
      • getPartitioningCallback

        public DataPartitioningCallback getPartitioningCallback()
        Return callback. Used to integrate with data partitioning in an external DataSource such as UCP.
      • setPartitioningCallback

        public void setPartitioningCallback​(DataPartitioningCallback partitioningCallback)
        Set callback. Used to integrate with data partitioning in an external DataSource such as UCP.
      • isCastRequired

        public boolean isCastRequired()
        Return if casting is enabled for platforms that support it. Allow platform specific cast to be disabled.
      • setIsCastRequired

        public void setIsCastRequired​(boolean isCastRequired)
        Set if casting is enabled for platforms that support it. Allow platform specific cast to be disabled.
      • getStructConverters

        public Map<String,​StructConverter> getStructConverters()
        INTERNAL: Get the map of StructConverters that will be used to preprocess STRUCT data as it is read
      • getTableCreationSuffix

        public String getTableCreationSuffix()
        PUBLIC: Get the String used on all table creation statements generated from the DefaultTableGenerator with a session using this project (DDL generation). This value will be appended to CreationSuffix strings stored on the DatabaseTable or TableDefinition.
      • getTypeConverters

        public Map<Class,​StructConverter> getTypeConverters()
        INTERNAL: Get the map of TypeConverters This map indexes StructConverters by the Java Class they are meant to convert
      • addStructConverter

        public void addStructConverter​(StructConverter converter)
        PUBLIC: Add a StructConverter to this DatabasePlatform This StructConverter will be invoked for all writes to the database for the class returned by its getJavaType() method and for all reads from the database for the Structs described by its getStructName() method
        Parameters:
        converter -
      • addBatch

        public int addBatch​(PreparedStatement statement)
                     throws SQLException
        INTERNAL: This gets called on each iteration to add parameters to the batch Needs to be implemented so that it returns the number of rows successfully modified by this statement for optimistic locking purposes (if useNativeBatchWriting is enabled, and the call uses optimistic locking). Is used with parameterized SQL
        Returns:
        - number of rows modified/deleted by this statement if it was executed (0 if it wasn't)
        Throws:
        SQLException
      • allowsSizeInProcedureArguments

        public boolean allowsSizeInProcedureArguments()
        Used for stored procedure definitions.
      • appendByteArray

        protected void appendByteArray​(byte[] bytes,
                                       Writer writer)
                                throws IOException
        Append the ByteArray in ODBC literal format ({b hexString}). This limits the amount of Binary data by the length of the SQL. Binding should increase this limit.
        Throws:
        IOException
      • appendDate

        protected void appendDate​(Date date,
                                  Writer writer)
                           throws IOException
        Answer a platform correct string representation of a Date, suitable for SQL generation. The date is printed in the ODBC platform independent format {d 'yyyy-mm-dd'}.
        Throws:
        IOException
      • appendNumber

        protected void appendNumber​(Number number,
                                    Writer writer)
                             throws IOException
        Write number to SQL string. This is provided so that database which do not support Exponential format can customize their printing.
        Throws:
        IOException
      • appendLiteralToCall

        public void appendLiteralToCall​(Call call,
                                        Writer writer,
                                        Object literal)
        INTERNAL: In case shouldBindLiterals is true, instead of null value a DatabaseField value may be passed (so that it's type could be used for binding null).
      • appendLiteralToCallWithBinding

        protected void appendLiteralToCallWithBinding​(Call call,
                                                      Writer writer,
                                                      Object literal)
        INTERNAL: Override this method in case the platform needs to do something special for binding literals. Note that instead of null value a DatabaseField value may be passed (so that it's type could be used for binding null).
      • appendParameter

        public void appendParameter​(Call call,
                                    Writer writer,
                                    Object parameter)
        Write a database-friendly representation of the given parameter to the writer. Determine the class of the object to be written, and invoke the appropriate print method for that object. The default is "toString". The platform may decide to bind some types, such as byte arrays and large strings. Should only be called in case binding is not used.
        Specified by:
        appendParameter in interface Platform
        Overrides:
        appendParameter in class DatasourcePlatform
      • appendParameterInternal

        public int appendParameterInternal​(Call call,
                                           Writer writer,
                                           Object parameter)
        Returns the number of parameters that used binding. Should only be called in case binding is not used.
      • appendTime

        protected void appendTime​(Time time,
                                  Writer writer)
                           throws IOException
        Answer a platform correct string representation of a Time, suitable for SQL generation. The time is printed in the ODBC platform independent format {t'hh:mm:ss'}.
        Throws:
        IOException
      • appendTimestamp

        protected void appendTimestamp​(Timestamp timestamp,
                                       Writer writer)
                                throws IOException
        Answer a platform correct string representation of a Timestamp, suitable for SQL generation. The timestamp is printed in the ODBC platform independent timestamp format {ts'YYYY-MM-DD HH:MM:SS.NNNNNNNNN'}.
        Throws:
        IOException
      • appendCalendar

        protected void appendCalendar​(Calendar calendar,
                                      Writer writer)
                               throws IOException
        Answer a platform correct string representation of a Calendar as a Timestamp, suitable for SQL generation. The calendar is printed in the ODBC platform independent timestamp format {ts'YYYY-MM-DD HH:MM:SS.NNNNNNNNN'}.
        Throws:
        IOException
      • beginTransaction

        public void beginTransaction​(DatabaseAccessor accessor)
                              throws SQLException
        Used for jdbc drivers which do not support autocommit to explicitly begin a transaction This method is a no-op for databases which implement autocommit as expected.
        Throws:
        SQLException
      • buildBatchCriteriaForComplexId

        public Expression buildBatchCriteriaForComplexId​(ExpressionBuilder builder,
                                                         List<Expression> fields)
        INTERNAL: Return the selection criteria used to IN batch fetching.
      • buildCallWithReturning

        public DatabaseCall buildCallWithReturning​(SQLCall sqlCall,
                                                   Vector returnFields)
        INTERNAL Returns null unless the platform supports call with returning
      • buildClassTypes

        protected Map<String,​Class> buildClassTypes()
        Return the mapping of class types to database types for the schema framework.
      • buildFieldTypes

        protected Hashtable buildFieldTypes()
        Return the mapping of class types to database types for the schema framework.
      • shouldUseGetSetNString

        public boolean shouldUseGetSetNString()
        Returns true iff:
        • tThe current driver supports calling get/setNString
        • Strings are globally mapped to a national character varying type (useNationalCharacterVarying()).
      • getDriverSupportsNVarChar

        public boolean getDriverSupportsNVarChar()
      • setDriverSupportsNVarChar

        public void setDriverSupportsNVarChar​(boolean b)
      • getUseNationalCharacterVaryingTypeForString

        public boolean getUseNationalCharacterVaryingTypeForString()
      • setUseNationalCharacterVaryingTypeForString

        public void setUseNationalCharacterVaryingTypeForString​(boolean b)
      • canBuildCallWithReturning

        public boolean canBuildCallWithReturning()
        INTERNAL Indicates whether the platform can build call with returning. In case this method returns true, buildCallWithReturning method may be called.
      • canBatchWriteWithOptimisticLocking

        public boolean canBatchWriteWithOptimisticLocking​(DatabaseCall call)
        INTERNAL: Supports Batch Writing with Optimistic Locking.
      • 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 By default, we assume case 1 and simply return the value of maxResults. Subclasses may provide an override
        Parameters:
        firstResultIndex -
        maxResults -
        See Also:
        MySQLPlatform
      • commitTransaction

        public void commitTransaction​(DatabaseAccessor accessor)
                               throws SQLException
        Used for jdbc drivers which do not support autocommit to explicitly commit a transaction This method is a no-op for databases which implement autocommit as expected.
        Throws:
        SQLException
      • getVPDClearIdentifierQuery

        public DatabaseQuery getVPDClearIdentifierQuery​(String vpdIdentifier)
        Any platform that supports VPD should implement this method.
      • getVPDCreationFunctionString

        public String getVPDCreationFunctionString​(String tableName,
                                                   String tenantFieldName)
        Any platform that supports VPD should implement this method. Used for DDL generation.
      • getVPDCreationPolicyString

        public String getVPDCreationPolicyString​(String tableName,
                                                 AbstractSession session)
        Any platform that supports VPD should implement this method. Used for DDL generation.
      • getVPDDeletionString

        public String getVPDDeletionString​(String tableName,
                                           AbstractSession session)
        Any platform that supports VPD should implement this method. Used for DDL generation.
      • getVPDSetIdentifierQuery

        public DatabaseQuery getVPDSetIdentifierQuery​(String vpdIdentifier)
        Any platform that supports VPD should implement this method.
      • convertToDatabaseType

        public Object convertToDatabaseType​(Object value)
        INTERNAL We support more primitive than JDBC does so we must do conversion before printing or binding.
      • getBatchBeginString

        public String getBatchBeginString()
        Used for batch writing and sp defs.
      • isRowCountOutputParameterRequired

        public boolean isRowCountOutputParameterRequired()
        Return if the platform does not maintain the row count on batch executes and requires an output parameter to maintain the row count.
      • getBatchRowCountDeclareString

        public String getBatchRowCountDeclareString()
        Used for batch writing for row count return.
      • getBatchRowCountAssignString

        public String getBatchRowCountAssignString()
        Used for batch writing for row count return.
      • getBatchRowCountReturnString

        public String getBatchRowCountReturnString()
        Used for batch writing for row count return.
      • getBatchDelimiterString

        public String getBatchDelimiterString()
        Used for batch writing and sp defs.
      • getBatchEndString

        public String getBatchEndString()
        Used for batch writing and sp defs.
      • getConnection

        public Connection getConnection​(AbstractSession session,
                                        Connection connection)
        INTERNAL: This method is used to unwrap the oracle connection wrapped by the application server. EclipseLink needs this unwrapped connection for certain Oracle Specific support. (ie TIMESTAMPTZ) This is added as a workaround for bug 4565190
      • getConstraintDeletionString

        public String getConstraintDeletionString()
        Used for constraint deletion.
      • getUniqueConstraintDeletionString

        public String getUniqueConstraintDeletionString()
        Used for constraint deletion.
      • getCreateViewString

        public String getCreateViewString()
        /** Used for view creation.
      • getDropCascadeString

        public String getDropCascadeString()
        Allows DROP TABLE to cascade dropping of any dependent constraints if the database supports this option.
      • getProcedureEndString

        public String getProcedureEndString()
        Used for stored procedure defs.
      • getProcedureBeginString

        public String getProcedureBeginString()
        Used for stored procedure defs.
      • getProcedureAsString

        public String getProcedureAsString()
        Used for stored procedure defs.
      • getProcedureOptionList

        public String getProcedureOptionList()
        Some platforms have an option list Only to be used for stored procedure creation.
        See Also:
        StoredProcedureDefinition
      • getClassTypes

        public Map<String,​Class> getClassTypes()
        Return the class type to database type mapping for the schema framework.
      • getAssignmentString

        public String getAssignmentString()
        Used for stored function calls.
      • getCastSizeForVarcharParameter

        public int getCastSizeForVarcharParameter()
        ADVANCED: Get the maximum length allowed by the database for a Varchar Parameter This is used by subclasses when writing SQL for parameters
        See Also:
        DB2Platform
      • getCreationInOutputProcedureToken

        public String getCreationInOutputProcedureToken()
        This method is used to print the required output parameter token for the specific platform. Used when stored procedures are created.
      • getCreationOutputProcedureToken

        public String getCreationOutputProcedureToken()
        This method is used to print the required output parameter token for the specific platform. Used when stored procedures are created.
      • getCursorCode

        public int getCursorCode()
        ADVANCED: Return the code for preparing cursored output parameters in a stored procedure
      • getDefaultSequenceTableName

        public String getDefaultSequenceTableName()
        Returns the table name used by TableSequence by default.
      • getCreateDatabaseSchemaString

        public String getCreateDatabaseSchemaString​(String schema)
        Return the create schema SQL syntax. Subclasses should override as needed.
      • getDropDatabaseSchemaString

        public String getDropDatabaseSchemaString​(String schema)
        Return the drop schema SQL syntax. Subclasses should override as needed.
      • getFieldTypeDefinition

        public FieldTypeDefinition getFieldTypeDefinition​(Class javaClass)
        Return the field type object describing this databases platform specific representation of the Java primitive class name.
      • getFieldTypes

        public Map<Class,​FieldTypeDefinition> getFieldTypes()
        Return the class type to database type mappings for the schema framework.
      • getFunctionCallHeader

        public String getFunctionCallHeader()
        Used for stored function calls.
      • getInOutputProcedureToken

        public String getInOutputProcedureToken()
        This method is used to print the output parameter token when stored procedures are called
      • getJDBCOuterJoinString

        public String getJDBCOuterJoinString()
        Returns the JDBC outer join operator for SELECT statements.
      • getJDBCTypeForSetNull

        public int getJDBCTypeForSetNull​(DatabaseField field)
        Return the JDBC type for the given database field to be passed to Statement.setNull
      • getJDBCType

        public int getJDBCType​(DatabaseField field)
        Return the JDBC type for the given database field.
      • getJDBCType

        public int getJDBCType​(Class javaType)
        Return the JDBC type for the Java type.
      • getJdbcTypeName

        public String getJdbcTypeName​(int jdbcType)
        INTERNAL: Returns the type name corresponding to the jdbc type
      • minimumTimeIncrement

        public long minimumTimeIncrement()
        INTERNAL: Returns the minimum time increment supported by the platform.
      • getMaxBatchWritingSize

        public int getMaxBatchWritingSize()
        PUBLIC: Allow for the max batch writing size to be set. This allows for the batch size to be limited as most database have strict limits. The size is in characters, the default is 32000 but the real value depends on the database configuration.
      • getMaxFieldNameSize

        public int getMaxFieldNameSize()
        INTERNAL: returns the maximum number of characters that can be used in a field name on this platform.
      • getMaxForeignKeyNameSize

        public int getMaxForeignKeyNameSize()
        INTERNAL: returns the maximum number of characters that can be used in a foreign key name on this platform.
      • getMaxIndexNameSize

        public int getMaxIndexNameSize()
        INTERNAL: returns the maximum number of characters that can be used in an index name on this platform.
      • getMaxUniqueKeyNameSize

        public int getMaxUniqueKeyNameSize()
        INTERNAL: returns the maximum number of characters that can be used in a unique key name on this platform.
      • getObjectFromResultSet

        public Object getObjectFromResultSet​(ResultSet resultSet,
                                             int columnNumber,
                                             int type,
                                             AbstractSession session)
                                      throws SQLException
        INTERNAL: Get the object from the JDBC Result set. Added to allow other platforms to override.
        Throws:
        SQLException
        See Also:
        "org.eclipse.persistence.platform.database.oracle.Oracle9Plaform"
      • getInputProcedureToken

        public String getInputProcedureToken()
        Used for stored procedure creation: Prefix for INPUT parameters. Not required on most platforms.
      • getIndexNamePrefix

        public String getIndexNamePrefix​(boolean isUniqueSetOnField)
        Used to allow platforms to define their own index prefixes
        Parameters:
        isUniqueSetOnField -
        Returns:
      • getOutputProcedureToken

        public String getOutputProcedureToken()
        This method is used to print the output parameter token when stored procedures are called
      • getPingSQL

        public String getPingSQL()
        Used for determining if an SQL exception was communication based. This SQL should be as efficient as possible and ensure a round trip to the database.
      • getProcedureArgumentString

        public String getProcedureArgumentString()
        Used for sp defs.
      • getProcedureCallHeader

        public String getProcedureCallHeader()
        Used for sp calls.
      • getProcedureCallTail

        public String getProcedureCallTail()
        Used for sp calls.
      • getQualifiedSequenceTableName

        public String getQualifiedSequenceTableName()
      • getQualifiedName

        public String getQualifiedName​(String name)
      • getNoWaitString

        public String getNoWaitString()
        This syntax does no wait on the lock. (i.e. In Oracle adding NOWAIT to the end will accomplish this)
      • getSelectForUpdateNoWaitString

        public String getSelectForUpdateNoWaitString()
        This syntax does no wait on the lock. (i.e. In Oracle adding FOR UPDATE NOWAIT to the end will accomplish this)
      • getSelectForUpdateOfString

        public String getSelectForUpdateOfString()
        For fine-grained pessimistic locking the column names can be specified individually.
      • getSelectForUpdateString

        public String getSelectForUpdateString()
        Most database support a syntax. although don't actually lock the row. Some require the OF some don't like it.
      • getSelectForUpdateWaitString

        public String getSelectForUpdateWaitString​(Integer waitTimeout)
        Platforms that support the WAIT option should override this method. By default the wait timeout is ignored.
        See Also:
        supportsWaitForUpdate()
      • getSequenceCounterFieldName

        public String getSequenceCounterFieldName()
      • getSequenceNameFieldName

        public String getSequenceNameFieldName()
      • getSequenceTableName

        public String getSequenceTableName()
      • getStatementCacheSize

        public int getStatementCacheSize()
        The statement cache size for prepare parameterized statements.
      • getStoredProcedureParameterPrefix

        public String getStoredProcedureParameterPrefix()
      • getStoredProcedureTerminationToken

        public String getStoredProcedureTerminationToken()
        Returns the delimiter between stored procedures in multiple stored procedure calls.
      • setStoredProcedureTerminationToken

        public void setStoredProcedureTerminationToken​(String storedProcedureTerminationToken)
      • getStringBindingSize

        public int getStringBindingSize()
      • getTransactionIsolation

        public int getTransactionIsolation()
        Returns the transaction isolation setting for a connection. Return -1 if it has not been set.
      • isInformixOuterJoin

        public boolean isInformixOuterJoin()
        Some database require outer joins to be given in the where clause, others require it in the from clause. Informix requires it in the from clause with no ON expression.
      • isJDBCExecuteCompliant

        public boolean isJDBCExecuteCompliant()
        Returns true if this platform complies with the expected behavior from a jdbc execute call. Most platforms do, some have issues:
        See Also:
        PostgreSQLPlatform
      • isLockTimeoutException

        public boolean isLockTimeoutException​(DatabaseException e)
        Return true is the given exception occurred as a result of a lock time out exception (WAIT clause). If sub-platform supports this clause, this method should be necessary checks should be made. By default though, this method return false.
        See Also:
        OraclePlatform
      • isForUpdateCompatibleWithDistinct

        public boolean isForUpdateCompatibleWithDistinct()
        INTERNAL: Indicates whether SELECT DISTINCT ... FOR UPDATE is allowed by the platform (Oracle doesn't allow this).
      • isLobCompatibleWithDistinct

        public boolean isLobCompatibleWithDistinct()
        INTERNAL: Indicates whether SELECT DISTINCT lob FROM ... (where lob is BLOB or CLOB) is allowed by the platform (Oracle doesn't allow this).
      • maximumNumericValues

        public Hashtable maximumNumericValues()
        Builds a table of maximum numeric values keyed on java class. This is used for type testing but might also be useful to end users attempting to sanitize values.

        NOTE: BigInteger & BigDecimal maximums are dependent upon their precision & Scale

      • minimumNumericValues

        public Hashtable minimumNumericValues()
        Builds a table of minimum numeric values keyed on java class. This is used for type testing but might also be useful to end users attempting to sanitize values.

        NOTE: BigInteger & BigDecimal minimums are dependent upon their precision & Scale

      • prepareBatchStatement

        public Statement prepareBatchStatement​(Statement statement,
                                               int maxBatchWritingSize)
                                        throws SQLException
        Internal: Allows setting the batch size on the statement Is used with parameterized SQL, and should only be passed in prepared statements
        Returns:
        statement to be used for batch writing
        Throws:
        SQLException
      • printValuelist

        public int printValuelist​(int[] theObjects,
                                  DatabaseCall call,
                                  Writer writer)
                           throws IOException
        Print the int array on the writer. Added to handle int[] passed as parameters to named queries Returns the number of objects using binding.
        Throws:
        IOException
      • requiresNamedPrimaryKeyConstraints

        public boolean requiresNamedPrimaryKeyConstraints()
        This is used as some databases create the primary key constraint differently, i.e. Access.
      • requiresProcedureBrackets

        public boolean requiresProcedureBrackets()
        Used for stored procedure creation: Some platforms need brackets around arguments declaration even if no arguments exist. Those platform will override this and return true. All other platforms will omit the brackets in this case.
      • requiresProcedureCallBrackets

        public boolean requiresProcedureCallBrackets()
        USed for sp calls.
      • requiresProcedureCallOuputToken

        public boolean requiresProcedureCallOuputToken()
        Used for sp calls. Sybase must print output after output params.
      • requiresTypeNameToRegisterOutputParameter

        public boolean requiresTypeNameToRegisterOutputParameter()
        INTERNAL: Indicates whether the version of CallableStatement.registerOutputParameter method that takes type name should be used.
      • requiresUniqueConstraintCreationOnTableCreate

        public boolean requiresUniqueConstraintCreationOnTableCreate()
        Used for table creation. If a database platform does not support ALTER TABLE syntax to add/drop unique constraints (like Symfoware), overriding this method will allow the constraint to be specified in the CREATE TABLE statement.

        This only affects unique constraints specified using the UniqueConstraint annotation or equivalent method. Columns for which the 'unique' attribute is set to true will be declared 'UNIQUE' in the CREATE TABLE statement regardless of the return value of this method.

        Returns:
        whether unique constraints should be declared as part of the CREATE TABLE statement instead of in separate ALTER TABLE ADD/DROP statements.
      • retrieveFirstPrimaryKeyOrOne

        public void retrieveFirstPrimaryKeyOrOne​(ReportQuery subselect)
        INTERNAL: Used by Exists queries because they just need to select a single row. In most databases, we will select one of the primary key fields. On databases where, for some reason we cannot select one of the key fields this method can be overridden
        Parameters:
        subselect -
        See Also:
        SymfowarePlatform
      • rollbackTransaction

        public void rollbackTransaction​(DatabaseAccessor accessor)
                                 throws SQLException
        Used for jdbc drivers which do not support autocommit to explicitly rollback a transaction This method is a no-op for databases which implement autocommit as expected.
        Throws:
        SQLException
      • setCastSizeForVarcharParameter

        public void setCastSizeForVarcharParameter​(int maxLength)
        ADVANCED: Set the maximum length allowed by the database for a Varchar Parameter This is used by subclasses when writing SQL for parameters
        See Also:
        DB2Platform
      • setClassTypes

        protected void setClassTypes​(Hashtable classTypes)
      • setCursorCode

        public void setCursorCode​(int cursorCode)
        ADVANCED: Set the code for preparing cursored output parameters in a stored procedure
      • setDriverName

        public void setDriverName​(String driverName)
        During auto-detect, the driver name is set on the platform.
      • setFieldTypes

        protected void setFieldTypes​(Hashtable theFieldTypes)
      • setMaxBatchWritingSize

        public void setMaxBatchWritingSize​(int maxBatchWritingSize)
        PUBLIC: Allow for the max batch writing size to be set. This allows for the batch size to be limited as most database have strict limits. The size is in characters, the default is 32000 but the real value depends on the database configuration.
      • setSequenceCounterFieldName

        public void setSequenceCounterFieldName​(String name)
      • setSequenceNameFieldName

        public void setSequenceNameFieldName​(String name)
      • setSequenceTableName

        public void setSequenceTableName​(String name)
      • setShouldBindAllParameters

        public void setShouldBindAllParameters​(boolean shouldBindAllParameters)
        Bind all arguments to any SQL statement.
      • setShouldCacheAllStatements

        public void setShouldCacheAllStatements​(boolean shouldCacheAllStatements)
        Cache all prepared statements, this requires full parameter binding as well.
      • setShouldForceBindAllParameters

        public void setShouldForceBindAllParameters​(boolean shouldForceBindAllParameters)
        Used to enable parameter binding and override the platform default
      • setShouldForceFieldNamesToUpperCase

        public void setShouldForceFieldNamesToUpperCase​(boolean shouldForceFieldNamesToUpperCase)
        Can be used if the app expects upper case but the database is not return consistent case, i.e. different databases.
      • setShouldIgnoreCaseOnFieldComparisons

        public static void setShouldIgnoreCaseOnFieldComparisons​(boolean newShouldIgnoreCaseOnFieldComparisons)
        Allow for case in field names to be ignored as some databases are not case sensitive and when using custom this can be an issue.
      • setShouldOptimizeDataConversion

        public void setShouldOptimizeDataConversion​(boolean value)
        PUBLIC: Set if our driver level data conversion optimization is enabled. This can be disabled as some drivers perform data conversion themselves incorrectly.
      • setShouldTrimStrings

        public void setShouldTrimStrings​(boolean aBoolean)
      • setStatementCacheSize

        public void setStatementCacheSize​(int statementCacheSize)
        The statement cache size for prepare parameterized statements.
      • setStringBindingSize

        public void setStringBindingSize​(int aSize)
      • setSupportsAutoCommit

        public void setSupportsAutoCommit​(boolean supportsAutoCommit)
        supportsAutoCommit can be set to false for JDBC drivers which do not support autocommit.
      • setTableCreationSuffix

        public void setTableCreationSuffix​(String tableCreationSuffix)
        PUBLIC: Get the String used on all table creation statements generated from the DefaultTableGenerator with a session using this project (DDL generation). This value will be appended to CreationSuffix strings stored on the DatabaseTable or TableDefinition. ie setTableCreationSuffix("engine=InnoDB");
      • setTransactionIsolation

        public void setTransactionIsolation​(int isolationLevel)
        Set the transaction isolation setting for a connection.
      • setUseJDBCStoredProcedureSyntax

        public void setUseJDBCStoredProcedureSyntax​(Boolean useJDBCStoredProcedureSyntax)
        Return true if JDBC syntax should be used for stored procedure calls.
      • setUsesBatchWriting

        public void setUsesBatchWriting​(boolean usesBatchWriting)
      • setUsesByteArrayBinding

        public void setUsesByteArrayBinding​(boolean usesByteArrayBinding)
      • setUsesJDBCBatchWriting

        public void setUsesJDBCBatchWriting​(boolean usesJDBCBatchWriting)
        Some JDBC 2 drivers to not support batching, so this lets are own batching be used.
      • setUsesNativeBatchWriting

        public void setUsesNativeBatchWriting​(boolean usesNativeBatchWriting)
        Advanced: This is used to enable native batch writing on drivers that support it. Enabling Native batchwriting will result in the batch writing mechanisms to be used on objects that have optimistic locking, and so execution of statements on these objects will be delayed until the batch statement is executed. Only use this method with platforms that have overridden the prepareBatchStatement, addBatch and executeBatch as required Current support is limited to the Oracle9Platform class.
        Parameters:
        usesNativeBatchWriting - - flag to turn on/off native batch writing
      • setUsesNativeSQL

        public void setUsesNativeSQL​(boolean usesNativeSQL)
      • getBatchWritingMechanism

        public BatchWritingMechanism getBatchWritingMechanism()
        Return the custom batch writing mechanism.
      • setBatchWritingMechanism

        public void setBatchWritingMechanism​(BatchWritingMechanism batchWritingMechanism)
        Set the custom batch writing mechanism.
      • setShouldUseRownumFiltering

        public void setShouldUseRownumFiltering​(boolean useRownumFiltering)
        PUBLIC: Set if SQL-Level pagination should be used for FirstResult and MaxRows settings. Default is true. Note: This setting is used to disable SQL-level pagination on platforms for which it is implemented. On platforms where we use JDBC for pagination, it will be ignored
      • setUsesStreamsForBinding

        public void setUsesStreamsForBinding​(boolean usesStreamsForBinding)
      • setPrintOuterJoinInWhereClause

        public void setPrintOuterJoinInWhereClause​(boolean printOuterJoinInWhereClause)
        PUBLIC: Changes the way that OuterJoins are done on the database. With a value of true, outerjoins are performed in the where clause using the outer join token for that database. With the value of false, outerjoins are performed in the from clause.
      • setPrintInnerJoinInWhereClause

        public void setPrintInnerJoinInWhereClause​(boolean printInnerJoinInWhereClause)
        PUBLIC: Changes the way that inner joins are printed in generated SQL for the database. With a value of true, inner joins are printed in the WHERE clause, if false, inner joins are printed in the FROM clause.
      • setUsesStringBinding

        public void setUsesStringBinding​(boolean aBool)
      • shouldBindAllParameters

        public boolean shouldBindAllParameters()
        Bind all arguments to any SQL statement.
      • shouldCacheAllStatements

        public boolean shouldCacheAllStatements()
        Cache all prepared statements, this requires full parameter binding as well.
      • shouldCreateIndicesForPrimaryKeys

        public boolean shouldCreateIndicesForPrimaryKeys()
        Used for table creation. Most databases create an index automatically when a primary key is created. Symfoware does not.
        Returns:
        whether an index should be created explicitly for primary keys
      • shouldCreateIndicesOnUniqueKeys

        public boolean shouldCreateIndicesOnUniqueKeys()
        Used for table creation. Most databases create an index automatically for columns with a unique constraint. Symfoware does not.
        Returns:
        whether an index should be created explicitly for unique constraints
      • shouldCreateIndicesOnForeignKeys

        public boolean shouldCreateIndicesOnForeignKeys()
        Used for table creation. Most databases do not create an index automatically for foreign key columns. Normally it is recommended to index foreign key columns. This allows for foreign key indexes to be configured, by default foreign keys are not indexed.
        Returns:
        whether an index should be created explicitly for foreign key constraints
      • setShouldCreateIndicesOnForeignKeys

        public void setShouldCreateIndicesOnForeignKeys​(boolean shouldCreateIndicesOnForeignKeys)
        Used for table creation. Most databases do not create an index automatically for foreign key columns. Normally it is recommended to index foreign key columns. This allows for foreign key indexes to be configured, by default foreign keys are not indexed.
      • shouldForceBindAllParameters

        public boolean shouldForceBindAllParameters()
        Used to enable parameter binding and override platform default
      • shouldForceFieldNamesToUpperCase

        public boolean shouldForceFieldNamesToUpperCase()
        Can be used if the app expects upper case but the database is not return consistent case, i.e. different databases.
      • shouldIgnoreCaseOnFieldComparisons

        public static boolean shouldIgnoreCaseOnFieldComparisons()
        Allow for case in field names to be ignored as some databases are not case sensitive and when using custom this can be an issue.
      • shouldIgnoreException

        public boolean shouldIgnoreException​(SQLException exception)
        Allow for the platform to ignore exceptions. This is required for DB2 which throws no-data modified as an exception.
      • shouldOptimizeDataConversion

        public boolean shouldOptimizeDataConversion()
        Return if our driver level data conversion optimization is enabled. This can be disabled as some drivers perform data conversion themselves incorrectly.
      • shouldPrintStoredProcedureVariablesAfterBeginString

        public boolean shouldPrintStoredProcedureVariablesAfterBeginString()
        Used for stored procedure creation: Some platforms declare variables AFTER the procedure body's BEGIN string. These need to override and return true. All others will print the variable declaration BEFORE the body's BEGIN string.
      • shouldPrintConstraintNameAfter

        public boolean shouldPrintConstraintNameAfter()
        Some Platforms want the constraint name after the constraint definition.
      • shouldPrintInOutputTokenBeforeType

        public boolean shouldPrintInOutputTokenBeforeType()
        This is required in the construction of the stored procedures with output parameters
      • shouldPrintOuterJoinInWhereClause

        public boolean shouldPrintOuterJoinInWhereClause()
        Some database require outer joins to be given in the where clause, others require it in the from clause.
      • shouldPrintInnerJoinInWhereClause

        public boolean shouldPrintInnerJoinInWhereClause()
        This allows which clause inner joins are printed into in SQL generation. By default most platforms put inner joins in the WHERE clause. If set to false, inner joins will be printed in the FROM clause.
      • shouldPrintInputTokenAtStart

        public boolean shouldPrintInputTokenAtStart()
        Used for stored procedure creation: Some platforms want to print prefix for INPUT arguments BEFORE NAME. If wanted, override and return true.
      • shouldPrintOutputTokenBeforeType

        public boolean shouldPrintOutputTokenBeforeType()
        This is required in the construction of the stored procedures with output parameters
      • shouldPrintOutputTokenAtStart

        public boolean shouldPrintOutputTokenAtStart()
        This is required in the construction of the stored procedures with output parameters
      • shouldPrintStoredProcedureArgumentNameInCall

        public boolean shouldPrintStoredProcedureArgumentNameInCall()
        INTERNAL: Should the variable name of a stored procedure call be printed as part of the procedure call e.g. EXECUTE PROCEDURE MyStoredProc(myvariable = ?)
      • shouldPrintForUpdateClause

        public boolean shouldPrintForUpdateClause()
      • shouldTrimStrings

        public boolean shouldTrimStrings()
      • shouldUseCustomModifyForCall

        public boolean shouldUseCustomModifyForCall​(DatabaseField field)
        Description copied from class: DatasourcePlatform
        Used by SQLCall.appendModify(..) If the field should be passed to customModifyInDatabaseCall, retun true, otherwise false. Methods shouldCustomModifyInDatabaseCall and customModifyInDatabaseCall should be kept in sync: shouldCustomModifyInDatabaseCall should return true if and only if the field is handled by customModifyInDatabaseCall.
        Specified by:
        shouldUseCustomModifyForCall in interface Platform
        Overrides:
        shouldUseCustomModifyForCall in class DatasourcePlatform
      • shouldUseJDBCOuterJoinSyntax

        public boolean shouldUseJDBCOuterJoinSyntax()
        JDBC defines and outer join syntax, many drivers do not support this. So we normally avoid it.
      • shouldUseRownumFiltering

        public boolean shouldUseRownumFiltering()
        PUBLIC: Return if Oracle ROWNUM pagination should be used for FirstResult and MaxRows settings. Default is true. Note: This setting is used to disable SQL-level pagination on platforms for which it is implemented. On platforms where we use JDBC for pagination, it will be ignored
      • supportsANSIInnerJoinSyntax

        public boolean supportsANSIInnerJoinSyntax()
        Indicates whether the ANSI syntax for inner joins (e.g. SELECT FROM t1 JOIN t2 ON t1.pk = t2.fk) is supported by this platform.
      • supportsAutoCommit

        public boolean supportsAutoCommit()
        supportsAutoCommit must sometimes be set to false for JDBC drivers which do not support autocommit. Used to determine how to handle transactions properly.
      • supportsAutoConversionToNumericForArithmeticOperations

        public boolean supportsAutoConversionToNumericForArithmeticOperations()
        Some db allow VARCHAR db field to be used in arithmetic operations automatically converting them to numeric: UPDATE OL_PHONE SET PHONE_ORDER_VARCHAR = (PHONE_ORDER_VARCHAR + 1) WHERE ... SELECT ... WHERE ... t0.MANAGED_ORDER_VARCHAR BETWEEN 1 AND 4 ...
      • supportsForeignKeyConstraints

        public boolean supportsForeignKeyConstraints()
      • supportsUniqueKeyConstraints

        public boolean supportsUniqueKeyConstraints()
      • supportsVPD

        public boolean supportsVPD()
        By default, platforms do not support VPD. Those that do need to override this method.
      • supportsPrimaryKeyConstraint

        public boolean supportsPrimaryKeyConstraint()
      • supportsStoredFunctions

        public boolean supportsStoredFunctions()
      • supportsOrderByParameters

        public boolean supportsOrderByParameters()
        Used to determine if the platform supports untyped parameters, as ordinal variables, within the Order By clause

        On by default. Only platforms without support added should disable this configuration.

      • supportsDeleteOnCascade

        public boolean supportsDeleteOnCascade()
      • executeBatch

        public int executeBatch​(Statement statement,
                                boolean isStatementPrepared)
                         throws SQLException
        Internal: This gets called on each batch statement execution Needs to be implemented so that it returns the number of rows successfully modified by this statement for optimistic locking purposes.
        Parameters:
        isStatementPrepared - - flag is set to true if this statement is prepared
        Returns:
        - number of rows modified/deleted by this statement
        Throws:
        SQLException
      • setPingSQL

        public void setPingSQL​(String pingSQL)
        Used for determining if an SQL exception was communication based. This SQL should be as efficient as possible and ensure a round trip to the database.
      • setParameterValueInDatabaseCall

        public void setParameterValueInDatabaseCall​(Object parameter,
                                                    PreparedStatement statement,
                                                    int index,
                                                    AbstractSession session)
                                             throws SQLException
        INTERNAL Set the parameter in the JDBC statement at the given index. This support a wide range of different parameter types, and is heavily optimized for common types.
        Throws:
        SQLException
      • setParameterValueInDatabaseCall

        public void setParameterValueInDatabaseCall​(Object parameter,
                                                    CallableStatement statement,
                                                    String name,
                                                    AbstractSession session)
                                             throws SQLException
        INTERNAL Set the parameter in the JDBC statement with the given name. This support a wide range of different parameter types, and is heavily optimized for common types.
        Throws:
        SQLException
      • getParameterValueFromDatabaseCall

        public Object getParameterValueFromDatabaseCall​(CallableStatement statement,
                                                        int index,
                                                        AbstractSession session)
                                                 throws SQLException
        INTERNAL Get the parameter from the JDBC statement with the given index.
        Parameters:
        index - - 1-based index in the argument list
        Throws:
        SQLException
      • usesBatchWriting

        public boolean usesBatchWriting()
      • usesByteArrayBinding

        public boolean usesByteArrayBinding()
      • usesSequenceTable

        public boolean usesSequenceTable()
      • usesJDBCBatchWriting

        public boolean usesJDBCBatchWriting()
        Some JDBC 2 drivers to not support batching, so this lets are own batching be used.
      • usesNativeBatchWriting

        public boolean usesNativeBatchWriting()
      • usesNativeSQL

        public boolean usesNativeSQL()
      • usesStreamsForBinding

        public boolean usesStreamsForBinding()
      • usesStringBinding

        public boolean usesStringBinding()
      • supportsCountDistinctWithMultipleFields

        public boolean supportsCountDistinctWithMultipleFields()
        INTERNAL: Indicates whether the platform supports the count distinct function with multiple fields.
      • supportsIndexes

        public boolean supportsIndexes()
        INTERNAL: Return if this database support index creation.
      • requiresTableInIndexDropDDL

        public boolean requiresTableInIndexDropDDL()
        INTERNAL: Return if this database requires the table name when dropping an index.
      • supportsTempTables

        public boolean supportsTempTables()
        INTERNAL: Indicates whether the platform supports temporary tables. Temporary tables may be used by UpdateAllQueries: though attempt is always made to perform UpdateAll without using temporary storage there are some scenarios that can't be fulfilled without it. Don't override this method. If the platform support temporary tables then override either supportsLocalTempTables() or supportsGlobalTempTables() method.
      • supportsLocalTempTables

        public boolean supportsLocalTempTables()
        INTERNAL: Indicates whether the platform supports local temporary tables. "Local" means that several threads may create temporary tables with the same name. Local temporary table is created in the beginning of UpdateAllQuery execution and dropped in the end of it. Override this method if the platform supports local temporary tables.
      • supportsGlobalTempTables

        public boolean supportsGlobalTempTables()
        INTERNAL: Indicates whether the platform supports global temporary tables. "Global" means that an attempt to create temporary table with the same name for the second time results in exception. EclipseLink attempts to create global temporary table in the beginning of UpdateAllQuery, execution and assumes that it already exists in case SQLException results. In the end of UpdateAllQuery execution all rows are removed from the temporary table - it is necessary in case the same temporary table will be used by another UpdateAllQuery in the same transaction. Override this method if the platform supports global temporary tables. Note that this method is ignored in case supportsLocalTempTables() returns true.
      • getCreateTempTableSqlPrefix

        protected String getCreateTempTableSqlPrefix()
        INTERNAL: Override this method if the platform supports temporary tables. This should contain the beginning of sql string for creating temporary table - the sql statement name, for instance: "CREATE GLOBAL TEMPORARY TABLE ". Don't forget to end it with a space.
      • getTempTableForTable

        public DatabaseTable getTempTableForTable​(DatabaseTable table)
        INTERNAL: May override this method if the platform support temporary tables.
        Parameters:
        table - is original table for which temp table is created.
        Returns:
        temporary table
      • getCreateTempTableSqlSuffix

        protected String getCreateTempTableSqlSuffix()
        INTERNAL: May override this method if the platform support temporary tables. This should contain the ending of sql string for creating temporary table, for instance: " ON COMMIT DELETE ROWS" Don't forget to begin it with a space.
      • getCreateTempTableSqlBodyForTable

        protected String getCreateTempTableSqlBodyForTable​(DatabaseTable table)
        INTERNAL: May override this method if the platform supports temporary tables. With this method not overridden the sql string for temporary table creation will include a list of database fields extracted from descriptor: getCreateTempTableSqlPrefix() + getTempTableForTable(table).getQualifiedName() + (list of database fields) + getCreateTempTableSqlSuffix(). If this method is overridden its output will be used instead of fields' list: getCreateTempTableSqlPrefix() + getTempTableForTable(table).getQualifiedName() + getCreateTempTableSqlBodyForTable(table) + getCreateTempTableSqlSuffix(). Don't forget to begin it with a space. Example: " LIKE " + table.getQualifiedName();
        Parameters:
        table - is original table for which temp table is created.
        Returns:
        String
      • shouldTempTableSpecifyPrimaryKeys

        protected boolean shouldTempTableSpecifyPrimaryKeys()
        INTERNAL: Indicates whether temporary table can specify primary keys (some platforms don't allow that). Used by writeCreateTempTableSql method.
      • writeCreateTempTableSql

        public void writeCreateTempTableSql​(Writer writer,
                                            DatabaseTable table,
                                            AbstractSession session,
                                            Collection pkFields,
                                            Collection usedFields,
                                            Collection allFields)
                                     throws IOException
        INTERNAL: Don't override this method. Write an sql string for creation of the temporary table. Note that in case of local temp table support it's possible to limit the fields in the temp table to those needed for the operation it supports (usedFields) - the temp table will be dropped in the end of query execution. Alternatively, in global temp table case the table with a given name is created just once and will be potentially used by various operations with various sets of used fields, therefore global temp table should contain all mapped fields (allFields). Precondition: supportsTempTables() == true. Precondition: pkFields contained in usedFields contained in allFields
        Parameters:
        writer - for writing the sql
        table - is original table for which temp table is created.
        session - .
        pkFields - primary key fields for the original table.
        usedFields - fields that will be used by operation for which temp table is created.
        allFields - all mapped fields for the original table.
        Throws:
        IOException
      • writeInsertIntoTableSql

        public void writeInsertIntoTableSql​(Writer writer,
                                            DatabaseTable table,
                                            Collection usedFields)
                                     throws IOException
        INTERNAL: May need to override this method if the platform supports temporary tables and the generated sql doesn't work. Write an sql string for insertion into the temporary table. Precondition: supportsTempTables() == true.
        Parameters:
        writer - for writing the sql
        table - is original table for which temp table is created.
        usedFields - fields that will be used by operation for which temp table is created.
        Throws:
        IOException
      • isNullAllowedInSelectClause

        public boolean isNullAllowedInSelectClause()
        INTERNAL: Override this if the platform cannot handle NULL in select clause.
      • isOutputAllowWithResultSet

        public boolean isOutputAllowWithResultSet()
        INTERNAL: Return true if output parameters can be built with result sets.
      • writeTableCreationSuffix

        public void writeTableCreationSuffix​(Writer writer,
                                             String tableCreationSuffix)
                                      throws IOException
        INTERNAL: Write used on all table creation statements generated from the DefaultTableGenerator with a session using this project (DDL generation). This writes the passed in string argument as well as the value returned from the DatabasePlatform's getTableCreationSuffix()
        Throws:
        IOException
      • writeUpdateOriginalFromTempTableSql

        public void writeUpdateOriginalFromTempTableSql​(Writer writer,
                                                        DatabaseTable table,
                                                        Collection pkFields,
                                                        Collection assignedFields)
                                                 throws IOException
        INTERNAL: May need to override this method if the platform supports temporary tables and the generated sql doesn't work. Write an sql string for updating the original table from the temporary table. Precondition: supportsTempTables() == true. Precondition: pkFields and assignFields don't intersect.
        Parameters:
        writer - for writing the sql
        table - is original table for which temp table is created.
        pkFields - primary key fields for the original table.
        assignedFields - fields to be assigned a new value.
        Throws:
        IOException
      • writeDeleteFromTargetTableUsingTempTableSql

        public void writeDeleteFromTargetTableUsingTempTableSql​(Writer writer,
                                                                DatabaseTable table,
                                                                DatabaseTable targetTable,
                                                                Collection pkFields,
                                                                Collection targetPkFields,
                                                                DatasourcePlatform platform)
                                                         throws IOException
        INTERNAL: Write an sql string for deletion from target table using temporary table. At this point temporary table should contains pks for the rows that should be deleted from target table. Temporary tables are not required for DeleteAllQuery, however will be used if shouldAlwaysUseTempStorageForModifyAll()==true May need to override this method in case it generates sql that doesn't work on the platform. Precondition: supportsTempTables() == true.
        Parameters:
        writer - for writing the sql
        table - is original table for which temp table is created.
        targetTable - is a table from which to delete.
        pkFields - primary key fields for the original table.
        targetPkFields - primary key fields for the target table.
        Throws:
        IOException
      • writeCleanUpTempTableSql

        public void writeCleanUpTempTableSql​(Writer writer,
                                             DatabaseTable table)
                                      throws IOException
        INTERNAL: Don't override this method. Write an sql string for clean up of the temporary table. Drop a local temp table or delete all from a global temp table (so that it's ready to be used again in the same transaction). Precondition: supportsTempTables() == true.
        Parameters:
        writer - for writing the sql
        table - is original table for which temp table is created.
        Throws:
        IOException
      • shouldAlwaysUseTempStorageForModifyAll

        public boolean shouldAlwaysUseTempStorageForModifyAll()
        INTERNAL: That method affects UpdateAllQuery and DeleteAllQuery execution. In case it returns false modify all queries would attempt to proceed without using temporary storage if it is possible. In case it returns true modify all queries would use temporary storage unless each modify statement doesn't reference any other tables. May need to override this method if the platform can't handle the sql generated for modify all queries without using temporary storage.
      • dontBindUpdateAllQueryUsingTempTables

        public boolean dontBindUpdateAllQueryUsingTempTables()
        INTERNAL: May need to override this method if the sql generated for UpdateAllQuery using temp tables fails in case parameter binding is used.
      • shouldPrintFieldIdentityClause

        public boolean shouldPrintFieldIdentityClause​(AbstractSession session,
                                                      String qualifiedFieldName)
      • supportsUniqueColumns

        public boolean supportsUniqueColumns()
        Allows unique columns to be defined as constraint if the UNIQUE keyword is not support on a column defintion.
      • printFieldUnique

        public void printFieldUnique​(Writer writer,
                                     boolean shouldPrintFieldIdentityClause)
                              throws IOException
        Throws:
        IOException
      • isXDBDocument

        public boolean isXDBDocument​(Object obj)
        INTERNAL: Indicates whether the passed object is an instance of XDBDocument. To avoid dependency on oracle.xdb the method returns false. Overridden in Oracle9Platform
        Returns:
        String
      • shouldBindLiterals

        public boolean shouldBindLiterals()
        PUBLIC: Allows platform to choose whether to bind literals in DatabaseCalls or not.
      • setShouldBindLiterals

        public void setShouldBindLiterals​(boolean shouldBindLiterals)
        PUBLIC: Allows user to choose whether to bind literals in DatabaseCalls or not.
      • isDynamicSQLRequiredForFunctions

        public boolean isDynamicSQLRequiredForFunctions()
        INTERNAL: Some databases have issues with using parameters on certain functions and relations. This allows statements to disable binding only in these cases.
      • printStoredFunctionReturnKeyWord

        public void printStoredFunctionReturnKeyWord​(Writer writer)
                                              throws IOException
        INTERNAL: Prints return keyword for StoredFunctionDefinition: CREATE FUNCTION StoredFunction_In (P_IN BIGINT) RETURN BIGINT The method was introduced because MySQL requires "RETURNS" instead: CREATE FUNCTION StoredFunction_In (P_IN BIGINT) RETURNS BIGINT
        Throws:
        IOException
      • printSQLSelectStatement

        public void printSQLSelectStatement​(DatabaseCall call,
                                            ExpressionSQLPrinter printer,
                                            SQLSelectStatement statement)
        INTERNAL: Print the SQL representation of the statement on a stream, storing the fields in the DatabaseCall.
      • shouldPrintLockingClauseAfterWhereClause

        public boolean shouldPrintLockingClauseAfterWhereClause()
        INTERNAL: Indicates whether locking clause should be printed after where clause by SQLSelectStatement. Example: on Oracle platform (method returns true): SELECT ADDRESS_ID, ... FROM ADDRESS WHERE (ADDRESS_ID = ?) FOR UPDATE on SQLServer platform (method returns false): SELECT ADDRESS_ID, ... FROM ADDRESS WITH (UPDLOCK) WHERE (ADDRESS_ID = ?)
      • supportsIndividualTableLocking

        public boolean supportsIndividualTableLocking()
        INTERNAL: Indicates whether locking clause could be selectively applied only to some tables in a ReadQuery. Example: the following locks the rows in SALARY table, doesn't lock the rows in EMPLOYEE table: on Oracle platform (method returns true): SELECT t0.EMP_ID..., t1.SALARY FROM EMPLOYEE t0, SALARY t1 WHERE ... FOR UPDATE t1.SALARY on SQLServer platform (method returns true): SELECT t0.EMP_ID..., t1.SALARY FROM EMPLOYEE t0, SALARY t1 WITH (UPDLOCK) WHERE ...
      • supportsLockingQueriesWithMultipleTables

        public boolean supportsLockingQueriesWithMultipleTables()
        INTERNAL: Indicates whether locking clause could be applied to the query that has more than one table
      • shouldPrintAliasForUpdate

        public boolean shouldPrintAliasForUpdate()
        INTERNAL: Indicates whether locking OF clause should print alias for field. Example: on Oracle platform (method returns false): SELECT ADDRESS_ID, ... FROM ADDRESS T1 WHERE (T1.ADDRESS_ID = ?) FOR UPDATE OF T1.ADDRESS_ID on Postgres platform (method returns true): SELECT ADDRESS_ID, ... FROM ADDRESS T1 WHERE (T1.ADDRESS_ID = ?) FOR UPDATE OF T1
      • buildCreateIndex

        public String buildCreateIndex​(String fullTableName,
                                       String indexName,
                                       String... columnNames)
        INTERNAL: Don't override this method.
        Parameters:
        fullTableName - qualified name of the table the index is to be created on
        indexName - name of the index
        columnNames - one or more columns the index is created for
      • buildCreateIndex

        public String buildCreateIndex​(String fullTableName,
                                       String indexName,
                                       String qualifier,
                                       boolean isUnique,
                                       String... columnNames)
        INTERNAL: Override this method with the platform's CREATE INDEX statement.
        Parameters:
        fullTableName - qualified name of the table the index is to be created on
        indexName - name of the index
        qualifier - qualifier to construct qualified name of index if needed
        isUnique - Indicates whether unique index is created
        columnNames - one or more columns the index is created for
      • buildDropIndex

        public String buildDropIndex​(String fullTableName,
                                     String indexName)
        INTERNAL: Don't override this method.
        Parameters:
        fullTableName - qualified name of the table the index is to be removed from
        indexName - name of the index
      • buildDropIndex

        public String buildDropIndex​(String fullTableName,
                                     String indexName,
                                     String qualifier)
        INTERNAL: Override this method with the platform's DROP INDEX statement.
        Parameters:
        fullTableName - qualified name of the table the index is to be removed from
        indexName - name of the index
        qualifier - qualifier to construct qualified name of index if needed
      • buildSequenceObjectCreationWriter

        public Writer buildSequenceObjectCreationWriter​(Writer writer,
                                                        String fullSeqName,
                                                        int increment,
                                                        int start)
                                                 throws IOException
        INTERNAL: Returns sql used to create sequence object in the database.
        Throws:
        IOException
      • buildSequenceObjectDeletionWriter

        public Writer buildSequenceObjectDeletionWriter​(Writer writer,
                                                        String fullSeqName)
                                                 throws IOException
        INTERNAL: Returns sql used to delete sequence object from the database.
        Throws:
        IOException
      • buildSequenceObjectAlterIncrementWriter

        public Writer buildSequenceObjectAlterIncrementWriter​(Writer writer,
                                                              String fullSeqName,
                                                              int increment)
                                                       throws IOException
        INTERNAL: Returns sql used to alter sequence object's increment in the database.
        Throws:
        IOException
      • isAlterSequenceObjectSupported

        public boolean isAlterSequenceObjectSupported()
        INTERNAL: Override this method if the platform supports sequence objects and it's possible to alter sequence object's increment in the database.
      • supportsNestingOuterJoins

        public boolean supportsNestingOuterJoins()
        INTERNAL: Return if nesting outer joins is supported, i.e. each join must be followed by the ON clause.
      • supportsOuterJoinsWithBrackets

        public boolean supportsOuterJoinsWithBrackets()
        INTERNAL: Return if brackets can be used in the ON clause for outer joins.
      • freeTemporaryObject

        public void freeTemporaryObject​(Object value)
                                 throws SQLException
        INTERNAL: Used by some platforms during reading of ResultSet to free temporary objects.
        Throws:
        SQLException
      • initializeConnectionData

        public void initializeConnectionData​(Connection connection)
                                      throws SQLException
        INTERNAL: Allow initialization from the connection.
        Throws:
        SQLException
      • writeAddColumnClause

        public void writeAddColumnClause​(Writer writer,
                                         AbstractSession session,
                                         TableDefinition table,
                                         FieldDefinition field)
                                  throws IOException
        INTERNAL: May need to override this method if the platform supports ALTER TABLE ADD <column> and the generated sql doesn't work. Write the string that follows ALTER TABLE to create a sql statement for the platform in order to append a new column to an existing table.
        Throws:
        IOException
      • supportsConnectionUserName

        public boolean supportsConnectionUserName()
        INTERNAL: Override this method if the platform supports storing JDBC connection user name during initializeConnectionData(Connection).
        Returns:
        Always returns false
      • getConnectionUserName

        public String getConnectionUserName()
        INTERNAL: Returns user name retrieved from JDBC connection.
        Throws:
        UnsupportedOperationException - on every single call until overridden.
      • getTableExistsQuery

        protected DataReadQuery getTableExistsQuery​(TableDefinition table)
        INTERNAL: Returns query to check whether given table exists. Query execution throws an exception when no such table exists.
        Parameters:
        table - database table meta-data
        Returns:
        query to check whether given table exists
      • checkTableExists

        public boolean checkTableExists​(DatabaseSessionImpl session,
                                        TableDefinition table,
                                        boolean suppressLogging)
        INTERNAL: Executes and evaluates query to check whether given table exists. Returned value is always true, because an exception is thrown when given table does not exists.
        Parameters:
        session - current database session
        table - database table meta-data
        suppressLogging - whether to suppress logging during query execution
        Returns:
        value of true if given table exists or false otherwise