replaceSchemaMap
Java6版までは、replaceSchemaDefinitionMap という名前でした。(古い名前でも動きます)
- replaceSchemaMapとは?
- プロパティ
- repsEnvType @since 0.9.8.5
- dataLoadingType @until 0.9.8.4
- isLoggingInsertSql
- isLoggingReplaceSql @since 0.9.9.4B
- isErrorSqlContinue @since 0.9.9.2F
- sqlFileEncoding
- skipSheet
- isCheckSchemaPolicyInReps
- conventionalTakeAssertMap @since 1.1.7
- isIncrementSequenceToDataMax
- isSuppressBatchUpdate
- objectTypeTargetList
- isDropgenerateTableOnly @until 0.9.8.2
- isDropgenerateProcedureOnly @until 0.9.8.2
- filterVariablesMap
- additionalUserMap
- additionalDropMapList
- playSqlDirectory
- applicationPlaySqlDirectory
- arrangeBeforeRepsMap
- isSuppressTruncateTable
- isSuppressDropForeignKey
- isSuppressDropTable
- isSuppressDropSequence
- isSuppressDropProcedure
- isSuppressDropDBLink
- initializeFirstSqlList @since 0.9.9.4B
replaceSchemaMapとは?
ReplaceSchemaタスクについての設定を行うDBFluteプロパティ。DBFluteクライアントの dfprop 配下の replaceSchemaMap.dfprop (replaceSchemaDefinitionMap.dfprop) という名前のテキストファイルです。基本的に ReplaceSchemaタスク にて参照されます。
DB接続設定は別のプロパティ
ReplaceSchemaのDB接続設定は databaseInfoMap.dfprop のものを利用します。
プロパティ
map型プロパティ で、様々な key-value 形式のプロパティを定義します。
必須のプロパティはありません。
repsEnvType @since 0.9.8.5
ReplaceSchemaの環境タイプを指定します。
例えば、データ登録において登録対象とするデータのタイプを指定します。 ここで指定したのと同じ名称のディレクトリを [DBFluteクライアント]/playsql/data 配下から探して、DBに登録するデータを読み込みます。(もし、"it" なら playsql/data/it 配下)
このプロパティの設定値を切り替えることで、単体テスト環境、結合テスト環境および実環境ごとに使用するデータを切り替える ということが実現できます。
また、スキーマ作成(CreateSchema)や最終チェック(TakeFinally)でも利用できます。
- 値候補
- タイプ名 (ディレクトリ名に利用できる名前)
- デフォルト
- DBFluteの環境タイプ or ut
- 補足
-
- DBFluteの環境タイプが指定されている場合はデフォルトがその値に
- 習慣的に ut、it、product などがお奨め
- common は環境タイプにおける予約語なので利用できない
何も指定していなければ、DBFluteの環境タイプと値が同期します。
dataLoadingType @until 0.9.8.4
古いバージョンにおける repsEnvType と同じ役割のプロパティです。 デフォルト値が固定で ut であること以外は同じ仕様です。
isLoggingInsertSql
DBへの登録したデータを一レコードずつログに出力するか否か指定します。ReplaceSchema で大量のデータを取り扱うようになって、少しでもデータ登録の処理が速く終わるようにしたい場合に "false" にします。但し、データ登録でエラーが発生した場合は、一時的にこの設定を戻し、ログに出力されたデータを見てデバッグするようにして下さい。
このプロパティは、全部出すか全部出さないかの両極端なものです。 先頭の一部のレコードだけを表示するというオプションが別途存在しますので、そちらを利用することが推奨されます。
- 値候補
- true or false
- デフォルト
- true
isLoggingReplaceSql @since 0.9.9.4B
スキーマ初期化やスキーマ構築(replace-schema.sqlやtake-finally.sqlなど)のSQLをログに出力するか否かを指定します。 ほんのわずかでも処理が速く終わるようにしたい場合に "false" にします。
- 値候補
- true or false
- デフォルト
- true
isErrorSqlContinue @since 0.9.9.2F
エラーのSQLがあった場合に、タスクを中断せずに続行して次の処理に移るか否かを指定します。 続行したとしても、タスクの結果は FAILURE となります。
- 値候補
- true or false
- デフォルト
- false
sqlFileEncoding
ReplaceSchemaで実行するDDLのSQLファイル(replace-schema-xxx.sqlなど)のエンコーディングを指定します。
- 値候補
- エンコーディング (Javaで認識できるもの)
- デフォルト
- UTF-8
skipSheet
データ登録で利用するエクセルデータの中で、登録対象外とするシート名を正規表現で指定します。 ツールなどで生成されたエクセルデータで、データとは無関係のシートが存在する場合に有効です。
- 値候補
- 正規表現 (Javaで認識できるもの)
- デフォルト
- なし(登録対象とするシートなし)
このプロパティとは別に、コメントアウトされたシートは登録対象外となります。
isCheckSchemaPolicyInReps
SchemaPolicyCheck が、ReplaceSchema の DDL (CreateSchema) 実行直後に実行されます。 早い段階でチェックを検知するのに有効です。 (AdditionalSchemaのテーブルなど、ReplaceSchemaの時点ではチェックしづらいものは除外されますが、ほとんどのポリシーが実施されます)
- 値候補
- true or false
- デフォルト
- false
conventionalTakeAssertMap @since 1.1.7
ReplaceSchema の TakeFinally のタイミングにて、規約的なアサートを実行できます。 例えば、"テストデータが一件も存在しないテーブルがあったらエラー" にするなど、定型的で横断的なチェックが可能です。
- 値候補
- map型プロパティの key-value
- デフォルト
- なし
- 補足
-
- emptyTableMapで、空っぽのテーブルに対するアサート
"テストデータが一件も存在しないテーブルがあったらエラー" というアサートは、emptyTableMap を利用します。 (つまり、テーブルを追加したら必ず一件以上はテストデータを入れましょう、というチェックですね)
e.g. テストデータが一件も存在しないテーブルがあったらエラー @replaceSchemaMap.dfprop
# /- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# o conventionalTakeAssertMap: (NotRequired - Default map:{})
# Does it assert data by conventional rule in take-finally
# For example, you can check empty table (no-data).
#
; conventionalTakeAssertMap = map:{
; emptyTableMap = map:{
; isFailure = true
; workableRepsEnvTypeList = list:{ut}
; tableExceptList = list:{}
; tableTargetList = list:{}
; errorIfFirstDateAfter = null
}
}
# - - - - - - - - - -/
既存テーブルは諦めるとして、"これから追加されるテーブルだけはテストデータを一件以上入れよう" という場合は、errorIfFirstDateAfter に "今日" を入れましょう。
e.g. 新しいテーブルで、テストデータが一件も存在しなかったらエラー @replaceSchemaMap.dfprop
...
; tableTargetList = list:{}
; errorIfFirstDateAfter = 2018/09/28
}
...
比較対象となるテーブル作成日(firstDate)は、SchemaPolicyCheck における firstDate と仕組みは同じです。
isIncrementSequenceToDataMax
テーブルのPKに関連付けたシーケンスの次の採番値を、登録したデータの最大値に 1 を足したもの調整にするか指定します。
- 値候補
- true or false
- デフォルト
- false
- 補足
-
- シーケンスが利用できるDBのみサポート
- sequenceDefinitionMap.dfprop にて設定したシーケンスが対象
- PostgreSQLの serial、bigserial のシーケンスも対象
- 減算シーケンスは問答無用で対象外
isSuppressBatchUpdate
エクセルデータからの登録を "バッチ更新" せず、1件ずつ実行するか指定します。このプロパティを true にすると、実行速度は遅くなりますが、エラーの原因となるデータの特定がしやすくなります。
- 値候補
- true or false
- デフォルト
- false
objectTypeTargetList
databaseInfoMap.dfprop の objectTypeTargetList の設定を ReplaceSchema で独自に上書きするプロパティ。 主にスキーマ初期化時の対象となるオブジェクトを指定します。@since 0.9.8.2
一つ以上のオブジェクトが指定されていると、ReplaceSchema においてはこのプロパティが利用されます。 例えば、ビュー(VIEW)は自動生成しないが、ReplaceSchemaとしては管理したいという場合に有効です。 プロパティの仕様は databaseInfoMap.dfprop のものと同じです。
isDropgenerateTableOnly @until 0.9.8.2
自動生成対象外のテーブルを削除対象としないか指定します。このプロパティを true にすると、自動生成対象外のテーブルを削除対象としません。自動生成対象の調整は、databaseInfoMap.dfprop で設定します。自動生成対象外のテーブルの環境構築が、ReplaceSchema管理でなく独自管理になっているの場合に有効です。 (廃止されました)
- 値候補
- true or false
- デフォルト
- false
isDropgenerateProcedureOnly @until 0.9.8.2
自動生成対象外のプロシージャを削除対象としないか指定します。このプロパティを true にすると、自動生成対象外のプロシージャを削除対象としません。自動生成対象の調整は、outsideSqlDefinitionMap.dfprop で設定します。自動生成対象外のプロシージャの環境構築が、ReplaceSchema管理でなく独自管理になっているの場合に有効です。 (廃止されました)
- 値候補
- true or false
- デフォルト
- false
プロシージャの自動生成を無効の状態でこのプロパティを有効にした場合は、どのプロシージャも削除されません。
filterVariablesMap
SQLに埋め込む変数名と、その変数を置換する値を map型プロパティ で指定します。
テスト環境と実環境でスキーマが異なるために同じDDLを実行できない場合などに、このプロパティの設定と環境の切り替えを併用することで問題を解決できます。
e.g. スキーマ名を置換したい場合 (変数の利用) @replace-schema-xxx.sql
create table /*$schemaA*/.TABLE
e.g. スキーマ名を置換したい場合 (フィルタ設定) @replaceSchemaDefinitionMap.dfprop
; filterVariablesMap = map:{ schemaA = FOO ; schemaB = BAR }
e.g. スキーマ名を置換したい場合 (実行されるSQL) @SQL
create table FOO.TABLE
- 値候補
- map型プロパティの key-value
- デフォルト
- なし
設定の有無に関わらず利用できる(予約された)変数があります。databaseInfoMap.dfprop の値を参照することができます。@since 0.9.8.3
- dfprop.mainCatalog
- 接続対象のデータベース名(カタログ名)
- dfprop.mainSchema
- 接続対象のスキーマ名
- dfprop.mainUser
- 接続DBユーザ
- dfprop.mainPassword
- 接続DBユーザのパスワード
- sys.basedir
- DBFluteクライアントの絶対パス @since 0.9.9.0A
e.g. databaseInfoMap.dfprop の値を利用してフィルタ @SQL
create database /*$dfprop.mainCatalog*/;
埋め込み変数コメント形式ではなく、ダイレクトな文字列置換としても利用できます。置換前の文字に "direct:" を付与すると、その文字に対する単純な文字列置換となります。@since 0.9.9.1B
e.g. ダイレクトな文字列置換を利用したい場合 (フィルタ設定) @replaceSchemaDefinitionMap.dfprop
; filterVariablesMap = map:{ direct:foo = bar }
additionalUserMap
SQLの一部を別のユーザで実行したい場合に、そのユーザを指定します。
このプロパティを設定したうえでSQLに指定のコメントを記述すると、SQLの実行ユーザを切り替えることができます。 基本的に、(アプリユーザの作成のための)システムユーザでの実行を想定しています。
additionalUserMapの仕様 @replaceSchemaDefinitionMap.dfprop
additionalUserMap = map:{
; [user-def-name] = map:{ # ユーザ定義名 (任意の名前で、SQL上で指定される)
; url = [url] # デフォルト: databaseInfoMap.dfprop の設定と同じ
; schema = [schema] # デフォルト: databaseInfoMap.dfprop の設定と同じ
; user = [user] # 必須
; password = [password] # デフォルト: 空パスワード
}
...
}
- 値候補
- map型プロパティの key-value
- デフォルト
- なし
環境ごとにパスワードが異なる場合のために、password で外だしのパスワードファイルを指定することができます。 そのパスワードファイルはバージョン管理システムにはコミットしないように設定することで、環境ごとのパスワードを指定できます。
この外だしファイルの機能は、url や user でも利用できます(@since 0.9.9.8)。
additionalDropMapList
テーブル削除時に、追加的にテーブルを削除する設定を指定します。
メインスキーマのテーブル削除の処理の前に、別スキーマのテーブルを削除することができます。 FK制約などで自スキーマを参照しているスキーマを削除する必要がある場合に有効です。
e.g. additionalDropMapListの仕様 @replaceSchemaDefinitionMap.dfprop
; additionalDropMapList = list:{
; map:{
; url = [url] # デフォルト: databaseInfoMap.dfprop の設定と同じ
; schema = [schema] # 必須: 但し、空指定あり (空指定に意味のあるDBMSに限り)
; user = [user] # デフォルト: databaseInfoMap.dfprop の設定と同じ
; password = [password] # デフォルト: databaseInfoMap.dfprop の設定と同じ
; propertiesMap = map:{[key-value]} # デフォルト: 省略時は設定なし
; objectTypeTargetList = list:{[object-list]} # デフォルト: list:{TABLE;VIEW}
# 以下、廃止されました @until 0.9.8.2
; tableExceptList = list:{[table-list as hint]} # デフォルト: 設定なし
; tableTargetList = list:{[table-list as hint]} # デフォルト: 設定なし
; isDropAllTable = [true or false] # 全テーブルを削除か否か。デフォルト: false
}
}
- 値候補
- list型プロパティの中に、map型プロパティの key-value
- デフォルト
- なし
playSqlDirectory
ReplaceSchemaの処理が評価する(メインの) playsql ディレクトリを指定します。@since 0.9.9.0A
このプロパティを指定すると、DBFluteクライアント/playsql は利用されなくなり、代わりに指定されたディレクトリが playsql になります。めったなことでは利用しないことが前提です
このプロパティは TwoEdgedSword 認定のされた機能です。
- 値候補
- DBFluteクライアントからの相対パス
- デフォルト
- なし
applicationPlaySqlDirectory
アプリごとのReplaceSchemaの処理が評価する playsql ディレクトリを指定します。@since 0.9.7.0
テーブル作成、データ登録、最終チェックの三つの処理において、それぞれのタイミングでメインの playsql の評価が終わった後に、指定された playsql 配下のリソースが同様に処理されます。
- メインの playsql のテーブル作成 (replace-schema.sql)
- 追加の playsql のテーブル作成 (同上)
- メインの playsql のデータ登録 (common と dataLoadingTypeのもの)
- 追加の playsql のデータ登録 (同上) ※ただし、エクセルデータのみ対象
- メインの playsql の最終チェック (take-finally.sql)
- 追加の playsql の最終チェック (同上)
e.g. applicationPlaySqlDirectoryの利用例 @replaceSchemaDefinitionMap.dfprop
; applicationPlaySqlDirectory = ../../foo-project/dbflute_apbranch/playsql
- 値候補
- DBFluteクライアントからの相対パス
- デフォルト
- なし
arrangeBeforeRepsMap
ReplaceSchema実行前に、ファイルコピーなどのアレンジ操作を指定します。@since 0.9.8.5
例えば、DDLの出力先を保存できないERDツールや、フルパスで保存してしまうERDツールなどを利用している場合に、 このプロパティを利用してReplaceSchema実行前にDBFlute管理外の場所に出力されたDDLファイルを playsql 配下にコピーさせることができます。
e.g. arrangeBeforeRepsMapの仕様 @replaceSchemaDefinitionMap.dfprop
; arrangeBeforeRepsMap = map:{
; define = map:{
; [from-string] = [to-string]
}
; copy = map:{
# DBFluteクライアントからの相対パス or 絶対パス
; [src-path] = [dest-path]
}
}
- 値候補
- map型プロパティの中に、map型プロパティの key-value
- デフォルト
- なし
- 補足
-
- アレンジ操作は copy のみ利用可能
- define でパス表現で有効なの定数定義が利用可能 @since 0.9.9.1B
- "/" で始まれば絶対パス、それ以外はDBFluteクライアントからの相対パス
- ディレクトリのコピーは指定できない
- src が "foo/*.bar" と指定された場合、dest が固定ファイルであれば、foo 配下の唯一の bar ファイルが src となる (複数存在した場合は例外となる)
- src が "foo/*.bar" と指定された場合、dest がディレクトリ(ドット "." を含まない)であれば、src が "foo/*.bar" なら、foo 配下の全ての bar ファイルが src となる @since 0.9.9.1A
- src で指定されたファイルがない場合でも特にエラーにはならない(ログ出力のみ)
- dest のファイルが既に存在している場合は、上書き処理される
- src, dest 共にパス表現(一つ以上のスラッシュを含む)であること
- copyにて、おもむろに df:clean を付けるとそのディレクトリのファイルを削除してからコピー
e.g. dbflute-spring-exampleのplaysqlからSQLなどをコピーしてくる @replaceSchemaDefinitionMap.dfprop
; arrangeBeforeRepsMap = map:{
; define = map:{
; $$SrcDir$$ = ../../dbflute-spring-example/dbflute_exampledb/playsql
; $$DestDir$$ = ./playsql
}
; copy = map:{
; $$SrcDir$$/*.sql = $$DestDir$$
; $$SrcDir$$/data/common/xls/*.xls = $$DestDir$$/data/common/xls
; $$SrcDir$$/data/ut/xls/*.xls = $$DestDir$$/data/ut/xls
; $$SrcDir$$/data/ut/csv/*.csv = $$DestDir$$/data/ut/csv df:clean
}
}
isSuppressTruncateTable
テーブル削除の前の truncate 処理を抑制するか否かを指定します。
- 値候補
- true or false
- デフォルト
- false(Truncateする)
isSuppressDropForeignKey
テーブル削除の前のFK制約の削除処理を抑制するか否かを指定します。
- 値候補
- true or false
- デフォルト
- false (削除する)
isSuppressDropTable
テーブルの削除処理を抑制するか否かを指定します。
- 値候補
- true or false
- デフォルト
- false (削除する)
isSuppressDropSequence
テーブル削除の前のシーケンスの削除処理を抑制するか否かを指定します。
- 値候補
- true or false
- デフォルト
- false (削除する)
isSuppressDropProcedure
テーブル削除の前のプロシージャの削除処理を抑制するか否かを指定します。
- 値候補
- true or false
- デフォルト
- false (削除する)
isSuppressDropDBLink
テーブル削除の前のDBリンクの削除処理を抑制するか否かを指定します。
- 値候補
- true or false
- デフォルト
- false (削除する)
initializeFirstSqlList @since 0.9.9.4B
スキーマ初期化を実行する前に実行するSQLを指定します。
DBMSの特性上、どうしてもスキーマ初期化前に独自のSQLを実行する必要があるような場合に有効です。 例えば、PostgreSQLにおいて pg_trgm などの extension を利用する場合に、スキーマ初期化前に extension を事前に drop する必要があります。
- 値候補
- SQL文字列のリスト
- デフォルト
- なし
- 補足
-
- 指定された順序で実行される