向 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 的想法。
我查看了其他扩展,但找不到如何很好地扩展现有语句的示例。我正在考虑执行以下操作:
编写扩展核心 CreateTableChange
、CreateTableStatement
和 CreateTableGenerator
类 的自定义 CreateTableChange
、CreateTableStatement
和 CreateTableGenerator
。替换 CreateTableChange
中的 generateStatements
方法以创建自定义 CreateTableStatement
实例,并替换 CreateTableGenerator
.
中的 generateSql
我想知道这是否是扩展现有更改的正确方法 类。我担心我无法调用 generateStatements
和 generateSql
的基本实现,但必须复制并粘贴该实现,它开始看起来像一个新的更改类型,而不是一个扩展现有一个。
我在为 liquibase 编写扩展方面还没有太多经验,所以我真的不能告诉你这是一个好方法还是有更好的方法。
但我注意到有两个包:liquibase.change
和 liquibase.change.core
。在第一个包中是抽象的 类 和像 AbstractChange
这样的接口。我想这些是您在编写扩展时应该实现和扩展的那些。因此,我认为该包是扩展 API 的一部分,因此非常 "stable"。
第二个包包含 类 liquibase 自己使用的。它们可能(将)在未来的版本中发生变化。
因此,当您扩展那些 类 时,您的扩展可能需要更频繁地更改。我猜那些 类 不是 "extensions API" 的一部分。 (我还没有找到任何证明这一点的官方文件 - 这只是我的观察。)
除此之外,我认为您的方法应该是可行的。
我正在使用 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 的想法。
我查看了其他扩展,但找不到如何很好地扩展现有语句的示例。我正在考虑执行以下操作:
编写扩展核心 CreateTableChange
、CreateTableStatement
和 CreateTableGenerator
类 的自定义 CreateTableChange
、CreateTableStatement
和 CreateTableGenerator
。替换 CreateTableChange
中的 generateStatements
方法以创建自定义 CreateTableStatement
实例,并替换 CreateTableGenerator
.
generateSql
我想知道这是否是扩展现有更改的正确方法 类。我担心我无法调用 generateStatements
和 generateSql
的基本实现,但必须复制并粘贴该实现,它开始看起来像一个新的更改类型,而不是一个扩展现有一个。
我在为 liquibase 编写扩展方面还没有太多经验,所以我真的不能告诉你这是一个好方法还是有更好的方法。
但我注意到有两个包:liquibase.change
和 liquibase.change.core
。在第一个包中是抽象的 类 和像 AbstractChange
这样的接口。我想这些是您在编写扩展时应该实现和扩展的那些。因此,我认为该包是扩展 API 的一部分,因此非常 "stable"。
第二个包包含 类 liquibase 自己使用的。它们可能(将)在未来的版本中发生变化。 因此,当您扩展那些 类 时,您的扩展可能需要更频繁地更改。我猜那些 类 不是 "extensions API" 的一部分。 (我还没有找到任何证明这一点的官方文件 - 这只是我的观察。)
除此之外,我认为您的方法应该是可行的。