diff --git a/client-v2/src/main/java/com/clickhouse/client/api/internal/SettingsConverter.java b/client-v2/src/main/java/com/clickhouse/client/api/internal/SettingsConverter.java index 358012599..45ec94965 100644 --- a/client-v2/src/main/java/com/clickhouse/client/api/internal/SettingsConverter.java +++ b/client-v2/src/main/java/com/clickhouse/client/api/internal/SettingsConverter.java @@ -21,19 +21,25 @@ public static Map toRequestSettings(Map se Map requestSettings = new HashMap<>(); for (Map.Entry entry : settings.entrySet()) { - if (REQUEST_OPTIONS.get(entry.getKey()) != null) { + String key = entry.getKey(); + boolean isServerSetting = key.startsWith("clickhouse_setting_"); + if (!isServerSetting && REQUEST_OPTIONS.get(key) != null) { // This definitely is a request option continue; } + if (isServerSetting) { + key = key.substring("clickhouse_setting_".length()); + } + if (entry.getValue() instanceof Map) { Map map = (Map) entry.getValue(); - requestSettings.put(entry.getKey(), convertMapToStringValue(map)); + requestSettings.put(key, convertMapToStringValue(map)); } else if (entry.getValue() instanceof Collection) { Collection collection = (Collection) entry.getValue(); - requestSettings.put(entry.getKey(), convertCollectionToStringValue(collection)); + requestSettings.put(key, convertCollectionToStringValue(collection)); } else { - requestSettings.put(entry.getKey(), (Serializable) entry.getValue()); + requestSettings.put(key, (Serializable) entry.getValue()); } } diff --git a/client-v2/src/test/java/com/clickhouse/client/HttpTransportTests.java b/client-v2/src/test/java/com/clickhouse/client/HttpTransportTests.java index b81183cca..c3ae9f1d0 100644 --- a/client-v2/src/test/java/com/clickhouse/client/HttpTransportTests.java +++ b/client-v2/src/test/java/com/clickhouse/client/HttpTransportTests.java @@ -512,4 +512,30 @@ public void testSSLAuthentication_invalidConfig() throws Exception { Assert.assertTrue(e.getMessage().startsWith("Only one of password, access token or SSL authentication")); } } + + @Test(groups = { "integration" }) + public void testErrorWithSendProgressHeaders() throws Exception { + ClickHouseNode server = getServer(ClickHouseProtocol.HTTP); + try (Client client = new Client.Builder().addEndpoint(Protocol.HTTP, "localhost",server.getPort(), false) + .setUsername("default") + .setPassword("") + .useNewImplementation(false) + .build()) { + + try (CommandResponse resp = client.execute("DROP TABLE IF EXISTS test_omm_table").get()) { + } + try (CommandResponse resp = client.execute("CREATE TABLE test_omm_table ( val String) Engine = MergeTree ORDER BY () ").get()) { + } + + QuerySettings settings = new QuerySettings() + .serverSetting("send_progress_in_http_headers", "1") + .serverSetting("max_memory_usage", "54M"); + + try (QueryResponse resp = client.query("INSERT INTO test_omm_table SELECT randomString(16) FROM numbers(300000000)", settings).get()) { + + } catch (ServerException e) { + Assert.assertEquals(e.getCode(), 241); + } + } + } }