-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected boolean
When set to true all db column names and table names use quoted identifiers.protected BasicSqlLimiter
Limit/offset support for SqlQuery only.protected int
The JDBC type to map Blob to.protected int
The JDBC type to map booleans to (by default).protected boolean
protected int
The JDBC type to map Clob to.protected String
The close quote used by quoted identifiers.protected String
protected DbDefaultValue
Default values for DB columns.protected DbEncrypt
protected DbIdentity
Defines DB identity/sequence features.protected DbPlatformTypeMapping
Mapping of JDBC to Database types.protected SqlExceptionTranslator
protected boolean
If set then use the FORWARD ONLY hint when creating ResultSets for findIterate() and findVisit().protected DbHistorySupport
The history support for this database platform.protected boolean
protected boolean
Set true if the Database support LIMIT clause on sql update.protected String
Escaped like clause for startsWith, endsWith and contains.protected String
The non-escaped like clause (to stop slash being escaped on some platforms).protected char
Escape character used for startsWith, endsWith and contains.protected char[]
Characters escaped for startsWith, endsWith and contains.protected int
A value of 60 is a reasonable default for all databases except Oracle (limited to 30) and DB2 (limited to 18).protected int
protected int
The maximum length of table names - used specifically when derived default table names for intersection tables.protected boolean
Set to true if the DB has native UUID type support.protected String
The open quote used by quoted identifiers.protected io.ebean.annotation.PersistBatch
By default we use JDBC batch when cascading (except for SQL Server and HANA).protected io.ebean.annotation.Platform
The database platform name.protected boolean
protected boolean
protected boolean
protected int
protected SqlLimiter
For limit/offset, row_number etc limiting of SQL queries.protected boolean
protected boolean
protected boolean
Can we use native java time API objects inResultSet.getObject(int, Class)
andPreparedStatement.setObject(int, Object)
.protected boolean
If set then use the CONCUR_UPDATABLE hint when creating ResultSets.protected boolean
protected String
protected boolean
Set to true for MySql, no other jdbc drivers need this workaround.protected boolean
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void
addGeoTypes
(int srid) Return the BasicSqlLimiter for limit/offset of SqlQuery queries.int
Return the data type that should be used for Blob.int
Return the JDBC type used to store booleans.boolean
Return true if the collation is case-sensitive.int
Return the data type that should be used for Clob.Return the close quote for quoted identifiers.Return the column alias prefix.completeSql
(String sql, Query<?> query) void
configure
(PlatformConfig config) Configure the platform given the server configuration.protected void
configure
(PlatformConfig config, boolean allQuotedIdentifiers) Configure UUID Storage etc based on DatabaseConfig settings.protected void
configureIdType
(IdType idType) convertQuotedIdentifiers
(String dbName) Convert backticks to the platform specific open quote and close quotevoid
createSchemaIfNotExists
(String dbSchema, Connection connection) Create the DB schema if it does not exist.createSequenceIdGenerator
(BackgroundExecutor be, DataSource ds, int stepSize, String seqName) Return a DB Sequence based IdGenerator.Return the mapping for DB column default values.Return the DbEncrypt handler for this DB platform.Return the DB identity/sequence features for this platform.Return the mapping of JDBC to DB types.protected void
escapeLikeCharacter
(char ch, StringBuilder sb) escapeLikeString
(String value) Escapes the like string for this DB-Platformboolean
Return true if the ResultSet TYPE_FORWARD_ONLY Hint should be used on findIterate() and findVisit() PreparedStatements.fromForUpdate
(Query.LockWait lockWait) For update hint on the FROM clause (SQL server only).Return the history support for this database platform.boolean
Return true if a compound ID in (...) type expression needs to be in expanded form of (a=? and b=?) or (a=? and b=?) or ...inlineSqlComment
(String label) inlineSqlHint
(String hint) boolean
Return true if the platform supports LIMIT with sql update.boolean
isPlatform
(io.ebean.annotation.Platform platform) Return true if this matches the given platform.likeClause
(boolean rawLikeExpression) Returns the like clause used by this database platform.int
Return the maximum constraint name allowed for the platform.int
Return the maximum number of bind values this database platform allows or zero for no limit.int
Return the maximum table name length.name()
Return the name of the underlying Platform in lowercase.boolean
So no except for Postgres and CockroachDB.boolean
Return true if the DB supports native UUID.Return the open quote for quoted identifiers.io.ebean.annotation.PersistBatch
Return the platform default JDBC batch mode for persist cascade.io.ebean.annotation.Platform
platform()
Return the platform key.boolean
schemaExists
(String dbSchema, Connection connection) Return true if the schema exists.boolean
Set to true if select count against anonymous view requires an alias.boolean
Return true if select count with subquery needs column alias (SQL Server).boolean
Return true if we are using Sequence batch mode rather than STEP.void
setColumnAliasPrefix
(String columnAliasPrefix) Set the column alias prefix.void
setDbEncrypt
(DbEncrypt dbEncrypt) Set the DbEncrypt handler for this DB platform.void
setDbFalseLiteral
(String dbFalseLiteral) Set the DB FALSE literal (from the registered boolean ScalarType)void
setDbTrueLiteral
(String dbTrueLiteral) Set the DB TRUE literal (from the registered boolean ScalarType)void
setForwardOnlyHintOnFindIterate
(boolean forwardOnlyHintOnFindIterate) Set to true if the ResultSet TYPE_FORWARD_ONLY Hint should be used by default on findIterate PreparedStatements.void
setHistorySupport
(DbHistorySupport historySupport) Set the history support for this database platform.void
setSequenceBatchMode
(boolean sequenceBatchMode) Set to false to not use sequence batch mode but instead STEP mode.void
setSupportsResultSetConcurrencyModeUpdatable
(boolean supportsResultSetConcurrencyModeUpdatable) Set to true if the ResultSet CONCUR_UPDATABLE Hint should be used by default on createNativeSqlTree() PreparedStatements.void
setUseMigrationStoredProcedures
(boolean useMigrationStoredProcedures) Return the SqlLimiter used to apply additional sql around a query to limit its results.boolean
Return true if the platform supports delete statements with table alias.boolean
Return true if this database platform supports native ILIKE expression.boolean
boolean
Return true if the ResultSet CONCUR_UPDATABLE Hint should be used on createNativeSqlTree() PreparedStatements.boolean
Return true if the platform supports SavepointId values.jakarta.persistence.PersistenceException
translate
(String message, SQLException e) Translate the SQLException into a specific persistence exception if possible.truncateStatement
(String table) Return a statement to truncate a table.Remove quoted identifier quotes from the table or column name if present.boolean
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.boolean
Return true if migrations should use stored procedures.protected String
withForUpdate
(String sql, Query.LockWait lockWait, Query.LockType lockType)
-
Field Details
-
useExtraTransactionOnIterateSecondaryQueries
protected boolean useExtraTransactionOnIterateSecondaryQueriesSet 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 supportsNativeJavaTimeCan we use native java time API objects inResultSet.getObject(int, Class)
andPreparedStatement.setObject(int, Object)
.Not all drivers (DB2 e.g.) will support this.
-
openQuote
The open quote used by quoted identifiers. -
closeQuote
The close quote used by quoted identifiers. -
allQuotedIdentifiers
protected boolean allQuotedIdentifiersWhen set to true all db column names and table names use quoted identifiers. -
caseSensitiveCollation
protected boolean caseSensitiveCollation -
inlineSqlUpdateLimit
protected boolean inlineSqlUpdateLimitSet true if the Database support LIMIT clause on sql update. -
sqlLimiter
For limit/offset, row_number etc limiting of SQL queries. -
basicSqlLimiter
Limit/offset support for SqlQuery only. -
dbTypeMap
Mapping of JDBC to Database types. -
dbDefaultValue
Default values for DB columns. -
nativeUuidType
protected boolean nativeUuidTypeSet to true if the DB has native UUID type support. -
dbIdentity
Defines DB identity/sequence features. -
sequenceBatchMode
protected boolean sequenceBatchMode -
sequenceBatchSize
protected int sequenceBatchSize -
historySupport
The history support for this database platform. -
booleanDbType
protected int booleanDbTypeThe JDBC type to map booleans to (by default). -
blobDbType
protected int blobDbTypeThe JDBC type to map Blob to. -
clobDbType
protected int clobDbTypeThe JDBC type to map Clob to. -
platform
protected io.ebean.annotation.Platform platformThe database platform name. -
truncateTable
-
columnAliasPrefix
-
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
Escaped like clause for startsWith, endsWith and contains. -
likeEscapeChar
protected char likeEscapeCharEscape character used for startsWith, endsWith and contains. -
likeSpecialCharacters
protected char[] likeSpecialCharactersCharacters escaped for startsWith, endsWith and contains. -
dbEncrypt
-
idInExpandedForm
protected boolean idInExpandedForm -
selectCountWithAlias
protected boolean selectCountWithAlias -
selectCountWithColumnAlias
protected boolean selectCountWithColumnAlias -
forwardOnlyHintOnFindIterate
protected boolean forwardOnlyHintOnFindIterateIf set then use the FORWARD ONLY hint when creating ResultSets for findIterate() and findVisit(). -
supportsResultSetConcurrencyModeUpdatable
protected boolean supportsResultSetConcurrencyModeUpdatableIf set then use the CONCUR_UPDATABLE hint when creating ResultSets.This is
false
for HANA -
persistBatchOnCascade
protected io.ebean.annotation.PersistBatch persistBatchOnCascadeBy default we use JDBC batch when cascading (except for SQL Server and HANA). -
maxInBinding
protected int maxInBinding -
maxTableNameLength
protected int maxTableNameLengthThe maximum length of table names - used specifically when derived default table names for intersection tables. -
maxConstraintNameLength
protected int maxConstraintNameLengthA 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
-
-
Constructor Details
-
DatabasePlatform
public DatabasePlatform()Instantiates a new database platform.
-
-
Method Details
-
translate
Translate the SQLException into a specific persistence exception if possible. -
configure
Configure the platform given the server configuration. -
configure
Configure UUID Storage etc based on DatabaseConfig settings. -
configureIdType
-
addGeoTypes
protected void addGeoTypes(int srid) -
isPlatform
public boolean isPlatform(io.ebean.annotation.Platform platform) Return true if this matches the given platform. -
platform
public io.ebean.annotation.Platform platform()Return the platform key. -
name
Return the name of the underlying Platform in lowercase."generic" is returned when no specific database platform has been set or found.
-
sequenceBatchMode
public boolean sequenceBatchMode()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. -
supportsNativeIlike
public boolean supportsNativeIlike()Return true if this database platform supports native ILIKE expression. -
supportsDeleteTableAlias
public boolean supportsDeleteTableAlias()Return true if the platform supports delete statements with table alias. -
caseSensitiveCollation
public boolean caseSensitiveCollation()Return true if the collation is case-sensitive.This is expected to be used for testing only.
-
supportsSavepointId
public boolean supportsSavepointId()Return true if the platform supports SavepointId values. -
useMigrationStoredProcedures
public boolean useMigrationStoredProcedures()Return true if migrations should use stored procedures. -
inlineSqlUpdateLimit
public boolean inlineSqlUpdateLimit()Return true if the platform supports LIMIT with sql update. -
maxInBinding
public int maxInBinding()Return the maximum number of bind values this database platform allows or zero for no limit. -
maxTableNameLength
public int maxTableNameLength()Return the maximum table name length.This is used when deriving names of intersection tables.
-
maxConstraintNameLength
public int maxConstraintNameLength()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 desiredds
- the DataSourcestepSize
- the sequence allocation size as defined by mapping (defaults to 50)seqName
- the name of the sequence
-
dbEncrypt
Return the DbEncrypt handler for this DB platform. -
setDbEncrypt
Set the DbEncrypt handler for this DB platform. -
historySupport
Return the history support for this database platform. -
setHistorySupport
Set the history support for this database platform. -
nativeArrayType
public boolean nativeArrayType()So no except for Postgres and CockroachDB. -
nativeUuidType
public boolean nativeUuidType()Return true if the DB supports native UUID. -
dbTypeMap
Return the mapping of JDBC to DB types.- Returns:
- the db type map
-
dbDefaultValue
Return the mapping for DB column default values. -
columnAliasPrefix
Return the column alias prefix. -
setColumnAliasPrefix
Set the column alias prefix. -
closeQuote
Return the close quote for quoted identifiers. -
openQuote
Return the open quote for quoted identifiers. -
booleanDbType
public int booleanDbType()Return the JDBC type used to store booleans. -
blobDbType
public int blobDbType()Return the data type that should be used for Blob.This is typically Types.BLOB but for Postgres is Types.LONGVARBINARY for example.
-
clobDbType
public int clobDbType()Return the data type that should be used for Clob.This is typically Types.CLOB but for Postgres is Types.VARCHAR.
-
idInExpandedForm
public boolean idInExpandedForm()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 ((?,?),(?,?),...); -
forwardOnlyHintOnFindIterate
public boolean forwardOnlyHintOnFindIterate()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. -
supportsResultSetConcurrencyModeUpdatable
public boolean supportsResultSetConcurrencyModeUpdatable()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) -
dbIdentity
Return the DB identity/sequence features for this platform.- Returns:
- the db identity
-
sqlLimiter
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
-
basicSqlLimiter
Return the BasicSqlLimiter for limit/offset of SqlQuery queries. -
setDbTrueLiteral
Set the DB TRUE literal (from the registered boolean ScalarType) -
setDbFalseLiteral
Set the DB FALSE literal (from the registered boolean ScalarType) -
convertQuotedIdentifiers
Convert backticks to the platform specific open quote and close quoteSpecific 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
Remove quoted identifier quotes from the table or column name if present. -
selectCountWithAlias
public boolean selectCountWithAlias()Set to true if select count against anonymous view requires an alias. -
selectCountWithColumnAlias
public boolean selectCountWithColumnAlias()Return true if select count with subquery needs column alias (SQL Server). -
completeSql
-
fromForUpdate
For update hint on the FROM clause (SQL server only). -
withForUpdate
-
likeClause
Returns the like clause used by this database platform.This may include an escape clause to disable a default escape character.
-
persistBatchOnCascade
public io.ebean.annotation.PersistBatch persistBatchOnCascade()Return the platform default JDBC batch mode for persist cascade. -
truncateStatement
Return a statement to truncate a table. -
createSchemaIfNotExists
Create the DB schema if it does not exist.- Throws:
SQLException
-
schemaExists
Return true if the schema exists.- Throws:
SQLException
-
escapeLikeString
Escapes the like string for this DB-Platform -
escapeLikeCharacter
-
supportsNativeJavaTime
public boolean supportsNativeJavaTime() -
inlineSqlComment
-
inlineSqlHint
-