mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 23:21:59 +00:00
Fixed multiIf in case of empty arguments. [#CLICKHOUSE-3119]
This commit is contained in:
parent
2d478cd371
commit
7150e9447a
@ -400,23 +400,12 @@ private:
|
|||||||
|
|
||||||
static size_t computeResultSize(const IArraySources<TResult> & sources, size_t row_count)
|
static size_t computeResultSize(const IArraySources<TResult> & sources, size_t row_count)
|
||||||
{
|
{
|
||||||
size_t max_var = 0;
|
size_t max_size = 0;
|
||||||
size_t max_const = 0;
|
|
||||||
|
|
||||||
for (const auto & source : sources)
|
for (const auto & source : sources)
|
||||||
{
|
max_size = std::max(max_size, source->isConst() ? source->getDataSize() * row_count : source->getDataSize());
|
||||||
if (source->isConst())
|
|
||||||
max_const = std::max(max_const, source->getDataSize());
|
|
||||||
else
|
|
||||||
max_var = std::max(max_var, source->getDataSize());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (max_var > 0)
|
return max_size;
|
||||||
return max_var;
|
|
||||||
else if (max_const > 0)
|
|
||||||
return max_const * row_count;
|
|
||||||
else
|
|
||||||
throw Exception{"Internal error", ErrorCodes::LOGICAL_ERROR};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create the result column.
|
/// Create the result column.
|
||||||
|
@ -372,12 +372,7 @@ auto computeResultSize(const StringArraySources & sources, size_t row_count)
|
|||||||
throw Exception{"Internal error", ErrorCodes::LOGICAL_ERROR};
|
throw Exception{"Internal error", ErrorCodes::LOGICAL_ERROR};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (max_var > 0)
|
return std::make_tuple(std::max(max_var, max_const * row_count), std::max(max_var_string_offsets, max_const_string_offsets * row_count));
|
||||||
return std::make_tuple(max_var, max_var_string_offsets);
|
|
||||||
else if (max_const > 0)
|
|
||||||
return std::make_tuple(max_const * row_count, max_const_string_offsets * row_count);
|
|
||||||
else
|
|
||||||
throw Exception{"Internal error", ErrorCodes::LOGICAL_ERROR};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create the result column.
|
/// Create the result column.
|
||||||
|
@ -427,19 +427,7 @@ size_t computeResultSize(const StringSources & sources, size_t row_count)
|
|||||||
throw Exception{"Internal error", ErrorCodes::LOGICAL_ERROR};
|
throw Exception{"Internal error", ErrorCodes::LOGICAL_ERROR};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (max_var > 0)
|
return std::max(max_var, std::max(max_fixed + row_count, (max_const + 1) * row_count));
|
||||||
{
|
|
||||||
if (max_fixed > 0)
|
|
||||||
return std::max(max_var, max_fixed + row_count);
|
|
||||||
else
|
|
||||||
return max_var;
|
|
||||||
}
|
|
||||||
else if (max_fixed > 0)
|
|
||||||
return max_fixed;
|
|
||||||
else if (max_const > 0)
|
|
||||||
return (max_const + 1) * row_count;
|
|
||||||
else
|
|
||||||
throw Exception{"Internal error", ErrorCodes::LOGICAL_ERROR};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Updates a fixed or variable string sink.
|
/// Updates a fixed or variable string sink.
|
||||||
|
@ -3,6 +3,9 @@ A
|
|||||||
A\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
|
A\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
|
||||||
[1,2]
|
[1,2]
|
||||||
['A','B']
|
['A','B']
|
||||||
|
[]
|
||||||
|
[]
|
||||||
|
|
||||||
1
|
1
|
||||||
3
|
3
|
||||||
1
|
1
|
||||||
|
@ -6,6 +6,9 @@ SELECT multiIf(1, 'A', 1, 'BC', 'DEF');
|
|||||||
SELECT multiIf(1, toFixedString('A', 16), 1, toFixedString('BC', 16), toFixedString('DEF', 16));
|
SELECT multiIf(1, toFixedString('A', 16), 1, toFixedString('BC', 16), toFixedString('DEF', 16));
|
||||||
SELECT multiIf(1, [1,2], 1, [3,4], [5,6]);
|
SELECT multiIf(1, [1,2], 1, [3,4], [5,6]);
|
||||||
SELECT multiIf(1, ['A', 'B'], 1, ['C', 'D'], ['E', 'F']);
|
SELECT multiIf(1, ['A', 'B'], 1, ['C', 'D'], ['E', 'F']);
|
||||||
|
SELECT multiIf(rand() % 2 = 0, emptyArrayString(), emptyArrayString());
|
||||||
|
SELECT multiIf(rand() % 2 = 0, emptyArrayUInt8(), emptyArrayUInt8());
|
||||||
|
SELECT multiIf(rand() % 2 = 0, '', '');
|
||||||
|
|
||||||
/* Numeric branches */
|
/* Numeric branches */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user