Package liquibase.database
Class AbstractJdbcDatabase
- java.lang.Object
-
- liquibase.database.AbstractJdbcDatabase
-
- All Implemented Interfaces:
AutoCloseable
,Database
,PrioritizedService
- Direct Known Subclasses:
AbstractDb2Database
,DerbyDatabase
,FirebirdDatabase
,H2Database
,HsqlDatabase
,InformixDatabase
,Ingres9Database
,MSSQLDatabase
,MySQLDatabase
,OracleDatabase
,PostgresDatabase
,SnowflakeDatabase
,SQLiteDatabase
,SybaseASADatabase
,SybaseDatabase
,UnsupportedDatabase
public abstract class AbstractJdbcDatabase extends Object implements Database
AbstractJdbcDatabase is extended by all supported databases as a facade to the underlying database. The physical connection can be retrieved from the AbstractJdbcDatabase implementation, as well as any database-specific characteristics such as the datatype for "boolean" fields.
-
-
Field Summary
Fields Modifier and Type Field Description protected Boolean
caseSensitive
protected String
currentDateTimeFunction
protected List<DatabaseFunction>
dateFunctions
protected BigInteger
defaultAutoIncrementBy
protected BigInteger
defaultAutoIncrementStartWith
protected String
defaultCatalogName
protected String
defaultSchemaName
protected ObjectQuotingStrategy
quotingStrategy
protected String
sequenceCurrentValueFunction
protected String
sequenceNextValueFunction
The sequence name will be substituted into the string e.g.protected List<String>
unmodifiableDataTypes
protected Boolean
unquotedObjectsAreUppercased
-
Fields inherited from interface liquibase.database.Database
COMPLETE_SQL_SCOPE_KEY
-
Fields inherited from interface liquibase.servicelocator.PrioritizedService
COMPARATOR, PRIORITY_DATABASE, PRIORITY_DEFAULT
-
-
Constructor Summary
Constructors Constructor Description AbstractJdbcDatabase()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
addReservedWords(Collection<String> words)
protected boolean
canCreateChangeLogTable()
void
close()
void
commit()
String
correctObjectName(String objectName, Class<? extends DatabaseObject> objectType)
Fix the object name to the format the database expects, handling changes in case, etc.CatalogAndSchema
correctSchema(String catalog, String schema)
Deprecated.CatalogAndSchema
correctSchema(CatalogAndSchema schema)
Deprecated.boolean
createsIndexesForForeignKeys()
boolean
dataTypeIsNotModifiable(String typeName)
Types like int4 in postgres cannot have a modifier.boolean
disableForeignKeyChecks()
boolean
doesTagExist(String tag)
void
dropDatabaseObjects(CatalogAndSchema schemaToDrop)
Drops all objects in a specified schema.void
enableForeignKeyChecks()
boolean
equals(Object o)
String
escapeColumnName(String catalogName, String schemaName, String tableName, String columnName)
Escapes a single column name in a database-dependent manner so reserved words can be used as a column name (i.e.String
escapeColumnName(String catalogName, String schemaName, String tableName, String columnName, boolean quoteNamesThatMayBeFunctions)
Similar toDatabase.escapeColumnName(String, String, String, String)
but allows control over whether function-like names should be left unquoted.String
escapeColumnNameList(String columnNames)
Escapes a list of column names in a database-dependent manner so reserved words can be used as a column name (i.e.String
escapeConstraintName(String constraintName)
String
escapeDataTypeName(String dataTypeName)
String
escapeIndexName(String catalogName, String schemaName, String indexName)
String
escapeObjectName(String objectName, Class<? extends DatabaseObject> objectType)
String
escapeObjectName(String catalogName, String schemaName, String objectName, Class<? extends DatabaseObject> objectType)
String
escapeSequenceName(String catalogName, String schemaName, String sequenceName)
String
escapeStringForDatabase(String string)
String
escapeTableName(String catalogName, String schemaName, String tableName)
String
escapeViewName(String catalogName, String schemaName, String viewName)
void
execute(SqlStatement[] statements, List<SqlVisitor> sqlVisitors)
void
executeRollbackStatements(Change change, List<SqlVisitor> sqlVisitors)
void
executeRollbackStatements(SqlStatement[] statements, List<SqlVisitor> sqlVisitors)
void
executeStatements(Change change, DatabaseChangeLog changeLog, List<SqlVisitor> sqlVisitors)
protected List<SqlVisitor>
filterRollbackVisitors(List<SqlVisitor> visitors)
Takes a list of SqlVisitors and returns a new list with only the SqlVisitors set to apply to rollbacksprotected boolean
generateAutoIncrementBy(BigInteger incrementBy)
protected boolean
generateAutoIncrementStartWith(BigInteger startWith)
String
generateDatabaseFunctionValue(DatabaseFunction databaseFunction)
Some function names are placeholders that need to be replaced with the specific database value.String
generatePrimaryKeyName(String tableName)
Object
get(String key)
boolean
getAutoCommitMode()
Auto-commit mode to run inprotected String
getAutoIncrementByClause()
protected String
getAutoIncrementClause()
protected String
getAutoIncrementClause(String generationType, Boolean defaultOnNull)
Default implementation.String
getAutoIncrementClause(BigInteger startWith, BigInteger incrementBy, String generationType, Boolean defaultOnNull)
Returns database-specific auto-increment DDL clause.protected String
getAutoIncrementClosing()
protected String
getAutoIncrementOpening()
protected String
getAutoIncrementStartWithClause()
String
getConcatSql(String... values)
Returns SQL to concat the passed values.DatabaseConnection
getConnection()
protected String
getConnectionCatalogName()
protected String
getConnectionSchemaName()
Overwrite this method to get the default schema name for the connection.protected SqlStatement
getConnectionSchemaNameCallStatement()
Used to obtain the connection schema name through a statement Override this method to change the statement.DatabaseObject[]
getContainingObjects()
String
getCurrentDateTimeFunction()
Returns database-specific function for generating the current date/time.String
getDatabaseChangeLogLockTableName()
String
getDatabaseChangeLogTableName()
int
getDatabaseMajorVersion()
int
getDatabaseMinorVersion()
String
getDatabaseProductName()
Returns the name of the database product according to the underlying database.String
getDatabaseProductVersion()
int
getDataTypeMaxParameters(String dataTypeName)
List<DatabaseFunction>
getDateFunctions()
Returns list of database native date functionsString
getDateLiteral(String isoDate)
Return a date literal with the same value as a string formatted using ISO 8601.String
getDateLiteral(Date date)
String
getDateLiteral(Date date)
String
getDateTimeLiteral(Timestamp date)
String
getDefaultCatalogName()
protected abstract String
getDefaultDatabaseProductName()
int
getDefaultFractionalDigitsForTimestamp()
SQL Standard (Foundation) says: "...ifis not specified, then 6 is implicit." Integer
getDefaultScaleForNativeDataType(String nativeDataType)
Returns the default precision for a given native data type, e.g.CatalogAndSchema
getDefaultSchema()
String
getDefaultSchemaName()
Integer
getFetchSize()
String
getJdbcCatalogName(CatalogAndSchema schema)
String
getJdbcCatalogName(Schema schema)
String
getJdbcSchemaName(CatalogAndSchema schema)
String
getJdbcSchemaName(Schema schema)
String
getLineComment()
Returns database-specific line comment string.String
getLiquibaseCatalogName()
String
getLiquibaseSchemaName()
String
getLiquibaseTablespaceName()
int
getMaxFractionalDigitsForTimestamp()
Most relational databases support 9 fractional digits, and subclasses must overwrite this method if they support less than that.String
getName()
ObjectQuotingStrategy
getObjectQuotingStrategy()
boolean
getOutputDefaultCatalog()
boolean
getOutputDefaultSchema()
Should the schema be included in identifiers even if it is the default schema?protected String
getQuotingEndCharacter()
protected String
getQuotingEndReplacement()
protected String
getQuotingStartCharacter()
RanChangeSet
getRanChangeSet(ChangeSet changeSet)
List<RanChangeSet>
getRanChangeSetList()
Returns the ChangeSets that have been run against the current database.Date
getRanDate(ChangeSet changeSet)
protected String
getRawDatabaseChangeLogLockTableName()
Method used by extensions to get raw dbcll table nameprotected String
getRawDatabaseChangeLogTableName()
Method used by extensions to get raw dbcl table nameChangeSet.RunStatus
getRunStatus(ChangeSet changeSet)
Returns the run status for the given ChangeSetCatalogAndSchema.CatalogAndSchemaCase
getSchemaAndCatalogCase()
This logic is used when db support catalogsCatalogAndSchema
getSchemaFromJdbcInfo(String rawCatalogName, String rawSchemaName)
String
getSystemSchema()
protected Set<String>
getSystemTables()
Returns system (undroppable) views.protected Set<String>
getSystemViews()
Returns system (undroppable) views.String
getTimeLiteral(Time date)
String
getViewDefinition(CatalogAndSchema schema, String viewName)
int
hashCode()
boolean
isAutoCommit()
boolean
isCaseSensitive()
protected boolean
isCatalogOrSchemaType(Class<? extends DatabaseObject> objectType)
protected boolean
isCurrentTimeFunction(String functionValue)
protected boolean
isDateOnly(String isoDate)
Returns true if the String conforms to an ISO 8601 date, e.g.protected boolean
isDateTime(String isoDate)
Returns true if the String conforms to an ISO 8601 date plus a time (hours, minutes, whole seconds and optionally fraction of a second) in UTC, e.g.boolean
isDefaultCatalog(String catalog)
If the database supports catalogs, test if a given catalog name equals to the default catalog of the current logged in user.boolean
isDefaultSchema(String catalog, String schema)
If the database supports schemas, test if a given combination of catalog and schema name equals to the default catalog and schema of the current logged in user.boolean
isFunction(String string)
boolean
isLiquibaseObject(DatabaseObject object)
boolean
isReservedWord(String string)
boolean
isSafeToRunUpdate()
Default implementation of theisSafeToRunUpdate()
method.boolean
isSystemObject(DatabaseObject example)
boolean
isSystemView(CatalogAndSchema schema, String viewName)
protected boolean
isTimeOnly(String isoDate)
Returns true if the String conforms to an ISO 8601 time (hours, minutes and whole seconds) in UTC, e.g.protected boolean
isTimestamp(String isoDate)
Returns true if the String conforms to an ISO 8601 date plus a timestamp (hours, minutes, seconds and at least one decimal fraction) in UTC, e.g.boolean
jdbcCallsCatalogsSchemas()
void
markChangeSetExecStatus(ChangeSet changeSet, ChangeSet.ExecType execType)
After the changeset has been ran against the database this method will update the change log table with the information.protected boolean
mustQuoteObjectName(String objectName, Class<? extends DatabaseObject> objectType)
Date
parseDate(String dateAsString)
String
quoteObject(String objectName, Class<? extends DatabaseObject> objectType)
void
removeRanStatus(ChangeSet changeSet)
boolean
requiresExplicitNullForColumns()
Does the database require explicit NULL for nullable columns?boolean
requiresPassword()
boolean
requiresUsername()
void
resetInternalState()
void
rollback()
void
saveRollbackStatement(Change change, List<SqlVisitor> sqlVisitors, Writer writer)
void
saveStatements(Change change, List<SqlVisitor> sqlVisitors, Writer writer)
AbstractJdbcDatabase
set(String key, Object value)
void
setAutoCommit(boolean b)
void
setCanCacheLiquibaseTableInfo(boolean canCacheLiquibaseTableInfo)
void
setCaseSensitive(Boolean caseSensitive)
void
setConnection(DatabaseConnection conn)
void
setCurrentDateTimeFunction(String function)
void
setDatabaseChangeLogLockTableName(String tableName)
Set the table name of the change log lock to the given table namevoid
setDatabaseChangeLogTableName(String tableName)
Sets the table name of the change log to the given table name.void
setDefaultCatalogName(String defaultCatalogName)
void
setDefaultSchemaName(String schemaName)
void
setLiquibaseCatalogName(String catalogName)
void
setLiquibaseSchemaName(String schemaName)
void
setLiquibaseTablespaceName(String tablespace)
void
setObjectQuotingStrategy(ObjectQuotingStrategy quotingStrategy)
void
setOutputDefaultCatalog(boolean outputDefaultCatalog)
void
setOutputDefaultSchema(boolean outputDefaultSchema)
Whether the default schema should be included in generated SQLprotected boolean
startsWithNumeric(String objectName)
boolean
supportsAutoIncrement()
boolean
supportsBatchUpdates()
Does the database support batched DML (INSERT/UPDATE/DELETE/MERGE/...) statements sent in a single call to the database?boolean
supportsCatalogInObjectName(Class<? extends DatabaseObject> type)
boolean
supportsCatalogs()
boolean
supportsDDLInTransaction()
Determines if the database supports DDL within a transaction or not.boolean
supportsDropTableCascadeConstraints()
boolean
supportsForeignKeyDisable()
boolean
supportsNotNullConstraintNames()
Does this database treat NOT NULL as an own kind of CONSTRAINT (in addition of simply being a column property)? This will affect the CONSTRAINT clause SQL generators.boolean
supportsPrimaryKeyNames()
boolean
supportsRestrictForeignKeys()
boolean
supportsSchemas()
boolean
supportsSequences()
Does the database type support sequence.void
tag(String tagString)
Tags the database changelog with the given string.String
toString()
String
unescapeDataTypeName(String dataTypeName)
String
unescapeDataTypeString(String dataTypeString)
ValidationErrors
validate()
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface liquibase.database.Database
addCompleteSqlToScope, afterUpdate, dropDatabaseObjects, failOnDefferable, getDefaultDriver, getDefaultPort, getDisplayName, getShortName, isCorrectDatabaseImplementation, supportsCreateIfNotExists, supportsDatabaseChangeLogHistory, supportsInitiallyDeferrableColumns, supportsTablespaces, temporarilySetObjectQuotingStrategy
-
Methods inherited from interface liquibase.servicelocator.PrioritizedService
getPriority
-
-
-
-
Field Detail
-
defaultCatalogName
protected String defaultCatalogName
-
defaultSchemaName
protected String defaultSchemaName
-
currentDateTimeFunction
protected String currentDateTimeFunction
-
sequenceNextValueFunction
protected String sequenceNextValueFunction
The sequence name will be substituted into the string e.g. NEXTVAL('%s')
-
sequenceCurrentValueFunction
protected String sequenceCurrentValueFunction
-
dateFunctions
protected List<DatabaseFunction> dateFunctions
-
defaultAutoIncrementStartWith
protected BigInteger defaultAutoIncrementStartWith
-
defaultAutoIncrementBy
protected BigInteger defaultAutoIncrementBy
-
unquotedObjectsAreUppercased
protected Boolean unquotedObjectsAreUppercased
-
quotingStrategy
protected ObjectQuotingStrategy quotingStrategy
-
caseSensitive
protected Boolean caseSensitive
-
-
Method Detail
-
getName
public String getName()
-
requiresPassword
public boolean requiresPassword()
- Specified by:
requiresPassword
in interfaceDatabase
-
requiresUsername
public boolean requiresUsername()
- Specified by:
requiresUsername
in interfaceDatabase
-
getContainingObjects
public DatabaseObject[] getContainingObjects()
-
getConnection
public DatabaseConnection getConnection()
- Specified by:
getConnection
in interfaceDatabase
-
setConnection
public void setConnection(DatabaseConnection conn)
- Specified by:
setConnection
in interfaceDatabase
-
getAutoCommitMode
public boolean getAutoCommitMode()
Description copied from interface:Database
Auto-commit mode to run in- Specified by:
getAutoCommitMode
in interfaceDatabase
-
addReservedWords
public final void addReservedWords(Collection<String> words)
- Specified by:
addReservedWords
in interfaceDatabase
-
supportsDDLInTransaction
public boolean supportsDDLInTransaction()
Determines if the database supports DDL within a transaction or not.- Specified by:
supportsDDLInTransaction
in interfaceDatabase
- Returns:
- True if the database supports DDL within a transaction, otherwise false.
-
getDatabaseProductName
public String getDatabaseProductName()
Description copied from interface:Database
Returns the name of the database product according to the underlying database.- Specified by:
getDatabaseProductName
in interfaceDatabase
-
getDefaultDatabaseProductName
protected abstract String getDefaultDatabaseProductName()
-
getDatabaseProductVersion
public String getDatabaseProductVersion() throws DatabaseException
- Specified by:
getDatabaseProductVersion
in interfaceDatabase
- Throws:
DatabaseException
-
getDatabaseMajorVersion
public int getDatabaseMajorVersion() throws DatabaseException
- Specified by:
getDatabaseMajorVersion
in interfaceDatabase
- Throws:
DatabaseException
-
getDatabaseMinorVersion
public int getDatabaseMinorVersion() throws DatabaseException
- Specified by:
getDatabaseMinorVersion
in interfaceDatabase
- Throws:
DatabaseException
-
getDefaultCatalogName
public String getDefaultCatalogName()
- Specified by:
getDefaultCatalogName
in interfaceDatabase
-
setDefaultCatalogName
public void setDefaultCatalogName(String defaultCatalogName)
- Specified by:
setDefaultCatalogName
in interfaceDatabase
-
getConnectionCatalogName
protected String getConnectionCatalogName() throws DatabaseException
- Throws:
DatabaseException
-
correctSchema
@Deprecated public CatalogAndSchema correctSchema(String catalog, String schema)
Deprecated.
-
correctSchema
@Deprecated public CatalogAndSchema correctSchema(CatalogAndSchema schema)
Deprecated.Description copied from interface:Database
Returns a new CatalogAndSchema adjusted for this database. Examples of adjustments include: fixes for case issues, replacing null schema or catalog names with the default values removing set schema or catalog names if they are not supported- Specified by:
correctSchema
in interfaceDatabase
-
correctObjectName
public String correctObjectName(String objectName, Class<? extends DatabaseObject> objectType)
Description copied from interface:Database
Fix the object name to the format the database expects, handling changes in case, etc.- Specified by:
correctObjectName
in interfaceDatabase
-
isCatalogOrSchemaType
protected boolean isCatalogOrSchemaType(Class<? extends DatabaseObject> objectType)
-
getDefaultSchema
public CatalogAndSchema getDefaultSchema()
- Specified by:
getDefaultSchema
in interfaceDatabase
-
getDefaultSchemaName
public String getDefaultSchemaName()
- Specified by:
getDefaultSchemaName
in interfaceDatabase
-
getDefaultScaleForNativeDataType
public Integer getDefaultScaleForNativeDataType(String nativeDataType)
Description copied from interface:Database
Returns the default precision for a given native data type, e.g. "datetime2" for Microsoft SQL Server.- Specified by:
getDefaultScaleForNativeDataType
in interfaceDatabase
- Parameters:
nativeDataType
- the name of the native data type (case-insensitive).- Returns:
- The default precision of the native data type, or null if the type is unknown to this database.
-
setDefaultSchemaName
public void setDefaultSchemaName(String schemaName)
- Specified by:
setDefaultSchemaName
in interfaceDatabase
-
getConnectionSchemaName
protected String getConnectionSchemaName()
Overwrite this method to get the default schema name for the connection. If you only need to change the statement that obtains the current schema then override- See Also:
getConnectionSchemaNameCallStatement()
-
getConnectionSchemaNameCallStatement
protected SqlStatement getConnectionSchemaNameCallStatement()
Used to obtain the connection schema name through a statement Override this method to change the statement. Only override this if getConnectionSchemaName is left unchanged or is using this method.- See Also:
getConnectionSchemaName()
-
getFetchSize
public Integer getFetchSize()
- Specified by:
getFetchSize
in interfaceDatabase
-
supportsSequences
public boolean supportsSequences()
Does the database type support sequence.- Specified by:
supportsSequences
in interfaceDatabase
-
supportsAutoIncrement
public boolean supportsAutoIncrement()
- Specified by:
supportsAutoIncrement
in interfaceDatabase
-
getDateLiteral
public String getDateLiteral(String isoDate)
Return a date literal with the same value as a string formatted using ISO 8601. Note: many databases accept date literals in ISO8601 format with the 'T' replaced with a space. Only databases which do not accept these strings should need to override this method. Implementation restriction: Currently, only the following subsets of ISO8601 are supported: yyyy-MM-dd hh:mm:ss yyyy-MM-ddThh:mm:ss- Specified by:
getDateLiteral
in interfaceDatabase
-
getDateTimeLiteral
public String getDateTimeLiteral(Timestamp date)
- Specified by:
getDateTimeLiteral
in interfaceDatabase
-
getDateLiteral
public String getDateLiteral(Date date)
- Specified by:
getDateLiteral
in interfaceDatabase
-
getTimeLiteral
public String getTimeLiteral(Time date)
- Specified by:
getTimeLiteral
in interfaceDatabase
-
getDateLiteral
public String getDateLiteral(Date date)
- Specified by:
getDateLiteral
in interfaceDatabase
-
parseDate
public Date parseDate(String dateAsString) throws DateParseException
- Specified by:
parseDate
in interfaceDatabase
- Throws:
DateParseException
-
isDateOnly
protected boolean isDateOnly(String isoDate)
Returns true if the String conforms to an ISO 8601 date, e.g. 2016-12-31. (Or, if it is a "NOW" or "TODAY" type value)- Parameters:
isoDate
- value to check.
-
isDateTime
protected boolean isDateTime(String isoDate)
Returns true if the String conforms to an ISO 8601 date plus a time (hours, minutes, whole seconds and optionally fraction of a second) in UTC, e.g. 2016-12-31T18:43:59. (Or, if it is a "NOW" or "TODAY" type value.) The "T" may be replaced by a space. CAUTION: Does NOT recognize values with a timezone information (...[+-Z]...)- Parameters:
isoDate
- value to check.
-
isTimestamp
protected boolean isTimestamp(String isoDate)
Returns true if the String conforms to an ISO 8601 date plus a timestamp (hours, minutes, seconds and at least one decimal fraction) in UTC, e.g. 2016-12-31T18:43:59.3 or 2016-12-31T18:43:59.345. (Or, if it is a "NOW" or "TODAY" type value). CAUTION: Does NOT recognize values with a timezone information (...[+-Z]...) The "T" may be replaced by a space.- Parameters:
isoDate
- value to check
-
isTimeOnly
protected boolean isTimeOnly(String isoDate)
Returns true if the String conforms to an ISO 8601 time (hours, minutes and whole seconds) in UTC, e.g. 18:43:59. (Or, if it is a "NOW" or "TODAY" type value). CAUTION: Does NOT recognize values with a timezone information (...[+-Z]...)- Parameters:
isoDate
- value to check
-
getLineComment
public String getLineComment()
Returns database-specific line comment string.- Specified by:
getLineComment
in interfaceDatabase
-
getAutoIncrementClause
public String getAutoIncrementClause(BigInteger startWith, BigInteger incrementBy, String generationType, Boolean defaultOnNull)
Description copied from interface:Database
Returns database-specific auto-increment DDL clause.- Specified by:
getAutoIncrementClause
in interfaceDatabase
-
getAutoIncrementClause
protected String getAutoIncrementClause()
-
getAutoIncrementClause
protected String getAutoIncrementClause(String generationType, Boolean defaultOnNull)
Default implementation. Intended for override in database specific cases
-
generateAutoIncrementStartWith
protected boolean generateAutoIncrementStartWith(BigInteger startWith)
-
generateAutoIncrementBy
protected boolean generateAutoIncrementBy(BigInteger incrementBy)
-
getAutoIncrementOpening
protected String getAutoIncrementOpening()
-
getAutoIncrementClosing
protected String getAutoIncrementClosing()
-
getAutoIncrementStartWithClause
protected String getAutoIncrementStartWithClause()
-
getAutoIncrementByClause
protected String getAutoIncrementByClause()
-
getConcatSql
public String getConcatSql(String... values)
Description copied from interface:Database
Returns SQL to concat the passed values.- Specified by:
getConcatSql
in interfaceDatabase
-
getDatabaseChangeLogTableName
public String getDatabaseChangeLogTableName()
- Specified by:
getDatabaseChangeLogTableName
in interfaceDatabase
-
setDatabaseChangeLogTableName
public void setDatabaseChangeLogTableName(String tableName)
Description copied from interface:Database
Sets the table name of the change log to the given table name.- Specified by:
setDatabaseChangeLogTableName
in interfaceDatabase
- Parameters:
tableName
- the name of the change log table to set
-
getRawDatabaseChangeLogTableName
protected String getRawDatabaseChangeLogTableName()
Method used by extensions to get raw dbcl table name
-
getDatabaseChangeLogLockTableName
public String getDatabaseChangeLogLockTableName()
- Specified by:
getDatabaseChangeLogLockTableName
in interfaceDatabase
-
setDatabaseChangeLogLockTableName
public void setDatabaseChangeLogLockTableName(String tableName)
Description copied from interface:Database
Set the table name of the change log lock to the given table name- Specified by:
setDatabaseChangeLogLockTableName
in interfaceDatabase
-
getRawDatabaseChangeLogLockTableName
protected String getRawDatabaseChangeLogLockTableName()
Method used by extensions to get raw dbcll table name
-
getLiquibaseTablespaceName
public String getLiquibaseTablespaceName()
- Specified by:
getLiquibaseTablespaceName
in interfaceDatabase
-
setLiquibaseTablespaceName
public void setLiquibaseTablespaceName(String tablespace)
- Specified by:
setLiquibaseTablespaceName
in interfaceDatabase
-
canCreateChangeLogTable
protected boolean canCreateChangeLogTable() throws DatabaseException
- Throws:
DatabaseException
-
setCanCacheLiquibaseTableInfo
public void setCanCacheLiquibaseTableInfo(boolean canCacheLiquibaseTableInfo)
- Specified by:
setCanCacheLiquibaseTableInfo
in interfaceDatabase
-
getLiquibaseCatalogName
public String getLiquibaseCatalogName()
- Specified by:
getLiquibaseCatalogName
in interfaceDatabase
-
setLiquibaseCatalogName
public void setLiquibaseCatalogName(String catalogName)
- Specified by:
setLiquibaseCatalogName
in interfaceDatabase
-
getLiquibaseSchemaName
public String getLiquibaseSchemaName()
- Specified by:
getLiquibaseSchemaName
in interfaceDatabase
-
setLiquibaseSchemaName
public void setLiquibaseSchemaName(String schemaName)
- Specified by:
setLiquibaseSchemaName
in interfaceDatabase
-
isCaseSensitive
public boolean isCaseSensitive()
- Specified by:
isCaseSensitive
in interfaceDatabase
-
setCaseSensitive
public void setCaseSensitive(Boolean caseSensitive)
-
isReservedWord
public boolean isReservedWord(String string)
- Specified by:
isReservedWord
in interfaceDatabase
-
startsWithNumeric
protected boolean startsWithNumeric(String objectName)
-
dropDatabaseObjects
public void dropDatabaseObjects(CatalogAndSchema schemaToDrop) throws LiquibaseException
Description copied from interface:Database
Drops all objects in a specified schema.- Specified by:
dropDatabaseObjects
in interfaceDatabase
- Parameters:
schemaToDrop
- schema (catalog+)schema to drop- Throws:
LiquibaseException
- if any problem occurs
-
supportsDropTableCascadeConstraints
public boolean supportsDropTableCascadeConstraints()
- Specified by:
supportsDropTableCascadeConstraints
in interfaceDatabase
-
isSystemObject
public boolean isSystemObject(DatabaseObject example)
- Specified by:
isSystemObject
in interfaceDatabase
-
isSystemView
public boolean isSystemView(CatalogAndSchema schema, String viewName)
-
isLiquibaseObject
public boolean isLiquibaseObject(DatabaseObject object)
- Specified by:
isLiquibaseObject
in interfaceDatabase
-
tag
public void tag(String tagString) throws DatabaseException
Description copied from interface:Database
Tags the database changelog with the given string.- Specified by:
tag
in interfaceDatabase
- Throws:
DatabaseException
-
doesTagExist
public boolean doesTagExist(String tag) throws DatabaseException
- Specified by:
doesTagExist
in interfaceDatabase
- Throws:
DatabaseException
-
getViewDefinition
public String getViewDefinition(CatalogAndSchema schema, String viewName) throws DatabaseException
- Specified by:
getViewDefinition
in interfaceDatabase
- Throws:
DatabaseException
-
escapeTableName
public String escapeTableName(String catalogName, String schemaName, String tableName)
- Specified by:
escapeTableName
in interfaceDatabase
-
escapeObjectName
public String escapeObjectName(String catalogName, String schemaName, String objectName, Class<? extends DatabaseObject> objectType)
- Specified by:
escapeObjectName
in interfaceDatabase
-
escapeObjectName
public String escapeObjectName(String objectName, Class<? extends DatabaseObject> objectType)
- Specified by:
escapeObjectName
in interfaceDatabase
-
mustQuoteObjectName
protected boolean mustQuoteObjectName(String objectName, Class<? extends DatabaseObject> objectType)
-
getQuotingStartCharacter
protected String getQuotingStartCharacter()
-
getQuotingEndCharacter
protected String getQuotingEndCharacter()
-
getQuotingEndReplacement
protected String getQuotingEndReplacement()
-
quoteObject
public String quoteObject(String objectName, Class<? extends DatabaseObject> objectType)
-
escapeIndexName
public String escapeIndexName(String catalogName, String schemaName, String indexName)
- Specified by:
escapeIndexName
in interfaceDatabase
-
escapeSequenceName
public String escapeSequenceName(String catalogName, String schemaName, String sequenceName)
- Specified by:
escapeSequenceName
in interfaceDatabase
-
escapeConstraintName
public String escapeConstraintName(String constraintName)
- Specified by:
escapeConstraintName
in interfaceDatabase
-
escapeColumnName
public String escapeColumnName(String catalogName, String schemaName, String tableName, String columnName)
Description copied from interface:Database
Escapes a single column name in a database-dependent manner so reserved words can be used as a column name (i.e. "return").- Specified by:
escapeColumnName
in interfaceDatabase
columnName
- column name- Returns:
- escaped column name
-
escapeColumnName
public String escapeColumnName(String catalogName, String schemaName, String tableName, String columnName, boolean quoteNamesThatMayBeFunctions)
Description copied from interface:Database
Similar toDatabase.escapeColumnName(String, String, String, String)
but allows control over whether function-like names should be left unquoted.- Specified by:
escapeColumnName
in interfaceDatabase
-
escapeColumnNameList
public String escapeColumnNameList(String columnNames)
Description copied from interface:Database
Escapes a list of column names in a database-dependent manner so reserved words can be used as a column name (i.e. "return").- Specified by:
escapeColumnNameList
in interfaceDatabase
- Parameters:
columnNames
- list of column names- Returns:
- escaped column name list
-
supportsSchemas
public boolean supportsSchemas()
- Specified by:
supportsSchemas
in interfaceDatabase
-
supportsCatalogs
public boolean supportsCatalogs()
- Specified by:
supportsCatalogs
in interfaceDatabase
-
jdbcCallsCatalogsSchemas
public boolean jdbcCallsCatalogsSchemas()
-
supportsCatalogInObjectName
public boolean supportsCatalogInObjectName(Class<? extends DatabaseObject> type)
- Specified by:
supportsCatalogInObjectName
in interfaceDatabase
-
generatePrimaryKeyName
public String generatePrimaryKeyName(String tableName)
- Specified by:
generatePrimaryKeyName
in interfaceDatabase
-
escapeViewName
public String escapeViewName(String catalogName, String schemaName, String viewName)
- Specified by:
escapeViewName
in interfaceDatabase
-
getRunStatus
public ChangeSet.RunStatus getRunStatus(ChangeSet changeSet) throws DatabaseException, DatabaseHistoryException
Description copied from interface:Database
Returns the run status for the given ChangeSet- Specified by:
getRunStatus
in interfaceDatabase
- Throws:
DatabaseException
DatabaseHistoryException
-
getRanChangeSet
public RanChangeSet getRanChangeSet(ChangeSet changeSet) throws DatabaseException, DatabaseHistoryException
- Specified by:
getRanChangeSet
in interfaceDatabase
- Throws:
DatabaseException
DatabaseHistoryException
-
getRanChangeSetList
public List<RanChangeSet> getRanChangeSetList() throws DatabaseException
Description copied from interface:Database
Returns the ChangeSets that have been run against the current database.- Specified by:
getRanChangeSetList
in interfaceDatabase
- Throws:
DatabaseException
-
getRanDate
public Date getRanDate(ChangeSet changeSet) throws DatabaseException, DatabaseHistoryException
- Specified by:
getRanDate
in interfaceDatabase
- Throws:
DatabaseException
DatabaseHistoryException
-
markChangeSetExecStatus
public void markChangeSetExecStatus(ChangeSet changeSet, ChangeSet.ExecType execType) throws DatabaseException
Description copied from interface:Database
After the changeset has been ran against the database this method will update the change log table with the information.- Specified by:
markChangeSetExecStatus
in interfaceDatabase
- Throws:
DatabaseException
-
removeRanStatus
public void removeRanStatus(ChangeSet changeSet) throws DatabaseException
- Specified by:
removeRanStatus
in interfaceDatabase
- Throws:
DatabaseException
-
escapeStringForDatabase
public String escapeStringForDatabase(String string)
- Specified by:
escapeStringForDatabase
in interfaceDatabase
-
commit
public void commit() throws DatabaseException
- Specified by:
commit
in interfaceDatabase
- Throws:
DatabaseException
-
rollback
public void rollback() throws DatabaseException
- Specified by:
rollback
in interfaceDatabase
- Throws:
DatabaseException
-
close
public void close() throws DatabaseException
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceDatabase
- Throws:
DatabaseException
-
supportsRestrictForeignKeys
public boolean supportsRestrictForeignKeys()
- Specified by:
supportsRestrictForeignKeys
in interfaceDatabase
-
isAutoCommit
public boolean isAutoCommit() throws DatabaseException
- Specified by:
isAutoCommit
in interfaceDatabase
- Throws:
DatabaseException
-
setAutoCommit
public void setAutoCommit(boolean b) throws DatabaseException
- Specified by:
setAutoCommit
in interfaceDatabase
- Throws:
DatabaseException
-
isSafeToRunUpdate
public boolean isSafeToRunUpdate() throws DatabaseException
Default implementation of theisSafeToRunUpdate()
method. It checks if the database connection URL contains "localhost" or "127.0.0.1". If the database returns anull
URL, the method returnsfalse
because it's not known whether it's safe to run the update.- Specified by:
isSafeToRunUpdate
in interfaceDatabase
- Returns:
true
if the database connection URL contains "localhost" or "127.0.0.1", otherwisefalse
.- Throws:
DatabaseException
- if there is an error accessing the database
-
executeStatements
public void executeStatements(Change change, DatabaseChangeLog changeLog, List<SqlVisitor> sqlVisitors) throws LiquibaseException
- Specified by:
executeStatements
in interfaceDatabase
- Throws:
LiquibaseException
-
execute
public void execute(SqlStatement[] statements, List<SqlVisitor> sqlVisitors) throws LiquibaseException
- Specified by:
execute
in interfaceDatabase
- Throws:
LiquibaseException
-
saveStatements
public void saveStatements(Change change, List<SqlVisitor> sqlVisitors, Writer writer) throws IOException
- Specified by:
saveStatements
in interfaceDatabase
- Throws:
IOException
-
executeRollbackStatements
public void executeRollbackStatements(SqlStatement[] statements, List<SqlVisitor> sqlVisitors) throws LiquibaseException
- Specified by:
executeRollbackStatements
in interfaceDatabase
- Throws:
LiquibaseException
-
executeRollbackStatements
public void executeRollbackStatements(Change change, List<SqlVisitor> sqlVisitors) throws LiquibaseException
- Specified by:
executeRollbackStatements
in interfaceDatabase
- Throws:
LiquibaseException
-
saveRollbackStatement
public void saveRollbackStatement(Change change, List<SqlVisitor> sqlVisitors, Writer writer) throws IOException, LiquibaseException
- Specified by:
saveRollbackStatement
in interfaceDatabase
- Throws:
IOException
LiquibaseException
-
filterRollbackVisitors
protected List<SqlVisitor> filterRollbackVisitors(List<SqlVisitor> visitors)
Takes a list of SqlVisitors and returns a new list with only the SqlVisitors set to apply to rollbacks
-
getDateFunctions
public List<DatabaseFunction> getDateFunctions()
Description copied from interface:Database
Returns list of database native date functions- Specified by:
getDateFunctions
in interfaceDatabase
-
isFunction
public boolean isFunction(String string)
- Specified by:
isFunction
in interfaceDatabase
-
resetInternalState
public void resetInternalState()
- Specified by:
resetInternalState
in interfaceDatabase
-
supportsForeignKeyDisable
public boolean supportsForeignKeyDisable()
- Specified by:
supportsForeignKeyDisable
in interfaceDatabase
-
disableForeignKeyChecks
public boolean disableForeignKeyChecks() throws DatabaseException
- Specified by:
disableForeignKeyChecks
in interfaceDatabase
- Throws:
DatabaseException
-
enableForeignKeyChecks
public void enableForeignKeyChecks() throws DatabaseException
- Specified by:
enableForeignKeyChecks
in interfaceDatabase
- Throws:
DatabaseException
-
createsIndexesForForeignKeys
public boolean createsIndexesForForeignKeys()
- Specified by:
createsIndexesForForeignKeys
in interfaceDatabase
-
getDataTypeMaxParameters
public int getDataTypeMaxParameters(String dataTypeName)
- Specified by:
getDataTypeMaxParameters
in interfaceDatabase
-
getSchemaFromJdbcInfo
public CatalogAndSchema getSchemaFromJdbcInfo(String rawCatalogName, String rawSchemaName)
-
getJdbcCatalogName
public String getJdbcCatalogName(CatalogAndSchema schema)
-
getJdbcSchemaName
public String getJdbcSchemaName(CatalogAndSchema schema)
-
dataTypeIsNotModifiable
public boolean dataTypeIsNotModifiable(String typeName)
Description copied from interface:Database
Types like int4 in postgres cannot have a modifier. e.g. int4(10) Checks whether the type is allowed to have a modifier- Specified by:
dataTypeIsNotModifiable
in interfaceDatabase
- Parameters:
typeName
- type name- Returns:
- Whether data type can have a modifier
-
getObjectQuotingStrategy
public ObjectQuotingStrategy getObjectQuotingStrategy()
- Specified by:
getObjectQuotingStrategy
in interfaceDatabase
-
setObjectQuotingStrategy
public void setObjectQuotingStrategy(ObjectQuotingStrategy quotingStrategy)
- Specified by:
setObjectQuotingStrategy
in interfaceDatabase
-
generateDatabaseFunctionValue
public String generateDatabaseFunctionValue(DatabaseFunction databaseFunction)
Description copied from interface:Database
Some function names are placeholders that need to be replaced with the specific database value. e.g. nextSequenceValue(sequenceName) should be replaced with NEXT_VAL('sequenceName') for Postgresql- Specified by:
generateDatabaseFunctionValue
in interfaceDatabase
- Parameters:
databaseFunction
- database function to check.- Returns:
- the string value to use for an update or generate
-
isCurrentTimeFunction
protected boolean isCurrentTimeFunction(String functionValue)
-
getCurrentDateTimeFunction
public String getCurrentDateTimeFunction()
Description copied from interface:Database
Returns database-specific function for generating the current date/time.- Specified by:
getCurrentDateTimeFunction
in interfaceDatabase
-
setCurrentDateTimeFunction
public void setCurrentDateTimeFunction(String function)
- Specified by:
setCurrentDateTimeFunction
in interfaceDatabase
-
isDefaultSchema
public boolean isDefaultSchema(String catalog, String schema)
Description copied from interface:Database
If the database supports schemas, test if a given combination of catalog and schema name equals to the default catalog and schema of the current logged in user.- Specified by:
isDefaultSchema
in interfaceDatabase
- Parameters:
catalog
- catalog name to be testedschema
- schema name to be tested- Returns:
- if the database supports catalogs: true if it is the default schema, false if not. If it does not support schemas, the behaviour of this method is undefined (please call supportsSchemas first!)
-
isDefaultCatalog
public boolean isDefaultCatalog(String catalog)
Description copied from interface:Database
If the database supports catalogs, test if a given catalog name equals to the default catalog of the current logged in user.- Specified by:
isDefaultCatalog
in interfaceDatabase
- Parameters:
catalog
- catalog name to be tested- Returns:
- if the database supports catalogs: true if it is the default catalog, false if not. If it does not support catalogs, the behaviour of this method is undefined (please call supportsCatalog first!)
-
getOutputDefaultSchema
public boolean getOutputDefaultSchema()
Description copied from interface:Database
Should the schema be included in identifiers even if it is the default schema?- Specified by:
getOutputDefaultSchema
in interfaceDatabase
- Returns:
- true (if the schema should be included in every case) or false (omit if default schema)
-
setOutputDefaultSchema
public void setOutputDefaultSchema(boolean outputDefaultSchema)
Description copied from interface:Database
Whether the default schema should be included in generated SQL- Specified by:
setOutputDefaultSchema
in interfaceDatabase
-
getOutputDefaultCatalog
public boolean getOutputDefaultCatalog()
- Specified by:
getOutputDefaultCatalog
in interfaceDatabase
-
setOutputDefaultCatalog
public void setOutputDefaultCatalog(boolean outputDefaultCatalog)
- Specified by:
setOutputDefaultCatalog
in interfaceDatabase
-
supportsPrimaryKeyNames
public boolean supportsPrimaryKeyNames()
- Specified by:
supportsPrimaryKeyNames
in interfaceDatabase
-
getSystemSchema
public String getSystemSchema()
- Specified by:
getSystemSchema
in interfaceDatabase
-
escapeDataTypeName
public String escapeDataTypeName(String dataTypeName)
- Specified by:
escapeDataTypeName
in interfaceDatabase
-
unescapeDataTypeName
public String unescapeDataTypeName(String dataTypeName)
- Specified by:
unescapeDataTypeName
in interfaceDatabase
-
unescapeDataTypeString
public String unescapeDataTypeString(String dataTypeString)
- Specified by:
unescapeDataTypeString
in interfaceDatabase
-
set
public AbstractJdbcDatabase set(String key, Object value)
-
validate
public ValidationErrors validate()
-
getMaxFractionalDigitsForTimestamp
public int getMaxFractionalDigitsForTimestamp()
Most relational databases support 9 fractional digits, and subclasses must overwrite this method if they support less than that.- Specified by:
getMaxFractionalDigitsForTimestamp
in interfaceDatabase
- Returns:
- the maximum number of supported fractional digits in TIMESTAMP columns
-
getDefaultFractionalDigitsForTimestamp
public int getDefaultFractionalDigitsForTimestamp()
SQL Standard (Foundation) says: "...ifis not specified, then 6 is implicit." - Specified by:
getDefaultFractionalDigitsForTimestamp
in interfaceDatabase
- Returns:
- the default precision / number of maximum digits in a timestamp if nothing else is specified.
-
supportsBatchUpdates
public boolean supportsBatchUpdates() throws DatabaseException
Description copied from interface:Database
Does the database support batched DML (INSERT/UPDATE/DELETE/MERGE/...) statements sent in a single call to the database?- Specified by:
supportsBatchUpdates
in interfaceDatabase
- Returns:
- true if the database has this capability for all DML statements, false in all other cases
- Throws:
DatabaseException
-
supportsNotNullConstraintNames
public boolean supportsNotNullConstraintNames()
Description copied from interface:Database
Does this database treat NOT NULL as an own kind of CONSTRAINT (in addition of simply being a column property)? This will affect the CONSTRAINT clause SQL generators.- Specified by:
supportsNotNullConstraintNames
in interfaceDatabase
- Returns:
- true if the database supports naming NOT NULL constraints, false if not.
-
requiresExplicitNullForColumns
public boolean requiresExplicitNullForColumns()
Description copied from interface:Database
Does the database require explicit NULL for nullable columns?- Specified by:
requiresExplicitNullForColumns
in interfaceDatabase
- Returns:
- true if the database behaves incorrectly if NULL is not explicitly specified, false if it behaves like any good RDBMS should.
-
getSchemaAndCatalogCase
public CatalogAndSchema.CatalogAndSchemaCase getSchemaAndCatalogCase()
This logic is used when db support catalogs- Specified by:
getSchemaAndCatalogCase
in interfaceDatabase
- Returns:
- UPPER_CASE by default
-
-