Skip to content

Commit 831ef10

Browse files
author
Daisuke Morita
authored
Merge pull request #683 from cloudwan/CW-736-workaround-mysql
Workaround for go-sql-driver/mysql#731
2 parents a02e838 + 40a467b commit 831ef10

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

db/sql/sql.go

+13-6
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ func (db *DB) BeginTx(options ...transaction.Option) (tx transaction.Transaction
367367
return nil, err
368368
}
369369

370-
rawTx, err := db.DB.BeginTxx(params.Context, sqlOptions)
370+
rawTx, err := db.DB.BeginTxx(safeMysqlContext(params.Context), sqlOptions)
371371
if err != nil {
372372
db.updateCounter(1, "begin.failed")
373373
return nil, err
@@ -583,7 +583,7 @@ func (tx *Transaction) Exec(ctx context.Context, sql string, args ...interface{}
583583

584584
func (tx *Transaction) exec(ctx context.Context, sql string, args ...interface{}) error {
585585
tx.logQuery(sql, args...)
586-
_, err := tx.transaction.ExecContext(ctx, sql, args...)
586+
_, err := tx.transaction.ExecContext(safeMysqlContext(ctx), sql, args...)
587587
return err
588588
}
589589

@@ -856,7 +856,7 @@ func buildSelect(sc *selectContext) (string, []interface{}, error) {
856856

857857
func (tx *Transaction) executeSelect(ctx context.Context, sc *selectContext, sql string, args []interface{}) (list []*schema.Resource, total uint64, err error) {
858858
tx.logQuery(sql, args...)
859-
rows, err := tx.transaction.QueryxContext(ctx, sql, args...)
859+
rows, err := tx.transaction.QueryxContext(safeMysqlContext(ctx), sql, args...)
860860
if err != nil {
861861
return
862862
}
@@ -955,7 +955,7 @@ func (tx *Transaction) Query(ctx context.Context, s *schema.Schema, query string
955955
defer tx.measureTime(time.Now(), s.ID, "query")
956956

957957
tx.logQuery(query, arguments...)
958-
rows, err := tx.transaction.QueryxContext(ctx, query, arguments...)
958+
rows, err := tx.transaction.QueryxContext(safeMysqlContext(ctx), query, arguments...)
959959
if err != nil {
960960
return nil, fmt.Errorf("Failed to run query: %s", query)
961961
}
@@ -1022,7 +1022,7 @@ func (tx *Transaction) Count(ctx context.Context, s *schema.Schema, filter trans
10221022
return
10231023
}
10241024
result := map[string]interface{}{}
1025-
err = tx.transaction.QueryRowxContext(ctx, sql, args...).MapScan(result)
1025+
err = tx.transaction.QueryRowxContext(safeMysqlContext(ctx), sql, args...).MapScan(result)
10261026
if err != nil {
10271027
return
10281028
}
@@ -1089,7 +1089,7 @@ func (tx *Transaction) StateFetch(ctx context.Context, s *schema.Schema, filter
10891089
return
10901090
}
10911091
tx.logQuery(sql, args...)
1092-
rows, err := tx.transaction.QueryxContext(ctx, sql, args...)
1092+
rows, err := tx.transaction.QueryxContext(safeMysqlContext(ctx), sql, args...)
10931093
if err != nil {
10941094
return
10951095
}
@@ -1265,3 +1265,10 @@ func (db *DB) SetMaxOpenConns(maxIdleConns int) {
12651265
// db.DB.SetMaxOpenConns(maxIdleConns)
12661266
// db.DB.SetMaxIdleConns(maxIdleConns)
12671267
}
1268+
1269+
// Mysql driver does not support graceful cancellation via context.Cancel()
1270+
// This function (and its usages) should be removed when (if) this defect got fixed:
1271+
// https://github.com/go-sql-driver/mysql/issues/731
1272+
func safeMysqlContext(_ context.Context) context.Context {
1273+
return context.Background()
1274+
}

0 commit comments

Comments
 (0)