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

tkalkirill pushed a commit to branch ignite-xxxxx-rowid-poc
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit 82ff0021c72f6b15238bddf296a7a31aacef43c0
Author: Kirill Tkalenko <[email protected]>
AuthorDate: Fri Feb 20 13:49:46 2026 +0300

    IGNITE-xxxxx-rowid-poc Реализация
---
 .../processors/query/calcite/exec/IndexScan.java     | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/IndexScan.java
 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/IndexScan.java
index 38034bc93ca..ea105632831 100644
--- 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/IndexScan.java
+++ 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/IndexScan.java
@@ -17,6 +17,7 @@
 package org.apache.ignite.internal.processors.query.calcite.exec;
 
 import java.lang.reflect.Type;
+import java.util.Base64;
 import java.util.Iterator;
 import java.util.List;
 import org.apache.calcite.rel.type.RelDataType;
@@ -38,6 +39,7 @@ import 
org.apache.ignite.internal.cache.query.index.sorted.inline.SortedSegmente
 import org.apache.ignite.internal.cache.query.index.sorted.inline.io.InlineIO;
 import org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKey;
 import 
org.apache.ignite.internal.cache.query.index.sorted.keys.IndexKeyFactory;
+import org.apache.ignite.internal.processors.cache.CacheObjectContext;
 import org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree;
 import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusIO;
 import 
org.apache.ignite.internal.processors.cache.transactions.TransactionChanges;
@@ -220,7 +222,7 @@ public class IndexScan<Row> extends 
AbstractCacheColumnsScan<IndexRow, Row> {
 
         for (int i = 0; i < idxFieldMapping.size(); ++i) {
             int fieldIdx = idxFieldMapping.getInt(i);
-            Object key = rowHnd.get(fieldIdx, bound);
+            Object key = transformIndexKey(rowHnd.get(fieldIdx, bound));
 
             if (key != ectx.unspecifiedValue()) {
                 key = TypeUtils.fromInternal(ectx, key, 
fieldsStoreTypes[fieldIdx]);
@@ -486,4 +488,20 @@ public class IndexScan<Row> extends 
AbstractCacheColumnsScan<IndexRow, Row> {
             throw new IgniteException(e);
         }
     }
+
+    Object transformIndexKey(Object o) {
+        if (idxFieldMapping.indexOf(2) < 0) {
+            return o;
+        }
+
+        try {
+            byte[] bytes = Base64.getDecoder().decode((String) o);
+
+            CacheObjectContext ctx = desc.cacheContext().cacheObjectContext();
+
+            return kctx.cacheObjects().unmarshal(ctx, bytes, null);
+        } catch (Exception e) {
+            throw new IgniteException("Failed to transform index key value: " 
+ o, e);
+        }
+    }
 }

Reply via email to