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