Skip to content

Commit ec42872

Browse files
authored
Fix missing type level in codec constraint (#82)
1 parent ee8419d commit ec42872

File tree

6 files changed

+32
-2
lines changed

6 files changed

+32
-2
lines changed

parser/ast.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3276,6 +3276,7 @@ type CompressionCodec struct {
32763276
CodecPos Pos
32773277
RightParenPos Pos
32783278
Type *Ident
3279+
TypeLevel *NumberLiteral
32793280
Name *Ident
32803281
Level *NumberLiteral // compression level
32813282
}
@@ -3293,6 +3294,11 @@ func (c *CompressionCodec) String(level int) string {
32933294
builder.WriteString("CODEC(")
32943295
if c.Type != nil {
32953296
builder.WriteString(c.Type.String(level))
3297+
if c.TypeLevel != nil {
3298+
builder.WriteByte('(')
3299+
builder.WriteString(c.TypeLevel.String(level))
3300+
builder.WriteByte(')')
3301+
}
32963302
builder.WriteByte(',')
32973303
builder.WriteByte(' ')
32983304
}
@@ -3309,6 +3315,14 @@ func (c *CompressionCodec) String(level int) string {
33093315
func (c *CompressionCodec) Accept(visitor ASTVisitor) error {
33103316
visitor.enter(c)
33113317
defer visitor.leave(c)
3318+
if err := c.Type.Accept(visitor); err != nil {
3319+
return err
3320+
}
3321+
if c.TypeLevel != nil {
3322+
if err := c.TypeLevel.Accept(visitor); err != nil {
3323+
return err
3324+
}
3325+
}
33123326
if err := c.Name.Accept(visitor); err != nil {
33133327
return err
33143328
}

parser/parser_column.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -803,10 +803,12 @@ func (p *Parser) tryParseCompressionCodecs(pos Pos) (*CompressionCodec, error) {
803803
}
804804
// parse DELTA if CODEC(Delta, ZSTD(1)) or CODEC(Delta(9), ZSTD(1))
805805
var codecType *Ident
806+
var typeLevel *NumberLiteral
806807
if strings.ToUpper(name.Name) == "DELTA" {
807808
codecType = name
808809
// try parse delta level
809-
if _, err := p.tryParseCompressionLevel(p.Pos()); err != nil {
810+
typeLevel, err = p.tryParseCompressionLevel(p.Pos())
811+
if err != nil {
810812
return nil, err
811813
}
812814
// consume comma
@@ -838,6 +840,7 @@ func (p *Parser) tryParseCompressionCodecs(pos Pos) (*CompressionCodec, error) {
838840
CodecPos: pos,
839841
RightParenPos: rightParenPos,
840842
Type: codecType,
843+
TypeLevel: typeLevel,
841844
Name: name,
842845
Level: level,
843846
}, nil

parser/testdata/ddl/format/create_table_with_codec_delta.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ CREATE TABLE IF NOT EXISTS test_local
1919
(
2020
`id` UInt64 CODEC(Delta, ZSTD(1)),
2121
`api_id` UInt64 CODEC(ZSTD(1)),
22-
`app_id` UInt64 CODEC(Delta, ZSTD(1)),
22+
`app_id` UInt64 CODEC(Delta(9), ZSTD(1)),
2323
`timestamp` DateTime64(9) CODEC(ZSTD(1)),
2424
INDEX timestamp_index(timestamp) TYPE minmax GRANULARITY 4
2525
)

parser/testdata/ddl/output/create_table_basic.sql.golden.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
"CodecPos": 198,
7979
"RightParenPos": 212,
8080
"Type": null,
81+
"TypeLevel": null,
8182
"Name": {
8283
"Name": "ZSTD",
8384
"QuoteType": 1,

parser/testdata/ddl/output/create_table_with_codec_delta.sql.golden.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"NamePos": 59,
5151
"NameEnd": 64
5252
},
53+
"TypeLevel": null,
5354
"Name": {
5455
"Name": "ZSTD",
5556
"QuoteType": 1,
@@ -94,6 +95,7 @@
9495
"CodecPos": 93,
9596
"RightParenPos": 107,
9697
"Type": null,
98+
"TypeLevel": null,
9799
"Name": {
98100
"Name": "ZSTD",
99101
"QuoteType": 1,
@@ -143,6 +145,12 @@
143145
"NamePos": 132,
144146
"NameEnd": 137
145147
},
148+
"TypeLevel": {
149+
"NumPos": 137,
150+
"NumEnd": 139,
151+
"Literal": "9",
152+
"Base": 10
153+
},
146154
"Name": {
147155
"Name": "ZSTD",
148156
"QuoteType": 1,
@@ -197,6 +205,7 @@
197205
"CodecPos": 179,
198206
"RightParenPos": 193,
199207
"Type": null,
208+
"TypeLevel": null,
200209
"Name": {
201210
"Name": "ZSTD",
202211
"QuoteType": 1,

parser/testdata/ddl/output/create_table_with_index.sql.golden.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"NamePos": 59,
5151
"NameEnd": 64
5252
},
53+
"TypeLevel": null,
5354
"Name": {
5455
"Name": "ZSTD",
5556
"QuoteType": 1,
@@ -94,6 +95,7 @@
9495
"CodecPos": 93,
9596
"RightParenPos": 107,
9697
"Type": null,
98+
"TypeLevel": null,
9799
"Name": {
98100
"Name": "ZSTD",
99101
"QuoteType": 1,
@@ -178,6 +180,7 @@
178180
"CodecPos": 148,
179181
"RightParenPos": 162,
180182
"Type": null,
183+
"TypeLevel": null,
181184
"Name": {
182185
"Name": "ZSTD",
183186
"QuoteType": 1,

0 commit comments

Comments
 (0)