#include #include #include #include #include #include namespace DB { StorageSystemEvents::StorageSystemEvents(const std::string & name_) : name(name_) { columns.push_back(NameAndTypePair("event", new DataTypeString)); columns.push_back(NameAndTypePair("value", new DataTypeUInt64)); } StoragePtr StorageSystemEvents::create(const std::string & name_) { return (new StorageSystemEvents(name_))->thisPtr(); } BlockInputStreams StorageSystemEvents::read( const Names & column_names, ASTPtr query, const Context & context, const Settings & settings, QueryProcessingStage::Enum & processed_stage, const size_t max_block_size, const unsigned threads) { check(column_names); processed_stage = QueryProcessingStage::FetchColumns; Block block; ColumnWithNameAndType col_event; col_event.name = "event"; col_event.type = new DataTypeString; col_event.column = new ColumnString; block.insert(col_event); ColumnWithNameAndType col_value; col_value.name = "value"; col_value.type = new DataTypeUInt64; col_value.column = new ColumnUInt64; block.insert(col_value); for (size_t i = 0; i < ProfileEvents::END; ++i) { UInt64 value = ProfileEvents::counters[i]; if (0 != value) { col_event.column->insert(String(ProfileEvents::getDescription(ProfileEvents::Event(i)))); col_value.column->insert(value); } } return BlockInputStreams(1, new OneBlockInputStream(block)); } }