liquibase.sqlgenerator
Interface SqlGenerator<StatementType extends SqlStatement>
- Type Parameters:
StatementType
- Used to specify which type of SqlStatement this generator supports. If it supports multiple SqlStatement
types, pass SqlStatement. The SqlGeneratorFactory will use this paramter to augment the response from the
supports() method
- All Superinterfaces:
- PrioritizedService
- All Known Implementing Classes:
- AbstractSqlGenerator, AddAutoIncrementGenerator, AddAutoIncrementGeneratorDB2, AddAutoIncrementGeneratorHsqlH2, AddAutoIncrementGeneratorInformix, AddAutoIncrementGeneratorSQLite, AddColumnGenerator, AddColumnGeneratorDefaultClauseBeforeNotNull, AddColumnGeneratorSQLite, AddDefaultValueGenerator, AddDefaultValueGeneratorDerby, AddDefaultValueGeneratorInformix, AddDefaultValueGeneratorMaxDB, AddDefaultValueGeneratorMSSQL, AddDefaultValueGeneratorMySQL, AddDefaultValueGeneratorOracle, AddDefaultValueGeneratorSybase, AddDefaultValueGeneratorSybaseASA, AddDefaultValueSQLite, AddForeignKeyConstraintGenerator, AddPrimaryKeyGenerator, AddPrimaryKeyGeneratorInformix, AddUniqueConstraintGenerator, AddUniqueConstraintGeneratorInformix, AddUniqueConstraintGeneratorTDS, AlterSequenceGenerator, ClearDatabaseChangeLogTableGenerator, CommentGenerator, CopyRowsGenerator, CreateDatabaseChangeLogLockTableGenerator, CreateDatabaseChangeLogTableGenerator, CreateDatabaseChangeLogTableGeneratorSybase, CreateIndexGenerator, CreateSequenceGenerator, CreateTableGenerator, CreateViewGenerator, DeleteGenerator, DropColumnGenerator, DropDefaultValueGenerator, DropForeignKeyConstraintGenerator, DropIndexGenerator, DropPrimaryKeyGenerator, DropSequenceGenerator, DropTableGenerator, DropUniqueConstraintGenerator, DropViewGenerator, FindForeignKeyConstraintsGeneratorDB2, FindForeignKeyConstraintsGeneratorMSSQL, FindForeignKeyConstraintsGeneratorMySQL, FindForeignKeyConstraintsGeneratorOracle, FindForeignKeyConstraintsGeneratorPostgres, GetNextChangeSetSequenceValueGenerator, GetViewDefinitionGenerator, GetViewDefinitionGeneratorDB2, GetViewDefinitionGeneratorDerby, GetViewDefinitionGeneratorFirebird, GetViewDefinitionGeneratorHsql, GetViewDefinitionGeneratorInformationSchemaViews, GetViewDefinitionGeneratorInformix, GetViewDefinitionGeneratorMaxDB, GetViewDefinitionGeneratorMSSQL, GetViewDefinitionGeneratorOracle, GetViewDefinitionGeneratorPostgres, GetViewDefinitionGeneratorSybase, GetViewDefinitionGeneratorSybaseASA, InsertGenerator, InsertOrUpdateGenerator, InsertOrUpdateGeneratorDB2, InsertOrUpdateGeneratorMSSQL, InsertOrUpdateGeneratorMySQL, InsertOrUpdateGeneratorOracle, InsertOrUpdateGeneratorPostgres, LockDatabaseChangeLogGenerator, MarkChangeSetRanGenerator, ModifyDataTypeGenerator, RawSqlGenerator, ReindexGeneratorSQLite, RemoveChangeSetRanStatusGenerator, RenameColumnGenerator, RenameTableGenerator, RenameViewGenerator, ReorganizeTableGeneratorDB2, RuntimeGenerator, SampleUpdateGenerator, SelectFromDatabaseChangeLogGenerator, SelectFromDatabaseChangeLogLockGenerator, SelectSequencesGeneratorDB2, SelectSequencesGeneratorDerby, SelectSequencesGeneratorFirebird, SelectSequencesGeneratorH2, SelectSequencesGeneratorHsql, SelectSequencesGeneratorInformix, SelectSequencesGeneratorMaxDB, SelectSequencesGeneratorOracle, SelectSequencesGeneratorPostgres, SetColumnRemarksGenerator, SetNullableGenerator, SetTableRemarksGenerator, StoredProcedureGenerator, TagDatabaseGenerator, UnlockDatabaseChangeLogGenerator, UpdateChangeSetChecksumGenerator, UpdateGenerator
public interface SqlGenerator<StatementType extends SqlStatement>
- extends PrioritizedService
SqlGenerator implementations take a database-independent SqlStatement interface and create a database-specific Sql
object. SqlGenerators are registered with the SqlGeneratorFactory, which is used to determine the correct generator
to use for a given statment/database combination.
The SqlGenerator implementations are responsible for determining whether the data contained in the SqlStatement
method is valid using the validate method.
Naming Conventions:
Default SqlGenerators for a particular SqlStatement use the same name as the SqlStatement class, replacing
"Statement" with "Generator" (e.g.: CreateTableStatement -> CreateTableGenerator). Database-specific or alternate
SqlGenerators append a descrition of what makes them different appended (e.g. CreateTableStatement ->
CreateTableGeneratorOracle)
NOTE: There is only one instance of each SqlGenerator implementation created, and they must be thread safe.
Lifecycle:
- Instance of SqlGenerator subclass is created when registered with SqlGeneratorFactory
- For each SqlStatement to execute, SqlGeneratorFactory calls supports() to determine if the given SqlGenerator
will work for the current SqlStatement/Database combination
- SqlGeneratorFactory calls getPriority to determine which of all the SqlGenerators that support a given
SqlStatement/Database combination is the best to use.
- Liquibase calls validate() on the best SqlGenerator to determine if the data contained in the SqlStatement is
correct and complete for the given Database
- If validate returns a no-error ValidationErrors object, Liquibase will call the generateSql() method and execute
the resuling SQL against the database.
- See Also:
SqlGeneratorFactory
,
SqlStatement
,
Sql
Method Summary |
Sql[] |
generateSql(StatementType statement,
Database database,
SqlGeneratorChain sqlGeneratorChain)
Generate the actual Sql for the given statement and database. |
int |
getPriority()
Of all the SqlGenerators that "support" a given SqlStatement/Database, SqlGeneratorFactory will return the one
with the highest priority. |
boolean |
requiresUpdatedDatabaseMetadata(Database database)
Does this change require access to the database metadata? If true, the change cannot be used in an
updateSql-style command. |
boolean |
supports(StatementType statement,
Database database)
Does this generator support the given statement/database combination? Do not validate the statement with this
method, only return if it can suppot it. |
ValidationErrors |
validate(StatementType statement,
Database database,
SqlGeneratorChain sqlGeneratorChain)
Validate the data contained in the SqlStatement. |
Warnings |
warn(StatementType statementType,
Database database,
SqlGeneratorChain sqlGeneratorChain)
|
PRIORITY_DEFAULT
static final int PRIORITY_DEFAULT
- See Also:
- Constant Field Values
PRIORITY_DATABASE
static final int PRIORITY_DATABASE
- See Also:
- Constant Field Values
getPriority
int getPriority()
- Of all the SqlGenerators that "support" a given SqlStatement/Database, SqlGeneratorFactory will return the one
with the highest priority.
- Specified by:
getPriority
in interface PrioritizedService
- Returns:
supports
boolean supports(StatementType statement,
Database database)
- Does this generator support the given statement/database combination? Do not validate the statement with this
method, only return if it can suppot it.
requiresUpdatedDatabaseMetadata
boolean requiresUpdatedDatabaseMetadata(Database database)
- Does this change require access to the database metadata? If true, the change cannot be used in an
updateSql-style command.
validate
ValidationErrors validate(StatementType statement,
Database database,
SqlGeneratorChain sqlGeneratorChain)
- Validate the data contained in the SqlStatement. If there are no errors, return an empty ValidationErrors object,
not a null value. Liquibase will inspect the ValidationErrors result before attempting to call generateSql.
warn
Warnings warn(StatementType statementType,
Database database,
SqlGeneratorChain sqlGeneratorChain)
generateSql
Sql[] generateSql(StatementType statement,
Database database,
SqlGeneratorChain sqlGeneratorChain)
- Generate the actual Sql for the given statement and database.
Copyright © 2004-2011 Liquibase.org. All Rights Reserved.