@@ -20,7 +20,7 @@ func TestParseDDL(t *testing.T) {
2020 "CREATE UNIQUE INDEX `idx_profiles_refer` ON `profiles`(`text`)" ,
2121 }, 6 , []migrator.ColumnType {
2222 {NameValue : sql.NullString {String : "id" , Valid : true }, DataTypeValue : sql.NullString {String : "integer" , Valid : true }, ColumnTypeValue : sql.NullString {String : "integer" , Valid : true }, PrimaryKeyValue : sql.NullBool {Bool : true , Valid : true }, NullableValue : sql.NullBool {Valid : true }, UniqueValue : sql.NullBool {Valid : true }, DefaultValueValue : sql.NullString {Valid : false }},
23- {NameValue : sql.NullString {String : "text" , Valid : true }, DataTypeValue : sql.NullString {String : "varchar" , Valid : true }, LengthValue : sql.NullInt64 {Int64 : 500 , Valid : true }, ColumnTypeValue : sql.NullString {String : "varchar(500)" , Valid : true }, DefaultValueValue : sql.NullString {String : "hello" , Valid : true }, NullableValue : sql.NullBool {Valid : true }, UniqueValue : sql.NullBool {Valid : true }, PrimaryKeyValue : sql.NullBool {Valid : true }},
23+ {NameValue : sql.NullString {String : "text" , Valid : true }, DataTypeValue : sql.NullString {String : "varchar" , Valid : true }, LengthValue : sql.NullInt64 {Int64 : 500 , Valid : true }, ColumnTypeValue : sql.NullString {String : "varchar(500)" , Valid : true }, DefaultValueValue : sql.NullString {String : "hello" , Valid : true }, NullableValue : sql.NullBool {Valid : true }, UniqueValue : sql.NullBool {Bool : true , Valid : true }, PrimaryKeyValue : sql.NullBool {Valid : true }},
2424 {NameValue : sql.NullString {String : "age" , Valid : true }, DataTypeValue : sql.NullString {String : "integer" , Valid : true }, ColumnTypeValue : sql.NullString {String : "integer" , Valid : true }, DefaultValueValue : sql.NullString {String : "18" , Valid : true }, NullableValue : sql.NullBool {Valid : true }, UniqueValue : sql.NullBool {Valid : true }, PrimaryKeyValue : sql.NullBool {Valid : true }},
2525 {NameValue : sql.NullString {String : "user_id" , Valid : true }, DataTypeValue : sql.NullString {String : "integer" , Valid : true }, ColumnTypeValue : sql.NullString {String : "integer" , Valid : true }, DefaultValueValue : sql.NullString {Valid : false }, NullableValue : sql.NullBool {Valid : true }, UniqueValue : sql.NullBool {Valid : true }, PrimaryKeyValue : sql.NullBool {Valid : true }},
2626 },
@@ -56,11 +56,47 @@ func TestParseDDL(t *testing.T) {
5656 ColumnTypeValue : sql.NullString {String : "int" , Valid : true },
5757 NullableValue : sql.NullBool {Bool : false , Valid : true },
5858 DefaultValueValue : sql.NullString {Valid : false },
59- UniqueValue : sql.NullBool {Valid : true },
59+ UniqueValue : sql.NullBool {Bool : true , Valid : true },
6060 PrimaryKeyValue : sql.NullBool {Valid : true },
6161 },
6262 },
6363 },
64+ {
65+ "unique index" ,
66+ []string {
67+ "CREATE TABLE `test-b` (`field` integer NOT NULL)" ,
68+ "CREATE UNIQUE INDEX `idx_uq` ON `test-b`(`field`) WHERE field = 0" ,
69+ },
70+ 1 ,
71+ []migrator.ColumnType {
72+ {
73+ NameValue : sql.NullString {String : "field" , Valid : true },
74+ DataTypeValue : sql.NullString {String : "integer" , Valid : true },
75+ ColumnTypeValue : sql.NullString {String : "integer" , Valid : true },
76+ PrimaryKeyValue : sql.NullBool {Bool : false , Valid : true },
77+ UniqueValue : sql.NullBool {Bool : true , Valid : true },
78+ NullableValue : sql.NullBool {Bool : false , Valid : true },
79+ },
80+ },
81+ },
82+ {
83+ "non-unique index" ,
84+ []string {
85+ "CREATE TABLE `test-c` (`field` integer NOT NULL)" ,
86+ "CREATE INDEX `idx_uq` ON `test-b`(`field`) WHERE field = 0" ,
87+ },
88+ 1 ,
89+ []migrator.ColumnType {
90+ {
91+ NameValue : sql.NullString {String : "field" , Valid : true },
92+ DataTypeValue : sql.NullString {String : "integer" , Valid : true },
93+ ColumnTypeValue : sql.NullString {String : "integer" , Valid : true },
94+ PrimaryKeyValue : sql.NullBool {Bool : false , Valid : true },
95+ UniqueValue : sql.NullBool {Bool : false , Valid : true },
96+ NullableValue : sql.NullBool {Bool : false , Valid : true },
97+ },
98+ },
99+ },
64100 }
65101
66102 for _ , p := range params {
@@ -80,6 +116,75 @@ func TestParseDDL(t *testing.T) {
80116 }
81117}
82118
119+ func TestParseDDL_Whitespaces (t * testing.T ) {
120+ testColumns := []migrator.ColumnType {
121+ {
122+ NameValue : sql.NullString {String : "id" , Valid : true },
123+ DataTypeValue : sql.NullString {String : "integer" , Valid : true },
124+ ColumnTypeValue : sql.NullString {String : "integer" , Valid : true },
125+ NullableValue : sql.NullBool {Bool : false , Valid : true },
126+ DefaultValueValue : sql.NullString {Valid : false },
127+ UniqueValue : sql.NullBool {Bool : true , Valid : true },
128+ PrimaryKeyValue : sql.NullBool {Bool : true , Valid : true },
129+ },
130+ {
131+ NameValue : sql.NullString {String : "dark_mode" , Valid : true },
132+ DataTypeValue : sql.NullString {String : "numeric" , Valid : true },
133+ ColumnTypeValue : sql.NullString {String : "numeric" , Valid : true },
134+ NullableValue : sql.NullBool {Valid : true },
135+ DefaultValueValue : sql.NullString {String : "true" , Valid : true },
136+ UniqueValue : sql.NullBool {Bool : false , Valid : true },
137+ PrimaryKeyValue : sql.NullBool {Bool : false , Valid : true },
138+ },
139+ }
140+
141+ params := []struct {
142+ name string
143+ sql []string
144+ nFields int
145+ columns []migrator.ColumnType
146+ }{
147+ {
148+ "with_newline" ,
149+ []string {"CREATE TABLE `users`\n (\n id integer primary key unique,\n dark_mode numeric DEFAULT true)" },
150+ 2 ,
151+ testColumns ,
152+ },
153+ {
154+ "with_newline_2" ,
155+ []string {"CREATE TABLE `users` (\n \n id integer primary key unique,\n dark_mode numeric DEFAULT true)" },
156+ 2 ,
157+ testColumns ,
158+ },
159+ {
160+ "with_missing_space" ,
161+ []string {"CREATE TABLE `users`(id integer primary key unique, dark_mode numeric DEFAULT true)" },
162+ 2 ,
163+ testColumns ,
164+ },
165+ {
166+ "with_many_spaces" ,
167+ []string {"CREATE TABLE `users` (id integer primary key unique, dark_mode numeric DEFAULT true)" },
168+ 2 ,
169+ testColumns ,
170+ },
171+ }
172+ for _ , p := range params {
173+ t .Run (p .name , func (t * testing.T ) {
174+ ddl , err := parseDDL (p .sql ... )
175+
176+ if err != nil {
177+ panic (err .Error ())
178+ }
179+
180+ if len (ddl .fields ) != p .nFields {
181+ t .Fatalf ("fields length doesn't match: expect: %v, got %v" , p .nFields , len (ddl .fields ))
182+ }
183+ tests .AssertEqual (t , ddl .columns , p .columns )
184+ })
185+ }
186+ }
187+
83188func TestParseDDL_error (t * testing.T ) {
84189 params := []struct {
85190 name string
0 commit comments