mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 23:21:59 +00:00
Fixes for FunctionConversion implementation for nulls
This commit is contained in:
parent
b4c6a17eb2
commit
c938a53e88
@ -693,7 +693,10 @@ struct ConvertImpl<FromDataType, std::enable_if_t<!std::is_same_v<FromDataType,
|
|||||||
const DateLUTImpl * time_zone = nullptr;
|
const DateLUTImpl * time_zone = nullptr;
|
||||||
/// For argument of DateTime type, second argument with time zone could be specified.
|
/// For argument of DateTime type, second argument with time zone could be specified.
|
||||||
if constexpr (std::is_same_v<FromDataType, DataTypeDateTime> || std::is_same_v<FromDataType, DataTypeDateTime64>)
|
if constexpr (std::is_same_v<FromDataType, DataTypeDateTime> || std::is_same_v<FromDataType, DataTypeDateTime64>)
|
||||||
time_zone = &extractTimeZoneFromFunctionArguments(arguments, 1, 0);
|
{
|
||||||
|
auto non_null_args = createBlockWithNestedColumns(arguments);
|
||||||
|
time_zone = &extractTimeZoneFromFunctionArguments(non_null_args, 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (const auto col_from = checkAndGetColumn<ColVecType>(col_with_type_and_name.column.get()))
|
if (const auto col_from = checkAndGetColumn<ColVecType>(col_with_type_and_name.column.get()))
|
||||||
{
|
{
|
||||||
@ -1519,6 +1522,9 @@ private:
|
|||||||
throw Exception{"Function " + getName() + " expects at least 1 argument",
|
throw Exception{"Function " + getName() + " expects at least 1 argument",
|
||||||
ErrorCodes::TOO_FEW_ARGUMENTS_FOR_FUNCTION};
|
ErrorCodes::TOO_FEW_ARGUMENTS_FOR_FUNCTION};
|
||||||
|
|
||||||
|
if (result_type->onlyNull())
|
||||||
|
return result_type->createColumnConstWithDefaultValue(input_rows_count);
|
||||||
|
|
||||||
const DataTypePtr from_type = removeNullable(arguments[0].type);
|
const DataTypePtr from_type = removeNullable(arguments[0].type);
|
||||||
ColumnPtr result_column;
|
ColumnPtr result_column;
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
1
|
1
|
||||||
\N
|
\N
|
||||||
|
\N
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
0 0
|
0 0
|
||||||
|
@ -22,6 +22,8 @@ GLOBAL INNER JOIN
|
|||||||
-- query from fuzzer
|
-- query from fuzzer
|
||||||
SELECT toDateTime64(toString(toString('0000-00-00 00:00:000000-00-00 00:00:00', toDateTime64(toDateTime64('655.36', -2, NULL)))), NULL) FROM t1_00850 GLOBAL INNER JOIN (SELECT toDateTime64(toDateTime64('6553.6', '', NULL), NULL), * FROM (SELECT * FROM t2_00850) INNER JOIN (SELECT toDateTime64('6553.7', 1024, NULL), * FROM t1_00850) USING (dummy)) USING (dummy);
|
SELECT toDateTime64(toString(toString('0000-00-00 00:00:000000-00-00 00:00:00', toDateTime64(toDateTime64('655.36', -2, NULL)))), NULL) FROM t1_00850 GLOBAL INNER JOIN (SELECT toDateTime64(toDateTime64('6553.6', '', NULL), NULL), * FROM (SELECT * FROM t2_00850) INNER JOIN (SELECT toDateTime64('6553.7', 1024, NULL), * FROM t1_00850) USING (dummy)) USING (dummy);
|
||||||
|
|
||||||
|
SELECT toString('0000-00-00 00:00:000000-00-00 00:00:00', toDateTime64(toDateTime64('655.36', -2, NULL)));
|
||||||
|
|
||||||
DROP TABLE t_local;
|
DROP TABLE t_local;
|
||||||
DROP TABLE t1_00850;
|
DROP TABLE t1_00850;
|
||||||
DROP TABLE t2_00850;
|
DROP TABLE t2_00850;
|
||||||
|
@ -2,3 +2,4 @@ A
|
|||||||
\N
|
\N
|
||||||
A
|
A
|
||||||
\N
|
\N
|
||||||
|
\N
|
||||||
|
@ -3,4 +3,5 @@ create table test_enum (c Nullable(Enum16('A' = 1, 'B' = 2))) engine Log;
|
|||||||
insert into test_enum values (1), (NULL);
|
insert into test_enum values (1), (NULL);
|
||||||
select * from test_enum;
|
select * from test_enum;
|
||||||
select toString(c) from test_enum;
|
select toString(c) from test_enum;
|
||||||
|
select toString('aaaa', NULL);
|
||||||
drop table test_enum;
|
drop table test_enum;
|
||||||
|
Loading…
Reference in New Issue
Block a user