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

korlov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new b6b188f4109 IGNITE-18922 Thin 3.0: Avoid BinaryTuple conversion in 
client SQL handler (#7143)
b6b188f4109 is described below

commit b6b188f41095161bb1297f08d58124ae12bad7eb
Author: korlov42 <[email protected]>
AuthorDate: Thu Dec 4 09:07:17 2025 +0200

    IGNITE-18922 Thin 3.0: Avoid BinaryTuple conversion in client SQL handler 
(#7143)
---
 .../ignite/client/handler/requests/sql/ClientSqlCommon.java | 13 ++++++++++++-
 .../apache/ignite/internal/sql/api/AsyncResultSetImpl.java  |  9 ++++++++-
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git 
a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/ClientSqlCommon.java
 
b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/ClientSqlCommon.java
index c5ae6f11eeb..90978d1ef93 100644
--- 
a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/ClientSqlCommon.java
+++ 
b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/ClientSqlCommon.java
@@ -31,6 +31,8 @@ import org.apache.ignite.client.handler.ClientResource;
 import org.apache.ignite.client.handler.ClientResourceRegistry;
 import org.apache.ignite.client.handler.ResponseWriter;
 import org.apache.ignite.internal.binarytuple.BinaryTupleBuilder;
+import org.apache.ignite.internal.binarytuple.BinaryTupleContainer;
+import org.apache.ignite.internal.binarytuple.BinaryTupleParser;
 import org.apache.ignite.internal.client.proto.ClientMessagePacker;
 import org.apache.ignite.internal.client.sql.QueryModifier;
 import org.apache.ignite.internal.lang.IgniteInternalCheckedException;
@@ -60,7 +62,16 @@ class ClientSqlCommon {
         out.packInt(asyncResultSet.currentPageSize());
 
         for (SqlRow row : asyncResultSet.currentPage()) {
-            // TODO IGNITE-18922 Avoid conversion, copy BinaryTuple from SQL 
to client.
+            if (row instanceof BinaryTupleContainer) {
+                BinaryTupleParser binaryTuple = ((BinaryTupleContainer) 
row).binaryTuple();
+                if (binaryTuple != null) {
+                    out.packBinaryTuple(binaryTuple);
+
+                    continue;
+                }
+            }
+
+            // Fall-back to conversion.
             var builder = new BinaryTupleBuilder(row.columnCount());
 
             for (int i = 0; i < cols.size(); i++) {
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/api/AsyncResultSetImpl.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/api/AsyncResultSetImpl.java
index 2112fad417c..fda445537f5 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/api/AsyncResultSetImpl.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/api/AsyncResultSetImpl.java
@@ -25,6 +25,8 @@ import java.time.LocalTime;
 import java.util.Iterator;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
+import org.apache.ignite.internal.binarytuple.BinaryTupleContainer;
+import org.apache.ignite.internal.binarytuple.BinaryTupleReader;
 import org.apache.ignite.internal.sql.engine.AsyncSqlCursor;
 import org.apache.ignite.internal.sql.engine.InternalSqlRow;
 import org.apache.ignite.internal.sql.engine.SqlQueryType;
@@ -170,7 +172,7 @@ public class AsyncResultSetImpl<T> implements 
AsyncResultSet<T> {
         }
     }
 
-    private static class SqlRowImpl implements SqlRow {
+    private static class SqlRowImpl implements SqlRow, BinaryTupleContainer {
         private final InternalSqlRow row;
 
         private final ResultSetMetadata meta;
@@ -420,6 +422,11 @@ public class AsyncResultSetImpl<T> implements 
AsyncResultSet<T> {
             return meta;
         }
 
+        @Override
+        public BinaryTupleReader binaryTuple() {
+            return row.asBinaryTuple();
+        }
+
         /** {@inheritDoc} */
         @Override
         public String toString() {

Reply via email to