Class DatabasePlatform

    • 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.
      • 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.
      • isInlineSqlUpdateLimit

        public boolean isInlineSqlUpdateLimit()
        Return true if the platform supports LIMIT with sql update.
      • 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
      • setDbEncrypt

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

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

        public boolean isNativeUuidType()
        Return true if the DB supports native UUID.
      • 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.
      • isDdlAutoCommit

        public boolean isDdlAutoCommit()
        Normally not needed - overridden in CockroachPlatform.
      • 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
      • 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).
      • 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.
      • 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.