DBFlute-1.2.8 Released

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