diff options
author | nadya02 <nadya02@yandex-team.com> | 2023-08-29 15:59:12 +0300 |
---|---|---|
committer | nadya02 <nadya02@yandex-team.com> | 2023-08-29 20:26:05 +0300 |
commit | bd84f96beddfa6dea5cddf86488288fca7c58967 (patch) | |
tree | f80bcf81059fd3b610d560a7a24c5275e0a7966b | |
parent | 03953629d30b54fad10351ed84a3f0f226667071 (diff) | |
download | ydb-bd84f96beddfa6dea5cddf86488288fca7c58967.tar.gz |
fix xonverters
fix
-rw-r--r-- | yt/yt/client/converters/boolean_converter.cpp | 18 | ||||
-rw-r--r-- | yt/yt/client/converters/converter.cpp | 20 | ||||
-rw-r--r-- | yt/yt/client/converters/converter.h | 3 | ||||
-rw-r--r-- | yt/yt/client/converters/floating_point_converter.cpp | 20 | ||||
-rw-r--r-- | yt/yt/client/converters/integer_converter.cpp | 15 | ||||
-rw-r--r-- | yt/yt/client/converters/null_converter.cpp | 15 | ||||
-rw-r--r-- | yt/yt/client/converters/null_converter.h | 2 | ||||
-rw-r--r-- | yt/yt/client/converters/string_converter.cpp | 13 |
8 files changed, 64 insertions, 42 deletions
diff --git a/yt/yt/client/converters/boolean_converter.cpp b/yt/yt/client/converters/boolean_converter.cpp index 05dd7ff3d7e..e083ff54c6d 100644 --- a/yt/yt/client/converters/boolean_converter.cpp +++ b/yt/yt/client/converters/boolean_converter.cpp @@ -35,17 +35,17 @@ public: , ColumnSchema_(columnSchema) { } - TConvertedColumn Convert(TRange<NTableClient::TUnversionedRow> rows) override + TConvertedColumn Convert(const std::vector<TUnversionedRowValues>& rowsValues) override { Reset(); - AddValues(rows); + AddValues(rowsValues); auto column = std::make_shared<TBatchColumn>(); auto nullBitmapRef = NullBitmap_.Flush<TConverterTag>(); auto valuesRef = Values_.Flush<TConverterTag>(); - FillColumnarBooleanValues(column.get(), 0, rows.size(), valuesRef); - FillColumnarNullBitmap(column.get(), 0, rows.size(), nullBitmapRef); + FillColumnarBooleanValues(column.get(), 0, rowsValues.size(), valuesRef); + FillColumnarNullBitmap(column.get(), 0, rowsValues.size(), nullBitmapRef); column->Type = ColumnSchema_.LogicalType(); column->Id = ColumnIndex_; @@ -74,12 +74,12 @@ private: NullBitmap_ = TBitmapOutput(); } - void AddValues(TRange<NTableClient::TUnversionedRow> rows) + void AddValues(const std::vector<TUnversionedRowValues>& rowsValues) { - for (auto row : rows) { - const auto& value = row[ColumnIndex_]; - bool isNull = value.Type == NTableClient::EValueType::Null; - bool data = isNull ? false : value.Data.Boolean; + for (auto rowValues : rowsValues) { + auto value = rowValues[ColumnIndex_]; + bool isNull = value == nullptr || value->Type == NTableClient::EValueType::Null; + bool data = isNull ? false : value->Data.Boolean; NullBitmap_.Append(isNull); Values_.Append(data); } diff --git a/yt/yt/client/converters/converter.cpp b/yt/yt/client/converters/converter.cpp index d513d382a77..a9d27d86317 100644 --- a/yt/yt/client/converters/converter.cpp +++ b/yt/yt/client/converters/converter.cpp @@ -46,7 +46,7 @@ IColumnConverterPtr CreateColumnConvert( return CreateCompositeConverter(columnIndex, columnSchema); case EValueType::Null: - return CreateNullConverter(); + return CreateNullConverter(columnIndex); case EValueType::Min: case EValueType::TheBottom: @@ -60,13 +60,25 @@ IColumnConverterPtr CreateColumnConvert( TConvertedColumnRange ConvertRowsToColumns( - TRange<NTableClient::TUnversionedRow> rows, - const std::vector<NTableClient::TColumnSchema> &columnSchema) + TRange<TUnversionedRow> rows, + const std::vector<TColumnSchema> &columnSchema) { TConvertedColumnRange convertedColumnsRange; + std::vector<TUnversionedRowValues> rowsValues; + rowsValues.reserve(rows.size()); + + for (const auto& row : rows) { + NConverters::TUnversionedRowValues rowValues; + rowValues.resize(columnSchema.size(), nullptr); + for (const auto* item = row.Begin(); item != row.End(); ++item) { + rowValues[item->Id] = item; + } + rowsValues.push_back(std::move(rowValues)); + } + for (int columnId = 0; columnId < std::ssize(columnSchema); columnId++) { auto converter = CreateColumnConvert(columnSchema[columnId], columnId); - auto columns = converter->Convert(rows); + auto columns = converter->Convert(rowsValues); convertedColumnsRange.push_back(columns); } return convertedColumnsRange; diff --git a/yt/yt/client/converters/converter.h b/yt/yt/client/converters/converter.h index 01cdea393e1..30ad2188099 100644 --- a/yt/yt/client/converters/converter.h +++ b/yt/yt/client/converters/converter.h @@ -10,6 +10,7 @@ namespace NYT::NConverters { using TBatchColumn = NTableClient::IUnversionedColumnarRowBatch::TColumn; using TBatchColumnPtr = std::shared_ptr<TBatchColumn>; +using TUnversionedRowValues = std::vector<const NTableClient::TUnversionedValue*>; //////////////////////////////////////////////////////////////////////////////// @@ -35,7 +36,7 @@ struct IColumnConverter : public TNonCopyable { virtual ~IColumnConverter() = default; - virtual TConvertedColumn Convert(TRange<NTableClient::TUnversionedRow> rows) = 0; + virtual TConvertedColumn Convert(const std::vector<TUnversionedRowValues>& rowsValues) = 0; }; using IColumnConverterPtr = std::unique_ptr<IColumnConverter>; diff --git a/yt/yt/client/converters/floating_point_converter.cpp b/yt/yt/client/converters/floating_point_converter.cpp index 125f02292ed..748a64cbd1e 100644 --- a/yt/yt/client/converters/floating_point_converter.cpp +++ b/yt/yt/client/converters/floating_point_converter.cpp @@ -60,9 +60,9 @@ public: static_assert(std::is_floating_point_v<TValue>); } - TConvertedColumn Convert(TRange<NTableClient::TUnversionedRow> rows) { + TConvertedColumn Convert(const std::vector<TUnversionedRowValues>& rowsValues) { Reset(); - AddValues(rows); + AddValues(rowsValues); auto nullBitmapRef = NullBitmap_.Flush<TConverterTag>(); auto valuesRef = TSharedRef::MakeCopy<TConverterTag>(TRef(Values_.data(), sizeof(TValue) * Values_.size())); @@ -71,13 +71,13 @@ public: FillColumnarFloatingPointValues<TValue>( column.get(), 0, - rows.size(), + rowsValues.size(), valuesRef); FillColumnarNullBitmap( column.get(), 0, - rows.size(), + rowsValues.size(), nullBitmapRef); column->Type = ColumnSchema_.LogicalType(); @@ -107,12 +107,14 @@ private: NullBitmap_ = TBitmapOutput(); } - void AddValues(TRange<NTableClient::TUnversionedRow> rows) + void AddValues(const std::vector<TUnversionedRowValues>& rowsValues) { - for (auto row : rows) { - const auto& value = row[ColumnIndex_]; - NullBitmap_.Append(value.Type == EValueType::Null); - Values_.push_back(value.Data.Double); + for (auto rowValues : rowsValues) { + auto value = rowValues[ColumnIndex_]; + bool isNull = value == nullptr || value->Type == NTableClient::EValueType::Null; + TValue data = isNull ? 0 : value->Data.Double; + NullBitmap_.Append(isNull); + Values_.push_back(data); } } }; diff --git a/yt/yt/client/converters/integer_converter.cpp b/yt/yt/client/converters/integer_converter.cpp index eb36c5181aa..a7956c56b4e 100644 --- a/yt/yt/client/converters/integer_converter.cpp +++ b/yt/yt/client/converters/integer_converter.cpp @@ -73,10 +73,10 @@ public: ColumnSchema_(columnSchema) {} - TConvertedColumn Convert(TRange<NTableClient::TUnversionedRow> rows) override + TConvertedColumn Convert(const std::vector<TUnversionedRowValues>& rowsValues) override { Reset(); - AddValues(rows); + AddValues(rowsValues); for (i64 index = 0; index < std::ssize(Values_); ++index) { if (!NullBitmap_[index]) { Values_[index] -= MinValue_; @@ -140,14 +140,15 @@ private: NullBitmap_ = TBitmapOutput(); } - void AddValues(TRange<NTableClient::TUnversionedRow> rows) + void AddValues(const std::vector<TUnversionedRowValues>& rowsValues) { - for (auto row : rows) { - const auto& value = row[ColumnIndex_]; - bool isNull = value.Type == NTableClient::EValueType::Null; + for (auto rowValues : rowsValues) { + auto value = rowValues[ColumnIndex_]; + bool isNull = value == nullptr || value->Type == NTableClient::EValueType::Null; ui64 data = 0; if (!isNull) { - data = EncodeValue(GetValue<TValue>(value)); + YT_VERIFY(value != nullptr); + data = EncodeValue(GetValue<TValue>(*value)); } Values_.push_back(data); NullBitmap_.Append(isNull); diff --git a/yt/yt/client/converters/null_converter.cpp b/yt/yt/client/converters/null_converter.cpp index 779ed66dbd9..76c1095cdad 100644 --- a/yt/yt/client/converters/null_converter.cpp +++ b/yt/yt/client/converters/null_converter.cpp @@ -12,15 +12,17 @@ class TNullColumnWriterConverter : public IColumnConverter { public: - explicit TNullColumnWriterConverter() + explicit TNullColumnWriterConverter(int columnIndex) + : ColumnIndex_(columnIndex) {} - TConvertedColumn Convert(TRange<NTableClient::TUnversionedRow> rows) override + TConvertedColumn Convert(const std::vector<TUnversionedRowValues>& rowsValues) override { - auto rowCount = rows.size(); + auto rowCount = rowsValues.size(); auto column = std::make_shared<TBatchColumn>(); + column->Id = ColumnIndex_; column->Type = SimpleLogicalType(ESimpleLogicalValueType::Null); column->ValueCount = rowCount; @@ -34,13 +36,16 @@ public: return {{owner}, owner.Column.get()}; } +private: + const int ColumnIndex_; + }; //////////////////////////////////////////////////////////////////////////////// -IColumnConverterPtr CreateNullConverter() +IColumnConverterPtr CreateNullConverter(int columnIndex) { - return std::make_unique<TNullColumnWriterConverter>(); + return std::make_unique<TNullColumnWriterConverter>(columnIndex); } //////////////////////////////////////////////////////////////////////////////// diff --git a/yt/yt/client/converters/null_converter.h b/yt/yt/client/converters/null_converter.h index 0a90048cdbe..d3eb3e14914 100644 --- a/yt/yt/client/converters/null_converter.h +++ b/yt/yt/client/converters/null_converter.h @@ -6,7 +6,7 @@ namespace NYT::NConverters { //////////////////////////////////////////////////////////////////////////////// -IColumnConverterPtr CreateNullConverter(); +IColumnConverterPtr CreateNullConverter(int columnIndex); //////////////////////////////////////////////////////////////////////////////// diff --git a/yt/yt/client/converters/string_converter.cpp b/yt/yt/client/converters/string_converter.cpp index 44faf756e1d..903f5191bb4 100644 --- a/yt/yt/client/converters/string_converter.cpp +++ b/yt/yt/client/converters/string_converter.cpp @@ -52,10 +52,10 @@ public: , ColumnSchema_(columnSchema) {} - TConvertedColumn Convert(TRange<NTableClient::TUnversionedRow> rows) override + TConvertedColumn Convert(const std::vector<TUnversionedRowValues>& rowsValues) override { Reset(); - AddValues(rows); + AddValues(rowsValues); return GetColumns(); } @@ -278,11 +278,12 @@ private: } } - void AddValues(TRange<NTableClient::TUnversionedRow> rows) + void AddValues(const std::vector<TUnversionedRowValues>& rowsValues) { - for (auto row : rows) { - const auto& unversionedValue = row[ColumnIndex_]; - auto value = CaptureValue(unversionedValue); + for (auto rowValues : rowsValues) { + auto unversionedValue = rowValues[ColumnIndex_]; + YT_VERIFY(unversionedValue != nullptr); + auto value = CaptureValue(*unversionedValue); Values_.push_back(value); ++RowCount_; } |