Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion parser/ast.go
Original file line number Diff line number Diff line change
Expand Up @@ -605,13 +605,17 @@ type AlterTableAddColumn struct {
Column *ColumnDef
IfNotExists bool
After *NestedIdentifier
Settings *SettingsClause
}

func (a *AlterTableAddColumn) Pos() Pos {
return a.AddPos
}

func (a *AlterTableAddColumn) End() Pos {
if a.Settings != nil {
return a.Settings.End()
}
return a.StatementEnd
}

Expand All @@ -622,14 +626,18 @@ func (a *AlterTableAddColumn) AlterType() string {
func (a *AlterTableAddColumn) String() string {
var builder strings.Builder
builder.WriteString("ADD COLUMN ")
builder.WriteString(a.Column.String())
if a.IfNotExists {
builder.WriteString("IF NOT EXISTS ")
}
builder.WriteString(a.Column.String())
if a.After != nil {
builder.WriteString(" AFTER ")
builder.WriteString(a.After.String())
}
if a.Settings != nil {
builder.WriteByte(' ')
builder.WriteString(a.Settings.String())
}
return builder.String()
}

Expand All @@ -644,6 +652,11 @@ func (a *AlterTableAddColumn) Accept(visitor ASTVisitor) error {
return err
}
}
if a.Settings != nil {
if err := a.Settings.Accept(visitor); err != nil {
return err
}
}
return visitor.VisitAlterTableAddColumn(a)
}

Expand Down
9 changes: 9 additions & 0 deletions parser/parser_alter.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,21 @@ func (p *Parser) parseAlterTableAddColumn(pos Pos) (*AlterTableAddColumn, error)
statementEnd = after.End()
}

settings, err := p.tryParseSettingsClause(p.Pos())
if err != nil {
return nil, err
}
if settings != nil {
statementEnd = settings.End()
}

return &AlterTableAddColumn{
AddPos: pos,
StatementEnd: statementEnd,
Column: column,
IfNotExists: ifNotExists,
After: after,
Settings: settings,
}, nil
}

Expand Down
2 changes: 1 addition & 1 deletion parser/testdata/ddl/alter_table_add_column.sql
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ALTER TABLE test.events_local ON CLUSTER 'default_cluster' ADD COLUMN f1 String AFTER f0;
ALTER TABLE test.events_local ON CLUSTER 'default_cluster' ADD COLUMN f1 String AFTER f0 SETTINGS alter_sync = 2;
4 changes: 2 additions & 2 deletions parser/testdata/ddl/format/alter_table_add_column.sql
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
-- Origin SQL:
ALTER TABLE test.events_local ON CLUSTER 'default_cluster' ADD COLUMN f1 String AFTER f0;
ALTER TABLE test.events_local ON CLUSTER 'default_cluster' ADD COLUMN f1 String AFTER f0 SETTINGS alter_sync = 2;


-- Format SQL:
ALTER TABLE test.events_local ON CLUSTER 'default_cluster' ADD COLUMN f1 String AFTER f0;
ALTER TABLE test.events_local ON CLUSTER 'default_cluster' ADD COLUMN f1 String AFTER f0 SETTINGS alter_sync=2;
25 changes: 23 additions & 2 deletions parser/testdata/ddl/output/alter_table_add_column.sql.golden.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[
{
"AlterPos": 0,
"StatementEnd": 88,
"StatementEnd": 112,
"TableIdentifier": {
"Database": {
"Name": "test",
Expand All @@ -27,7 +27,7 @@
"AlterExprs": [
{
"AddPos": 59,
"StatementEnd": 88,
"StatementEnd": 112,
"Column": {
"NamePos": 70,
"ColumnEnd": 79,
Expand Down Expand Up @@ -67,6 +67,27 @@
"NameEnd": 88
},
"DotIdent": null
},
"Settings": {
"SettingsPos": 89,
"ListEnd": 112,
"Items": [
{
"SettingsPos": 98,
"Name": {
"Name": "alter_sync",
"QuoteType": 1,
"NamePos": 98,
"NameEnd": 108
},
"Expr": {
"NumPos": 111,
"NumEnd": 112,
"Literal": "2",
"Base": 10
}
}
]
}
}
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@
"CompressionCodec": null
},
"IfNotExists": false,
"After": null
"After": null,
"Settings": null
}
]
},
Expand Down Expand Up @@ -140,7 +141,8 @@
"CompressionCodec": null
},
"IfNotExists": false,
"After": null
"After": null,
"Settings": null
}
]
}
Expand Down
3 changes: 3 additions & 0 deletions parser/walk.go
Original file line number Diff line number Diff line change
Expand Up @@ -831,6 +831,9 @@ func Walk(node Expr, fn WalkFunc) bool {
if !Walk(n.After, fn) {
return false
}
if !Walk(n.Settings, fn) {
return false
}
case *AlterTableAddIndex:
if !Walk(n.Index, fn) {
return false
Expand Down
Loading