mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 16:42:05 +00:00
Additional checks related to DistinctSortedChunkTransform
In response to suspicious crash reports from sqlancer for DISTINCT queries
This commit is contained in:
parent
83d869860e
commit
83fd3d4c89
@ -8,6 +8,7 @@
|
||||
#include <functional>
|
||||
#include <iosfwd>
|
||||
|
||||
#include <base/defines.h>
|
||||
#include <base/types.h>
|
||||
#include <base/unaligned.h>
|
||||
|
||||
@ -274,6 +275,8 @@ struct CRC32Hash
|
||||
if (size == 0)
|
||||
return 0;
|
||||
|
||||
chassert(pos);
|
||||
|
||||
if (size < 8)
|
||||
{
|
||||
return static_cast<unsigned>(hashLessThan8(x.data, x.size));
|
||||
|
@ -126,9 +126,20 @@ bool DistinctSortedChunkTransform::isKey(const size_t key_pos, const size_t row_
|
||||
|
||||
bool DistinctSortedChunkTransform::isLatestKeyFromPrevChunk(const size_t row_pos) const
|
||||
{
|
||||
for (size_t i = 0; i < sorted_columns.size(); ++i)
|
||||
for (size_t i = 0, s = sorted_columns.size(); i < s; ++i)
|
||||
{
|
||||
const int res = prev_chunk_latest_key[i]->compareAt(0, row_pos, *sorted_columns[i], sorted_columns_descr[i].nulls_direction);
|
||||
const auto & sorted_column = *sorted_columns[i];
|
||||
/// temporary hardening due to suspious crashes in sqlancer tests
|
||||
if (unlikely(sorted_column.size() <= row_pos))
|
||||
throw Exception(
|
||||
ErrorCodes::LOGICAL_ERROR,
|
||||
"Unexpected size of a sorted column: size {}, row_pos {}, column position {}, type {}",
|
||||
sorted_column.size(),
|
||||
row_pos,
|
||||
i,
|
||||
sorted_column.getFamilyName());
|
||||
|
||||
const int res = prev_chunk_latest_key[i]->compareAt(0, row_pos, sorted_column, sorted_columns_descr[i].nulls_direction);
|
||||
if (res != 0)
|
||||
return false;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user