You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2021/06/09 19:36:25 UTC

[ignite-3] 13/15: WIP.

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

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

commit c9136797926a156379799668018c078df1c8cc85
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Wed Jun 9 11:09:56 2021 +0300

    WIP.
---
 .../ignite/internal/schema/row/ChunkReader.java    | 24 +++++++++++++++++-----
 .../org/apache/ignite/internal/schema/row/Row.java |  2 +-
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/row/ChunkReader.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/row/ChunkReader.java
index 30e4db9..c0e0177 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/row/ChunkReader.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/row/ChunkReader.java
@@ -198,15 +198,29 @@ class ChunkReader {
 
         idx -= cols.numberOfFixsizeColumns();
 
+        if (idx == 0) { // Very first non-null varlen column.
+            int off = cols.numberOfFixsizeColumns() == 0 ?
+                 varTableOff + varlenItemOffset(readShort(vartableOff)) : vartableOff) :
+                fixlenColumnOffset(cols, baseOff, cols.numberOfFixsizeColumns(), hasVarTbl, hasNullMap);
+
+            long len = hasVarTbl ?
+                readShort(vartableOff + varlenItemOffset(0)) - (off - baseOff) :
+                readInteger(baseOff) - (off - baseOff);
+
+            return (len << 32) | off;
+        }
+
+        int vartableSize = readShort(vartableOff);
+
         // Offset of idx-th column is from base offset.
-        int resOff = varlenItemOffset(idx);
+        int resOff = readShort(vartableOff + varlenItemOffset(idx - 1));
 
-        long len = (idx == vartableItems() - 1) ?
+        long len = (idx == vartableSize) ?
             // totalLength - columnStartOffset
-            (baseOff + chunkLength()) - resOff :
+            readInteger(baseOff) - resOff :
             // nextColumnStartOffset - columnStartOffset
-            varlenItemOffset(idx + 1) - resOff;
+            readShort(vartableOff + varlenItemOffset(idx)) - resOff;
 
-        return (len << 32) | resOff;
+        return (len << 32) | (resOff + baseOff);
     }
 }
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/row/Row.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/row/Row.java
index 963ac1a..027da41 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/row/Row.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/row/Row.java
@@ -377,7 +377,7 @@ public class Row implements BinaryRow {
 
         return type.fixedLength() ?
             reader.fixlenColumnOffset(cols, off, colIdx, hasVarTable, hasNullMap) :
-            reader.varlenColumnOffsetAndLength(cols, off, colIdx, hasVarTable, hasNullMap);
+            reader.varlenColumnOffsetAndLength(cols, colIdx);
     }
 
     private ChunkReader valueReader() {