Package liquibase.database.core
Class MSSQLDatabase
java.lang.Object
liquibase.database.AbstractJdbcDatabase
liquibase.database.core.MSSQLDatabase
- All Implemented Interfaces:
AutoCloseable,Database,PrioritizedService
Encapsulates MS-SQL database support.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classstatic class -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Patternprotected static final intstatic final StringFields inherited from class liquibase.database.AbstractJdbcDatabase
caseSensitive, currentDateTimeFunction, dateFunctions, defaultAutoIncrementBy, defaultAutoIncrementStartWith, defaultCatalogName, defaultSchemaName, quotingStrategy, sequenceCurrentValueFunction, sequenceNextValueFunction, unmodifiableDataTypes, unquotedObjectsAreUppercasedFields inherited from interface liquibase.database.Database
COMPLETE_SQL_SCOPE_KEY, IGNORE_MISSING_REFERENCES_KEYFields inherited from interface liquibase.servicelocator.PrioritizedService
COMPARATOR, PRIORITY_DATABASE, PRIORITY_DEFAULT -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected static List<SqlVisitor>addSqlVisitors(List<SqlVisitor> sqlVisitors) intbyteSize(int charCount) Calculates the number of bytes needed to hold the given number of characters.escapeDataTypeName(String dataTypeName) escapeObjectName(String objectName, Class<? extends DatabaseObject> objectType) escapeObjectName(String catalogName, String schemaName, String objectName, Class<? extends DatabaseObject> objectType) escapeTableName(String catalogName, String schemaName, String tableName) voidexecuteStatements(Change change, DatabaseChangeLog changeLog, List<SqlVisitor> sqlVisitors) protected booleangenerateAutoIncrementBy(BigInteger incrementBy) protected booleangenerateAutoIncrementStartWith(BigInteger startWith) generateDefaultConstraintName(String tableName, String columnName) protected Stringprotected Stringprotected StringgetConcatSql(String... values) Returns SQL to concat the passed values.protected SqlStatementUsed to obtain the connection schema name through a statement Override this method to change the statement.intgetDataTypeMaxParameters(String dataTypeName) getDateLiteral(String isoDate) Return a date literal with the same value as a string formatted using ISO 8601.protected StringgetDefaultDriver(String url) If this database understands the given url, return the default driver class name.intSQL Standard (Foundation) says: "...ifis not specified, then 6 is implicit." getDefaultScaleForNativeDataType(String nativeDataType) Returns the default precision for a given native data type, e.g.Determines the capabilities ("Edition") of the SQL Server database.getJdbcSchemaName(CatalogAndSchema schema) intprotected Stringprotected Stringprotected StringReturns an all-lower-case short name of the product.Returns system (undroppable) views.Returns system (undroppable) views.getViewDefinition(CatalogAndSchema schema, String viewName) booleanReturns true if the connected MS SQL instance is a Microsoft Cloud ("Azure")-hosted instance of MSSQL.booleanbooleanIs this AbstractDatabase subclass the correct one to use for the given connection.booleanisSystemObject(DatabaseObject example) booleanDetermines if the SQL Server instance assigns Unicode data types (e.g. nvarchar) to strings.voidsetDefaultSchemaName(String schemaName) booleansupports(Class<? extends DatabaseObject> object) Whether this database supports the specified object type.booleansupportsCatalogInObjectName(Class<? extends DatabaseObject> type) booleanDoes the particular database implementation support the database changelog history feature and associated table?booleanbooleanReturns whether this database support initially deferrable columns.booleanbooleanDoes the database type support sequence.booleanunescapeDataTypeName(String dataTypeName) unescapeDataTypeString(String dataTypeString) Methods inherited from class liquibase.database.AbstractJdbcDatabase
addReservedWords, canCreateChangeLogTable, close, commit, correctObjectName, correctSchema, correctSchema, createsIndexesForForeignKeys, dataTypeIsNotModifiable, disableForeignKeyChecks, doesTagExist, dropDatabaseObjects, enableForeignKeyChecks, equals, escapeColumnName, escapeColumnName, escapeColumnNameList, escapeConstraintName, escapeIndexName, escapeSequenceName, escapeStringForDatabase, escapeViewName, execute, executeRollbackStatements, executeRollbackStatements, filterRollbackVisitors, generateDatabaseFunctionValue, generatePrimaryKeyName, get, getAutoCommitMode, getAutoIncrementClause, getAutoIncrementClause, getAutoIncrementClosing, getAutoIncrementOpening, getConnection, getConnectionCatalogName, getConnectionSchemaName, getContainingObjects, getCurrentDateTimeFunction, getDatabaseChangeLogLockTableName, getDatabaseChangeLogTableName, getDatabaseMajorVersion, getDatabaseMinorVersion, getDatabaseProductName, getDatabaseProductVersion, getDateFunctions, getDateLiteral, getDateLiteral, getDateTimeLiteral, getDefaultSchema, getDefaultSchemaName, getFetchSize, getJdbcCatalogName, getJdbcCatalogName, getJdbcSchemaName, getLineComment, getLiquibaseCatalogName, getLiquibaseSchemaName, getLiquibaseTablespaceName, getMaxFractionalDigitsForTimestamp, getName, getObjectQuotingStrategy, getOutputDefaultCatalog, getOutputDefaultSchema, getRanChangeSet, getRanChangeSetList, getRanDate, getRawDatabaseChangeLogLockTableName, getRawDatabaseChangeLogTableName, getRunStatus, getSchemaAndCatalogCase, getSchemaFromJdbcInfo, getSystemSchema, getTimeLiteral, hashCode, isAutoCommit, isCatalogOrSchemaType, isCurrentTimeFunction, isDateOnly, isDateTime, isDefaultCatalog, isDefaultSchema, isFunction, isLiquibaseObject, isReservedWord, isSafeToRunUpdate, isSystemView, isTimeOnly, isTimestamp, jdbcCallsCatalogsSchemas, markChangeSetExecStatus, mustQuoteObjectName, parseDate, quoteObject, removeRanStatus, requiresExplicitNullForColumns, requiresPassword, requiresUsername, resetInternalState, rollback, saveRollbackStatement, saveStatements, set, setAutoCommit, setCanCacheLiquibaseTableInfo, setCaseSensitive, setConnection, setCurrentDateTimeFunction, setDatabaseChangeLogLockTableName, setDatabaseChangeLogTableName, setDefaultCatalogName, setLiquibaseCatalogName, setLiquibaseSchemaName, setLiquibaseTablespaceName, setObjectQuotingStrategy, setOutputDefaultCatalog, setOutputDefaultSchema, setPreviousAutoCommit, startsWithNumeric, supportsAutoIncrement, supportsBatchUpdates, supportsCatalogs, supportsDDLInTransaction, supportsForeignKeyDisable, supportsNotNullConstraintNames, supportsPrimaryKeyNames, supportsSchemas, tag, toString, validateMethods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface liquibase.database.Database
addCompleteSqlToScope, afterUpdate, checkDatabaseConnection, dropDatabaseObjects, escapeForLike, failOnDefferable, generateConnectCommandSuccessMessage, getDisplayName, supportsCreateIfNotExists, temporarilySetObjectQuotingStrategy
-
Field Details
-
PRODUCT_NAME
- See Also:
-
CHAR_PATTERN
-
MSSQL_DEFAULT_TCP_PORT
protected static final int MSSQL_DEFAULT_TCP_PORT- See Also:
-
systemTablesAndViews
-
-
Constructor Details
-
MSSQLDatabase
public MSSQLDatabase()
-
-
Method Details
-
executeStatements
public void executeStatements(Change change, DatabaseChangeLog changeLog, List<SqlVisitor> sqlVisitors) throws LiquibaseException - Specified by:
executeStatementsin interfaceDatabase- Overrides:
executeStatementsin classAbstractJdbcDatabase- Throws:
LiquibaseException
-
addSqlVisitors
-
getDefaultScaleForNativeDataType
Description copied from interface:DatabaseReturns the default precision for a given native data type, e.g. "datetime2" for Microsoft SQL Server.- Specified by:
getDefaultScaleForNativeDataTypein interfaceDatabase- Overrides:
getDefaultScaleForNativeDataTypein classAbstractJdbcDatabase- 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
- Specified by:
setDefaultSchemaNamein interfaceDatabase- Overrides:
setDefaultSchemaNamein classAbstractJdbcDatabase
-
getShortName
Description copied from interface:DatabaseReturns an all-lower-case short name of the product. Used for end-user selecting of database type such as the DBMS precondition. -
getPriority
public int getPriority() -
getDefaultDatabaseProductName
- Specified by:
getDefaultDatabaseProductNamein classAbstractJdbcDatabase
-
getDefaultPort
-
getSystemViews
Description copied from class:AbstractJdbcDatabaseReturns system (undroppable) views.- Overrides:
getSystemViewsin classAbstractJdbcDatabase
-
getSystemTables
Description copied from class:AbstractJdbcDatabaseReturns system (undroppable) views.- Overrides:
getSystemTablesin classAbstractJdbcDatabase
-
supportsInitiallyDeferrableColumns
public boolean supportsInitiallyDeferrableColumns()Description copied from interface:DatabaseReturns whether this database support initially deferrable columns. -
supports
Description copied from interface:DatabaseWhether this database supports the specified object type. It is invoking the deprecated methods to ensure that extensions are not broken, but once those are removed it will return only true- Parameters:
object- the object type to check- Returns:
- true if the database supports the object type, false otherwise
-
supportsSequences
public boolean supportsSequences()Description copied from class:AbstractJdbcDatabaseDoes the database type support sequence.- Specified by:
supportsSequencesin interfaceDatabase- Overrides:
supportsSequencesin classAbstractJdbcDatabase
-
isCorrectDatabaseImplementation
Description copied from interface:DatabaseIs this AbstractDatabase subclass the correct one to use for the given connection.- Throws:
DatabaseException
-
getDefaultDriver
Description copied from interface:DatabaseIf this database understands the given url, return the default driver class name. Otherwise return null. -
getAutoIncrementClause
- Overrides:
getAutoIncrementClausein classAbstractJdbcDatabase
-
generateAutoIncrementStartWith
- Overrides:
generateAutoIncrementStartWithin classAbstractJdbcDatabase
-
generateAutoIncrementBy
- Overrides:
generateAutoIncrementByin classAbstractJdbcDatabase
-
getAutoIncrementStartWithClause
- Overrides:
getAutoIncrementStartWithClausein classAbstractJdbcDatabase
-
getAutoIncrementByClause
- Overrides:
getAutoIncrementByClausein classAbstractJdbcDatabase
-
getDefaultCatalogName
- Specified by:
getDefaultCatalogNamein interfaceDatabase- Overrides:
getDefaultCatalogNamein classAbstractJdbcDatabase
-
getConnectionSchemaNameCallStatement
Description copied from class:AbstractJdbcDatabaseUsed 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.- Overrides:
getConnectionSchemaNameCallStatementin classAbstractJdbcDatabase- See Also:
-
getConcatSql
Description copied from interface:DatabaseReturns SQL to concat the passed values.- Specified by:
getConcatSqlin interfaceDatabase- Overrides:
getConcatSqlin classAbstractJdbcDatabase
-
escapeTableName
- Specified by:
escapeTableNamein interfaceDatabase- Overrides:
escapeTableNamein classAbstractJdbcDatabase
-
supportsTablespaces
public boolean supportsTablespaces() -
isSystemObject
- Specified by:
isSystemObjectin interfaceDatabase- Overrides:
isSystemObjectin classAbstractJdbcDatabase
-
generateDefaultConstraintName
-
escapeObjectName
- Specified by:
escapeObjectNamein interfaceDatabase- Overrides:
escapeObjectNamein classAbstractJdbcDatabase
-
getDateLiteral
Description copied from class:AbstractJdbcDatabaseReturn 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:
getDateLiteralin interfaceDatabase- Overrides:
getDateLiteralin classAbstractJdbcDatabase
-
supportsRestrictForeignKeys
public boolean supportsRestrictForeignKeys()- Specified by:
supportsRestrictForeignKeysin interfaceDatabase- Overrides:
supportsRestrictForeignKeysin classAbstractJdbcDatabase
-
supportsDropTableCascadeConstraints
public boolean supportsDropTableCascadeConstraints()- Specified by:
supportsDropTableCascadeConstraintsin interfaceDatabase- Overrides:
supportsDropTableCascadeConstraintsin classAbstractJdbcDatabase
-
supportsCatalogInObjectName
- Specified by:
supportsCatalogInObjectNamein interfaceDatabase- Overrides:
supportsCatalogInObjectNamein classAbstractJdbcDatabase
-
getViewDefinition
- Specified by:
getViewDefinitionin interfaceDatabase- Overrides:
getViewDefinitionin classAbstractJdbcDatabase- Throws:
DatabaseException
-
escapeObjectName
public String escapeObjectName(String catalogName, String schemaName, String objectName, Class<? extends DatabaseObject> objectType) - Specified by:
escapeObjectNamein interfaceDatabase- Overrides:
escapeObjectNamein classAbstractJdbcDatabase
-
getJdbcSchemaName
- Overrides:
getJdbcSchemaNamein classAbstractJdbcDatabase
-
isCaseSensitive
public boolean isCaseSensitive()- Specified by:
isCaseSensitivein interfaceDatabase- Overrides:
isCaseSensitivein classAbstractJdbcDatabase
-
getDataTypeMaxParameters
- Specified by:
getDataTypeMaxParametersin interfaceDatabase- Overrides:
getDataTypeMaxParametersin classAbstractJdbcDatabase
-
escapeDataTypeName
- Specified by:
escapeDataTypeNamein interfaceDatabase- Overrides:
escapeDataTypeNamein classAbstractJdbcDatabase
-
unescapeDataTypeName
- Specified by:
unescapeDataTypeNamein interfaceDatabase- Overrides:
unescapeDataTypeNamein classAbstractJdbcDatabase
-
unescapeDataTypeString
- Specified by:
unescapeDataTypeStringin interfaceDatabase- Overrides:
unescapeDataTypeStringin classAbstractJdbcDatabase
-
sendsStringParametersAsUnicode
public boolean sendsStringParametersAsUnicode()Determines if the SQL Server instance assigns Unicode data types (e.g. nvarchar) to strings.- Returns:
- true if the SQL Server instance uses Unicode types by default, false if not.
-
isAzureDb
public boolean isAzureDb()Returns true if the connected MS SQL instance is a Microsoft Cloud ("Azure")-hosted instance of MSSQL.- Returns:
- true if instance runs in Microsoft Azure, false otherwise
-
getEngineEdition
Determines the capabilities ("Edition") of the SQL Server database. Possible values are currently "Personal", "Standard", "Enterprise" (Developer Edition is also reported as Enterprise), "Express" or "Azure".- Returns:
- one of the strings above
-
getQuotingStartCharacter
- Overrides:
getQuotingStartCharacterin classAbstractJdbcDatabase
-
getQuotingEndCharacter
- Overrides:
getQuotingEndCharacterin classAbstractJdbcDatabase
-
getDefaultFractionalDigitsForTimestamp
public int getDefaultFractionalDigitsForTimestamp()Description copied from class:AbstractJdbcDatabaseSQL Standard (Foundation) says: "...ifis not specified, then 6 is implicit." - Specified by:
getDefaultFractionalDigitsForTimestampin interfaceDatabase- Overrides:
getDefaultFractionalDigitsForTimestampin classAbstractJdbcDatabase- Returns:
- the default precision / number of maximum digits in a timestamp if nothing else is specified.
-
getQuotingEndReplacement
- Overrides:
getQuotingEndReplacementin classAbstractJdbcDatabase
-
supportsDatabaseChangeLogHistory
public boolean supportsDatabaseChangeLogHistory()Description copied from interface:DatabaseDoes the particular database implementation support the database changelog history feature and associated table?- Returns:
- true if supported, false otherwise
-
byteSize
public int byteSize(int charCount) Calculates the number of bytes needed to hold the given number of characters.- Parameters:
charCount- The number of characters to hold.- Returns:
- The number of bytes needed to hold the given number of characters.
-