Skip to content

Commit 5351740

Browse files
authored
Add the support of MODIFY TTL syntax (#32)
1 parent e45d112 commit 5351740

8 files changed

+152
-0
lines changed

parser/ast.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,32 @@ func (a *AlterTableRenameColumn) String(level int) string {
505505
return builder.String()
506506
}
507507

508+
type AlterTableModifyTTL struct {
509+
ModifyPos Pos
510+
StatementEnd Pos
511+
TTL *TTLExpr
512+
}
513+
514+
func (a *AlterTableModifyTTL) Pos() Pos {
515+
return a.ModifyPos
516+
}
517+
518+
func (a *AlterTableModifyTTL) End() Pos {
519+
return a.StatementEnd
520+
}
521+
522+
func (a *AlterTableModifyTTL) AlterType() string {
523+
return "MODIFY_TTL"
524+
}
525+
526+
func (a *AlterTableModifyTTL) String(level int) string {
527+
var builder strings.Builder
528+
builder.WriteString("MODIFY ")
529+
builder.WriteString("TTL ")
530+
builder.WriteString(a.TTL.String(level))
531+
return builder.String()
532+
}
533+
508534
type AlterTableModifyColumn struct {
509535
ModifyPos Pos
510536
StatementEnd Pos

parser/parser_alter.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,17 @@ func (p *Parser) parseAlterTableModify(pos Pos) (AlterTableExpr, error) {
530530
switch {
531531
case p.matchKeyword(KeywordColumn):
532532
return p.parseAlterTableModifyColumn(pos)
533+
case p.matchKeyword(KeywordTtl):
534+
_ = p.lexer.consumeToken()
535+
ttlExpr, err := p.parseTTLExpr(p.Pos())
536+
if err != nil {
537+
return nil, err
538+
}
539+
return &AlterTableModifyTTL{
540+
ModifyPos: pos,
541+
StatementEnd: ttlExpr.End(),
542+
TTL: ttlExpr,
543+
}, nil
533544
default:
534545
return nil, fmt.Errorf("expected keyword: COLUMN, but got %q",
535546
p.last().String)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE infra.flow_processed_emails_local ON CLUSTER default_cluster REMOVE TTL;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE infra.flow_processed_emails_local ON CLUSTER default_cluster MODIFY TTL created_at + INTERVAL 3 YEAR;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
-- Origin SQL:
2+
ALTER TABLE infra.flow_processed_emails_local ON CLUSTER default_cluster REMOVE TTL;
3+
4+
-- Format SQL:
5+
ALTER TABLE infra.flow_processed_emails_local
6+
ON CLUSTER default_cluster
7+
REMOVE TTL;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
-- Origin SQL:
2+
ALTER TABLE infra.flow_processed_emails_local ON CLUSTER default_cluster MODIFY TTL created_at + INTERVAL 3 YEAR;
3+
4+
-- Format SQL:
5+
ALTER TABLE infra.flow_processed_emails_local
6+
ON CLUSTER default_cluster
7+
MODIFY TTL created_at + INTERVAL 3 YEAR;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
[
2+
{
3+
"AlterPos": 0,
4+
"StatementEnd": 83,
5+
"TableIdentifier": {
6+
"Database": {
7+
"Name": "infra",
8+
"Unquoted": false,
9+
"NamePos": 12,
10+
"NameEnd": 17
11+
},
12+
"Table": {
13+
"Name": "flow_processed_emails_local",
14+
"Unquoted": false,
15+
"NamePos": 18,
16+
"NameEnd": 45
17+
}
18+
},
19+
"OnCluster": {
20+
"OnPos": 46,
21+
"Expr": {
22+
"Name": "default_cluster",
23+
"Unquoted": false,
24+
"NamePos": 57,
25+
"NameEnd": 72
26+
}
27+
},
28+
"AlterExprs": [
29+
{
30+
"RemovePos": 73,
31+
"StatementEnd": 83
32+
}
33+
]
34+
}
35+
]
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
[
2+
{
3+
"AlterPos": 0,
4+
"StatementEnd": 112,
5+
"TableIdentifier": {
6+
"Database": {
7+
"Name": "infra",
8+
"Unquoted": false,
9+
"NamePos": 12,
10+
"NameEnd": 17
11+
},
12+
"Table": {
13+
"Name": "flow_processed_emails_local",
14+
"Unquoted": false,
15+
"NamePos": 18,
16+
"NameEnd": 45
17+
}
18+
},
19+
"OnCluster": {
20+
"OnPos": 46,
21+
"Expr": {
22+
"Name": "default_cluster",
23+
"Unquoted": false,
24+
"NamePos": 57,
25+
"NameEnd": 72
26+
}
27+
},
28+
"AlterExprs": [
29+
{
30+
"ModifyPos": 73,
31+
"StatementEnd": 112,
32+
"TTL": {
33+
"TTLPos": 84,
34+
"Expr": {
35+
"LeftExpr": {
36+
"Name": "created_at",
37+
"Unquoted": false,
38+
"NamePos": 84,
39+
"NameEnd": 94
40+
},
41+
"Operation": "+",
42+
"RightExpr": {
43+
"IntervalPos": 97,
44+
"Expr": {
45+
"NumPos": 106,
46+
"NumEnd": 107,
47+
"Literal": "3",
48+
"Base": 10
49+
},
50+
"Unit": {
51+
"Name": "YEAR",
52+
"Unquoted": false,
53+
"NamePos": 108,
54+
"NameEnd": 112
55+
}
56+
},
57+
"HasGlobal": false,
58+
"HasNot": false
59+
}
60+
}
61+
}
62+
]
63+
}
64+
]

0 commit comments

Comments
 (0)