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
|
namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
inline UInt64 getAt(const PaddedPODArray<UInt64> & arr, const size_t idx)
|
inline UInt64 getAt(const PaddedPODArray<UInt64> & arr, const size_t idx)
|
||||||
{
|
{
|
||||||
return arr[idx];
|
return arr[idx];
|
||||||
@ -31,99 +32,6 @@ namespace
|
|||||||
return value;
|
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>
|
template <DictionaryKeyType dictionary_key_type>
|
||||||
|
Loading…
Reference in New Issue
Block a user