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

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

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

--liquibase formatted sql 

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

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

以下の属性を変更セットに設定できます。
属性説明
stripCommentstrueに設定すると、SQLステートメントを実行する前にすべてのコメントが削除されます。 デフォルト値はtrueです。
splitStatementsfalseに設定すると、Liquibaseは「;」文字でSQL式を分離せず、ルーチンを記述するために使用されます。
endDelimiterSQLステートメントの区切り文字を指定します。デフォルトは「;」です。
runAlwaystrueに設定されている場合、各プロジェクトのビルド中に変更のリストが実行されます。
runOnChangetrueに設定されている場合、変更セットを変更すると、プロジェクトの次のビルドで実行されます。
コンテキスト変更セットのラベルを作成します。これは、後でリクエストに応じて実行できます。
runInTransactiontrueに設定すると、可能であれば、すべてのSQLステートメントが単一のトランザクションで実行されます。 デフォルト値はtrueです。
failOnErrorTrue-実行時にエラーが発生した場合、すべての変更セットがキャンセルされます。
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変更セットがエラーを返したときのアクション。
onUpdateSQLupdateSQLモードで実行された場合に変更セットで実行されるアクション。
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のみが現在サポートされています)。

Source: https://habr.com/ru/post/J251617/


All Articles