11package com .clickhouse .client .api .internal ;
22
3+ import com .clickhouse .client .config .ClickHouseClientOption ;
4+ import com .clickhouse .client .http .config .ClickHouseHttpOption ;
5+ import com .clickhouse .config .ClickHouseOption ;
6+
37import java .io .Serializable ;
8+ import java .util .Arrays ;
49import java .util .Collection ;
10+ import java .util .Collections ;
511import java .util .HashMap ;
12+ import java .util .HashSet ;
613import java .util .Map ;
14+ import java .util .Set ;
715import java .util .regex .Pattern ;
816
917public class SettingsConverter {
@@ -12,35 +20,140 @@ public static Map<String, Serializable> toRequestSettings(Map<String, Object> se
1220 Map <String , Serializable > requestSettings = new HashMap <>();
1321
1422 for (Map .Entry <String , Object > entry : settings .entrySet ()) {
23+ if (!REQUEST_SETTINGS .contains (entry .getKey ())) {
24+ continue ;
25+ }
26+
1527 if (entry .getValue () instanceof Map <?,?>) {
1628 Map <String , String > map = (Map <String , String >) entry .getValue ();
17- StringBuilder sb = new StringBuilder ();
18- for (Map .Entry <String , String > e : map .entrySet ()) {
19- sb .append (escape (e .getKey ())).append ('=' ).append (escape (e .getValue ())).append (',' );
20- }
21- requestSettings .put (entry .getKey (), sb .substring (0 , sb .length () - 1 ));
29+ requestSettings .put (entry .getKey (), convertMapToStringValue (map ));
2230 } else if (entry .getValue () instanceof Collection <?>) {
2331 Collection <?> collection = (Collection <?>) entry .getValue ();
24- StringBuilder sb = new StringBuilder ();
25- for (Object value : collection ) {
26- sb .append (escape (value .toString ())).append (',' );
27- }
28- requestSettings .put (entry .getKey (), sb .substring (0 , sb .length () - 1 ));
32+ requestSettings .put (entry .getKey (), convertCollectionToStringValue (collection ));
2933 } else {
30- if (entry .getKey ().equals ("format" )) {
31- continue ;
32- }
3334 requestSettings .put (entry .getKey (), (Serializable ) entry .getValue ());
3435 }
3536 }
3637
3738 return requestSettings ;
3839 }
3940
41+ public static Map <ClickHouseOption , Serializable > toRequestOptions (Map <String , Object > settings ) {
42+ Map <ClickHouseOption , Serializable > requestOptions = new HashMap <>();
43+
44+ for (Map .Entry <String , Object > entry : settings .entrySet ()) {
45+ if (!REQUEST_OPTIONS .containsKey (entry .getKey ())) {
46+ continue ;
47+ }
48+
49+ ClickHouseOption option = REQUEST_OPTIONS .get (entry .getKey ());
50+ if (entry .getValue () instanceof Map <?,?>) {
51+ Map <String , String > map = (Map <String , String >) entry .getValue ();
52+ requestOptions .put (option , convertMapToStringValue (map ));
53+ } else if (entry .getValue () instanceof Collection <?>) {
54+ Collection <?> collection = (Collection <?>) entry .getValue ();
55+ requestOptions .put (option , convertCollectionToStringValue (collection ));
56+ } else {
57+ requestOptions .put (option , (Serializable ) entry .getValue ());
58+ }
59+ }
60+
61+ return requestOptions ;
62+ }
63+
64+ private static String convertMapToStringValue (Map <String , String > map ) {
65+ StringBuilder sb = new StringBuilder ();
66+ for (Map .Entry <String , String > e : map .entrySet ()) {
67+ sb .append (escape (e .getKey ())).append ('=' ).append (escape (e .getValue ())).append (',' );
68+ }
69+ sb .setLength (sb .length () - 1 );
70+ return sb .toString ();
71+ }
4072
73+ private static String convertCollectionToStringValue (Collection <?> collection ) {
74+ StringBuilder sb = new StringBuilder ();
75+ for (Object value : collection ) {
76+ sb .append (escape (value .toString ())).append (',' );
77+ }
78+ sb .setLength (sb .length () - 1 );
79+ return sb .toString ();
80+ }
4181 private static final Pattern ESCAPE_PATTERN = Pattern .compile ("[,'\\ \" =\\ t\\ n]{1}" );
4282
4383 public static String escape (String value ) {
4484 return ESCAPE_PATTERN .matcher (value ).replaceAll ("\\ \\ $0" );
4585 }
86+
87+ private static final Map <String , ClickHouseOption > REQUEST_OPTIONS = createMapOfRequestOptions ();
88+ private static final Set <String > REQUEST_SETTINGS = Collections .unmodifiableSet (new HashSet <>(Arrays .asList (
89+ ClickHouseClientOption .MAX_EXECUTION_TIME .getKey (),
90+ ClickHouseClientOption .MAX_RESULT_ROWS .getKey (),
91+ "extremes" ,
92+ "role"
93+ )));
94+
95+ public static Map <String , ClickHouseOption > createMapOfRequestOptions () {
96+ Map <String , ClickHouseOption > map = new HashMap <>();
97+
98+ Arrays .asList (ClickHouseClientOption .FORMAT ,
99+ ClickHouseClientOption .MAX_EXECUTION_TIME ,
100+ ClickHouseHttpOption .CUSTOM_PARAMS ,
101+ ClickHouseClientOption .AUTO_DISCOVERY ,
102+ ClickHouseClientOption .CUSTOM_SETTINGS ,
103+ ClickHouseClientOption .CUSTOM_SOCKET_FACTORY ,
104+ ClickHouseClientOption .CUSTOM_SOCKET_FACTORY_OPTIONS ,
105+ ClickHouseClientOption .CLIENT_NAME ,
106+ ClickHouseClientOption .DECOMPRESS ,
107+ ClickHouseClientOption .DECOMPRESS_ALGORITHM ,
108+ ClickHouseClientOption .DECOMPRESS_LEVEL ,
109+ ClickHouseClientOption .COMPRESS ,
110+ ClickHouseClientOption .COMPRESS_ALGORITHM ,
111+ ClickHouseClientOption .COMPRESS_LEVEL ,
112+ ClickHouseClientOption .CONNECTION_TIMEOUT ,
113+ ClickHouseClientOption .DATABASE ,
114+ ClickHouseClientOption .MAX_BUFFER_SIZE ,
115+ ClickHouseClientOption .BUFFER_SIZE ,
116+ ClickHouseClientOption .BUFFER_QUEUE_VARIATION ,
117+ ClickHouseClientOption .READ_BUFFER_SIZE ,
118+ ClickHouseClientOption .WRITE_BUFFER_SIZE ,
119+ ClickHouseClientOption .REQUEST_CHUNK_SIZE ,
120+ ClickHouseClientOption .REQUEST_BUFFERING ,
121+ ClickHouseClientOption .RESPONSE_BUFFERING ,
122+ ClickHouseClientOption .MAX_MAPPER_CACHE ,
123+ ClickHouseClientOption .MAX_QUEUED_BUFFERS ,
124+ ClickHouseClientOption .MAX_QUEUED_REQUESTS ,
125+ ClickHouseClientOption .MAX_RESULT_ROWS ,
126+ ClickHouseClientOption .MAX_THREADS_PER_CLIENT ,
127+ ClickHouseClientOption .PRODUCT_NAME ,
128+ ClickHouseClientOption .NODE_CHECK_INTERVAL ,
129+ ClickHouseClientOption .FAILOVER ,
130+ ClickHouseClientOption .RETRY ,
131+ ClickHouseClientOption .REPEAT_ON_SESSION_LOCK ,
132+ ClickHouseClientOption .REUSE_VALUE_WRAPPER ,
133+ ClickHouseClientOption .SERVER_TIME_ZONE ,
134+ ClickHouseClientOption .SERVER_VERSION ,
135+ ClickHouseClientOption .SESSION_TIMEOUT ,
136+ ClickHouseClientOption .SESSION_CHECK ,
137+ ClickHouseClientOption .SOCKET_TIMEOUT ,
138+ ClickHouseClientOption .SSL ,
139+ ClickHouseClientOption .SSL_MODE ,
140+ ClickHouseClientOption .SSL_ROOT_CERTIFICATE ,
141+ ClickHouseClientOption .SSL_CERTIFICATE ,
142+ ClickHouseClientOption .SSL_KEY ,
143+ ClickHouseClientOption .KEY_STORE_TYPE ,
144+ ClickHouseClientOption .TRUST_STORE ,
145+ ClickHouseClientOption .KEY_STORE_PASSWORD ,
146+ ClickHouseClientOption .TRANSACTION_TIMEOUT ,
147+ ClickHouseClientOption .WIDEN_UNSIGNED_TYPES ,
148+ ClickHouseClientOption .USE_BINARY_STRING ,
149+ ClickHouseClientOption .USE_BLOCKING_QUEUE ,
150+ ClickHouseClientOption .USE_COMPILATION ,
151+ ClickHouseClientOption .USE_OBJECTS_IN_ARRAYS ,
152+ ClickHouseClientOption .USE_SERVER_TIME_ZONE ,
153+ ClickHouseClientOption .USE_SERVER_TIME_ZONE_FOR_DATES ,
154+ ClickHouseClientOption .USE_TIME_ZONE )
155+ .forEach (option -> map .put (option .getKey (), option ));
156+
157+ return Collections .unmodifiableMap (map );
158+ }
46159}
0 commit comments