2017-01-29 21 views
1

私はjooq 3.9.1を使用しています。 PostgreSQLの演算子と関数に基づいて条件を追加してクエリを記述したいと思います。jOOQ PostgreSQLの関数と演算子を実行する方法

などの配列の場合、&&などの多くの演算子があり、またはarray_prependのような関数を使用したいと考えています。

これを達成する最も良い方法は何ですか?

私はjOOQ 3.9では

int[] array_of_values = {1,2,3}; 

selectOne() 
    .from(TABLE) 
    .where(TABLE.COL_A.eq("Hello")) 
    .and(TABLE.COL_B.operator("&&").of(array_of_values)) 
    .fetch(); 

答えて

2

のようなものがあるはず、ここで前進するための標準的な方法は、これは便宜上SelectConditionStep.and(String, QueryPart...)方法を使用しますが、そこにされてuse the plain SQL API

selectOne() 
    .from(TABLE) 
    .where(TABLE.COL_A.eq("Hello")) 
    .and("{0} && {1}", TABLE.COL_B, val(array_of_values)) 
    .fetch(); 

にあると信じて使用方法を含む他の方法ですDSL.condition()

あなたのアイデアは非常に良いものです。私はfeature request for jOOQ 3.10を登録しました。

+0

答えをありがとう。 オペランドメソッドに 'String'を渡すのを避けるために、各方言ごとに演算子を持つ列挙型を持つこともいいでしょうが、余分な余分なものになる可能性があることを理解しています。 –

+1

@mat_boy:心配しないで、(結局のところ)これを抽象化するための 'org.jooq.Operator'型があります。ほとんどのデータベースで独自の演算子を定義できるため、列挙型についてはわかりません。演算子コードの生成が行われます。 Oracleの場合:https://github.com/jOOQ/jOOQ/issues/3710 –

関連する問題