@@ -3406,3 +3406,62 @@ func TestConnectionAttributes(t *testing.T) {
3406
3406
}
3407
3407
rows .Close ()
3408
3408
}
3409
+
3410
+ func TestIssue1361 (t * testing.T ) {
3411
+ var db * sql.DB
3412
+ if _ , err := ParseDSN (dsn ); err != errInvalidDSNUnsafeCollation {
3413
+ db , err = sql .Open ("mysql" , dsn )
3414
+ if err != nil {
3415
+ t .Fatalf ("error connecting: %s" , err .Error ())
3416
+ }
3417
+ defer db .Close ()
3418
+ }
3419
+
3420
+ dbt := & DBTest {t , db }
3421
+ // for _, test := range tests {
3422
+ // test(dbt)
3423
+ // dbt.db.Exec("DROP TABLE IF EXISTS test")
3424
+ // }
3425
+ queries := []string {
3426
+ `
3427
+ CREATE PROCEDURE test_proc1()
3428
+ BEGIN
3429
+ SIGNAL SQLSTATE '10000' SET MESSAGE_TEXT = "some error", MYSQL_ERRNO = 10000;
3430
+ END;
3431
+ ` ,
3432
+ `
3433
+ CREATE PROCEDURE test_proc2()
3434
+ BEGIN
3435
+ SELECT 1,2;
3436
+ SELECT 3,4;
3437
+ SIGNAL SQLSTATE '10000' SET MESSAGE_TEXT = "some error", MYSQL_ERRNO = 10000;
3438
+ END;
3439
+ ` ,
3440
+ }
3441
+ names := []string {
3442
+ "test_proc1" , "test_proc2" ,
3443
+ }
3444
+ for i , query := range queries {
3445
+ runCallCommand (dbt , query , names [i ])
3446
+ }
3447
+
3448
+ }
3449
+
3450
+ func runCallCommand (dbt * DBTest , query , name string ) {
3451
+
3452
+ dbt .mustExec (fmt .Sprintf ("DROP PROCEDURE IF EXISTS %s;" , name ))
3453
+ dbt .mustExec (query )
3454
+ defer dbt .mustExec ("drop procedure " + name )
3455
+ rows , err := dbt .db .Query (fmt .Sprintf ("call %s;" , name ))
3456
+ if err != nil {
3457
+ return
3458
+ }
3459
+ defer rows .Close ()
3460
+
3461
+ for rows .Next () {
3462
+ }
3463
+ for rows .NextResultSet () { // thread will be blocked when exec rs.Close()
3464
+ for rows .Next () {
3465
+ }
3466
+ }
3467
+ }
0 commit comments