@@ -76,6 +76,28 @@ type DBTest struct {
76
76
db * sql.DB
77
77
}
78
78
79
+ func runTestsWithMultiStatement (t * testing.T , dsn string , tests ... func (dbt * DBTest )) {
80
+ if ! available {
81
+ t .Skipf ("MySQL-Server not running on %s" , netAddr )
82
+ }
83
+
84
+ dsn3 := dsn + "&multiStatements=true"
85
+ var db3 * sql.DB
86
+ if _ , err := parseDSN (dsn3 ); err != errInvalidDSNUnsafeCollation {
87
+ db3 , err = sql .Open ("mysql" , dsn3 )
88
+ if err != nil {
89
+ t .Fatalf ("Error connecting: %s" , err .Error ())
90
+ }
91
+ defer db3 .Close ()
92
+ }
93
+
94
+ dbt3 := & DBTest {t , db3 }
95
+ for _ , test := range tests {
96
+ test (dbt3 )
97
+ dbt3 .db .Exec ("DROP TABLE IF EXISTS test" )
98
+ }
99
+ }
100
+
79
101
func runTests (t * testing.T , dsn string , tests ... func (dbt * DBTest )) {
80
102
if ! available {
81
103
t .Skipf ("MySQL server not running on %s" , netAddr )
@@ -99,15 +121,30 @@ func runTests(t *testing.T, dsn string, tests ...func(dbt *DBTest)) {
99
121
defer db2 .Close ()
100
122
}
101
123
124
+ dsn3 := dsn + "&multiStatements=true"
125
+ var db3 * sql.DB
126
+ if _ , err := parseDSN (dsn3 ); err != errInvalidDSNUnsafeCollation {
127
+ db3 , err = sql .Open ("mysql" , dsn3 )
128
+ if err != nil {
129
+ t .Fatalf ("Error connecting: %s" , err .Error ())
130
+ }
131
+ defer db3 .Close ()
132
+ }
133
+
102
134
dbt := & DBTest {t , db }
103
135
dbt2 := & DBTest {t , db2 }
136
+ dbt3 := & DBTest {t , db3 }
104
137
for _ , test := range tests {
105
138
test (dbt )
106
139
dbt .db .Exec ("DROP TABLE IF EXISTS test" )
107
140
if db2 != nil {
108
141
test (dbt2 )
109
142
dbt2 .db .Exec ("DROP TABLE IF EXISTS test" )
110
143
}
144
+ if db3 != nil {
145
+ test (dbt3 )
146
+ dbt3 .db .Exec ("DROP TABLE IF EXISTS test" )
147
+ }
111
148
}
112
149
}
113
150
@@ -237,6 +274,50 @@ func TestCRUD(t *testing.T) {
237
274
})
238
275
}
239
276
277
+ func TestMultiQuery (t * testing.T ) {
278
+ runTestsWithMultiStatement (t , dsn , func (dbt * DBTest ) {
279
+ // Create Table
280
+ dbt .mustExec ("CREATE TABLE `test` (`id` int(11) NOT NULL, `value` int(11) NOT NULL) " )
281
+
282
+ // Create Data
283
+ res := dbt .mustExec ("INSERT INTO test VALUES (1, 1)" )
284
+ count , err := res .RowsAffected ()
285
+ if err != nil {
286
+ dbt .Fatalf ("res.RowsAffected() returned error: %s" , err .Error ())
287
+ }
288
+ if count != 1 {
289
+ dbt .Fatalf ("Expected 1 affected row, got %d" , count )
290
+ }
291
+
292
+ // Update
293
+ res = dbt .mustExec ("UPDATE test SET value = 3 WHERE id = 1; UPDATE test SET value = 4 WHERE id = 1; UPDATE test SET value = 5 WHERE id = 1;" )
294
+ count , err = res .RowsAffected ()
295
+ if err != nil {
296
+ dbt .Fatalf ("res.RowsAffected() returned error: %s" , err .Error ())
297
+ }
298
+ if count != 1 {
299
+ dbt .Fatalf ("Expected 1 affected row, got %d" , count )
300
+ }
301
+
302
+ // Read
303
+ var out int
304
+ rows := dbt .mustQuery ("SELECT value FROM test WHERE id=1;" )
305
+ if rows .Next () {
306
+ rows .Scan (& out )
307
+ if 5 != out {
308
+ dbt .Errorf ("5 != %t" , out )
309
+ }
310
+
311
+ if rows .Next () {
312
+ dbt .Error ("unexpected data" )
313
+ }
314
+ } else {
315
+ dbt .Error ("no data" )
316
+ }
317
+
318
+ })
319
+ }
320
+
240
321
func TestInt (t * testing.T ) {
241
322
runTests (t , dsn , func (dbt * DBTest ) {
242
323
types := [5 ]string {"TINYINT" , "SMALLINT" , "MEDIUMINT" , "INT" , "BIGINT" }
0 commit comments