ClickHouse/dbms/include/DB/DataStreams/BlockStreamProfileInfo.h
Vladimir Smirnov d36f52502e Make it compilable on OS X
It's still hackish and dirty, but server and client compies.

Server starts, but throwes meaningless exception on any query.

Client seems to be working fine.

Linux compilation might (but shouldn't) be broken (not tested).
2016-11-01 17:59:21 +01:00

65 lines
2.6 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 <vector>
#include <DB/Common/Stopwatch.h>
#include <DB/Core/Types.h>
#if __APPLE__
#include <common/apple_rt.h>
#endif
namespace DB
{
class Block;
class ReadBuffer;
class WriteBuffer;
/// Информация для профайлинга. См. IProfilingBlockInputStream.h
struct BlockStreamProfileInfo
{
bool started = false;
Stopwatch total_stopwatch {CLOCK_MONOTONIC_COARSE}; /// Время с учётом ожидания
String stream_name; /// Короткое имя потока, для которого собирается информация
size_t rows = 0;
size_t blocks = 0;
size_t bytes = 0;
/// Информация о вложенных потоках - для выделения чистого времени работы.
using BlockStreamProfileInfos = std::vector<const BlockStreamProfileInfo *>;
BlockStreamProfileInfos nested_infos;
/// Собрать BlockStreamProfileInfo для ближайших в дереве источников с именем name. Пример; собрать все info для PartialSorting stream-ов.
void collectInfosForStreamsWithName(const char * name, BlockStreamProfileInfos & res) const;
/** Получить число строк, если бы не было LIMIT-а.
* Если нет LIMIT-а - возвращается 0.
* Если запрос не содержит ORDER BY, то число может быть занижено - возвращается количество строк в блоках, которые были прочитаны до LIMIT-а.
* Если запрос содержит ORDER BY, то возвращается точное число строк, которое было бы, если убрать LIMIT.
*/
size_t getRowsBeforeLimit() const;
bool hasAppliedLimit() const;
void update(Block & block);
/// Методы для бинарной [де]сериализации. Передаются не все поля.
void read(ReadBuffer & in);
void write(WriteBuffer & out) const;
/// Установить поля из другого объекта, но только те, которые передаются по сети (методами выше).
void setFrom(const BlockStreamProfileInfo & rhs);
private:
void calculateRowsBeforeLimit() const;
/// Для этих полей сделаем accessor'ы, т.к. их необходимо предварительно вычислять.
mutable bool applied_limit = false; /// Применялся ли LIMIT
mutable size_t rows_before_limit = 0;
mutable bool calculated_rows_before_limit = false; /// Вычислялось ли поле rows_before_limit
};
}