From 658633d03a1e499bbd11477d9ad7d97152d40629 Mon Sep 17 00:00:00 2001 From: "v.raskin" Date: Wed, 30 Nov 2022 11:24:18 +0300 Subject: [PATCH 1/2] add settings_params pass from context for request to ClickHouse --- conn.go | 14 ++++++++++++++ conn_go18_test.go | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/conn.go b/conn.go index b09d994..4f4c4ea 100644 --- a/conn.go +++ b/conn.go @@ -27,6 +27,9 @@ const ( QueryID key = iota // QuotaKey uses for setting quota_key request param for request to Clickhouse QuotaKey + // SettingsParams uses for custom setting request params for request to Clickhouse + // presented as map[string]string -> key1=value1&key2=value2... etc + SettingsParams quotaKeyParamName = "quota_key" queryIDParamName = "query_id" @@ -340,7 +343,18 @@ func (c *conn) buildRequest(ctx context.Context, query string, params []driver.V reqQuery.Add(queryIDParamName, queryID) } + settingsParams, settingsParamsOk := ctx.Value(SettingsParams).(map[string]string) + if settingsParamsOk && len(settingsParams) != 0 { + if reqQuery == nil { + reqQuery = req.URL.Query() + } + + for name, value := range settingsParams { + reqQuery.Add(name, value) + } + } } + if reqQuery != nil { req.URL.RawQuery = reqQuery.Encode() } diff --git a/conn_go18_test.go b/conn_go18_test.go index 0abbe10..49e4f0a 100644 --- a/conn_go18_test.go +++ b/conn_go18_test.go @@ -38,6 +38,18 @@ func (s *connSuite) TestPing() { s.EqualError(s.conn.PingContext(ctx), "context canceled") } +func (s *connSuite) TestPassSettingsParamsFromContext() { + ctx := context.WithValue(context.Background(), SettingsParams, map[string]string{ + "max_read_buffer_size": "1", + }) + s.NoError(s.conn.PingContext(ctx)) + + ctx = context.WithValue(context.Background(), SettingsParams, map[string]string{ + "no_cache": "1", + }) + s.EqualError(s.conn.PingContext(ctx), "Code: 115, Message: Unknown setting no_cache") +} + func (s *connSuite) TestColumnTypes() { rows, err := s.conn.Query("SELECT * FROM data LIMIT 1") s.Require().NoError(err) From 18744eba57b5e33a1c2a1e93312123d75ba81b59 Mon Sep 17 00:00:00 2001 From: "v.raskin" Date: Sat, 3 Dec 2022 21:42:09 +0300 Subject: [PATCH 2/2] rename SettingsParams to RequestQueryParams --- conn.go | 10 +++++----- conn_go18_test.go | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/conn.go b/conn.go index 4f4c4ea..6358e64 100644 --- a/conn.go +++ b/conn.go @@ -27,9 +27,9 @@ const ( QueryID key = iota // QuotaKey uses for setting quota_key request param for request to Clickhouse QuotaKey - // SettingsParams uses for custom setting request params for request to Clickhouse + // RequestQueryParams uses for custom setting request params for request to Clickhouse // presented as map[string]string -> key1=value1&key2=value2... etc - SettingsParams + RequestQueryParams quotaKeyParamName = "quota_key" queryIDParamName = "query_id" @@ -343,13 +343,13 @@ func (c *conn) buildRequest(ctx context.Context, query string, params []driver.V reqQuery.Add(queryIDParamName, queryID) } - settingsParams, settingsParamsOk := ctx.Value(SettingsParams).(map[string]string) - if settingsParamsOk && len(settingsParams) != 0 { + requestQueryParams, requestQueryParamsOk := ctx.Value(RequestQueryParams).(map[string]string) + if requestQueryParamsOk && len(requestQueryParams) != 0 { if reqQuery == nil { reqQuery = req.URL.Query() } - for name, value := range settingsParams { + for name, value := range requestQueryParams { reqQuery.Add(name, value) } } diff --git a/conn_go18_test.go b/conn_go18_test.go index 49e4f0a..a054c5d 100644 --- a/conn_go18_test.go +++ b/conn_go18_test.go @@ -38,13 +38,13 @@ func (s *connSuite) TestPing() { s.EqualError(s.conn.PingContext(ctx), "context canceled") } -func (s *connSuite) TestPassSettingsParamsFromContext() { - ctx := context.WithValue(context.Background(), SettingsParams, map[string]string{ +func (s *connSuite) TestPassRequestQueryParamsFromContext() { + ctx := context.WithValue(context.Background(), RequestQueryParams, map[string]string{ "max_read_buffer_size": "1", }) s.NoError(s.conn.PingContext(ctx)) - ctx = context.WithValue(context.Background(), SettingsParams, map[string]string{ + ctx = context.WithValue(context.Background(), RequestQueryParams, map[string]string{ "no_cache": "1", }) s.EqualError(s.conn.PingContext(ctx), "Code: 115, Message: Unknown setting no_cache")