aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornadya02 <nadya02@yandex-team.com>2023-08-29 15:59:12 +0300
committernadya02 <nadya02@yandex-team.com>2023-08-29 20:26:05 +0300
commitbd84f96beddfa6dea5cddf86488288fca7c58967 (patch)
treef80bcf81059fd3b610d560a7a24c5275e0a7966b
parent03953629d30b54fad10351ed84a3f0f226667071 (diff)
downloadydb-bd84f96beddfa6dea5cddf86488288fca7c58967.tar.gz
fix xonverters
fix
-rw-r--r--yt/yt/client/converters/boolean_converter.cpp18
-rw-r--r--yt/yt/client/converters/converter.cpp20
-rw-r--r--yt/yt/client/converters/converter.h3
-rw-r--r--yt/yt/client/converters/floating_point_converter.cpp20
-rw-r--r--yt/yt/client/converters/integer_converter.cpp15
-rw-r--r--yt/yt/client/converters/null_converter.cpp15
-rw-r--r--yt/yt/client/converters/null_converter.h2
-rw-r--r--yt/yt/client/converters/string_converter.cpp13
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_;
}