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)