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() {