Module io.ebean.api

Class DatabasePlatform

java.lang.Object
io.ebean.config.dbplatform.DatabasePlatform

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

    • 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
    • supportsNativeJavaTime

      protected boolean supportsNativeJavaTime
      Can we use native java time API objects in ResultSet.getObject(int, Class) and PreparedStatement.setObject(int, Object). Not all drivers (DB2 e.g.) will support this.
    • 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.
    • dbTypeMap

      protected DbPlatformTypeMapping dbTypeMap
      Mapping of JDBC to Database types.
    • 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.
    • dbEncrypt

      protected DbEncrypt dbEncrypt
    • 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
    • exceptionTranslator

      protected SqlExceptionTranslator exceptionTranslator
  • Constructor Details

    • DatabasePlatform

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

    • 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
    • getOnQueryOnly

      public DatabasePlatform.OnQueryOnly getOnQueryOnly()
      Return the behaviour to use when ending a read only transaction.
    • 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).
    • completeSql

      public String completeSql(String sql, Query<?> query)
    • fromForUpdate

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

      protected String withForUpdate(String sql, Query.LockWait lockWait, Query.LockType lockType)
    • 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.
    • createSchemaIfNotExists

      public void createSchemaIfNotExists(String dbSchema, Connection connection) throws SQLException
      Create the DB schema if it does not exist.
      Throws:
      SQLException
    • schemaExists

      public boolean schemaExists(String dbSchema, Connection connection) throws SQLException
      Return true if the schema exists.
      Throws:
      SQLException
    • tableExists

      public boolean tableExists(Connection connection, String catalog, String schema, String table) throws SQLException
      Return true if the table exists.
      Throws:
      SQLException
    • tablePartitionsExist

      public boolean tablePartitionsExist(Connection connection, String table) throws SQLException
      Return true if partitions exist for the given table.
      Throws:
      SQLException
    • 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()