@@ -165,6 +165,59 @@ func TestCreateTableRowValues(t *testing.T) {
165
165
assert .
EqualValues (
t ,
"('1','[email protected] ','Test Name 1')" ,
result )
166
166
}
167
167
168
+ func TestCreateTableValuesSteam (t * testing.T ) {
169
+ db , mock , err := sqlmock .New ()
170
+ assert .NoError (t , err , "an error was not expected when opening a stub database connection" )
171
+ defer db .Close ()
172
+
173
+ rows := sqlmock .NewRows ([]string {"id" , "email" , "name" }).
174
+ AddRow (
1 ,
"[email protected] " ,
"Test Name 1" ).
175
+ AddRow (
2 ,
"[email protected] " ,
"Test Name 2" )
176
+
177
+ mock .ExpectQuery ("^SELECT (.+) FROM `test`$" ).WillReturnRows (rows )
178
+
179
+ data := Data {
180
+ Connection : db ,
181
+ MaxAllowedPacket : 4096 ,
182
+ }
183
+
184
+ table , err := data .createTable ("test" )
185
+ assert .NoError (t , err )
186
+
187
+ s := table .Stream ()
188
+ assert .
EqualValues (
t ,
"INSERT INTO `test` VALUES ('1','[email protected] ','Test Name 1'),('2','[email protected] ','Test Name 2');" ,
<- s )
189
+
190
+ // we make sure that all expectations were met
191
+ assert .NoError (t , mock .ExpectationsWereMet (), "there were unfulfilled expections" )
192
+ }
193
+
194
+ func TestCreateTableValuesSteamSmallPackets (t * testing.T ) {
195
+ db , mock , err := sqlmock .New ()
196
+ assert .NoError (t , err , "an error was not expected when opening a stub database connection" )
197
+ defer db .Close ()
198
+
199
+ rows := sqlmock .NewRows ([]string {"id" , "email" , "name" }).
200
+ AddRow (
1 ,
"[email protected] " ,
"Test Name 1" ).
201
+ AddRow (
2 ,
"[email protected] " ,
"Test Name 2" )
202
+
203
+ mock .ExpectQuery ("^SELECT (.+) FROM `test`$" ).WillReturnRows (rows )
204
+
205
+ data := Data {
206
+ Connection : db ,
207
+ MaxAllowedPacket : 64 ,
208
+ }
209
+
210
+ table , err := data .createTable ("test" )
211
+ assert .NoError (t , err )
212
+
213
+ s := table .Stream ()
214
+ assert .
EqualValues (
t ,
"INSERT INTO `test` VALUES ('1','[email protected] ','Test Name 1');" ,
<- s )
215
+ assert .
EqualValues (
t ,
"INSERT INTO `test` VALUES ('2','[email protected] ','Test Name 2');" ,
<- s )
216
+
217
+ // we make sure that all expectations were met
218
+ assert .NoError (t , mock .ExpectationsWereMet (), "there were unfulfilled expections" )
219
+ }
220
+
168
221
func TestCreateTableAllValuesWithNil (t * testing.T ) {
169
222
db , mock , err := sqlmock .New ()
170
223
assert .NoError (t , err , "an error was not expected when opening a stub database connection" )
@@ -217,8 +270,9 @@ func TestCreateTableOk(t *testing.T) {
217
270
218
271
var buf bytes.Buffer
219
272
data := Data {
220
- Connection : db ,
221
- Out : & buf ,
273
+ Connection : db ,
274
+ Out : & buf ,
275
+ MaxAllowedPacket : 4096 ,
222
276
}
223
277
224
278
assert .NoError (t , data .getTemplates ())
@@ -255,3 +309,62 @@ UNLOCK TABLES;
255
309
result := strings .Replace (buf .String (), "`" , "~" , - 1 )
256
310
assert .Equal (t , expectedResult , result )
257
311
}
312
+
313
+ func TestCreateTableOkSmallPackets (t * testing.T ) {
314
+ db , mock , err := sqlmock .New ()
315
+ assert .NoError (t , err , "an error was not expected when opening a stub database connection" )
316
+
317
+ defer db .Close ()
318
+
319
+ createTableRows := sqlmock .NewRows ([]string {"Table" , "Create Table" }).
320
+ AddRow ("Test_Table" , "CREATE TABLE 'Test_Table' (`id` int(11) NOT NULL AUTO_INCREMENT,`s` char(60) DEFAULT NULL, PRIMARY KEY (`id`))ENGINE=InnoDB DEFAULT CHARSET=latin1" )
321
+
322
+ createTableValueRows := sqlmock .NewRows ([]string {"id" , "email" , "name" }).
323
+ AddRow (1 , nil , "Test Name 1" ).
324
+ AddRow (
2 ,
"[email protected] " ,
"Test Name 2" )
325
+
326
+ mock .ExpectQuery ("^SHOW CREATE TABLE `Test_Table`$" ).WillReturnRows (createTableRows )
327
+ mock .ExpectQuery ("^SELECT (.+) FROM `Test_Table`$" ).WillReturnRows (createTableValueRows )
328
+
329
+ var buf bytes.Buffer
330
+ data := Data {
331
+ Connection : db ,
332
+ Out : & buf ,
333
+ MaxAllowedPacket : 64 ,
334
+ }
335
+
336
+ assert .NoError (t , data .getTemplates ())
337
+
338
+ table , err := data .createTable ("Test_Table" )
339
+ assert .NoError (t , err )
340
+
341
+ data .writeTable (table )
342
+
343
+ // we make sure that all expectations were met
344
+ assert .NoError (t , mock .ExpectationsWereMet (), "there were unfulfilled expections" )
345
+
346
+ expectedResult := `
347
+ --
348
+ -- Table structure for table ~Test_Table~
349
+ --
350
+
351
+ DROP TABLE IF EXISTS ~Test_Table~;
352
+ /*!40101 SET @saved_cs_client = @@character_set_client */;
353
+ SET character_set_client = utf8mb4 ;
354
+ CREATE TABLE 'Test_Table' (~id~ int(11) NOT NULL AUTO_INCREMENT,~s~ char(60) DEFAULT NULL, PRIMARY KEY (~id~))ENGINE=InnoDB DEFAULT CHARSET=latin1;
355
+ /*!40101 SET character_set_client = @saved_cs_client */;
356
+
357
+ --
358
+ -- Dumping data for table ~Test_Table~
359
+ --
360
+
361
+ LOCK TABLES ~Test_Table~ WRITE;
362
+ /*!40000 ALTER TABLE ~Test_Table~ DISABLE KEYS */;
363
+ INSERT INTO ~Test_Table~ VALUES ('1',NULL,'Test Name 1');
364
+ INSERT INTO ~Test_Table~ VALUES ('2','[email protected] ','Test Name 2');
365
+ /*!40000 ALTER TABLE ~Test_Table~ ENABLE KEYS */;
366
+ UNLOCK TABLES;
367
+ `
368
+ result := strings .Replace (buf .String (), "`" , "~" , - 1 )
369
+ assert .Equal (t , expectedResult , result )
370
+ }
0 commit comments