ClickHouse/dbms/include/DB/Core/BlockInfo.h
2016-06-07 11:23:15 +03:00

47 lines
1.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <DB/Core/Types.h>
namespace DB
{
class ReadBuffer;
class WriteBuffer;
/** Дополнительная информация о блоке.
*/
struct BlockInfo
{
/** is_overflows:
* После выполнения GROUP BY ... WITH TOTALS с настройками max_rows_to_group_by и group_by_overflow_mode = 'any',
* в отдельный блок засовывается строчка с аргегированными значениями, не прошедшими max_rows_to_group_by.
* Если это такой блок, то для него is_overflows выставляется в true.
*/
/** bucket_num:
* При использовании двухуровневого метода агрегации, данные с разными группами ключей раскидываются по разным корзинам.
* В таком случае здесь указывается номер корзины. Он используется для оптимизации слияния при распределённой аргегации.
* Иначе - -1.
*/
#define APPLY_FOR_BLOCK_INFO_FIELDS(M) \
M(bool, is_overflows, false, 1) \
M(Int32, bucket_num, -1, 2)
#define DECLARE_FIELD(TYPE, NAME, DEFAULT, FIELD_NUM) \
TYPE NAME = DEFAULT;
APPLY_FOR_BLOCK_INFO_FIELDS(DECLARE_FIELD)
#undef DECLARE_FIELD
/// Записать значения в бинарном виде. NOTE: Можно было бы использовать protobuf, но он был бы overkill для данного случая.
void write(WriteBuffer & out) const;
/// Прочитать значения в бинарном виде.
void read(ReadBuffer & in);
};
}