Quill v3.6.0-RC1 Release Notes

  • Migration Notes:

    • This realease is not binary compatible with any Quill version before 3.5.3.
    • Any code generated by the Quill Code Generator with quote { ... } blocks will have to be regenerated with this Quill version if generated before 3.5.3.
    • In most SQL dialects (i.e. everything except Postgres) boolean literals and expressions yielding them are not supported so statements such as SELECT foo=bar FROM ... are not supported. In order to get equivalent logic, it is necessary to user case-statements e.g.

      SELECT CASE WHERE foo=bar THEN 1 ELSE 0`.
      

      On the other hand, in a WHERE-clause, it is the opposite:

      SELECT ... WHERE CASE WHEN (...) foo ELSE bar`
      

      is invalid and needs to be rewritten. Naively, a 1= could be inserted:

      SELECT ... WHERE 1 = (CASE WHEN (...) foo ELSE bar)
      

      Note that this behavior can disabled via the -Dquill.query.smartBooleans switch when issued during compile-time for compile-time queries and during runtime for runtime queries.

      Additionally, in certain situations, it is far more preferable to express this without the CASE WHEN construct:

      SELECT ... WHERE ((...) && foo) || !(...) && foo
      

      This is because CASE statements in SQL are not sargable and generally cannot be well optimized.

    • A large portion of the Quill DSL has been moved outside of QueryDsl into the top level under the io.getquill package. Due to this change, it may be necessary to import io.getquill.Query if you are not already importing io.getquill._.