You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Andrus Adamchik (Jira)" <ji...@apache.org> on 2026/07/04 19:32:00 UTC

[jira] [Created] (CAY-2972) Fewer parentheses in generated SQL

Andrus Adamchik created CAY-2972:
------------------------------------

             Summary: Fewer parentheses in generated SQL
                 Key: CAY-2972
                 URL: https://issues.apache.org/jira/browse/CAY-2972
             Project: Cayenne
          Issue Type: Task
            Reporter: Andrus Adamchik
            Assignee: Andrus Adamchik
             Fix For: 5.0-M3


Cayenne's fluent SQL generator (used by ObjectSelect, DELETE, UPDATE, CASE, join ON clauses, etc.) wraps every expression node in parentheses unless its parent is a top-level clause. There is no operator-precedence awareness. This produces noisy SQL like:
{noformat}
 DELETE FROM test WHERE ((col1 = 1) AND (col2 = 'test')) AND (col3 IS NULL){noformat}
 So, let's do this: 

 1. Drop parens around all comparison operators (=, <>, <, <=, >, >=, LIKE, BETWEEN) when they sit directly under AND/OR.
 2. Drop parens for chained same-operator logical connectives (AND under AND, OR under OR).
 3. Keep parens for mixed AND/OR combinations (e.g. (a OR b) AND c) and for everything else (arithmetic, bitwise, custom ops, NOT)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)