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

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


The following commit(s) were added to refs/heads/master by this push:
     new ae0028d0c6a IGNITE-27207 Thin client: SqlFieldsQuery initiator ID 
support - Fixes #12550.
ae0028d0c6a is described below

commit ae0028d0c6a2caec54e6268e16e3b4537a6f2e1d
Author: Aleksey Plekhanov <[email protected]>
AuthorDate: Wed Dec 3 15:58:42 2025 +0300

    IGNITE-27207 Thin client: SqlFieldsQuery initiator ID support - Fixes 
#12550.
    
    Signed-off-by: Aleksey Plekhanov <[email protected]>
---
 .../ignite/internal/client/thin/ClientUtils.java   | 23 +++++++++++++--------
 .../client/thin/ProtocolBitmaskFeature.java        |  5 ++++-
 .../internal/client/thin/TcpClientCache.java       |  2 +-
 .../internal/client/thin/TcpIgniteClient.java      |  2 +-
 .../platform/client/ClientBitmaskFeature.java      |  5 ++++-
 .../cache/ClientCacheSqlFieldsQueryRequest.java    | 10 ++++++++-
 .../apache/ignite/client/FunctionalQueryTest.java  | 24 ++++++++++++++++++++++
 7 files changed, 58 insertions(+), 13 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
index c21dd8d2537..880b8a49cd0 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
@@ -62,6 +62,8 @@ import org.apache.ignite.internal.util.typedef.T2;
 import org.jetbrains.annotations.Nullable;
 
 import static 
org.apache.ignite.internal.client.thin.ProtocolBitmaskFeature.CACHE_STORAGES;
+import static 
org.apache.ignite.internal.client.thin.ProtocolBitmaskFeature.QRY_INITIATOR_ID;
+import static 
org.apache.ignite.internal.client.thin.ProtocolBitmaskFeature.QRY_PARTITIONS_BATCH_SIZE;
 import static 
org.apache.ignite.internal.client.thin.ProtocolVersionFeature.EXPIRY_POLICY;
 import static 
org.apache.ignite.internal.client.thin.ProtocolVersionFeature.QUERY_ENTITY_PRECISION_AND_SCALE;
 import static 
org.apache.ignite.internal.processors.platform.cache.expiry.PlatformExpiryPolicy.convertDuration;
@@ -519,7 +521,7 @@ public final class ClientUtils {
     }
 
     /** Serialize SQL field query to stream. */
