@@ -1710,6 +1710,7 @@ public CompletableFuture<QueryResponse> query(String sqlQuery, Map<String, Objec
17101710 if (requestSettings .getFormat () == null ) {
17111711 requestSettings .setFormat (ClickHouseFormat .RowBinaryWithNamesAndTypes );
17121712 }
1713+ applyFormatSpecificSettings (requestSettings );
17131714 ClientStatisticsHolder clientStats = new ClientStatisticsHolder ();
17141715 clientStats .start (ClientMetrics .OP_DURATION );
17151716
@@ -2295,6 +2296,30 @@ private Map<String, Object> buildRequestSettings(Map<String, Object> opSettings)
22952296 return requestSettings ;
22962297 }
22972298
2299+ /**
2300+ * Applies format-specific server-side settings to the already merged request settings.
2301+ * Must be called after {@link #buildRequestSettings(Map)} and after the request format has been resolved
2302+ * (either provided by the caller or defaulted), so that the inspected format reflects the final value.
2303+ *
2304+ * <p>For {@link ClickHouseFormat#JSONEachRow}, callers may opt in to plain JSON numbers by setting
2305+ * {@link ClientConfigProperties#JSON_DISABLE_NUMBER_QUOTING}. Explicit server settings are otherwise
2306+ * left untouched.</p>
2307+ * <ul>
2308+ * <li>{@code output_format_json_quote_64bit_integers}</li>
2309+ * <li>{@code output_format_json_quote_64bit_floats}</li>
2310+ * <li>{@code output_format_json_quote_decimals}</li>
2311+ * </ul>
2312+ */
2313+ private static void applyFormatSpecificSettings (QuerySettings requestSettings ) {
2314+ boolean disableNumberQuoting = ClientConfigProperties .JSON_DISABLE_NUMBER_QUOTING
2315+ .getOrDefault (requestSettings .getAllSettings ());
2316+ if (requestSettings .getFormat () == ClickHouseFormat .JSONEachRow && disableNumberQuoting ) {
2317+ requestSettings .serverSetting ("output_format_json_quote_64bit_integers" , "0" );
2318+ requestSettings .serverSetting ("output_format_json_quote_64bit_floats" , "0" );
2319+ requestSettings .serverSetting ("output_format_json_quote_decimals" , "0" );
2320+ }
2321+ }
2322+
22982323 private Duration durationSince (long sinceNanos ) {
22992324 return Duration .ofNanos (System .nanoTime () - sinceNanos );
23002325 }
0 commit comments