Liquibaseと純粋なSQLチェンジセット

誰もが知っているわけではありませんが、バージョン2.0以降、Liquibaseは「純粋なSQL」を含むファイルをチェンジセットファイルとして使用する機能をサポートしています。 カットの下で、それらが何で構成されているかを少し説明します。



コメントはSQLファイルのメタデータを定義するために使用され、各チェンジセットファイルはコメントで始まります。



--liquibase formatted sql
      
      





ファイル内の各変更セットはコメントで始まり、次のようにすべての必要なパラメーターを示します。



 --changeset author:id attribute1:value1 attribute2:value2 [...]
      
      





以下の属性を変更セットに設定できます。

属性 説明
stripComments trueに設定すると、SQLステートメントを実行する前にすべてのコメントが削除されます。 デフォルト値はtrueです。
splitStatements falseに設定すると、Liquibaseは「;」文字でSQL式を分離せず、ルーチンを記述するために使用されます。
endDelimiter SQLステートメントの区切り文字を指定します。デフォルトは「;」です。
runAlways trueに設定されている場合、各プロジェクトのビルド中に変更のリストが実行されます。
runOnChange trueに設定されている場合、変更セットを変更すると、プロジェクトの次のビルドで実行されます。
コンテキスト 変更セットのラベルを作成します。これは、後でリクエストに応じて実行できます。
runInTransaction trueに設定すると、可能であれば、すべてのSQLステートメントが単一のトランザクションで実行されます。 デフォルト値はtrueです。
failOnError True-実行時にエラーが発生した場合、すべての変更セットがキャンセルされます。
dbms 変更セットが記述されているDBMSのタイプの表示。


パラメーターの設定後、前提条件が示されます(オプション)。 次は、セミコロンまたは「endDelimiter」属性で指定された文字で区切られた一連のSQLステートメントです。



現時点では、純粋なSQL変更セットでサポートされている前提条件は1種類のみです:SQLチェック。 前提条件の例:



 --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM my_table
      
      





expectedResultパラメーターには、SQLクエリが返す値が渡されます。 クエリは必ず単一の値を返す必要があります。



前提条件チェック処理の動作を設定するには、changeset'aパラメーターの設定に似た構文を使用します。



 --preconditions attribute1:value1 attribute2:value2 [...]
      
      





属性は次のとおりです。

属性 説明
onFail 変更セットを実行できない場合のアクション。
onError 変更セットがエラーを返したときのアクション。
onUpdateSQL updateSQLモードで実行された場合に変更セットで実行されるアクション。
onFailMessage 変更セットを実行できない場合に返されるメッセージ。
onErrorMessage 変更セットが失敗した場合に返されるメッセージ。


次の値をonFailおよびonError属性に渡すことができます。

価値 説明
停止 変更セットの実行をすぐに停止します。
続ける 変更セットの内容はスキップされ、次回再実行が試行されます。
MARK_RAN 変更セットは完了としてマークされます。
警告 警告が生成され、変更セットは引き続き正常に実行されます。


変更セットには、ロールバック用のSQLステートメントを含めることができます。 ロールバック式はコメントの形式で説明されます。



 --rollback SQL STATEMENT
      
      





さて、結論として、チェンジセットファイルの小さな例を次に示します。



 --liquibase formatted sql --changeset User1:1 create table test1 ( id int primary key, name varchar(255) ); --rollback drop table test1; --changeset User2:1 --preconditions onFail:CONTINUE onError:CONTINUE --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM test1 insert into test1 (id, name) values (1, 'User1'); --rollback delete from test1 where id = 1;
      
      







上記のすべてを要約すると、そのようなファイルはxml'kiよりもはるかに簡単に読み書きできますが、すべてのバンがまだサポートされているわけではありません(前提条件による例、SQL Checkのみが現在サポートされています)。



All Articles