2016-03-22 43 views
1

Postgresqlの9.4.5 jOOQ 3.7.2 方言j00Q DSLは、このコードを使用するとうまくいくように見えます。jOOQ集計関数

ここで、rowToJsonはpostgres関数のラッパーです。現在、私はこれでその周りに働いている

array_agg(row_to_json(foo) order by "foo"."name" asc)

::これはレンダリングSQLがこれです

public static <T> Field<T[]> arrayAgg(Field<T> field, final SortField<?> sort, final Condition filter) { 
    return field("array_agg({0} order by {1}) filter (where {2})", field.getDataType().getArrayDataType(), field, sort, filter); 
} 

質問は、動作するように意図最初のコードはありますか?そうでない場合、jooQでこの集合関数を生成する正しい方法は何ですか?

答えて

2

これはjOOQ(#5158)のバグで、次のリリースで修正されます。

私は考えることができる2つの回避策があります。

  • あなた自身を提案してきた1:正しく再実装機能にプレーンなSQLを使用しては。 CASEFILTERをエミュレートすることにより
  • arrayRemove(
        arrayAgg(when(FOO.NAME.isNotNull(), rowToJson(FOO))).orderBy(FOO.NAME)) 
        , null 
    ) 
    

    PostgresDSL.arrayRemove()

を参照してください。