Skip to content
Open
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
5 changes: 5 additions & 0 deletions go/sql/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,11 @@ func (atp *AlterTableParser) ParseAlterStatement(alterStatement string) (err err
break
}
}
// Strip any trailing statement terminator. A trailing semicolon would
// otherwise be carried into alterStatementOptions and, when the options are
// spliced into a larger statement (e.g. appending ", ALGORITHM=INSTANT"),
// break it into two statements under multiStatements=true.
atp.alterStatementOptions = strings.TrimRight(atp.alterStatementOptions, "; \t\r\n")
for _, alterToken := range atp.tokenizeAlterStatement(atp.alterStatementOptions) {
alterToken = atp.sanitizeQuotesFromAlterStatement(alterToken)
atp.parseAlterToken(alterToken)
Expand Down
21 changes: 21 additions & 0 deletions go/sql/parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,27 @@ func TestParseAlterStatement(t *testing.T) {
require.False(t, parser.IsAutoIncrementDefined())
}

func TestParseAlterStatementTrailingSemicolon(t *testing.T) {
statements := []string{
"add column t int;",
"add column t int ;",
"add column t int; \t\r\n",
"ADD KEY idx_username (`username`);",
}
expected := []string{
"add column t int",
"add column t int",
"add column t int",
"ADD KEY idx_username (`username`)",
}
for i, statement := range statements {
parser := NewAlterTableParser()
err := parser.ParseAlterStatement(statement)
require.NoError(t, err)
require.Equal(t, expected[i], parser.alterStatementOptions)
}
}

func TestParseAlterStatementrivialRename(t *testing.T) {
statement := "add column t int, change ts ts timestamp, engine=innodb"
parser := NewAlterTableParser()
Expand Down