DBFlute-1.3.0 Released

DBFlute Runtime/Engineのリリース

Change Log | DBFlute
(移行の注意点は特になし)

今回は、jflute自ら現場でDBFluteの導入作業をして、DBFluteもっとこうなって欲しいというものを反映しています。

LoadDataReverseのFK順序

LoadDataReverseはFK順序でTSVファイルを出力しますが、循環FKがあると順序判定ギブアップとなっていました。今回は循環参照でもできるだけ踏み込んでReplaceSchemaのときに登録できるようにしています。

具体的には、循環参照のテーブルを参照しているテーブルたちの順序判定が実施されるようになって、循環参照テーブルたちに引きづられないようにしました。

そして、物理FKと疑似FKの循環参照の場合は、物理FKの方を優先するような判定に。

こうすることで、だいぶしぶとく活用できるようになりました。

ただし、物理FKと物理FKの循環参照テーブルは、やはりTSVで登録できないので、ReplaceSchemaのときにFK制約を一時的に外すなどの処理が必要になります。

SchemaSyncCheckのtableExceptList

SchemaSyncCheckでテーブル除外できるようにしました。

通常、SchemaSyncCheckは自動生成対象テーブルかどうか関係なくスキーマ全体の差分をチェックするということで今まで除外設定はありませんでした。

ですが、ローカル、IT DB、本番DBなど、それぞれの環境的な都合で独自のテーブルを持つ場合などがあったときにノイズになってしまうので除外できるように。

そんなケースあるの?ってところですが、遭遇したので対応しました。

SchemaHTMLで非推奨テーブル

documentMap.dfprop にて deprecatedTableMap というプロパティを追加しました。非推奨テーブルを指定できます。

非推奨テーブルは、SchemaHTML上で明らかに非推奨っぽいテーブルのデザインになります。

いますぐ消すことはできないけど、今後は使わないのであまり気にしたくないテーブルがあるときにぜひ

DBMeta, StructuralReferrerInfo

これ内部的にはけっこう大きな機能追加です。

DBFluteの自動生成クラスが持つメタデータ、つまり、DBMeta ですが、Foreign, Referrer の区別に特徴があります。


Foreign: 検索上外部になるもの (many-to-one, one-to-one)
Referrer: 検索上参照されるもの (one-to-many)


Foreignと言ってもFKの方向と一致するわけではなく、基点テーブルが参照しているものもあれば(many-to-one)、基点テーブルを参照しているもの(one-to-one)もあるということになります。つまり、「検索というコンセプトにおける外部」という感じです。

Referrerは、one-to-oneが含まれないので、FK的に基点テーブルを参照しているものがすべて列挙されるわけではないということ。


DBFluteを使った検索においてはこれでフィットするのですが...
「DBMetaを使ってFK参照のメタプログラミング」を行う場合はちょっと都合が悪いです。

そこで、「構造的なコンセプトのReferrer」つまり「FK的に基点テーブルを参照しているもの」を列挙できるようなメソッドを用意しました。

List<StructuralReferrerInfo> referrerInfoList
    = dbmeta.getStructuralReferrerInfoList()


メタプログラミングが大好きな方はぜひお使いください。

Foreignの方は、現状でも区別はできるので単にfilterすればFK的に参照しているものだけに絞れるので、特に変わらずです。

Referrerの方は、情報が足りてなくて回避が難しいので今回追加となりました。


※本当は対比的には getStructuralForeignInfoList() もあった方がいいのかもですが...

DB分析の道具として

DBFluteを使ってDB分析、そういった役割でも活用できるので、そういう方向性の改善も進めていきたいと思います。