Module io.ebean.api

Class DatabasePlatform


  • public class DatabasePlatform
    extends Object
    Database platform specific settings.
    • Field Detail

      • useExtraTransactionOnIterateSecondaryQueries

        protected boolean useExtraTransactionOnIterateSecondaryQueries
        Set to true for MySql, no other jdbc drivers need this workaround.
      • supportsDeleteTableAlias

        protected boolean supportsDeleteTableAlias
      • supportsSavepointId

        protected boolean supportsSavepointId
      • useMigrationStoredProcedures

        protected boolean useMigrationStoredProcedures
      • onQueryOnly

        protected DatabasePlatform.OnQueryOnly onQueryOnly
        The behaviour used when ending a read only transaction at read committed isolation level.
      • openQuote

        protected String openQuote
        The open quote used by quoted identifiers.
      • closeQuote

        protected String closeQuote
        The close quote used by quoted identifiers.
      • allQuotedIdentifiers

        protected boolean allQuotedIdentifiers
        When set to true all db column names and table names use quoted identifiers.
      • caseSensitiveCollation

        protected boolean caseSensitiveCollation
      • inlineSqlUpdateLimit

        protected boolean inlineSqlUpdateLimit
        Set true if the Database support LIMIT clause on sql update.
      • sqlLimiter

        protected SqlLimiter sqlLimiter
        For limit/offset, row_number etc limiting of SQL queries.
      • basicSqlLimiter

        protected BasicSqlLimiter basicSqlLimiter
        Limit/offset support for SqlQuery only.
      • dbDefaultValue

        protected DbDefaultValue dbDefaultValue
        Default values for DB columns.
      • nativeUuidType

        protected boolean nativeUuidType
        Set to true if the DB has native UUID type support.
      • dbIdentity

        protected DbIdentity dbIdentity
        Defines DB identity/sequence features.
      • sequenceBatchMode

        protected boolean sequenceBatchMode
      • sequenceBatchSize

        protected int sequenceBatchSize
      • historySupport

        protected DbHistorySupport historySupport
        The history support for this database platform.
      • booleanDbType

        protected int booleanDbType
        The JDBC type to map booleans to (by default).
      • blobDbType

        protected int blobDbType
        The JDBC type to map Blob to.
      • clobDbType

        protected int clobDbType
        The JDBC type to map Clob to.
      • treatEmptyStringsAsNull

        protected boolean treatEmptyStringsAsNull
        For Oracle treat empty strings as null.
      • platform

        protected io.ebean.annotation.Platform platform
        The database platform name.
      • truncateTable

        protected String truncateTable
      • columnAliasPrefix

        protected String columnAliasPrefix
      • likeClauseRaw

        protected String likeClauseRaw
        The non-escaped like clause (to stop slash being escaped on some platforms). Used for the 'raw like' expression but not for startsWith, endsWith and contains expressions.
      • likeClauseEscaped

        protected String likeClauseEscaped
        Escaped like clause for startsWith, endsWith and contains.
      • likeEscapeChar

        protected char likeEscapeChar
        Escape character used for startsWith, endsWith and contains.
      • likeSpecialCharacters

        protected char[] likeSpecialCharacters
        Characters escaped for startsWith, endsWith and contains.
      • idInExpandedForm

        protected boolean idInExpandedForm
      • selectCountWithAlias

        protected boolean selectCountWithAlias
      • selectCountWithColumnAlias

        protected boolean selectCountWithColumnAlias
      • forwardOnlyHintOnFindIterate

        protected boolean forwardOnlyHintOnFindIterate
        If set then use the FORWARD ONLY hint when creating ResultSets for findIterate() and findVisit().
      • supportsResultSetConcurrencyModeUpdatable

        protected boolean supportsResultSetConcurrencyModeUpdatable
        If set then use the CONCUR_UPDATABLE hint when creating ResultSets.

        This is false for HANA

      • persistBatchOnCascade

        protected io.ebean.annotation.PersistBatch persistBatchOnCascade
        By default we use JDBC batch when cascading (except for SQL Server and HANA).
      • maxInBinding

        protected int maxInBinding
      • maxTableNameLength

        protected int maxTableNameLength
        The maximum length of table names - used specifically when derived default table names for intersection tables.
      • maxConstraintNameLength

        protected int maxConstraintNameLength
        A value of 60 is a reasonable default for all databases except Oracle (limited to 30) and DB2 (limited to 18).
      • supportsNativeIlike

        protected boolean supportsNativeIlike
    • Constructor Detail

      • DatabasePlatform

        public DatabasePlatform()
        Instantiates a new database platform.
    • Method Detail

      • translate

        public javax.persistence.PersistenceException translate​(String message,
                                                                SQLException e)
        Translate the SQLException into a specific persistence exception if possible.
      • configure

        public void configure​(PlatformConfig config)
        Configure the platform given the server configuration.
      • configure

        protected void configure​(PlatformConfig config,
                                 boolean allQuotedIdentifiers)
        Configure UUID Storage etc based on DatabaseConfig settings.
      • configureIdType

        protected void configureIdType​(IdType idType)
      • addGeoTypes

        protected void addGeoTypes​(int srid)
      • isPlatform

        public boolean isPlatform​(io.ebean.annotation.Platform platform)
        Return true if this matches the given platform.
      • getPlatform

        public io.ebean.annotation.Platform getPlatform()
        Return the platform key.
      • getName

        public String getName()
        Return the name of the underlying Platform in lowercase.

        "generic" is returned when no specific database platform has been set or found.

      • isSequenceBatchMode

        public boolean isSequenceBatchMode()
        Return true if we are using Sequence batch mode rather than STEP.
      • setSequenceBatchMode

        public void setSequenceBatchMode​(boolean sequenceBatchMode)
        Set to false to not use sequence batch mode but instead STEP mode.
      • isSupportsNativeIlike

        public boolean isSupportsNativeIlike()
        Return true if this database platform supports native ILIKE expression.
      • isSupportsDeleteTableAlias

        public boolean isSupportsDeleteTableAlias()
        Return true if the platform supports delete statements with table alias.
      • isCaseSensitiveCollation

        public boolean isCaseSensitiveCollation()
        Return true if the collation is case sensitive.

        This is expected to be used for testing only.

      • isSupportsSavepointId

        public boolean isSupportsSavepointId()
        Return true if the platform supports SavepointId values.
      • isUseMigrationStoredProcedures

        public boolean isUseMigrationStoredProcedures()
        Return true if migrations should use stored procedures.
      • isInlineSqlUpdateLimit

        public boolean isInlineSqlUpdateLimit()
        Return true if the platform supports LIMIT with sql update.
      • getMaxInBinding

        public int getMaxInBinding()
        Return the maximum number of bind values this database platform allows or zero for no limit.
      • getMaxTableNameLength

        public int getMaxTableNameLength()
        Return the maximum table name length.

        This is used when deriving names of intersection tables.

      • getMaxConstraintNameLength

        public int getMaxConstraintNameLength()
        Return the maximum constraint name allowed for the platform.
      • useExtraTransactionOnIterateSecondaryQueries

        public boolean useExtraTransactionOnIterateSecondaryQueries()
        Return true if the JDBC driver does not allow additional queries to execute when a resultSet is being 'streamed' as is the case with findEach() etc.

        Honestly, this is a workaround for a stupid MySql JDBC driver limitation.

      • createSequenceIdGenerator

        public PlatformIdGenerator createSequenceIdGenerator​(BackgroundExecutor be,
                                                             DataSource ds,
                                                             int stepSize,
                                                             String seqName)
        Return a DB Sequence based IdGenerator.
        Parameters:
        be - the BackgroundExecutor that can be used to load the sequence if desired
        ds - the DataSource
        stepSize - the sequence allocation size as defined by mapping (defaults to 50)
        seqName - the name of the sequence
      • setOnQueryOnly

        public void setOnQueryOnly​(DatabasePlatform.OnQueryOnly onQueryOnly)
        Set the behaviour to use when ending a read only transaction.
      • getDbEncrypt

        public DbEncrypt getDbEncrypt()
        Return the DbEncrypt handler for this DB platform.
      • setDbEncrypt

        public void setDbEncrypt​(DbEncrypt dbEncrypt)
        Set the DbEncrypt handler for this DB platform.
      • getHistorySupport

        public DbHistorySupport getHistorySupport()
        Return the history support for this database platform.
      • setHistorySupport

        public void setHistorySupport​(DbHistorySupport historySupport)
        Set the history support for this database platform.
      • isNativeArrayType

        public boolean isNativeArrayType()
        So no except for Postgres and CockroachDB.
      • isNativeUuidType

        public boolean isNativeUuidType()
        Return true if the DB supports native UUID.
      • getDbTypeMap

        public DbPlatformTypeMapping getDbTypeMap()
        Return the mapping of JDBC to DB types.
        Returns:
        the db type map
      • getDbDefaultValue

        public DbDefaultValue getDbDefaultValue()
        Return the mapping for DB column default values.
      • getColumnAliasPrefix

        public String getColumnAliasPrefix()
        Return the column alias prefix.
      • setColumnAliasPrefix

        public void setColumnAliasPrefix​(String columnAliasPrefix)
        Set the column alias prefix.
      • getCloseQuote

        public String getCloseQuote()
        Return the close quote for quoted identifiers.
      • getOpenQuote

        public String getOpenQuote()
        Return the open quote for quoted identifiers.
      • getBooleanDbType

        public int getBooleanDbType()
        Return the JDBC type used to store booleans.
      • getBlobDbType

        public int getBlobDbType()
        Return the data type that should be used for Blob.

        This is typically Types.BLOB but for Postgres is Types.LONGVARBINARY for example.

      • getClobDbType

        public int getClobDbType()
        Return the data type that should be used for Clob.

        This is typically Types.CLOB but for Postgres is Types.VARCHAR.

      • isTreatEmptyStringsAsNull

        public boolean isTreatEmptyStringsAsNull()
        Return true if empty strings should be treated as null.
        Returns:
        true, if checks if is treat empty strings as null
      • isIdInExpandedForm

        public boolean isIdInExpandedForm()
        Return true if a compound ID in (...) type expression needs to be in expanded form of (a=? and b=?) or (a=? and b=?) or ... rather than (a,b) in ((?,?),(?,?),...);
      • isForwardOnlyHintOnFindIterate

        public boolean isForwardOnlyHintOnFindIterate()
        Return true if the ResultSet TYPE_FORWARD_ONLY Hint should be used on findIterate() and findVisit() PreparedStatements.

        This specifically is required for MySql when processing large results.

      • setForwardOnlyHintOnFindIterate

        public void setForwardOnlyHintOnFindIterate​(boolean forwardOnlyHintOnFindIterate)
        Set to true if the ResultSet TYPE_FORWARD_ONLY Hint should be used by default on findIterate PreparedStatements.
      • isSupportsResultSetConcurrencyModeUpdatable

        public boolean isSupportsResultSetConcurrencyModeUpdatable()
        Return true if the ResultSet CONCUR_UPDATABLE Hint should be used on createNativeSqlTree() PreparedStatements.

        This specifically is required for Hana which doesn't support CONCUR_UPDATABLE

      • setSupportsResultSetConcurrencyModeUpdatable

        public void setSupportsResultSetConcurrencyModeUpdatable​(boolean supportsResultSetConcurrencyModeUpdatable)
        Set to true if the ResultSet CONCUR_UPDATABLE Hint should be used by default on createNativeSqlTree() PreparedStatements.
      • setUseMigrationStoredProcedures

        public void setUseMigrationStoredProcedures​(boolean useMigrationStoredProcedures)
      • getDbIdentity

        public DbIdentity getDbIdentity()
        Return the DB identity/sequence features for this platform.
        Returns:
        the db identity
      • getSqlLimiter

        public SqlLimiter getSqlLimiter()
        Return the SqlLimiter used to apply additional sql around a query to limit its results.

        Basically add the clauses for limit/offset, rownum, row_number().

        Returns:
        the sql limiter
      • getBasicSqlLimiter

        public BasicSqlLimiter getBasicSqlLimiter()
        Return the BasicSqlLimiter for limit/offset of SqlQuery queries.
      • setDbTrueLiteral

        public void setDbTrueLiteral​(String dbTrueLiteral)
        Set the DB TRUE literal (from the registered boolean ScalarType)
      • setDbFalseLiteral

        public void setDbFalseLiteral​(String dbFalseLiteral)
        Set the DB FALSE literal (from the registered boolean ScalarType)
      • convertQuotedIdentifiers

        public String convertQuotedIdentifiers​(String dbName)
        Convert backticks to the platform specific open quote and close quote

        Specific plugins may implement this method to cater for platform specific naming rules.

        Parameters:
        dbName - the db table or column name
        Returns:
        the db table or column name with potentially platform specific quoted identifiers
      • unQuote

        public String unQuote​(String dbName)
        Remove quoted identifier quotes from the table or column name if present.
      • isSelectCountWithAlias

        public boolean isSelectCountWithAlias()
        Set to true if select count against anonymous view requires an alias.
      • isSelectCountWithColumnAlias

        public boolean isSelectCountWithColumnAlias()
        Return true if select count with subquery needs column alias (SQL Server).
      • fromForUpdate

        public String fromForUpdate​(Query.LockWait lockWait)
        For update hint on the FROM clause (SQL server only).
      • getLikeClause

        public String getLikeClause​(boolean rawLikeExpression)
        Returns the like clause used by this database platform.

        This may include an escape clause to disable a default escape character.

      • getPersistBatchOnCascade

        public io.ebean.annotation.PersistBatch getPersistBatchOnCascade()
        Return the platform default JDBC batch mode for persist cascade.
      • truncateStatement

        public String truncateStatement​(String table)
        Return a statement to truncate a table.
      • tablePartitionInit

        public String tablePartitionInit​(String tableName,
                                         io.ebean.annotation.PartitionMode mode,
                                         String property,
                                         String singlePrimaryKey)
        Return the SQL to create an initial partition for the given table.
      • escapeLikeString

        public String escapeLikeString​(String value)
        Escapes the like string for this DB-Platform
      • escapeLikeCharacter

        protected void escapeLikeCharacter​(char ch,
                                           StringBuilder sb)
      • supportsNativeJavaTime

        public boolean supportsNativeJavaTime()