2016-04-18 15 views
0

これまで気付いたことがあったのですが、Conditionはプライベートスタティックファイナルになっていませんでしたが、私はもっと問題があるので、特に私がクエリをデバッグしている場合。 (私は3.7.3で、現在だが、私は3.3.xの中で前にこれを見てきた)ここに例があります:ORDER BYのデータと条件が呼び出されるたびにクエリ内で

 final SelectJoinStep<Record13<String, String, String, String, String, BigDecimal, BigDecimal, BigDecimal, String, BigDecimal, String, String, Byte>> query = getSelect() 
       .from(getFrom(coConditions, 
         ConditionUtils.buildCondition(cortConditions, removeCortBySpeciality), 
         ConditionUtils.buildCondition(cosConditions, removeCosBySensitivity), tuConditions, 
         uaConditions, enableBlackMajik)); 
     final SortField<?>[] orders = new SortField[] {DSL.inline(Integer.valueOf(2)).asc(), 
       DSL.inline(Integer.valueOf(1)).asc(), DSL.inline(Integer.valueOf(6)).asc()}; 

     if (cosConditions.isPresent()) { 
      User.logger.error(builder.renderInlined(query.where(cosConditions.get()).orderBy(orders))); 
      return query.where(cosConditions.get()).orderBy(orders); 
     } 

     User.logger.error(builder.renderInlined(query.orderBy(orders))); 
     return query.orderBy(orders); 

ここだけORDER BYを示すロガー呼び出しからSQLの抜粋です:

ここで、さらなる楽しみを表示するために、今すぐ

order by 
    2 asc, 
    1 asc, 
    6 asc, 
    2 asc, 
    1 asc, 
    6 asc 

別のコードスニペット書かれたジュースです:

order by 
    2 asc, 
    1 asc, 
    6 asc 

そしてここでは、SQLサーバーに送信されORDER BYのSQLスニペットですDBが見る何

order by 
    2 asc, 
    1 asc, 
    6 asc, 
    2 asc, 
    1 asc, 
    6 asc, 
    2 asc, 
    1 asc, 
    6 asc 

 User.logger.error(builder.renderInlined(query.orderBy(orders))); 
     User.logger.error(builder.renderInlined(query.orderBy(orders))); 
     User.logger.error(builder.renderInlined(query.orderBy(orders))); 
     return query.orderBy(orders); 

まずロガーコール:

order by 
    2 asc, 
    1 asc, 
    6 asc 

セカンドロガーコール:

order by 
    2 asc, 
    1 asc, 
    6 asc, 
    2 asc, 
    1 asc, 
    6 asc 

サードロガーコールの問題を実証するためのトン:

order by 
    2 asc, 
    1 asc, 
    6 asc, 
    2 asc, 
    1 asc, 
    6 asc, 
    2 asc, 
    1 asc, 
    6 asc, 
    2 asc, 
    1 asc, 
    6 asc 

は、再び、私は実際に私が呼び出すたびConditionが、それは私が私の条件を構築し、唯一の(静的たら、それらを参照するポイントに複製され、私のCondition sの前に、行動のこの種を、気づきましたいくつかの楽しみのために作られたもの)。誰もがなぜこの動作を見ているのかを知っていますか?

答えて

1

これは、jOOQのAPI設計上の欠陥のため、jOOQはかなりの期間持ち越されており、jOOQ 4.0(#2198)で修正される予定です。

一般的に、DSL APIは不変であるとは限りません(そうする必要はありますが)。したがって、orderBy()への連続した呼び出しは、実際にはそれぞれORDER BY列セットを追加しますが、最初のものだけを表示するので、表示されません。

現在の振る舞いは、(「無常」にスクロール)ここで説明されています

http://www.jooq.org/doc/latest/manual/sql-building/sql-statements/dsl-and-non-dsl

+1

私はこの全体の時間は、私はクレイジーではなかったことを見つけることがうれしいです! SQLサーバにクエリを実行して、実行中の時間を確認し、「待って...倍増することを覚えていない」という私の頭を傷つけます。 – DanO

関連する問題