@@ -508,14 +508,16 @@ private HttpContext createRequestHttpContext(Map<String, Object> requestConfig)
508508 return context ;
509509 }
510510
511- private URI createRequestURI (Endpoint server , Map <String ,Object > requestConfig , boolean addParameters ) {
511+ private URI createRequestURI (Endpoint server , Map <String ,Object > requestConfig , boolean isMultipartRequest ) {
512512 URI uri ;
513513 try {
514514 URIBuilder uriBuilder = new URIBuilder (server .getURI ());
515515 addRequestParams (requestConfig , uriBuilder ::addParameter );
516516
517- if (addParameters ) {
517+ if (! isMultipartRequest ) {
518518 addStatementParams (requestConfig , uriBuilder ::addParameter );
519+ } else {
520+ uriBuilder .removeParameter (ClickHouseHttpProto .QPARAM_DECOMPRESS ); // multipart request doesn't support compression yet
519521 }
520522
521523 uri = uriBuilder .optimize ().build ();
@@ -573,35 +575,32 @@ public TransportRequest createRequest(Endpoint server, Map<String, Object> reque
573575 boolean useMultipart = ClientConfigProperties .HTTP_SEND_PARAMS_IN_BODY .<Boolean >getOrDefault (requestConfig ) &&
574576 requestConfig .containsKey (HttpAPIClientHelper .KEY_STATEMENT_PARAMS );
575577
576- // adjust configuration
577- if (useMultipart ) {
578- requestConfig .put (ClientConfigProperties .COMPRESS_CLIENT_REQUEST .getKey (), false ); // turn-off client-req compression
579- }
580-
581578 // create configuration dependent objects
582- final URI uri = createRequestURI (server , requestConfig , ! useMultipart );
579+ final URI uri = createRequestURI (server , requestConfig , useMultipart );
583580 final HttpPost req = createPostRequest (uri , requestConfig );
584581
582+ final HttpEntity httpEntity ;
585583 if (useMultipart ) {
586584 MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder .create ();
587585 addStatementParams (requestConfig , multipartEntityBuilder ::addTextBody );
588586 multipartEntityBuilder .addTextBody (ClickHouseHttpProto .QPARAM_QUERY_STMT , body );
589587
590- HttpEntity httpEntity = multipartEntityBuilder .build ();
588+ httpEntity = multipartEntityBuilder .build ();
591589 req .setHeader (HttpHeaders .CONTENT_TYPE , httpEntity .getContentType ()); // set proper content type with generated boundary value
592- req .setEntity (wrapRequestEntity (httpEntity , requestConfig ));
593-
594590 } else {
595- final HttpEntity httpEntity ;
596591 try {
597592 final String contentEncoding = req .containsHeader (HttpHeaders .CONTENT_ENCODING ) ? req .getHeader (HttpHeaders .CONTENT_ENCODING ).getValue () : null ;
598593 httpEntity = new ByteArrayEntity (body .getBytes (StandardCharsets .UTF_8 .name ()), CONTENT_TYPE , contentEncoding );
599594 } catch (UnsupportedEncodingException | ProtocolException e ) {
600595 throw new ClientException ("failed to create request body entity" , e );
601596 }
597+ }
598+ // adjust configuration
599+ if (useMultipart ) {
600+ req .setEntity (httpEntity ); // multipart doesn't support compression right now
601+ } else {
602602 req .setEntity (wrapRequestEntity (httpEntity , requestConfig ));
603603 }
604-
605604 return new TransportRequestImpl (req , requestConfig );
606605 }
607606
@@ -723,7 +722,7 @@ public TransportResponse executeRequest(TransportRequest transportRequest) throw
723722 }
724723
725724 public TransportRequest createRequest (Endpoint server , Map <String , Object > requestConfig , IOCallback <OutputStream > writeCallback ) {
726- final URI uri = createRequestURI (server , requestConfig , true );
725+ final URI uri = createRequestURI (server , requestConfig , false );
727726 final HttpPost req = createPostRequest (uri , requestConfig );
728727 try {
729728 String contentEncoding = req .containsHeader (HttpHeaders .CONTENT_ENCODING ) ? req .getHeader (HttpHeaders .CONTENT_ENCODING ).getValue () : null ;
@@ -852,13 +851,13 @@ private void addRequestParams(Map<String, Object> requestConfig, BiConsumer<Stri
852851 // enable_http_compression make server react on http header
853852 // for client side compression Content-Encoding should be set
854853 // for server side compression Accept-Encoding should be set
855- consumer .accept ("enable_http_compression" , "1" );
854+ consumer .accept (ClickHouseHttpProto . QPARAM_ENABLE_HTTP_COMPRESSION , "1" );
856855 } else {
857856 if (serverCompression ) {
858- consumer .accept ("compress" , "1" );
857+ consumer .accept (ClickHouseHttpProto . QPARAM_COMPRESS , "1" );
859858 }
860859 if (clientCompression ) {
861- consumer .accept ("decompress" , "1" );
860+ consumer .accept (ClickHouseHttpProto . QPARAM_DECOMPRESS , "1" );
862861 }
863862 }
864863
0 commit comments