Skip to content

Commit f7affa2

Browse files
correction
1 parent 6868cc4 commit f7affa2

File tree

2 files changed

+55
-49
lines changed

2 files changed

+55
-49
lines changed

ydb/core/formats/arrow/common/accessor.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -100,23 +100,23 @@ std::vector<NKikimr::NArrow::NAccessor::TChunkedArraySerialized> TTrivialArray::
100100
}
101101

102102
std::partial_ordering IChunkedArray::TCurrentChunkAddress::Compare(const ui64 position, const TCurrentChunkAddress& item, const ui64 itemPosition) const {
103-
AFL_VERIFY(StartPosition <= position)("pos", position)("start", StartPosition);
104-
AFL_VERIFY(position < FinishPosition)("pos", position)("finish", FinishPosition);
105-
AFL_VERIFY(item.StartPosition <= itemPosition)("start", item.StartPosition)("item", itemPosition);
106-
AFL_VERIFY(itemPosition < item.FinishPosition)("item", itemPosition)("finish", item.FinishPosition);
107-
return TComparator::TypedCompare<true>(*Array, position - StartPosition, *item.Array, itemPosition - item.StartPosition);
103+
AFL_VERIFY(GetStartPosition() <= position)("pos", position)("start", GetStartPosition());
104+
AFL_VERIFY(position < GetFinishPosition())("pos", position)("finish", GetFinishPosition());
105+
AFL_VERIFY(item.GetStartPosition() <= itemPosition)("start", item.GetStartPosition())("item", itemPosition);
106+
AFL_VERIFY(itemPosition < item.GetFinishPosition())("item", itemPosition)("finish", item.GetFinishPosition());
107+
return TComparator::TypedCompare<true>(*Array, position - GetStartPosition(), *item.Array, itemPosition - item.GetStartPosition());
108108
}
109109

110110
std::shared_ptr<arrow::Array> IChunkedArray::TCurrentChunkAddress::CopyRecord(const ui64 recordIndex) const {
111-
AFL_VERIFY(StartPosition <= recordIndex);
112-
AFL_VERIFY(recordIndex < FinishPosition);
113-
return NArrow::CopyRecords(Array, { recordIndex - StartPosition });
111+
AFL_VERIFY(GetStartPosition() <= recordIndex);
112+
AFL_VERIFY(recordIndex < GetFinishPosition());
113+
return NArrow::CopyRecords(Array, { recordIndex - GetStartPosition() });
114114
}
115115

116116
TString IChunkedArray::TCurrentChunkAddress::DebugString(const ui64 position) const {
117-
AFL_VERIFY(position < FinishPosition);
118-
AFL_VERIFY(StartPosition <= position);
119-
return NArrow::DebugString(Array, position - StartPosition);
117+
AFL_VERIFY(position < GetFinishPosition());
118+
AFL_VERIFY(GetStartPosition() <= position);
119+
return NArrow::DebugString(Array, position - GetStartPosition());
120120
}
121121

