Skip to content

Commit 96d5fe5

Browse files
authored
Merge pull request #165 from vench/add_pass_param_from_context
2 parents b259988 + 18744eb commit 96d5fe5

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

conn.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ const (
2727
QueryID key = iota
2828
// QuotaKey uses for setting quota_key request param for request to Clickhouse
2929
QuotaKey
30+
// RequestQueryParams uses for custom setting request params for request to Clickhouse
31+
// presented as map[string]string -> key1=value1&key2=value2... etc
32+
RequestQueryParams
3033

3134
quotaKeyParamName = "quota_key"
3235
queryIDParamName = "query_id"
@@ -340,7 +343,18 @@ func (c *conn) buildRequest(ctx context.Context, query string, params []driver.V
340343
reqQuery.Add(queryIDParamName, queryID)
341344
}
342345

346+
requestQueryParams, requestQueryParamsOk := ctx.Value(RequestQueryParams).(map[string]string)
347+
if requestQueryParamsOk && len(requestQueryParams) != 0 {
348+
if reqQuery == nil {
349+
reqQuery = req.URL.Query()
350+
}
351+
352+
for name, value := range requestQueryParams {
353+
reqQuery.Add(name, value)
354+
}
355+
}
343356
}
357+
344358
if reqQuery != nil {
345359
req.URL.RawQuery = reqQuery.Encode()
346360
}

conn_go18_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,18 @@ func (s *connSuite) TestPing() {
3838
s.EqualError(s.conn.PingContext(ctx), "context canceled")
3939
}
4040

41+
func (s *connSuite) TestPassRequestQueryParamsFromContext() {
42+
ctx := context.WithValue(context.Background(), RequestQueryParams, map[string]string{
43+
"max_read_buffer_size": "1",
44+
})
45+
s.NoError(s.conn.PingContext(ctx))
46+
47+
ctx = context.WithValue(context.Background(), RequestQueryParams, map[string]string{
48+
"no_cache": "1",
49+
})
50+
s.EqualError(s.conn.PingContext(ctx), "Code: 115, Message: Unknown setting no_cache")
51+
}
52+
4153
func (s *connSuite) TestColumnTypes() {
4254
rows, err := s.conn.Query("SELECT * FROM data LIMIT 1")
4355
s.Require().NoError(err)

0 commit comments

Comments
 (0)