向 Liquibase 添加整理支持

Adding collate support to Liquibase

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

我想支持 table 列的整理。例如:

<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。替换 CreateTableChange 中的 generateStatements 方法以创建自定义 CreateTableStatement 实例,并替换 CreateTableGenerator.

中的 generateSql

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

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

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

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

除此之外,我认为您的方法应该是可行的。