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