mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 08:40:50 +00:00
Fixed tests
This commit is contained in:
parent
12083d0fa1
commit
9509516e3c
@ -21,6 +21,7 @@ namespace ErrorCodes
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
inline UInt64 getAt(const PaddedPODArray<UInt64> & arr, const size_t idx)
|
||||
{
|
||||
return arr[idx];
|
||||
@ -31,99 +32,6 @@ namespace
|
||||
return value;
|
||||
}
|
||||
|
||||
/// TODO: Use this class from DictionaryHelpers after cache dictionaries pull request will be merged
|
||||
template <DictionaryKeyType key_type>
|
||||
class DictionaryKeysExtractor
|
||||
{
|
||||
public:
|
||||
using KeyType = std::conditional_t<key_type == DictionaryKeyType::simple, UInt64, StringRef>;
|
||||
static_assert(key_type != DictionaryKeyType::range, "Range key type is not supported by DictionaryKeysExtractor");
|
||||
|
||||
explicit DictionaryKeysExtractor(const Columns & key_columns, Arena & existing_arena)
|
||||
{
|
||||
assert(!key_columns.empty());
|
||||
|
||||
if constexpr (key_type == DictionaryKeyType::simple)
|
||||
keys = getColumnVectorData(key_columns.front());
|
||||
else
|
||||
keys = deserializeKeyColumnsInArena(key_columns, existing_arena);
|
||||
}
|
||||
|
||||
|
||||
const PaddedPODArray<KeyType> & getKeys() const
|
||||
{
|
||||
return keys;
|
||||
}
|
||||
|
||||
private:
|
||||
static PaddedPODArray<UInt64> getColumnVectorData(const ColumnPtr column)
|
||||
{
|
||||
PaddedPODArray<UInt64> result;
|
||||
|
||||
auto full_column = column->convertToFullColumnIfConst();
|
||||
const auto *vector_col = checkAndGetColumn<ColumnVector<UInt64>>(full_column.get());
|
||||
|
||||
if (!vector_col)
|
||||
throw Exception{ErrorCodes::TYPE_MISMATCH, "Column type mismatch for simple key expected UInt64"};
|
||||
|
||||
result.assign(vector_col->getData());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static PaddedPODArray<StringRef> deserializeKeyColumnsInArena(const Columns & key_columns, Arena & temporary_arena)
|
||||
{
|
||||
size_t keys_size = key_columns.front()->size();
|
||||
|
||||
PaddedPODArray<StringRef> result;
|
||||
result.reserve(keys_size);
|
||||
|
||||
PaddedPODArray<StringRef> temporary_column_data(key_columns.size());
|
||||
|
||||
for (size_t key_index = 0; key_index < keys_size; ++key_index)
|
||||
{
|
||||
size_t allocated_size_for_columns = 0;
|
||||
const char * block_start = nullptr;
|
||||
|
||||
for (size_t column_index = 0; column_index < key_columns.size(); ++column_index)
|
||||
{
|
||||
const auto & column = key_columns[column_index];
|
||||
temporary_column_data[column_index] = column->serializeValueIntoArena(key_index, temporary_arena, block_start);
|
||||
allocated_size_for_columns += temporary_column_data[column_index].size;
|
||||
}
|
||||
|
||||
result.push_back(StringRef{block_start, allocated_size_for_columns});
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
PaddedPODArray<KeyType> keys;
|
||||
};
|
||||
|
||||
/// TODO: Use this class from DictionaryHelpers after cache dictionaries pull request will be merged
|
||||
class DefaultValueProvider final
|
||||
{
|
||||
public:
|
||||
explicit DefaultValueProvider(Field default_value_, ColumnPtr default_values_column_ = nullptr)
|
||||
: default_value(std::move(default_value_))
|
||||
, default_values_column(default_values_column_)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Field getDefaultValue(size_t row) const
|
||||
{
|
||||
if (default_values_column)
|
||||
return (*default_values_column)[row];
|
||||
|
||||
return default_value;
|
||||
}
|
||||
|
||||
private:
|
||||
Field default_value;
|
||||
ColumnPtr default_values_column;
|
||||
};
|
||||
}
|
||||
|
||||
template <DictionaryKeyType dictionary_key_type>
|
||||
|
Loading…
Reference in New Issue
Block a user