@@ -45,8 +45,11 @@ type (
45
45
Followers []string `json:",optional"`
46
46
}
47
47
48
- SqlOption func (* multipleSqlConn )
48
+ SqlOption func (* sqlOptions )
49
49
50
+ sqlOptions struct {
51
+ accept func (error ) bool
52
+ }
50
53
multipleSqlConn struct {
51
54
leader sqlx.SqlConn
52
55
enableFollower bool
@@ -60,10 +63,15 @@ type (
60
63
61
64
// NewMultipleSqlConn returns a SqlConn that supports leader-follower read/write separation.
62
65
func NewMultipleSqlConn (driverName string , conf DBConf , opts ... SqlOption ) sqlx.SqlConn {
63
- leader := sqlx .NewSqlConn (driverName , conf .Leader )
66
+ var sqlOpt sqlOptions
67
+ for _ , opt := range opts {
68
+ opt (& sqlOpt )
69
+ }
70
+
71
+ leader := sqlx .NewSqlConn (driverName , conf .Leader , sqlx .WithAcceptable (sqlOpt .accept ))
64
72
followers := make ([]sqlx.SqlConn , 0 , len (conf .Followers ))
65
73
for _ , datasource := range conf .Followers {
66
- followers = append (followers , sqlx .NewSqlConn (driverName , datasource ))
74
+ followers = append (followers , sqlx .NewSqlConn (driverName , datasource , sqlx . WithAcceptable ( sqlOpt . accept ) ))
67
75
}
68
76
69
77
conn := & multipleSqlConn {
@@ -72,10 +80,7 @@ func NewMultipleSqlConn(driverName string, conf DBConf, opts ...SqlOption) sqlx.
72
80
followers : followers ,
73
81
conf : conf ,
74
82
driveName : driverName ,
75
- }
76
-
77
- for _ , opt := range opts {
78
- opt (conn )
83
+ accept : sqlOpt .accept ,
79
84
}
80
85
81
86
conn .p2cPicker = newP2cPicker (followers , conn .accept )
@@ -251,8 +256,8 @@ func (q *queryDB) query(ctx context.Context, query func(ctx context.Context, con
251
256
}
252
257
253
258
func WithAccept (accept func (err error ) bool ) SqlOption {
254
- return func (conn * multipleSqlConn ) {
255
- conn .accept = accept
259
+ return func (opts * sqlOptions ) {
260
+ opts .accept = accept
256
261
}
257
262
}
258
263
0 commit comments