diff --git a/ddlmod.go b/ddlmod.go index 73c20ea..bd8cad8 100644 --- a/ddlmod.go +++ b/ddlmod.go @@ -32,6 +32,7 @@ func parseDDL(strs ...string) (*ddl, error) { if sections := tableRegexp.FindStringSubmatch(str); len(sections) > 0 { var ( ddlBody = sections[2] + ddlBodyRunes = []rune(ddlBody) bracketLevel int quote rune buf string @@ -39,8 +40,11 @@ func parseDDL(strs ...string) (*ddl, error) { result.head = sections[1] - for idx, c := range []rune(ddlBody) { - var next rune = 0 + for idx := 0; idx < len(ddlBodyRunes); idx++ { + var ( + next rune = 0 + c = ddlBodyRunes[idx] + ) if idx+1 < len(ddlBody) { next = []rune(ddlBody)[idx+1] } diff --git a/ddlmod_test.go b/ddlmod_test.go index 4d1f5c7..c08eee2 100644 --- a/ddlmod_test.go +++ b/ddlmod_test.go @@ -180,6 +180,11 @@ func TestGetColumns(t *testing.T) { ddl: "CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Age int,CHECK (Age>=18),CHECK (FirstName!='John'))", columns: []string{"`ID`", "`LastName`", "`FirstName`", "`Age`"}, }, + { + name: "with_escaped_quote", + ddl: "CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL DEFAULT \"\",FirstName varchar(255))", + columns: []string{"`ID`", "`LastName`", "`FirstName`"}, + }, } for _, p := range params {