@@ -80,8 +80,8 @@ func getDatasourceUID(settings backend.DataSourceInstanceSettings) string {
80
80
81
81
// NewDatasource creates a new `SQLDatasource`.
82
82
// It uses the provided settings argument to call the ds.Driver to connect to the SQL server
83
- func (ds * SQLDatasource ) NewDatasource (settings backend.DataSourceInstanceSettings ) (instancemgmt.Instance , error ) {
84
- db , err := ds .c .Connect (settings , nil )
83
+ func (ds * SQLDatasource ) NewDatasource (ctx context. Context , settings backend.DataSourceInstanceSettings ) (instancemgmt.Instance , error ) {
84
+ db , err := ds .c .Connect (ctx , settings , nil )
85
85
if err != nil {
86
86
return nil , DownstreamError (err )
87
87
}
@@ -95,7 +95,7 @@ func (ds *SQLDatasource) NewDatasource(settings backend.DataSourceInstanceSettin
95
95
}
96
96
97
97
ds .CallResourceHandler = httpadapter .New (mux )
98
- ds .driverSettings = ds .c .Settings (settings )
98
+ ds .driverSettings = ds .c .Settings (ctx , settings )
99
99
100
100
return ds , nil
101
101
}
@@ -154,12 +154,12 @@ func (ds *SQLDatasource) QueryData(ctx context.Context, req *backend.QueryDataRe
154
154
return response .Response (), nil
155
155
}
156
156
157
- func (ds * SQLDatasource ) GetDBFromQuery (q * Query , datasourceUID string ) (* sql.DB , error ) {
158
- _ , dbConn , err := ds .getDBConnectionFromQuery (q , datasourceUID )
157
+ func (ds * SQLDatasource ) GetDBFromQuery (ctx context. Context , q * Query , datasourceUID string ) (* sql.DB , error ) {
158
+ _ , dbConn , err := ds .getDBConnectionFromQuery (ctx , q , datasourceUID )
159
159
return dbConn .db , err
160
160
}
161
161
162
- func (ds * SQLDatasource ) getDBConnectionFromQuery (q * Query , datasourceUID string ) (string , dbConnection , error ) {
162
+ func (ds * SQLDatasource ) getDBConnectionFromQuery (ctx context. Context , q * Query , datasourceUID string ) (string , dbConnection , error ) {
163
163
if ! ds .EnableMultipleConnections && ! ds .driverSettings .ForwardHeaders && len (q .ConnectionArgs ) > 0 {
164
164
return "" , dbConnection {}, MissingMultipleConnectionsConfig
165
165
}
@@ -179,7 +179,7 @@ func (ds *SQLDatasource) getDBConnectionFromQuery(q *Query, datasourceUID string
179
179
return key , cachedConn , nil
180
180
}
181
181
182
- db , err := ds .c .Connect (dbConn .settings , q .ConnectionArgs )
182
+ db , err := ds .c .Connect (ctx , dbConn .settings , q .ConnectionArgs )
183
183
if err != nil {
184
184
return "" , dbConnection {}, DownstreamError (err )
185
185
}
@@ -215,7 +215,7 @@ func (ds *SQLDatasource) handleQuery(ctx context.Context, req backend.DataQuery,
215
215
}
216
216
217
217
// Retrieve the database connection
218
- cacheKey , dbConn , err := ds .getDBConnectionFromQuery (q , datasourceUID )
218
+ cacheKey , dbConn , err := ds .getDBConnectionFromQuery (ctx , q , datasourceUID )
219
219
if err != nil {
220
220
return getErrorFrameFromQuery (q ), err
221
221
}
@@ -254,7 +254,7 @@ func (ds *SQLDatasource) handleQuery(ctx context.Context, req backend.DataQuery,
254
254
if shouldRetry (ds .driverSettings .RetryOn , err .Error ()) {
255
255
for i := 0 ; i < ds .driverSettings .Retries ; i ++ {
256
256
backend .Logger .Warn (fmt .Sprintf ("query failed: %s. Retrying %d times" , err .Error (), i ))
257
- db , err := ds .dbReconnect (dbConn , q , cacheKey )
257
+ db , err := ds .dbReconnect (ctx , dbConn , q , cacheKey )
258
258
if err != nil {
259
259
return nil , DownstreamError (err )
260
260
}
@@ -278,7 +278,7 @@ func (ds *SQLDatasource) handleQuery(ctx context.Context, req backend.DataQuery,
278
278
if errors .Is (err , context .DeadlineExceeded ) {
279
279
for i := 0 ; i < ds .driverSettings .Retries ; i ++ {
280
280
backend .Logger .Warn (fmt .Sprintf ("connection timed out. retrying %d times" , i ))
281
- db , err := ds .dbReconnect (dbConn , q , cacheKey )
281
+ db , err := ds .dbReconnect (ctx , dbConn , q , cacheKey )
282
282
if err != nil {
283
283
continue
284
284
}
@@ -293,12 +293,12 @@ func (ds *SQLDatasource) handleQuery(ctx context.Context, req backend.DataQuery,
293
293
return nil , err
294
294
}
295
295
296
- func (ds * SQLDatasource ) dbReconnect (dbConn dbConnection , q * Query , cacheKey string ) (* sql.DB , error ) {
296
+ func (ds * SQLDatasource ) dbReconnect (ctx context. Context , dbConn dbConnection , q * Query , cacheKey string ) (* sql.DB , error ) {
297
297
if err := dbConn .db .Close (); err != nil {
298
298
backend .Logger .Warn (fmt .Sprintf ("closing existing connection failed: %s" , err .Error ()))
299
299
}
300
300
301
- db , err := ds .c .Connect (dbConn .settings , q .ConnectionArgs )
301
+ db , err := ds .c .Connect (ctx , dbConn .settings , q .ConnectionArgs )
302
302
if err != nil {
303
303
return nil , DownstreamError (err )
304
304
}
@@ -318,14 +318,14 @@ func (ds *SQLDatasource) CheckHealth(ctx context.Context, req *backend.CheckHeal
318
318
return ds .check (dbConn )
319
319
}
320
320
321
- return ds .checkWithRetries (dbConn , key , req .GetHTTPHeaders ())
321
+ return ds .checkWithRetries (ctx , dbConn , key , req .GetHTTPHeaders ())
322
322
}
323
323
324
324
func (ds * SQLDatasource ) DriverSettings () DriverSettings {
325
325
return ds .driverSettings
326
326
}
327
327
328
- func (ds * SQLDatasource ) checkWithRetries (conn dbConnection , key string , headers http.Header ) (* backend.CheckHealthResult , error ) {
328
+ func (ds * SQLDatasource ) checkWithRetries (ctx context. Context , conn dbConnection , key string , headers http.Header ) (* backend.CheckHealthResult , error ) {
329
329
var result * backend.CheckHealthResult
330
330
331
331
q := & Query {}
@@ -334,7 +334,7 @@ func (ds *SQLDatasource) checkWithRetries(conn dbConnection, key string, headers
334
334
}
335
335
336
336
for i := 0 ; i < ds .driverSettings .Retries ; i ++ {
337
- db , err := ds .dbReconnect (conn , q , key )
337
+ db , err := ds .dbReconnect (ctx , conn , q , key )
338
338
if err != nil {
339
339
return nil , err
340
340
}
0 commit comments