mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-14 19:45:11 +00:00
Comments regarding zero values in clearable hash table
This commit is contained in:
parent
d3c408aaf1
commit
51c69b6fbd
@ -10,6 +10,10 @@
|
||||
* Instead of this class, you could just use the pair (version, key) in the HashSet as the key
|
||||
* but then the table would accumulate all the keys that it ever stored, and it was unreasonably growing.
|
||||
* This class goes a step further and considers the keys with the old version empty in the hash table.
|
||||
*
|
||||
* Zero values note:
|
||||
* A cell in ClearableHashSet can store a zero values as normal value
|
||||
* If its version is equal to the version of the set itself, then it's not considered as empty even key's value is zero value of the corresponding type
|
||||
*/
|
||||
|
||||
|
||||
|
@ -88,7 +88,11 @@ inline StringRef & ALWAYS_INLINE keyHolderGetKey(DB::ArenaKeyHolder & holder)
|
||||
|
||||
inline void ALWAYS_INLINE keyHolderPersistKey(DB::ArenaKeyHolder & holder)
|
||||
{
|
||||
// Hash table shouldn't ask us to persist a zero key
|
||||
// Normally, our hash table shouldn't ask us to persist a zero key,
|
||||
// but it can happened in the case of clearable hash table (ClearableHashSet, for example).
|
||||
// The clearable hash table doesn't use zero storage and
|
||||
// distinguishes empty keys by using cell version, not the value itself.
|
||||
// So, when an empty StringRef is inserted in ClearableHashSet we'll get here key of zero size.
|
||||
// assert(holder.key.size > 0);
|
||||
holder.key.data = holder.pool.insert(holder.key.data, holder.key.size);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user