Skip to content

Commit ece3a11

Browse files
committed
Improve the CREATE MATERIALIZED VIEW format
1 parent a812844 commit ece3a11

11 files changed

Lines changed: 160 additions & 108 deletions

parser/format.go

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ func (c *CreateDatabase) FormatSQL(formatter *Formatter) {
735735
formatter.WriteExpr(c.OnCluster)
736736
}
737737
if c.Engine != nil {
738-
formatter.WriteByte(whitespace)
738+
formatter.Break()
739739
formatter.WriteExpr(c.Engine)
740740
}
741741
if c.Comment != nil {
@@ -844,19 +844,21 @@ func (c *CreateMaterializedView) FormatSQL(formatter *Formatter) {
844844
}
845845
formatter.WriteExpr(c.Name)
846846
if c.OnCluster != nil {
847-
formatter.WriteByte(whitespace)
847+
formatter.Break()
848848
formatter.WriteExpr(c.OnCluster)
849849
}
850850
if c.Refresh != nil {
851-
formatter.WriteByte(whitespace)
851+
formatter.Break()
852852
formatter.WriteExpr(c.Refresh)
853853
}
854854
if c.RandomizeFor != nil {
855-
formatter.WriteString(" RANDOMIZE FOR ")
855+
formatter.Break()
856+
formatter.WriteString("RANDOMIZE FOR ")
856857
formatter.WriteExpr(c.RandomizeFor)
857858
}
858859
if c.DependsOn != nil {
859-
formatter.WriteString(" DEPENDS ON ")
860+
formatter.Break()
861+
formatter.WriteString("DEPENDS ON ")
860862
for i, dep := range c.DependsOn {
861863
if i > 0 {
862864
formatter.WriteString(", ")
@@ -865,48 +867,54 @@ func (c *CreateMaterializedView) FormatSQL(formatter *Formatter) {
865867
}
866868
}
867869
if c.Settings != nil {
868-
formatter.WriteByte(whitespace)
870+
formatter.Break()
869871
formatter.WriteExpr(c.Settings)
870872
}
871873
if c.HasAppend {
872-
if c.Settings != nil {
873-
formatter.Break()
874-
} else {
875-
formatter.WriteByte(whitespace)
876-
}
874+
formatter.Break()
877875
formatter.WriteString("APPEND")
878876
}
879877
if c.Engine != nil {
878+
formatter.Break()
880879
formatter.WriteExpr(c.Engine)
881880
}
882881
if c.Destination != nil {
883-
formatter.WriteByte(whitespace)
882+
formatter.Break()
884883
formatter.WriteExpr(c.Destination)
885884
if c.Destination.TableSchema != nil {
886-
formatter.WriteByte(whitespace)
885+
formatter.Break()
887886
formatter.WriteExpr(c.Destination.TableSchema)
888887
}
889888
}
890889
if c.HasEmpty {
891-
formatter.WriteString(" EMPTY")
890+
formatter.Break()
891+
formatter.WriteString("EMPTY")
892892
}
893893
if c.Definer != nil {
894-
formatter.WriteString(" DEFINER = ")
894+
formatter.Break()
895+
formatter.WriteString("DEFINER = ")
895896
formatter.WriteExpr(c.Definer)
896897
}
897898
if c.SQLSecurity != "" {
898-
formatter.WriteString(" SQL SECURITY ")
899+
formatter.Break()
900+
formatter.WriteString("SQL SECURITY ")
899901
formatter.WriteString(c.SQLSecurity)
900902
}
901903
if c.Populate {
902-
formatter.WriteString(" POPULATE")
904+
formatter.Break()
905+
formatter.WriteString("POPULATE")
903906
}
904907
if c.SubQuery != nil {
905-
formatter.WriteString(" AS ")
908+
formatter.Break()
909+
formatter.WriteString("AS")
910+
formatter.Indent()
911+
formatter.Break()
906912
formatter.WriteExpr(c.SubQuery)
913+
formatter.Dedent()
907914
}
908915
if c.Comment != nil {
909-
formatter.WriteString(" COMMENT ")
916+
formatter.Break()
917+
formatter.WriteString("COMMENT ")
910918
formatter.WriteExpr(c.Comment)
911919
}
912920
}
@@ -986,6 +994,7 @@ func (c *CreateTable) FormatSQL(formatter *Formatter) {
986994
formatter.WriteExpr(c.TableSchema)
987995
}
988996
if c.Engine != nil {
997+
formatter.Break()
989998
formatter.WriteExpr(c.Engine)
990999
}
9911000
if c.SubQuery != nil {
@@ -1359,7 +1368,6 @@ func (d *DropUserOrRole) FormatSQL(formatter *Formatter) {
13591368
}
13601369

13611370
func (e *EngineExpr) FormatSQL(formatter *Formatter) {
1362-
formatter.Break()
13631371
formatter.WriteString("ENGINE = ")
13641372
formatter.WriteString(e.Name)
13651373
if e.Params != nil {

parser/testdata/ddl/format/beautify/bug_001.sql

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,23 @@ FROM db.table
1818
WHERE db.table.event = 'hello';
1919

2020
-- Beautify SQL:
21-
CREATE MATERIALIZED VIEW IF NOT EXISTS db.table ON CLUSTER 'default_cluster' TO db.table_mv AS SELECT
22-
event_ts,
23-
org_id,
24-
visitParamExtractString(properties, 'x') AS x,
25-
visitParamExtractString(properties, 'y') AS y,
26-
visitParamExtractString(properties, 'z') AS z,
27-
visitParamExtractString(properties, 'a') AS a,
28-
visitParamExtractString(properties, 'b') AS b,
29-
visitParamExtractString(properties, 'c') AS c,
30-
visitParamExtractString(properties, 'd') AS d,
31-
visitParamExtractInt(properties, 'e') AS e,
32-
visitParamExtractInt(properties, 'f') AS f
33-
FROM
34-
db.table
35-
WHERE
36-
db.table.event = 'hello';
21+
CREATE MATERIALIZED VIEW IF NOT EXISTS db.table
22+
ON CLUSTER 'default_cluster'
23+
TO db.table_mv
24+
AS
25+
SELECT
26+
event_ts,
27+
org_id,
28+
visitParamExtractString(properties, 'x') AS x,
29+
visitParamExtractString(properties, 'y') AS y,
30+
visitParamExtractString(properties, 'z') AS z,
31+
visitParamExtractString(properties, 'a') AS a,
32+
visitParamExtractString(properties, 'b') AS b,
33+
visitParamExtractString(properties, 'c') AS c,
34+
visitParamExtractString(properties, 'd') AS d,
35+
visitParamExtractInt(properties, 'e') AS e,
36+
visitParamExtractInt(properties, 'f') AS f
37+
FROM
38+
db.table
39+
WHERE
40+
db.table.event = 'hello';

parser/testdata/ddl/format/beautify/create_database_replicated.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ CREATE DATABASE IF NOT EXISTS `test` ENGINE=Replicated('/root/test_local', 'shar
33

44

55
-- Beautify SQL:
6-
CREATE DATABASE IF NOT EXISTS `test`
6+
CREATE DATABASE IF NOT EXISTS `test`
77
ENGINE = Replicated('/root/test_local', 'shard', 'replica');

parser/testdata/ddl/format/beautify/create_materialized_view_basic.sql

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,27 @@ WHERE
2323
COMMENT 'Comment for table';
2424

2525
-- Beautify SQL:
26-
CREATE MATERIALIZED VIEW infra_bm.view_name ON CLUSTER 'default_cluster' TO infra_bm.table_name (
26+
CREATE MATERIALIZED VIEW infra_bm.view_name
27+
ON CLUSTER 'default_cluster'
28+
TO infra_bm.table_name
29+
(
2730
`f1` DateTime64(3),
2831
`f2` String,
2932
`f3` String,
3033
`f4` String,
3134
`f5` String,
3235
`f6` Int64
33-
) AS SELECT
34-
f1,
35-
f2,
36-
visitParamExtractString(properties, 'f3') AS f3,
37-
visitParamExtractString(properties, 'f4') AS f4,
38-
visitParamExtractString(properties, 'f5') AS f5,
39-
visitParamExtractInt(properties, 'f6') AS f6
40-
FROM
41-
infra_bm.table_name1
42-
WHERE
43-
infra_bm.table_name1.event = 'test-event' COMMENT 'Comment for table';
36+
)
37+
AS
38+
SELECT
39+
f1,
40+
f2,
41+
visitParamExtractString(properties, 'f3') AS f3,
42+
visitParamExtractString(properties, 'f4') AS f4,
43+
visitParamExtractString(properties, 'f5') AS f5,
44+
visitParamExtractInt(properties, 'f6') AS f6
45+
FROM
46+
infra_bm.table_name1
47+
WHERE
48+
infra_bm.table_name1.event = 'test-event'
49+
COMMENT 'Comment for table';

parser/testdata/ddl/format/beautify/create_materialized_view_with_definer.sql

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,23 @@ COMMENT 'Test comment'
1717

1818

1919
-- Beautify SQL:
20-
CREATE MATERIALIZED VIEW fresh_mv REFRESH EVERY 1 HOUR OFFSET 10 MINUTE APPEND TO events_export (
20+
CREATE MATERIALIZED VIEW fresh_mv
21+
REFRESH EVERY 1 HOUR OFFSET 10 MINUTE
22+
APPEND
23+
TO events_export
24+
(
2125
`timestamp` DateTime64(9),
2226
`field_1` String,
2327
`field_2` String
24-
) DEFINER = default SQL SECURITY DEFINER AS (SELECT
25-
timestamp,
26-
field_1,
27-
field_2,
28-
FROM AS event_table
29-
WHERE
30-
toStartOfHour(timestamp) = toStartOfHour(now() - toIntervalHour(1))) COMMENT 'Test comment';
28+
)
29+
DEFINER = default
30+
SQL SECURITY DEFINER
31+
AS
32+
(SELECT
33+
timestamp,
34+
field_1,
35+
field_2,
36+
FROM AS event_table
37+
WHERE
38+
toStartOfHour(timestamp) = toStartOfHour(now() - toIntervalHour(1)))
39+
COMMENT 'Test comment';

parser/testdata/ddl/format/beautify/create_materialized_view_with_empty_table_schema.sql

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,31 @@ from
1616
where rn = 1;
1717

1818
-- Beautify SQL:
19-
CREATE MATERIALIZED VIEW test.t0 ON CLUSTER default_cluster
19+
CREATE MATERIALIZED VIEW test.t0
20+
ON CLUSTER default_cluster
2021
ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/{layer}-{shard}/test/t0', '{replica}')
2122
ORDER BY
2223
(f0)
23-
PARTITION BY toYYYYMM(f0) POPULATE AS SELECT
24-
f0,
25-
f1,
26-
f2,
27-
coalesce(f0, f1) AS f333
28-
FROM
29-
(SELECT
24+
PARTITION BY toYYYYMM(f0)
25+
POPULATE
26+
AS
27+
SELECT
3028
f0,
3129
f1,
3230
f2,
33-
ROW_NUMBER() OVER (PARTITION BY f0 ORDER BY
34-
coalesce(f1, f2)) AS rn
31+
coalesce(f0, f1) AS f333
3532
FROM
36-
test.t
33+
(SELECT
34+
f0,
35+
f1,
36+
f2,
37+
ROW_NUMBER() OVER (PARTITION BY f0 ORDER BY
38+
coalesce(f1, f2)) AS rn
39+
FROM
40+
test.t
41+
WHERE
42+
f3 IN ('foo', 'bar', 'test')
43+
AND
44+
env = 'test') AS tmp
3745
WHERE
38-
f3 IN ('foo', 'bar', 'test')
39-
AND
40-
env = 'test') AS tmp
41-
WHERE
42-
rn = 1;
46+
rn = 1;

parser/testdata/ddl/format/beautify/create_materialized_view_with_gcs.sql

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ CREATE MATERIALIZED VIEW database_name.view_name
44
SELECT * FROM gcs(gcs_creds,url='https://storage.googleapis.com/some-bucket/some-path/');
55

66
-- Beautify SQL:
7-
CREATE MATERIALIZED VIEW database_name.view_name REFRESH EVERY 5 MINUTE TO database_name.table_name AS SELECT
8-
*
9-
FROM
10-
gcs(gcs_creds, url='https://storage.googleapis.com/some-bucket/some-path/');
7+
CREATE MATERIALIZED VIEW database_name.view_name
8+
REFRESH EVERY 5 MINUTE
9+
TO database_name.table_name
10+
AS
11+
SELECT
12+
*
13+
FROM
14+
gcs(gcs_creds, url='https://storage.googleapis.com/some-bucket/some-path/');

parser/testdata/ddl/format/beautify/create_materialized_view_with_refresh.sql

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,20 @@ AS SELECT
1616
FROM table_v5
1717

1818
-- Beautify SQL:
19-
CREATE MATERIALIZED VIEW fresh_mv REFRESH EVERY 1 HOUR OFFSET 10 MINUTE RANDOMIZE FOR 1 SECOND DEPENDS ON table_v5 SETTINGS
19+
CREATE MATERIALIZED VIEW fresh_mv
20+
REFRESH EVERY 1 HOUR OFFSET 10 MINUTE
21+
RANDOMIZE FOR 1 SECOND
22+
DEPENDS ON table_v5
23+
SETTINGS
2024
randomize_for=1,
2125
randomize_offset=10,
2226
randomize_period=1
23-
APPEND TO target_table_name EMPTY AS SELECT
24-
`field_1`,
25-
`field_2`,
26-
`field_3`,
27-
FROM AS table_v5;
27+
APPEND
28+
TO target_table_name
29+
EMPTY
30+
AS
31+
SELECT
32+
`field_1`,
33+
`field_2`,
34+
`field_3`,
35+
FROM AS table_v5;

parser/testdata/ddl/format/beautify/create_mv_with_not_op.sql

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,30 @@ WHERE infra_bm.table_name1.event = 'test-event' AND
2020
NOT isZeroOrNull(f2) AND f6-2 > 0
2121

2222
-- Beautify SQL:
23-
CREATE MATERIALIZED VIEW infra_bm.view_name ON CLUSTER 'default_cluster' TO infra_bm.table_name (
23+
CREATE MATERIALIZED VIEW infra_bm.view_name
24+
ON CLUSTER 'default_cluster'
25+
TO infra_bm.table_name
26+
(
2427
`f1` DateTime64(3),
2528
`f2` String,
2629
`f3` String,
2730
`f4` String,
2831
`f5` String,
2932
`f6` Int64
30-
) AS SELECT
31-
f1,
32-
f2,
33-
visitParamExtractString(properties, 'f3') AS f3,
34-
visitParamExtractString(properties, 'f4') AS f4,
35-
visitParamExtractString(properties, 'f5') AS f5,
36-
visitParamExtractInt(properties, 'f6') AS f6
37-
FROM
38-
infra_bm.table_name1
39-
WHERE
40-
infra_bm.table_name1.event = 'test-event'
41-
AND
42-
NOT isZeroOrNull(f2)
43-
AND
44-
f6 - 2 > 0;
33+
)
34+
AS
35+
SELECT
36+
f1,
37+
f2,
38+
visitParamExtractString(properties, 'f3') AS f3,
39+
visitParamExtractString(properties, 'f4') AS f4,
40+
visitParamExtractString(properties, 'f5') AS f5,
41+
visitParamExtractInt(properties, 'f6') AS f6
42+
FROM
43+
infra_bm.table_name1
44+
WHERE
45+
infra_bm.table_name1.event = 'test-event'
46+
AND
47+
NOT isZeroOrNull(f2)
48+
AND
49+
f6 - 2 > 0;

0 commit comments

Comments
 (0)