ClickHouse ColumnString
-
ColumnString 存储结构.
Offsets是 元素的偏移量,UInt64比较合理.
我们可以从 insert 函数中得到 chars (PaddedPODArray<UInt8>)和offsets (PaddedPODArray<>的配合关系.
函数基本作用就是 将chars进行resize. 这个比较考验PaddedPODArray的设计.
/Users/growingio/Software/clickhouse-gio/src/Columns/ColumnString.h 119
resize() 在 PaddedArrayBase中 当超过capacity()时,会重新使用Allocator进行分配内存.
- field.template get<T>() 第一次见. 访问对象中的模板函数的写法?如果get方法不是模板,那么直接访问 field.get()就可以了.
T get() 函数目的就是完成强转.
using StoredType = NearestFieldType<std::decay_t<T>>;
String的NearestFieldType 仍然是String.
最后把存储在storage中的数据强转成String类型.
private:
std::aligned_union_t<DBMS_MIN_FIELD_SIZE - sizeof(Types::Which),
Null, UInt64, UInt128, UInt256, Int64, Int128, Int256, UUID, Float64, String, Array, Tuple, Map,
DecimalField<Decimal32>, DecimalField<Decimal64>, DecimalField<Decimal128>, DecimalField<Decimal256>,
AggregateFunctionStateData
> storage;