@@ -165,6 +165,59 @@ func TestCreateTableRowValues(t *testing.T) {
165165 assert .
EqualValues (
t ,
"('1','[email protected] ','Test Name 1')" ,
result )
166166}
167167
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+
168221func TestCreateTableAllValuesWithNil (t * testing.T ) {
169222 db , mock , err := sqlmock .New ()
170223 assert .NoError (t , err , "an error was not expected when opening a stub database connection" )
@@ -217,8 +270,9 @@ func TestCreateTableOk(t *testing.T) {
217270
218271 var buf bytes.Buffer
219272 data := Data {
220- Connection : db ,
221- Out : & buf ,
273+ Connection : db ,
274+ Out : & buf ,
275+ MaxAllowedPacket : 4096 ,
222276 }
223277
224278 assert .NoError (t , data .getTemplates ())
@@ -255,3 +309,62 @@ UNLOCK TABLES;
255309 result := strings .Replace (buf .String (), "`" , "~" , - 1 )
256310 assert .Equal (t , expectedResult , result )
257311}
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