mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 23:52:03 +00:00
Merge pull request #55019 from Avogar/fix-bad-cast-to-int128
Fix bad cast to ColumnVector<Int128> in function if
This commit is contained in:
commit
d781ee3319
@ -1096,22 +1096,25 @@ public:
|
|||||||
return res != nullptr;
|
return res != nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
TypeIndex left_id = arg_then.type->getTypeId();
|
DataTypePtr left_type = arg_then.type;
|
||||||
TypeIndex right_id = arg_else.type->getTypeId();
|
DataTypePtr right_type = arg_else.type;
|
||||||
|
|
||||||
if (const auto * left_array = checkAndGetDataType<DataTypeArray>(arg_then.type.get()))
|
if (const auto * left_array = checkAndGetDataType<DataTypeArray>(arg_then.type.get()))
|
||||||
left_id = left_array->getNestedType()->getTypeId();
|
left_type = left_array->getNestedType();
|
||||||
|
|
||||||
if (const auto * right_array = checkAndGetDataType<DataTypeArray>(arg_else.type.get()))
|
if (const auto * right_array = checkAndGetDataType<DataTypeArray>(arg_else.type.get()))
|
||||||
right_id = right_array->getNestedType()->getTypeId();
|
right_type = right_array->getNestedType();
|
||||||
|
|
||||||
/// Special case when one column is Integer and another is UInt64 that can be actually Int64.
|
/// Special case when one column is Integer and another is UInt64 that can be actually Int64.
|
||||||
/// The result type for this case is Int64 and we need to change UInt64 type to Int64
|
/// The result type for this case is Int64 and we need to change UInt64 type to Int64
|
||||||
/// so the NumberTraits::ResultOfIf will return Int64 instead if Int128.
|
/// so the NumberTraits::ResultOfIf will return Int64 instead if Int128.
|
||||||
if (isNativeInteger(arg_then.type) && isUInt64ThatCanBeInt64(arg_else.type))
|
if (isNativeInteger(left_type) && isUInt64ThatCanBeInt64(right_type))
|
||||||
right_id = TypeIndex::Int64;
|
right_type = std::make_shared<DataTypeInt64>();
|
||||||
else if (isNativeInteger(arg_else.type) && isUInt64ThatCanBeInt64(arg_then.type))
|
else if (isNativeInteger(right_type) && isUInt64ThatCanBeInt64(left_type))
|
||||||
left_id = TypeIndex::Int64;
|
left_type = std::make_shared<DataTypeInt64>();
|
||||||
|
|
||||||
|
TypeIndex left_id = left_type->getTypeId();
|
||||||
|
TypeIndex right_id = right_type->getTypeId();
|
||||||
|
|
||||||
if (!(callOnBasicTypes<true, true, true, false>(left_id, right_id, call)
|
if (!(callOnBasicTypes<true, true, true, false>(left_id, right_id, call)
|
||||||
|| (res = executeTyped<UUID, UUID>(cond_col, arguments, result_type, input_rows_count))
|
|| (res = executeTyped<UUID, UUID>(cond_col, arguments, result_type, input_rows_count))
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
-9223372036854775808
|
||||||
|
9223372036854775806
|
||||||
|
-9223372036854775808
|
||||||
|
9223372036854775806
|
||||||
|
-9223372036854775808
|
||||||
|
9223372036854775806
|
||||||
|
-9223372036854775808
|
||||||
|
9223372036854775806
|
||||||
|
[2,65537,-9223372036854775808]
|
||||||
|
[9223372036854775806]
|
||||||
|
[2,65537,-9223372036854775808]
|
||||||
|
[9223372036854775806]
|
||||||
|
[2,65537,-9223372036854775808]
|
||||||
|
[9223372036854775806]
|
||||||
|
[2,65537,-9223372036854775808]
|
||||||
|
[9223372036854775806]
|
||||||
|
[[2,65537,-9223372036854775808]]
|
||||||
|
[[9223372036854775806]]
|
||||||
|
[[2,65537,-9223372036854775808]]
|
||||||
|
[[9223372036854775806]]
|
||||||
|
[[2,65537,-9223372036854775808]]
|
||||||
|
[[9223372036854775806]]
|
||||||
|
[[2,65537,-9223372036854775808]]
|
||||||
|
[[9223372036854775806]]
|
@ -0,0 +1,13 @@
|
|||||||
|
SELECT if(number % 2, 9223372036854775806, -9223372036854775808) AS res FROM numbers(2);
|
||||||
|
SELECT if(number % 2, materialize(9223372036854775806), -9223372036854775808) AS res FROM numbers(2);
|
||||||
|
SELECT if(number % 2, 9223372036854775806, materialize(-9223372036854775808)) AS res FROM numbers(2);
|
||||||
|
SELECT if(number % 2, materialize(9223372036854775806), materialize(-9223372036854775808)) AS res FROM numbers(2);
|
||||||
|
SELECT if(number % 2, [9223372036854775806], [2, 65537, -9223372036854775808]) AS res FROM numbers(2);
|
||||||
|
SELECT if(number % 2, materialize([9223372036854775806]), [2, 65537, -9223372036854775808]) AS res FROM numbers(2);
|
||||||
|
SELECT if(number % 2, [9223372036854775806], materialize([2, 65537, -9223372036854775808])) AS res FROM numbers(2);
|
||||||
|
SELECT if(number % 2, materialize([9223372036854775806]), materialize([2, 65537, -9223372036854775808])) AS res FROM numbers(2);
|
||||||
|
SELECT if(number % 2, [[9223372036854775806]], [[2, 65537, -9223372036854775808]]) AS res FROM numbers(2);
|
||||||
|
SELECT if(number % 2, materialize([[9223372036854775806]]), [[2, 65537, -9223372036854775808]]) AS res FROM numbers(2);
|
||||||
|
SELECT if(number % 2, [[9223372036854775806]], materialize([[2, 65537, -9223372036854775808]])) AS res FROM numbers(2);
|
||||||
|
SELECT if(number % 2, materialize([[9223372036854775806]]), materialize([[2, 65537, -9223372036854775808]])) AS res FROM numbers(2);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user