-    void write(SqlFieldsQuery qry, BinaryOutputStream out) {
+    void write(SqlFieldsQuery qry, BinaryOutputStream out, ProtocolContext 
protocolCtx) {
         writeObject(out, qry.getSchema());
         out.writeInt(qry.getPageSize());
         out.writeInt(-1); // do not limit
@@ -535,16 +537,21 @@ public final class ClientUtils {
         out.writeLong(qry.getTimeout());
         out.writeBoolean(true); // include column names
 
-        if (qry.getPartitions() != null) {
-            out.writeInt(qry.getPartitions().length);
+        if (protocolCtx.isFeatureSupported(QRY_PARTITIONS_BATCH_SIZE)) {
+            if (qry.getPartitions() != null) {
+                out.writeInt(qry.getPartitions().length);
 
-            for (int part : qry.getPartitions())
-                out.writeInt(part);
+                for (int part : qry.getPartitions())
+                    out.writeInt(part);
+            }
+            else
+                out.writeInt(-1);
+
+            out.writeInt(qry.getUpdateBatchSize());
         }
-        else
-            out.writeInt(-1);
 
-        out.writeInt(qry.getUpdateBatchSize());
+        if (protocolCtx.isFeatureSupported(QRY_INITIATOR_ID))
+            writeObject(out, qry.getQueryInitiatorId());
     }
 
     /** Write Ignite binary object to output stream. */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolBitmaskFeature.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolBitmaskFeature.java
index 9277fdfd9ce..65457cb9cce 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolBitmaskFeature.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolBitmaskFeature.java
@@ -112,7 +112,10 @@ public enum ProtocolBitmaskFeature {
     SQL_CACHE_CREATION(21),
 
     /** Data-center information. */
-    DC_AWARE(22);
+    DC_AWARE(22),
+
+    /** SqlFieldsQuery initiatorId property. */
+    QRY_INITIATOR_ID(23);
 
     /** */
     private static final EnumSet<ProtocolBitmaskFeature> 
ALL_FEATURES_AS_ENUM_SET =
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpClientCache.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpClientCache.java
index 36eca1ca954..8906dc7d89e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpClientCache.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpClientCache.java
@@ -1084,7 +1084,7 @@ public class TcpClientCache<K, V> implements 
ClientCache<K, V> {
                     ? transactions.tx()
                     : null
             );
-            serDes.write(qry, payloadCh.out());
+            serDes.write(qry, payloadCh.out(), 
payloadCh.clientChannel().protocolCtx());
         };
 
         return new ClientFieldsQueryCursor<>(new ClientFieldsQueryPager(
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
index a86d6306bc0..504f838aed6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
@@ -372,7 +372,7 @@ public class TcpIgniteClient implements IgniteClient {
             else
                 out.writeByte(flags);
 
-            serDes.write(qry, out);
+            serDes.write(qry, out, payloadCh.clientChannel().protocolCtx());
         };
 
         return new ClientFieldsQueryCursor<>(new ClientFieldsQueryPager(
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientBitmaskFeature.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientBitmaskFeature.java
index 3aebc1c58bc..62eb4e8787e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientBitmaskFeature.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientBitmaskFeature.java
@@ -109,7 +109,10 @@ public enum ClientBitmaskFeature implements 
ThinProtocolFeature {
     SQL_CACHE_CREATION(21),
 
     /** Data-center information. */
-    DC_AWARE(22);
+    DC_AWARE(22),
+
+    /** SqlFieldsQuery initiatorId property. */
+    QRY_INITIATOR_ID(23);
 
     /** */
     private static final EnumSet<ClientBitmaskFeature> 
ALL_FEATURES_AS_ENUM_SET =
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheSqlFieldsQueryRequest.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheSqlFieldsQueryRequest.java
index a1bd397c202..136fc7ee898 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheSqlFieldsQueryRequest.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheSqlFieldsQueryRequest.java
@@ -53,6 +53,9 @@ public class ClientCacheSqlFieldsQueryRequest extends 
ClientCacheQueryRequest im
     /** Update batch size. */
     private final Integer updateBatchSize;
 
+    /** Query initiator ID. */
+    private final String initiatorId;
+
     /**
      * Ctor.
      *
@@ -120,6 +123,11 @@ public class ClientCacheSqlFieldsQueryRequest extends 
ClientCacheQueryRequest im
             partitions = null;
             updateBatchSize = null;
         }
+
+        if 
(protocolCtx.isFeatureSupported(ClientBitmaskFeature.QRY_INITIATOR_ID))
+            initiatorId = reader.readString();
+        else
+            initiatorId = null;
     }
 
     /** {@inheritDoc} */
@@ -132,7 +140,7 @@ public class ClientCacheSqlFieldsQueryRequest extends 
ClientCacheQueryRequest im
         ctx.incrementCursors();
 
         try {
-            qry.setQueryInitiatorId(ctx.clientDescriptor());
+            qry.setQueryInitiatorId(initiatorId == null ? 
ctx.clientDescriptor() : initiatorId);
 
             // If cacheId is provided, we must check the cache for existence.
             if (cacheId() != 0) {
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/client/FunctionalQueryTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/client/FunctionalQueryTest.java
index 9d1e25b42ee..091b95c103a 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/client/FunctionalQueryTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/client/FunctionalQueryTest.java
@@ -317,6 +317,30 @@ public class FunctionalQueryTest {
         }
     }
 
+    /** Tests {@link SqlFieldsQuery} initiator ID parameter. */
+    @Test
+    public void testQueryInitiatorId() {
+        try (Ignite ignored = Ignition.start(Config.getServerConfiguration());
+             IgniteClient client = Ignition.startClient(new 
ClientConfiguration().setAddresses(Config.SERVER))
+        ) {
+            String initiatorId = "test";
+
+            SqlFieldsQuery qry = new SqlFieldsQuery("SELECT INITIATOR_ID FROM 
SYS.SQL_QUERIES").setQueryInitiatorId(initiatorId);
+
+            List<List<?>> res = client.query(qry).getAll();
+
+            assertEquals(1, res.size());
+            assertEquals(initiatorId, res.get(0).get(0));
+
+            ClientCache<Object, Object> cache = 
client.getOrCreateCache(Config.DEFAULT_CACHE_NAME);
+
+            res = cache.query(qry).getAll();
+
+            assertEquals(1, res.size());
+            assertEquals(initiatorId, res.get(0).get(0));
+        }
+    }
+
     /** */
     private static ClientConfiguration getClientConfiguration() {
         return new ClientConfiguration().setAddresses(Config.SERVER)

Reply via email to