diff options
author | robot-piglet <robot-piglet@yandex-team.com> | 2024-12-20 18:44:48 +0300 |
---|---|---|
committer | robot-piglet <robot-piglet@yandex-team.com> | 2024-12-20 18:57:51 +0300 |
commit | dd1ca5f048ebdfa6b6d5f17f9fac41fc86e778d2 (patch) | |
tree | 1a333910e6abee6aee4158ef022230d5d0933348 | |
parent | a02b79b51b163a067e6e054ddc581e5fab073618 (diff) | |
download | ydb-dd1ca5f048ebdfa6b6d5f17f9fac41fc86e778d2.tar.gz |
Intermediate changes
commit_hash:f1cb0ff8148e64bf3c980af5d0ac1eed3c3b0648
-rw-r--r-- | yt/yt/client/signature/unittests/ya.make | 2 | ||||
-rw-r--r-- | yt/yt/library/formats/arrow_parser.cpp | 22 |
2 files changed, 15 insertions, 9 deletions
diff --git a/yt/yt/client/signature/unittests/ya.make b/yt/yt/client/signature/unittests/ya.make index a18bab50526..b7f6fd5fe56 100644 --- a/yt/yt/client/signature/unittests/ya.make +++ b/yt/yt/client/signature/unittests/ya.make @@ -1,4 +1,4 @@ -GTEST(unittester-signature-service) +GTEST(unittester-client-signature) INCLUDE(${ARCADIA_ROOT}/yt/ya_cpp.make.inc) diff --git a/yt/yt/library/formats/arrow_parser.cpp b/yt/yt/library/formats/arrow_parser.cpp index c3c169352ba..7c112716e56 100644 --- a/yt/yt/library/formats/arrow_parser.cpp +++ b/yt/yt/library/formats/arrow_parser.cpp @@ -245,6 +245,7 @@ private: void ParseSimpleNumeric(FuncType makeUnversionedValueFunc) { auto array = std::static_pointer_cast<ArrayType>(Array_); + YT_VERIFY(array->length() <= std::ssize(*RowValues_)); for (int rowIndex = 0; rowIndex < array->length(); ++rowIndex) { if (array->IsNull(rowIndex)) { (*RowValues_)[rowIndex] = MakeUnversionedNullValue(ColumnId_); @@ -258,6 +259,7 @@ private: arrow::Status ParseStringLikeArray(auto makeUnversionedValueFunc) { auto array = std::static_pointer_cast<ArrayType>(Array_); + YT_VERIFY(array->length() <= std::ssize(*RowValues_)); for (int rowIndex = 0; rowIndex < array->length(); ++rowIndex) { if (array->IsNull(rowIndex)) { (*RowValues_)[rowIndex] = MakeUnversionedNullValue(ColumnId_); @@ -295,6 +297,7 @@ private: arrow::Status ParseBoolean() { auto array = std::static_pointer_cast<arrow::BooleanArray>(Array_); + YT_VERIFY(array->length() <= std::ssize(*RowValues_)); for (int rowIndex = 0; rowIndex < array->length(); rowIndex++) { if (array->IsNull(rowIndex)) { (*RowValues_)[rowIndex] = MakeUnversionedNullValue(ColumnId_); @@ -308,6 +311,7 @@ private: arrow::Status ParseNull() { auto array = std::static_pointer_cast<arrow::NullArray>(Array_); + YT_VERIFY(array->length() <= std::ssize(*RowValues_)); for (int rowIndex = 0; rowIndex < array->length(); rowIndex++) { (*RowValues_)[rowIndex] = MakeUnversionedNullValue(ColumnId_); } @@ -834,19 +838,21 @@ void PrepareArrayForSimpleLogicalType( { CheckMatchingArrowTypes(columnType, column); if (column->type()->id() == arrow::Type::DICTIONARY) { - auto dictionaryColumn = std::static_pointer_cast<arrow::DictionaryArray>(column); - TUnversionedRowValues dictionaryValues(rowsValues[columnIndex].size()); - auto dictionaryValuesColumn = dictionaryColumn->dictionary(); - CheckMatchingArrowTypes(columnType, dictionaryValuesColumn); + auto dictionaryArrayColumn = std::static_pointer_cast<arrow::DictionaryArray>(column); + auto dictionary = dictionaryArrayColumn->dictionary(); + TUnversionedRowValues dictionaryValues(dictionary->length()); + CheckMatchingArrowTypes(columnType, dictionary); - TArraySimpleVisitor visitor(columnType, columnId, dictionaryValuesColumn, bufferForStringLikeValues, &dictionaryValues); - ThrowOnError(dictionaryColumn->dictionary()->type()->Accept(&visitor)); + TArraySimpleVisitor visitor(columnType, columnId, dictionary, bufferForStringLikeValues, &dictionaryValues); + ThrowOnError(dictionaryArrayColumn->dictionary()->type()->Accept(&visitor)); for (int offset = 0; offset < std::ssize(rowsValues[columnIndex]); offset++) { - if (dictionaryColumn->IsNull(offset)) { + if (dictionaryArrayColumn->IsNull(offset)) { rowsValues[columnIndex][offset] = MakeUnversionedNullValue(columnId); } else { - rowsValues[columnIndex][offset] = dictionaryValues[dictionaryColumn->GetValueIndex(offset)]; + auto dictionaryValueIndex = dictionaryArrayColumn->GetValueIndex(offset); + YT_VERIFY(dictionaryValueIndex < std::ssize(dictionaryValues)); + rowsValues[columnIndex][offset] = dictionaryValues[dictionaryValueIndex]; } } } else { |