为Liquibase添加整理支持

时间:2016-04-12 09:34:27

标签: liquibase

我使用Liquibase来支持数据库的MSSQL和Oracle实现。数据库已经存在。

我想支持表格列上的整理。例如:

<createTable tableName="my_table">
  <column autoIncrement="true" name="id" type="int">
    <constraints nullable="false"/>
  </column>
  <column name="name" type="varchar(50)"/>
  <ext:column name="description" type="varchar(250)" collate="Latin1_General_CS_AS"/>
</createTable>

我想最初只处理MSSQL的新属性。我已经看到modifySql标记提供了一种在不使用扩展名的情况下支持collate的方法。我也想做其他类似的改变,并且更喜欢扩展Liquibase的想法。

我查看了其他扩展,但找不到如何很好地扩展现有语句的示例。我正在考虑做以下事情: 编写扩展核心CreateTableChangeCreateTableStatementCreateTableGenerator的自定义CreateTableChangeCreateTableStatementCreateTableGenerator类。替换generateStatements中的CreateTableChange方法以创建自定义CreateTableStatement个实例,并替换generateSql中的CreateTableGenerator

我想知道这是否是扩展现有更改类的正确方法。我担心我无法调用generateStatementsgenerateSql的基本实现,但必须复制并粘贴实现,它开始看起来像一个新的更改类型而不是扩展现有的。

1 个答案:

答案 0 :(得分:0)

我在为liquibase编写扩展方面没有太多经验,所以我无法告诉你这是一个好方法还是有更好的方法。

但我注意到有两个包:liquibase.changeliquibase.change.core。在第一个包中是抽象类和接口,如AbstractChange。我想这些是你在编写扩展时应该实现和扩展的那些。因此,我认为该包作为扩展API的一部分,因此非常“稳定”。

第二个包包含liquibase自己使用的类。它们可能(将)在未来版本中进行更改。 因此,当您扩展这些类时,您的扩展可能需要更频繁地更改。我猜这些类不是“扩展API”的一部分。 (我没有找到任何证明这一点的官方文件 - 这只是我的观察。)

除此之外,我会说你的方法应该是可行的。