Skip to content

Commit 52d657d

Browse files
authored
Merge pull request ClickHouse#88509 from ClickHouse/backport/25.8/87798
Backport ClickHouse#87798 to 25.8: Fix reading null map subcolumn from Variants that cannot be inside Nullable
2 parents 5bc8926 + 9364aef commit 52d657d

9 files changed

+405
-386
lines changed

src/DataTypes/DataTypeDynamic.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,8 @@ std::unique_ptr<IDataType::SubstreamData> DataTypeDynamic::getDynamicSubcolumnDa
215215
bool is_null_map_subcolumn = subcolumn_nested_name == "null";
216216
if (is_null_map_subcolumn)
217217
{
218+
if (!subcolumn_type->canBeInsideNullable())
219+
return nullptr;
218220
res->type = std::make_shared<DataTypeUInt8>();
219221
}
220222
else if (!subcolumn_nested_name.empty())

src/DataTypes/DataTypeVariant.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ SerializationPtr DataTypeVariant::doGetDefaultSerialization() const
182182
variant_names.push_back(variant->getName());
183183
}
184184

185-
return std::make_shared<SerializationVariant>(std::move(serializations), std::move(variant_names), SerializationVariant::getVariantsDeserializeTextOrder(variants), getName());
185+
return std::make_shared<SerializationVariant>(variants, getName());
186186
}
187187

188188
void DataTypeVariant::forEachChild(const DB::IDataType::ChildCallback & callback) const

src/DataTypes/Serializations/SerializationVariant.cpp

Lines changed: 60 additions & 44 deletions
Large diffs are not rendered by default.

src/DataTypes/Serializations/SerializationVariant.h

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,7 @@ class SerializationVariant : public ISerialization
7272

7373
using VariantSerializations = std::vector<SerializationPtr>;
7474

75-
explicit SerializationVariant(
76-
const VariantSerializations & variants_,
77-
const std::vector<String> & variant_names_,
78-
const std::vector<size_t> & deserialize_text_order_,
79-
const String & variant_name_)
80-
: variants(variants_), variant_names(variant_names_), deserialize_text_order(deserialize_text_order_), variant_name(variant_name_)
81-
{
82-
}
75+
explicit SerializationVariant(const DataTypes & variant_types_, const String & variant_name_);
8376

8477
void enumerateStreams(
8578
EnumerateStreamsSettings & settings,
@@ -222,8 +215,9 @@ class SerializationVariant : public ISerialization
222215
std::function<bool(IColumn & variant_columm, const SerializationPtr & nested, ReadBuffer &, const FormatSettings &)> try_deserialize_nested,
223216
const FormatSettings & settings) const;
224217

225-
VariantSerializations variants;
218+
VariantSerializations variant_serializations;
226219
std::vector<String> variant_names;
220+
DataTypes variant_types;
227221
std::vector<size_t> deserialize_text_order;
228222
/// Name of Variant data type for better exception messages.
229223
String variant_name;

0 commit comments

Comments
 (0)