DBFlute Runtime/Engineのリリース
連日のリリースブログです(^^。
(1.2.7のブログが極端に遅れただけで、1.2.8のリリースは今週です)
Change Log | DBFlute
(移行の注意点は特になし)
今回もDBFluteユーザーの方からのフィードバックが色々とあって対応しました。
改善点たくさんありますが、ブログではピックアップして紹介します。
複合PKでのinScopeSubQueryに対応
まさしく現場からのフィードバックです。
ExistsReferrerにて、SQLでの実現方法をexistsSubQueryからInScopeSubQueryに変更するオプション cb.useInScopeSubQuery() がありますが...
InScopeSubQueryは複合PK(FK)に対応していませんでした。
(useInScopeSubQuery()を呼ぶと内部的な例外が発生していました)
今回、複合PKでもInScopeSubQueryを使えるようにしています。
ちなみに、複合カラムのInScopeってSQLの標準だと思っていませんでした。
一部DBMSしかできないものだと思っていたのですが...
実はSQL標準という記事も見かけましたし、少なくともわりと多くのDBMSが使えるようだったので、正式な対応となりました。
これはちょっとjfluteの調べが足りなかったところで反省ですね。
こういう inScope できたのかー(><
select pk.PK_FIRST_ID, pk.PK_SECOND_ID from WHITE_COMPOUND_PK pk where (pk.PK_FIRST_ID, pk.PK_SECOND_ID) in ( select ref.REF_FIRST_ID, ref.REF_SECOND_ID from WHITE_COMPOUND_PK_REF ref where ref.REF_FIRST_ID = pk.PK_FIRST_ID and ref.REF_SECOND_ID = pk.PK_SECOND_ID )
ちなみにフィードバックを頂いた現場では、本来は複合PKはDB設計ポリシー的にはやらないところでしたが...
他システム連携とかあれこれ特殊なテーブルで、どうしても普段のDB設計が適応できなくて複合PK(FK)になったようです。
VIEWのある項目を差分対象外オプション
MySQLにおいて、とある状況でAlterCheckやHistoryHTMLの無駄な差分が出てしまうことがわかりました。
ということで、この二つの差分を無視するオプションを追加したました。
o VIEWのNotNull制約
o VIEWのデフォルト制約
そもそもこれら項目は、開発者がどうにも制御できないものだし、あまり意味のないものでもあるので、本来無視で良いようなものでした。
一応今回はオプションで無視することができるようにしています。
(かなりレアなケースのようなので様子見ということで)
documentMap.dfprop:
# /- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # o isIgnoreViewNotNullDiff (NotRequired - Default false) # Does it ignore differences of view's not null constraint? # # test of view's not null constraint (2024/02/13) # https://github.com/dbflute/dbflute-core/issues/200 # ; isIgnoreViewNotNullDiff = true # - - - - - - - - - -/ # /- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # o isIgnoreViewDefaultDiff (NotRequired - Default false) # Does it ignore differences of view's default constraint? # # test of view's default constraint (2024/02/26) # https://github.com/dbflute/dbflute-core/issues/203 # ; isIgnoreViewDefaultDiff = true # - - - - - - - - - -/
フィードバックありがとうございました!
// cp932利用のmysql8への更新にて発生のトラブルについて
https://groups.google.com/g/dbflute/c/9uG6H6nmgWA
PostgreSQLでのReplaecSchema
PostgreSQL周りのフィードバックが多かったので一挙紹介します。
PostgreSQLのfunction色々対応
ReplaceSchemaでPostgreSQLのfunctionをdropできないケースがあったので対応しました。
o オーバーロードのfunction
o 引数名のないfunction
メタデータ色々と頑張って特定できるようにしました。
(フィードバックくださったユーザーの方からも情報提供頂いて対応できました。ありがとうございます)
PostgreSQLのview依存をdrop
ReplaceSchemaでPostgreSQLのviewがviewを見る依存があるとdropできないケースがあったので対応しました。
drop view のときに cascade を入れるようにしました。
それにしても、PostgreSQLはそこまで細かいところ見てるもんなんですねー。
PostgreSQLの相互依存スキーマのdrop
ReplaceSchemaでPostgreSQLの相互依存してるスキーマ間のテーブルdropができなかったので、cascadeオプションを追加してdropできるようにしました。
# drop table ... cascade, to delete referrers from e.g. other schema tables ; isUseDropTableCascadeAsPossible = true
こちらは、ちょっとデフォルトではなくオプションにしています。
(問題なければ将来デフォルトで良いのかも知れませんが、まだ想定外のことがないか不安で)
まとめ
DBFluteへのフィードバック(質問/要望/雑談など)、Google Group の ML に入るの億劫だなって方は、Githubの Issues でも受け付けています。
// Issues of DBFlute
https://github.com/dbflute/dbflute-core/issues
日本語でOKです。
すでにIssue上でやり取りしてるものが幾つかありますので参考までに。
// DBFlute Inquiry: 2024/01/18 from X (Twitter) #198
https://github.com/dbflute/dbflute-core/issues/198
// DBFlute Engine: SchemaSyncCheck on SQLServer, wrong differences #197
https://github.com/dbflute/dbflute-core/issues/197