This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 21675d651f0 fix flight sql when contains & (#58830)
21675d651f0 is described below

commit 21675d651f081d4142d75785f5efb389a2e9121a
Author: wlong <[email protected]>
AuthorDate: Wed Dec 10 09:54:44 2025 +0800

    fix flight sql when contains & (#58830)
    
    ### What problem does this PR solve?
    
    fix flight sql when contains &, such as:
    select 'a&b' as c
    
    error message:
    error org.apache.arrow.adbc.core.AdbcException: Malformed ticket, size:
    5
    
    Co-authored-by: wanglong16 <[email protected]>
---
 be/src/service/arrow_flight/flight_sql_service.cpp                   | 5 ++++-
 .../org/apache/doris/service/arrowflight/DorisFlightSqlProducer.java | 5 ++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/be/src/service/arrow_flight/flight_sql_service.cpp 
b/be/src/service/arrow_flight/flight_sql_service.cpp
index e3390e0b235..e49f355ad30 100644
--- a/be/src/service/arrow_flight/flight_sql_service.cpp
+++ b/be/src/service/arrow_flight/flight_sql_service.cpp
@@ -28,6 +28,7 @@
 #include "service/backend_options.h"
 #include "util/arrow/utils.h"
 #include "util/uid_util.h"
+#include "util/url_coding.h"
 
 namespace doris::flight {
 
@@ -62,7 +63,9 @@ private:
         TNetworkAddress result_addr;
         result_addr.hostname = fields[1];
         result_addr.port = std::stoi(fields[2]);
-        std::string sql = fields[3];
+        const std::string& sql_base64 = fields[3];
+        std::string sql;
+        base64_decode(sql_base64, &sql);
         std::shared_ptr<QueryStatement> statement =
                 std::make_shared<QueryStatement>(queryid, result_addr, sql);
         return statement;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/service/arrowflight/DorisFlightSqlProducer.java
 
b/fe/fe-core/src/main/java/org/apache/doris/service/arrowflight/DorisFlightSqlProducer.java
index 063bc3d46c7..ebc3347f07f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/service/arrowflight/DorisFlightSqlProducer.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/service/arrowflight/DorisFlightSqlProducer.java
@@ -85,7 +85,9 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.channels.Channels;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
@@ -240,7 +242,8 @@ public class DorisFlightSqlProducer implements 
FlightSqlProducer, AutoCloseable
                         // Ticket contains the IP and Brpc Port of the Doris 
BE node where the query result is located.
                         final ByteString handle = ByteString.copyFromUtf8(
                                 DebugUtil.printId(tid) + "&" + 
endpointLoc.getResultInternalServiceAddr().hostname + "&"
-                                        + 
endpointLoc.getResultInternalServiceAddr().port + "&" + query);
+                                        + 
endpointLoc.getResultInternalServiceAddr().port + "&"
+                                        + 
Base64.getEncoder().encodeToString(query.getBytes(StandardCharsets.UTF_8)));
                         TicketStatementQuery ticketStatement = 
TicketStatementQuery.newBuilder()
                                 .setStatementHandle(handle).build();
                         Ticket ticket = new 
Ticket(Any.pack(ticketStatement).toByteArray());


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to