Clause Newlines
Major SQL clauses (FROM, WHERE, GROUP BY, ORDER BY, JOIN, etc.) should each start on their own line.
Default: clauseLayout=indented — each clause starts on a new line at the current indent level.
Off: clauseLayout=inline — all clauses stay on one line.
Affected clauses: FROM, WHERE, HAVING, GROUP BY, ORDER BY, SORT BY, LIMIT, WINDOW, QUALIFY, RETURNING, JOIN (all types), FETCH, MERGE WHEN, VALUES, SET, UNION/INTERSECT/EXCEPT. Note: INSERT INTO stays on one line.
Simple SELECT with FROM
select a, b, c from t
select a, b, c from t
SELECT with WHERE
select a from t where x > 1
select a from t where x > 1
SELECT with GROUP BY and ORDER BY
select a, count(*) from t group by a order by a
select a, count(*) from t group by a order by a
SELECT with HAVING
select a, count(*) from t group by a having count(*) > 1
select a, count(*) from t group by a having count(*) > 1
SELECT with LIMIT
select a from t limit 10
select a from t limit 10
UNION ALL between two SELECTs
Set operators should start on their own line like other clauses.
select a, b from t1 where x > 1 union all select c, d from t2 where y < 2
(select a, b from t1 where x > 1) union all (select c, d from t2 where y < 2)
UNION inside subquery
select * from (select a from t1 union select b from t2) as combined
select * from (select a from t1 union select b from t2) as combined
Mixed UNION and INTERSECT
select a from t1 union select b from t2 intersect select c from t3
(select a from t1) union (select b from t2) intersect (select c from t3)
Recursive CTE with UNION ALL
UNION ALL inside a CTE body should get its own line.
with recursive nums as (select 1 as n union all select n + 1 from nums where n < 10) select n from nums
with recursive
nums as ((select 1 as n) union all (select n + 1 from nums where n < 10))
select n
from nums
SELECT 1 trivial
select 1
select 1
SELECT NULL trivial
select null
select null
BETWEEN expression
BETWEEN in WHERE clause — AND is part of the BETWEEN syntax, not a boolean operator.
select a from t where x between 1 and 10
select a from t where x between 1 and 10
EXISTS subquery
select a from t where exists (select 1 from t2 where t2.id = t.id)
select a from t where exists(select 1 from t2 where t2.id = t.id)
Window function OVER
Window function with OVER clause.
select row_number() over (partition by a order by b) from t
select row_number() over (partition by a order by b) from t
Window function with frame
Window function with frame specification.
select sum(a) over (order by b rows between unbounded preceding and current row) from t
select sum(a) over (order by b rows between unbounded preceding and current row)
from t
Clause newline off
select a from t where x > 1
select a from t where x > 1
Simple JOIN
select a from t1 join t2 on t1.id = t2.id
select a from t1 join t2 on t1.id = t2.id
Multiple JOINs
select a from t1 join t2 on t1.id = t2.id left join t3 on t2.id = t3.id
select a from t1 join t2 on t1.id = t2.id left join t3 on t2.id = t3.id
JOIN at same level as FROM
JOIN clauses render at the same indentation level as FROM.
select a from t1 join t2 on t1.id = t2.id
select a from t1 join t2 on t1.id = t2.id
Multiple JOINs at same level as FROM
select a from t1 join t2 on t1.id = t2.id left join t3 on t2.id = t3.id
select a from t1 join t2 on t1.id = t2.id left join t3 on t2.id = t3.id
JOIN with AND in ON
select a from t1 join t2 on t1.id = t2.id and t1.x = t2.x
select a from t1 join t2 on t1.id = t2.id and t1.x = t2.x
Extra spaces normalized
Extra whitespace between tokens is collapsed to standard spacing.
select a , b from t where x > 1
select a, b from t where x > 1
Tabs normalized to spaces
select a, b from t where x > 1
select a, b from t where x > 1
Newlines in wrong places
Broken mid-clause — the formatter restructures clauses onto proper lines.
select a,
b from
t where
x > 1 and
y < 2
select a, b from t where x > 1 and y < 2
THEN starts its own line when the condition broke
Whether THEN got its own line used to depend only on whether THEN plus its result would overrun
the budget from wherever the condition happened to end. After a condition that broke, the last line
is short, so there was room and THEN glued to it — reading as part of the condition:
when kilde_uuid = 'c7745c33-...'
and hendelse in ('INNKALT', 'NYTT_TID_STED') then to_date('2022-01-06', 'YYYY-MM-DD')
A single CASE would then alternate between the two shapes, arm by arm, depending on how each
condition's last line landed. An arm that is multi-line at all puts THEN on its own line, at the
WHEN keyword's level.
select case when a = 1 and b in ('xxxxxxxxxx', 'yyyyyyyyyy', 'zzzzzzzzzz') then 2 else 3 end as v from t
select
case
when a = 1 and b in ('xxxxxxxxxx', 'yyyyyyyyyy', 'zzzzzzzzzz')
then 2
else 3
end as v
from t