diff --git a/go/vt/sqlparser/analyzer.go b/go/vt/sqlparser/analyzer.go index 97bd8aeaa80..e76e6ead0e2 100644 --- a/go/vt/sqlparser/analyzer.go +++ b/go/vt/sqlparser/analyzer.go @@ -72,7 +72,13 @@ func Preview(sql string) int { case "delete": return StmtDelete } - switch strings.ToLower(trimmed) { + // For the following statements it is not sufficient to rely + // on loweredFirstWord. This is because they are not statements + // in the grammar and we are relying on Preview to parse them. + // For instance, we don't want: "BEGIN JUNK" to be parsed + // as StmtBegin. + trimmedNoComments, _ := SplitTrailingComments(trimmed) + switch strings.ToLower(trimmedNoComments) { case "begin", "start transaction": return StmtBegin case "commit": diff --git a/go/vt/sqlparser/analyzer_test.go b/go/vt/sqlparser/analyzer_test.go index c8f6ec0ed3d..c50955d2d47 100644 --- a/go/vt/sqlparser/analyzer_test.go +++ b/go/vt/sqlparser/analyzer_test.go @@ -45,9 +45,13 @@ func TestPreview(t *testing.T) { {"\n\t begin ", StmtBegin}, {"... begin ", StmtUnknown}, {"begin ...", StmtUnknown}, + {"begin /* ... */", StmtBegin}, + {"begin /* ... *//*test*/", StmtBegin}, {"start transaction", StmtBegin}, {"commit", StmtCommit}, + {"commit /*...*/", StmtCommit}, {"rollback", StmtRollback}, + {"rollback /*...*/", StmtRollback}, {"create", StmtDDL}, {"alter", StmtDDL}, {"rename", StmtDDL},