dbflute / dbflute-core

DBFlute core libraries for Java8
http://dbflute.seasar.org/
23 stars 18 forks source link

DBFlute Runtime: useInScopeSubQuery() of Compound PK #204

Closed jflute closed 3 months ago

jflute commented 3 months ago

I didn't know that multiple inScope is SQL standard:

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
       )

so it should be supported.

[my memo]

背景: 元々、複合のin句ってSQL標準だと思ってなかったから、昔inScopeSubQueryが独立していた頃はそもそも単一FKじゃないと生成されないようにできていた。(ExistsReferrerは昔から複合に対応していた)

それをExistsReferrerのオプションとして寄せたことで、複合FKでの呼び出しができるようになってしまったのがギャップで、それは完全にミス。

一方で、実は複合のin句はSQL標準だったので、これはちゃんとサポートしないと。

で、現状のInScopeSubQueryの実装が全然複合FKを想定していない実装になっているので、意外に簡単ではないことがわかった(><。