mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-19 16:20:50 +00:00
Fix incorrect inference for other formats
This commit is contained in:
parent
655262d1a1
commit
418fc7f443
@ -318,19 +318,40 @@ namespace
|
||||
type_indexes.erase(TypeIndex::UInt64);
|
||||
}
|
||||
|
||||
/// if setting try_infer_variant is true
|
||||
/// and nested types are not equal then we convert to type variant.
|
||||
/// if setting 'try_infer_variant' is true then we convert to type variant.
|
||||
void transformVariant(DataTypes & data_types, TypeIndexesSet & type_indexes)
|
||||
{
|
||||
auto typesAreEqual = checkIfTypesAreEqual(data_types);
|
||||
auto typesContainVariant = checkIfTypesContainVariant(data_types);
|
||||
if (typesAreEqual || typesContainVariant)
|
||||
if (typesAreEqual)
|
||||
return;
|
||||
|
||||
DataTypes new_data_types;
|
||||
TypeIndexesSet new_type_indexes;
|
||||
std::shared_ptr<DataTypeVariant> variant_type;
|
||||
|
||||
/// extract the nested types of variant and make a new variant with the nested types and the other type.
|
||||
/// eg. Type 1: variant<String, Array>, Type 2: Date -> variant<String, Array, Date>.
|
||||
if (typesContainVariant)
|
||||
{
|
||||
DataTypes extracted_types;
|
||||
for (size_t i=0; i<data_types.size(); i++)
|
||||
{
|
||||
if (isVariant(data_types[i]))
|
||||
{
|
||||
if (const auto * variant = typeid_cast<const DataTypeVariant *>(data_types[i].get()))
|
||||
extracted_types = variant->getVariants();
|
||||
}
|
||||
else
|
||||
extracted_types.push_back(data_types[i]);
|
||||
}
|
||||
variant_type = std::make_shared<DataTypeVariant>(extracted_types);
|
||||
}
|
||||
else
|
||||
{
|
||||
variant_type = std::make_shared<DataTypeVariant>(data_types);
|
||||
}
|
||||
|
||||
auto variant_type = std::make_shared<DataTypeVariant>(data_types);
|
||||
size_t i = 0;
|
||||
while (i != data_types.size())
|
||||
{
|
||||
|
@ -1,9 +1,9 @@
|
||||
┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ arr ┃ toTypeName(arr) ┃
|
||||
┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
1. │ [1,'Hello',(32)] │ Array(Variant(Int64, String, Tuple(…│
|
||||
│ │… a Nullable(Int64)))) │
|
||||
└──────────────────┴─────────────────────────────────────┘
|
||||
┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ arr ┃ toTypeName(arr) ┃
|
||||
┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
1. │ [1,'Hello',(32)] │ Array(Variant(Int64, String, Tuple(
|
||||
a Nullable(Int64)))) │
|
||||
└──────────────────┴─────────────────────────────────────────────────────────────┘
|
||||
┏━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ x ┃ toTypeName(x) ┃
|
||||
┡━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
@ -11,21 +11,21 @@
|
||||
├───────┼────────────────────────┤
|
||||
2. │ Hello │ Variant(Int64, String) │
|
||||
└───────┴────────────────────────┘
|
||||
┏━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ x ┃ toTypeName(x) ┃
|
||||
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
1. │ [1,2,3] │ Variant(Array(Nullable(Int64)), Tuple(…│
|
||||
│ │… a Nullable(Int64))) │
|
||||
├─────────┼────────────────────────────────────────┤
|
||||
2. │ (42) │ Variant(Array(Nullable(Int64)), Tuple(…│
|
||||
│ │… a Nullable(Int64))) │
|
||||
└─────────┴────────────────────────────────────────┘
|
||||
┏━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓
|
||||
┃ c1 ┃ toTypeName(c1) ┃ c2 ┃ toTypeName(c2) ┃
|
||||
┡━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩
|
||||
1. │ 1 │ Nullable(Int64) │ Hello World! │ Nullable(String) │
|
||||
├────┼─────────────────┼──────────────┼──────────────────┤
|
||||
2. │ 2 │ Nullable(Int64) │ [1,2,3] │ Nullable(String) │
|
||||
├────┼─────────────────┼──────────────┼──────────────────┤
|
||||
3. │ 3 │ Nullable(Int64) │ 2020-01-01 │ Nullable(String) │
|
||||
└────┴─────────────────┴──────────────┴──────────────────┘
|
||||
┏━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ x ┃ toTypeName(x) ┃
|
||||
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
1. │ [1,2,3] │ Variant(Array(Nullable(Int64)), Tuple(
|
||||
a Nullable(Int64))) │
|
||||
├─────────┼───────────────────────────────────────────────────────────────┤
|
||||
2. │ (42) │ Variant(Array(Nullable(Int64)), Tuple(
|
||||
a Nullable(Int64))) │
|
||||
└─────────┴───────────────────────────────────────────────────────────────┘
|
||||
┏━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ c1 ┃ toTypeName(c1) ┃ c2 ┃ toTypeName(c2) ┃
|
||||
┡━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
1. │ 1 │ Nullable(Int64) │ Hello World! │ Variant(Array(Nullable(Int64)), String) │
|
||||
├────┼─────────────────┼──────────────┼─────────────────────────────────────────┤
|
||||
2. │ 2 │ Nullable(Int64) │ [1,2,3] │ Variant(Array(Nullable(Int64)), String) │
|
||||
├────┼─────────────────┼──────────────┼─────────────────────────────────────────┤
|
||||
3. │ 3 │ Nullable(Int64) │ 2020-01-01 │ Variant(Array(Nullable(Int64)), String) │
|
||||
└────┴─────────────────┴──────────────┴─────────────────────────────────────────┘
|
||||
|
Loading…
Reference in New Issue
Block a user