@@ -20,7 +20,7 @@ func TestParseDDL(t *testing.T) {
20
20
"CREATE UNIQUE INDEX `idx_profiles_refer` ON `profiles`(`text`)" ,
21
21
}, 6 , []migrator.ColumnType {
22
22
{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 }},
24
24
{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 }},
25
25
{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 }},
26
26
},
@@ -56,11 +56,47 @@ func TestParseDDL(t *testing.T) {
56
56
ColumnTypeValue : sql.NullString {String : "int" , Valid : true },
57
57
NullableValue : sql.NullBool {Bool : false , Valid : true },
58
58
DefaultValueValue : sql.NullString {Valid : false },
59
- UniqueValue : sql.NullBool {Valid : true },
59
+ UniqueValue : sql.NullBool {Bool : true , Valid : true },
60
60
PrimaryKeyValue : sql.NullBool {Valid : true },
61
61
},
62
62
},
63
63
},
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
+ },
64
100
}
65
101
66
102
for _ , p := range params {
@@ -80,6 +116,75 @@ func TestParseDDL(t *testing.T) {
80
116
}
81
117
}
82
118
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
+
83
188
func TestParseDDL_error (t * testing.T ) {
84
189
params := []struct {
85
190
name string
0 commit comments