Skip to content

Commit 3457127

Browse files
committed
Format SQL CASE statements for improved readability and consistency
1 parent 90dbb7a commit 3457127

File tree

5 files changed

+140
-13
lines changed

5 files changed

+140
-13
lines changed

src/test/testData/sql/formatter/ComparisonOperators_format.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ SELECT id
4646
, quantity >> 10 AS much_greater
4747
,
4848
-- Complex conditions with multiple operators
49-
CASE WHEN json_data ->> 'status' <> 'active' THEN 'inactive'
49+
CASE
50+
WHEN json_data ->> 'status' <> 'active' THEN 'inactive'
5051
WHEN json_data ->> 'priority' >= '5' THEN 'high'
5152
ELSE 'normal'
5253
END AS status_priority
Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,41 @@
1-
Select case when div = 'A' then 'AAA'
2-
when div = 'B' then 'BBB'
3-
else 'CCC' end as divName
4-
from users
1+
SELECT *
2+
, CASE
3+
/** case-end */
4+
WHEN SUM(CASE WHEN name = 'apple' THEN 1
5+
WHEN name = 'berry' THEN 3
6+
ELSE 0
7+
END) > 0 THEN 'x'
8+
-- active check
9+
WHEN SUM(CASE
10+
WHEN NOT EXISTS ( SELECT number
11+
FROM users
12+
WHERE status = 1 ) THEN 1
13+
ELSE 0
14+
END) > 0 THEN 'y'
15+
WHEN SUM(CASE
16+
WHEN position > 100
17+
AND count(*) > 10 THEN 1
18+
OR number > 10 THEN 1
19+
WHEN position <= 100
20+
OR count(*) > 10 THEN 1
21+
ELSE 0
22+
END) > 0 THEN 'z'
23+
ELSE 0
24+
END AS user_status
25+
FROM active_users
26+
ORDER BY CASE
27+
WHEN orders = 1 THEN 1
28+
ELSE 2
29+
END
30+
, CASE
31+
WHEN pickup IS NULL THEN
32+
CASE
33+
WHEN case_status THEN 0
34+
ELSE 1
35+
END
36+
ELSE
37+
CASE
38+
WHEN case_static_status THEN 0
39+
ELSE 1
40+
END
41+
END
Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,32 @@
1-
Select case when div = 'A' then 'AAA'
1+
Select case /*%if isCheckStatus */
2+
WHEN status = '1' THEN 1
3+
/*%else */
4+
/*%if hasPoint */
5+
WHEN status = '2' THEN 2
6+
/*%end*/
7+
/*%end*/
8+
when div = 'A' then 'AAA'
29
/*%if addCondition*/
310
/*%if conditionType == 1 */when div = 'B' then 'BBB1'
411
/*%elseif conditionType == 2 */
512
when div = 'B' then 'BBB2'
613
/*%end*/
714
/*%end*/
815
else 'CCC' end as divName
9-
from users
16+
from users
17+
ORDER BY CASE
18+
WHEN pickup IS NULL THEN
19+
/*%if isCase*/
20+
CASE
21+
WHEN case_status = 1 THEN 0
22+
ELSE 1
23+
END
24+
/*%elseif isCaseEnd*/
25+
CASE
26+
WHEN case_status = 2 THEN 0 ELSE 1 END
27+
/*%else*/
28+
0
29+
/*%end*/
30+
ELSE CASE
31+
WHEN case_static_status THEN 0 ELSE 1
32+
END END

src/test/testData/sql/formatter/SelectCaseEndWithCondition_format.sql

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
SELECT CASE WHEN div = 'A' THEN 'AAA'
1+
SELECT CASE
2+
/*%if isCheckStatus */
3+
WHEN status = '1' THEN 1
4+
/*%else */
5+
/*%if hasPoint */
6+
WHEN status = '2' THEN 2
7+
/*%end*/
8+
/*%end*/
9+
WHEN div = 'A' THEN 'AAA'
210
/*%if addCondition*/
311
/*%if conditionType == 1 */
412
WHEN div = 'B' THEN 'BBB1'
@@ -9,3 +17,24 @@ SELECT CASE WHEN div = 'A' THEN 'AAA'
917
ELSE 'CCC'
1018
END AS divName
1119
FROM users
20+
ORDER BY CASE
21+
WHEN pickup IS NULL THEN
22+
/*%if isCase*/
23+
CASE
24+
WHEN case_status = 1 THEN 0
25+
ELSE 1
26+
END
27+
/*%elseif isCaseEnd*/
28+
CASE
29+
WHEN case_status = 2 THEN 0
30+
ELSE 1
31+
END
32+
/*%else*/
33+
0
34+
/*%end*/
35+
ELSE
36+
CASE
37+
WHEN case_static_status THEN 0
38+
ELSE 1
39+
END
40+
END
Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,42 @@
1-
SELECT CASE WHEN div = 'A' THEN 'AAA'
2-
WHEN div = 'B' THEN 'BBB'
3-
ELSE 'CCC'
4-
END AS divName
5-
FROM users
1+
SELECT *
2+
, CASE
3+
/** case-end */
4+
WHEN SUM(CASE
5+
WHEN name = 'apple' THEN 1
6+
WHEN name = 'berry' THEN 3
7+
ELSE 0
8+
END) > 0 THEN 'x'
9+
-- active check
10+
WHEN SUM(CASE
11+
WHEN NOT EXISTS ( SELECT number
12+
FROM users
13+
WHERE status = 1 ) THEN 1
14+
ELSE 0
15+
END) > 0 THEN 'y'
16+
WHEN SUM(CASE
17+
WHEN position > 100
18+
AND count(*) > 10 THEN 1
19+
OR number > 10 THEN 1
20+
WHEN position <= 100
21+
OR count(*) > 10 THEN 1
22+
ELSE 0
23+
END) > 0 THEN 'z'
24+
ELSE 0
25+
END AS user_status
26+
FROM active_users
27+
ORDER BY CASE
28+
WHEN orders = 1 THEN 1
29+
ELSE 2
30+
END
31+
, CASE
32+
WHEN pickup IS NULL THEN
33+
CASE
34+
WHEN case_status THEN 0
35+
ELSE 1
36+
END
37+
ELSE
38+
CASE
39+
WHEN case_static_status THEN 0
40+
ELSE 1
41+
END
42+
END

0 commit comments

Comments
 (0)