From 14c940dd5ae0f2c0e1485f772280d8e9ae9b3eb9 Mon Sep 17 00:00:00 2001 From: duc <1025434218@qq.com> Date: Thu, 14 Apr 2022 15:53:02 +0800 Subject: [PATCH] fix parseDDL bug with escaped quote --- ddlmod.go | 8 ++++++-- ddlmod_test.go | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) 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 {