conditionBeanMap (includeQueryMap)

conditionBeanMapとは?

ConditionBeanに生成する検索のためのメソッド cb.query().set[column]_[condition-key](...) を取捨選択(生成するかしないか)するためのDBFluteプロパティ。DBFluteクライアントの dfprop 配下の conditionBeanMap.dfprop という名前のテキストファイルです。主に Generateタスク にて参照されます。 (古いバージョンの DBFlute-1.0.x では、includeQueryMapという名前でした)

(CB)現場フィット - 条件メソッドの取捨選択

例えば、"日付のNotEqual" など、ほとんど利用しない条件は出力するだけソース量の無駄使い(コンパイルスピードに影響)なので、 出力しないようにしたい場合などに利用してください。 もし、アプリケーション全体で文字列型カラムに対して大なり小なり(>、<)の条件を付与することが絶対にないのであれば、String型の "GreaterThan, LessThan, GreaterEqual, LessEqual" を全て空指定すると効果が高いでしょう。間違った条件の付与を抑制するという面でも効果があります。

このプロパティは TwoEdgedSword 扱いです。厳重注意のもと 利用して下さい。

プロパティ

map型プロパティ で、メソッドとそれに対するテーブルとカラムのマッピングを定義します。

conditionBeanMapの仕様 @conditionBeanMap.dfprop
map:{
    ; [property-type] = map:{
        ; [condition-key] = map:{ [table-name] = list:{[column-name] ; ...} }
    ; ...
}

String、Number、Date の 3 種類の型に対して、それぞれ生成するメソッドを指定することができます。 このプロパティに定義した内容は、次のルールで ConditionBean に反映されます。

A. ConditionKey 自体が指定されていない
全てのテーブルのカラムにおいて、その ConditionKey のメソッドは生成される。 生成設定がされていない(デフォルトの挙動の)状態と言える。
B. ConditionKey にテーブルとカラムが指定されている
該当カラムに対してのみ、その ConditionKey のメソッドが生成される。
C. ConditionKey に何のテーブルも指定されていない
全てのカラムにおいて、その ConditionKey のメソッドは生成されない。
D. 除外指定の ConditionKey にテーブルとカラムが指定されている
"A" の場合でも該当カラムのその ConditionKey のメソッドは生成されない。ただし、"B" や "C" のように生成設定が明示的に指定されている場合は、該当カラムのおいてはこの除外指定は影響しない。 ("D" は、"A, B, C" に対する追加事象)

以下、(*)の付いたプロパティは必須です。

property-type (*)

プロパティ型を指定します。

値候補
String, Number, Date, OrderBy(@since 1.0.5B), Relation(@since 1.0.5G), Myself(@since 1.0.5B)
デフォルト
なし
補足
  • String, Number, Dateと、データ型ごとに指定できる
  • OrderByは、データ型ごとではなくひとまとまりである
  • OrderByは、ConditionKeyとして Asc, Desc が指定できる
  • Relationは、ExistsReferrer, InScopeRelation などが指定できる
  • Relationは、カラムの指定が意味をなさないのでカラム指定はしない
  • Myselfは、InlineView(@since 1.0.5G), ScalarCondition などが指定できる
  • Myselfは、カラムの指定が意味をなさないのでカラム指定はしない

condition-key (*)

生成対象の ConditionKey を指定します。

それぞれ先頭に "!" を付けると除外指定となります。また、"%" を付けると除外指定された中からの復活指定となります(@since 1.0.5B)

値候補
NotEqual, GreaterThan, LessThan, GreaterEqual, LessEqual, InScope, NotInScope, PrefixSearch, LikeSearch, NotLikeSearch, EmptyString, FromTo, DateFromTo(@since 0.9.7.5), RangeOf(@since 0.9.9.2C), IsNull(@since 1.0.5G), IsNullOrEmpty(@since 1.0.5G), IsNotNull(@since 1.0.5G)
Asc, Desc ※OrderByで利用可能 (@since 1.0.5B)
ScalarCondition, MyselfDerived, MyselfExists, MyselfInScope ※Myselfで利用可能 (@since 1.0.5B)
デフォルト
なし
補足
  • Equalは指定不可 (必ず生成される)
  • PrefixSearch, LikeSearch, NotLikeSearch, EmptyString は文字列型専用
  • FromTo, DateFromTo は日付型専用
  • RangeOf は数値型専用
  • EmptyStringは、別プロパティにて空文字条件が有効になっていることが前提。Equal、NotEqual が対象となり、それらメソッドの定義とは独立した設定となる。 (例えば、NotEqual自体が無効になっていても、EmptyStringが有効であれば、EmptyStringのNotEqualメソッドは生成される)
  • Asc, Desc は OrderBy 専用
  • ScalarCondition, MyselfDerived などは Myself 専用

依存関係のある演算子の指定は注意が必要です。例えば、FromTo の生成を完全に抑制した場合、DateFromTo のメソッドではコンパイルエラーが発生します(依存しているため)。LikeSearch と PrefixSearch も同様です。

table-name

対象とするテーブル名を指定します。

値候補
(自動生成対象)テーブルの名前 or $$ALL$$
デフォルト
なし
  • $$ALL$$ の場合は、対象カラムが存在する全てのテーブルに対して有効に
  • prefix:, suffix:などを使って曖昧検索もできる e.g. suffix:_STATUS (@since 1.0.5B)

column-name

対象とするカラム名を指定します。

値候補
カラムの名前 or $$CommonColumn$$ or $$VersionNo$$
デフォルト
なし
  • $$CommonColumn$$ の場合は、共通カラム全てを指定したことになる
  • $$VersionNo$$ の場合は、バージョン番号カラムを指定したことになる
  • prefix:, suffix: などを使って曖昧検索もできる e.g. suffix:_ORDER (@since 1.0.5B)
  • type: を使ってデータ型(JDBC型)による検索もできる e.g. type:CLOB (@since 1.0.5B)
  • プロパティ型が Myself のときは空っぽでOK (指定するものがないため) (@since 1.0.5B)

type: を使ったJDBC型指定は、ConditionKeyでの除外指定と組み合わせて、例えば「テキスト型に対するInScopeやNotEqualを抑制する」のに使うとよいでしょう。

Example

e.g. 含める、除外する

e.g. 文字列型カラムの大なり小なり比較を生成しない設定例 @includeQueryMap.dfprop
map:{
    ; String = map:{
        ; GreaterThan = map:{}
        ; LessThan = map:{}
        ; GreaterEqual = map:{}
        ; LessEqual = map:{}
    }
}
e.g. 特定のテーブルのカラムに対してのみ生成する設定例 @includeQueryMap.dfprop
map:{
    ; String = map:{
        ; GreaterThan = map:{ MEMBER = list:{ MEMBER_ACCOUNT } }
        ; LessThan = map:{
            ; PRODUCT = list:{ PRODUCT_NAME ; PRODUCT_HANDLE_CODE }
        }
    }
}
e.g. 文字列型の共通カラムの多くのメソッドを生成しない設定例 @includeQueryMap.dfprop
map:{
    ; String = map:{
        ; !NotEqual = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
        ; !GreaterThan = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
        ; !LessThan = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
        ; !GreaterEqual = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
        ; !LessEqual = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
        ; !InScope = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
        ; !NotInScope = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
        ; !PrefixSearch = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
        ; !LikeSearch = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
        ; !NotLikeSearch = map:{ $$ALL$$ = list:{ $$CommonColumn$$ } }
    }
}
e.g. VERSION_NO の多くのメソッドを生成しない設定例 @includeQueryMap.dfprop
map:{
    ; Number = map:{
        ; !GreaterThan = map:{ $$ALL$$ = list:{ $$VersionNo$$ } }
        ; !LessThan = map:{ $$ALL$$ = list:{ $$VersionNo$$ } }
        ; !GreaterEqual = map:{ $$ALL$$ = list:{ $$VersionNo$$ } }
        ; !LessEqual = map:{ $$ALL$$ = list:{ $$VersionNo$$ } }
        ; !InScope = map:{ $$ALL$$ = list:{ $$VersionNo$$ } }
        ; !NotInScope = map:{ $$ALL$$ = list:{ $$VersionNo$$ } }
    }
}

e.g. カラムドリブンで指定 @since 1.0.5G

もし、商品テーブルの REGULAR_PRICE は等値以外では絶対に使わないぞっ、というか使ってもらっちゃ困る、というときがあったら... @since 1.0.5G

e.g. 商品テーブルの REGULAR_PRICE は等値以外では使わないぞというときの設定例 @includeQueryMap.dfprop
map:{
    ; $Product = map:{
        ; REGULAR_PRICE(Number) = list:{}
    }
}

というか、REGULAR_PRICE は OrderBy でも使わないぞっ、というときがあったら...

e.g. さらに REGULAR_PRICE は OrderBy でも使わないぞというときの設定例 @includeQueryMap.dfprop
map:{
    ; $Product = map:{
        ; REGULAR_PRICE(Number) = list:{}
        ; REGULAR_PRICE(OrderBy) = list:{}
    }
}

そしてさらに、PRODUCT_HANDLE_CODE では曖昧検索は使わないぞっ、というときがあったら...

e.g. さらに REGULAR_PRICE は OrderBy でも使わないぞというときの設定例 @includeQueryMap.dfprop
map:{
    ; $Product = map:{
        ; REGULAR_PRICE(Number) = list:{}
        ; REGULAR_PRICE(OrderBy) = list:{}
        ; PRODUCT_HANDLE_CODE(String) = list:{
            ; !PrefixSearch ; !LikeSearch ; !NotLikeSearch
        }
    }
}

e.g. テーブル区分値のスーパースリム化 @since 1.0.5G

例えば、全てのテーブル区分値のテーブル名が CLS_ で始まっていて、CLS_FOO だと以下のようなカラム構成になっているとして...

FOO_CODE
codeに相当。主キーなので、DBFlute内部で色々と使う可能性がある
FOO_NAME
nameに相当。絞り込み条件やソート条件で使うようなことはない
FOO_ALIAS
aliasに相当。絞り込み条件やソート条件で使うようなことはない
DISPLAY_ORDER
ソートで使う。降順で並べることはない
COMMENT
commentに相当。絞り込み条件やソート条件で使うようなことは絶対にない

まずは、classificationDefinitionMap.dfpropにて、isSuppressDBAccessClass を true にします。 もし、Behaviorが必要なテーブル区分値があったら、その区分値だけ false にします。

e.g. Foo区分値のBehaviorを生成しない @classificationDefinitionMap.dfprop
map:{
    ; Foo = list:{
        ; map:{
            ; topComment=...; codeType=String
            ; isSuppressDBAccessClass = true
        }
        ...
    }
    ...
}
そして、ほとんどの絞り込み条件とソート条件を外します。DISPLAY_ORDERは Desc だけを抑制しています。さらに、InlineView も抑制しているので、CIQクラスが生成されません。
e.g. テーブル区分値のスーパースリム化の設定例 @includeQueryMap.dfprop
map:{
    ...
    ; $prefix:CLS_ = map:{
        ; suffix:_CODE(String) = list:{}
        ; suffix:_NAME(String) = list:{}
        ; suffix:_NAME(OrderBy) = list:{}
        ; suffix:_ALIAS(String) = list:{}
        ; suffix:_ALIAS(OrderBy) = list:{}
        ; DISPLAY_ORDER(Number) = list:{}
        ; DISPLAY_ORDER(OrderBy) = list:{ !Desc }
        ; suffix:_COMMENT(String) = list:{}
        ; suffix:_COMMENT(OrderBy) = list:{}
    }
    ; Relation = map:{
        ; !ExistsReferrer = map:{ prefix:CLS_ = list:{} }
        ; !InScopeRelation = map:{ prefix:CLS_ = list:{} }
        ; !DerivedReferrer = map:{ prefix:CLS_ = list:{} }
        ; !SpecifiedDerivedOrderBy = map:{ prefix:CLS_ = list:{} }
    }
    ; Myself = map:{
        ; !InlineView = map:{ prefix:CLS_ = list:{} }
        ; !ScalarCondition = map:{ prefix:CLS_ = list:{} }
        ; !MyselfDerived = map:{ prefix:CLS_ = list:{} }
        ; !MyselfExists = map:{ prefix:CLS_ = list:{} }
        ; !MyselfInScope = map:{ prefix:CLS_ = list:{} }
    }
}

もし、とある区分値だけ DISPLAY_ORDER で降順を使う、というような場合は、OrderByのプロパティ型にて復活指定を追加します。 (わりと多くの区分値で使うのであれば、そもそも除外指定の方を削除しましょう)

e.g. CLS_BAR だけは DISPLAY_ORDER で降順ソートする設定例 @includeQueryMap.dfprop
map:{
    ...
    ; OrderBy = map:{
        ; %Desc = map:{ CLS_BAR = list:{ DISPLAY_ORDER } }
    }
    ; $prefix:CLS_ = map:{
        ...
    }
    ...
}

もし、とある区分値だけ DerivedReferrer を使う、というような場合は、Relationのプロパティ型にて復活指定を追加します。 (わりと多くの区分値で使うのであれば、そもそも除外指定の方を削除しましょう)

e.g. CLS_BAR だけは DerivedReferrer する設定例 @includeQueryMap.dfprop
map:{
    ...
    ; Relation = map:{
        ; !ExistsReferrer = map:{ prefix:CLS_ = list:{} }
        ; !InScopeRelation = map:{ prefix:CLS_ = list:{} }
        ; !DerivedReferrer = map:{ prefix:CLS_ = list:{} }
        ; !SpecifiedDerivedOrderBy = map:{ prefix:CLS_ = list:{} }
        ; %DerivedReferrer = map:{ CLS_BAR = list:{} }
    }
    ...
}