122122
namespace {

ydb/core/formats/arrow/common/accessor.h

Lines changed: 44 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <ydb/core/formats/arrow/arrow_helpers.h>
55

66
#include <ydb/library/accessor/accessor.h>
7+
#include <ydb/library/accessor/validator.h>
78
#include <ydb/library/actors/core/log.h>
89

910
#include <contrib/libs/apache/arrow/cpp/src/arrow/array/array_base.h>
@@ -34,65 +35,68 @@ class IChunkedArray {
3435
SparsedArray
3536
};
3637

37-
class TCurrentArrayAddress {
38+
class TCommonChunkAddress {
3839
private:
39-
YDB_READONLY_DEF(std::shared_ptr<IChunkedArray>, Array);
4040
YDB_READONLY(ui64, StartPosition, 0);
4141
YDB_READONLY(ui64, FinishPosition, 0);
4242
YDB_READONLY(ui64, ChunkIndex, 0);
4343

4444
public:
45-
TCurrentArrayAddress(const std::shared_ptr<IChunkedArray>& arr, const ui32 pos, const ui32 idx)
46-
: Array(arr)
47-
, StartPosition(pos)
48-
, FinishPosition(pos + arr->GetRecordsCount())
49-
, ChunkIndex(idx) {
50-
AFL_VERIFY(arr);
51-
AFL_VERIFY(arr->GetRecordsCount());
52-
}
53-
5445
TString DebugString() const {
5546
return TStringBuilder() << "start=" << StartPosition << ";"
5647
<< "chunk_index=" << ChunkIndex << ";"
57-
<< "length=" << Array->GetRecordsCount() << ";";
48+
<< "finish=" << FinishPosition << ";"
49+
<< "size=" << FinishPosition - StartPosition << ";"
50+
;
5851
}
59-
};
60-
61-
class TCurrentChunkAddress {
62-
private:
63-
YDB_READONLY_DEF(std::shared_ptr<arrow::Array>, Array);
64-
YDB_READONLY(ui64, StartPosition, 0);
65-
YDB_READONLY(ui64, FinishPosition, 0);
66-
YDB_READONLY(ui64, ChunkIndex, 0);
67-
68-
public:
69-
TString DebugString(const ui64 position) const;
7052

7153
ui64 GetLength() const {
72-
return Array->length();
54+
return FinishPosition - StartPosition;
7355
}
7456

7557
bool Contains(const ui64 position) const {
7658
return position >= StartPosition && position < FinishPosition;
7759
}
7860

61+
TCommonChunkAddress(const ui64 start, const ui64 finish, const ui64 index)
62+
: StartPosition(start)
63+
, FinishPosition(finish)
64+
, ChunkIndex(index) {
65+
AFL_VERIFY(FinishPosition > StartPosition);
66+
}
67+
};
68+
69+
class TCurrentArrayAddress: public TCommonChunkAddress {
70+
private:
71+
YDB_READONLY_DEF(std::shared_ptr<IChunkedArray>, Array);
72+
73+
public:
74+
TCurrentArrayAddress(const std::shared_ptr<IChunkedArray>& arr, const ui32 pos, const ui32 idx)
75+
: TCommonChunkAddress(pos, pos + TValidator::CheckNotNull(arr)->GetRecordsCount(), idx)
76+
, Array(arr) {
77+
AFL_VERIFY(Array);
78+
AFL_VERIFY(Array->GetRecordsCount());
79+
}
80+
};
81+
82+
class TCurrentChunkAddress: public TCommonChunkAddress {
83+
private:
84+
using TBase = TCommonChunkAddress;
85+
YDB_READONLY_DEF(std::shared_ptr<arrow::Array>, Array);
86+
87+
public:
88+
using TBase::DebugString;
89+
TString DebugString(const ui64 position) const;
90+
7991
std::shared_ptr<arrow::Array> CopyRecord(const ui64 recordIndex) const;
8092

8193
std::partial_ordering Compare(const ui64 position, const TCurrentChunkAddress& item, const ui64 itemPosition) const;
8294

8395
TCurrentChunkAddress(const std::shared_ptr<arrow::Array>& arr, const ui64 pos, const ui32 chunkIdx)
84-
: Array(arr)
85-
, StartPosition(pos)
86-
, ChunkIndex(chunkIdx) {
87-
AFL_VERIFY(arr);
88-
AFL_VERIFY(arr->length());
89-
FinishPosition = StartPosition + arr->length();
90-
}
91-
92-
TString DebugString() const {
93-
return TStringBuilder() << "start=" << StartPosition << ";"
94-
<< "chunk_index=" << ChunkIndex << ";"
95-
<< "length=" << Array->length() << ";";
96+
: TCommonChunkAddress(pos, pos + TValidator::CheckNotNull(arr)->length(), chunkIdx)
97+
, Array(arr) {
98+
AFL_VERIFY(Array);
99+
AFL_VERIFY(Array->length());
96100
}
97101
};
98102

@@ -143,7 +147,8 @@ class IChunkedArray {
143147
ui64 idx = 0;
144148
if (chunkCurrent) {
145149
if (position < chunkCurrent->GetFinishPosition()) {
146-
return accessor.OnArray(chunkCurrent->GetChunkIndex(), chunkCurrent->GetStartPosition(), position - chunkCurrent->GetStartPosition());
150+
return accessor.OnArray(
151+
chunkCurrent->GetChunkIndex(), chunkCurrent->GetStartPosition(), position - chunkCurrent->GetStartPosition());
147152
}
148153
AFL_VERIFY(chunkCurrent->GetChunkIndex() < accessor.GetChunksCount());
149154
startIndex = chunkCurrent->GetChunkIndex();
@@ -239,7 +244,8 @@ class IChunkedArray {
239244

240245
std::shared_ptr<arrow::ChunkedArray> Slice(const ui32 offset, const ui32 count) const;
241246

242-
TCurrentArrayAddress GetArray(const std::optional<TCurrentArrayAddress>& chunkCurrent, const ui64 position, const std::shared_ptr<IChunkedArray>& selfPtr) const {
247+
TCurrentArrayAddress GetArray(
248+
const std::optional<TCurrentArrayAddress>& chunkCurrent, const ui64 position, const std::shared_ptr<IChunkedArray>& selfPtr) const {
243249
AFL_VERIFY(position < GetRecordsCount());
244250
return DoGetArray(chunkCurrent, position, selfPtr);
245251
}

0 commit comments

Comments
 (0)