mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-22 01:30:51 +00:00
CLICKHOUSE-3772: Change base class of almost all StorageSystem* tables and fix remarks
This commit is contained in:
parent
177f2801fd
commit
5459ca1401
@ -103,8 +103,8 @@ AggregateFunctionPtr AggregateFunctionFactory::getImpl(
|
|||||||
|
|
||||||
if (AggregateFunctionCombinatorPtr combinator = AggregateFunctionCombinatorFactory::instance().tryFindSuffix(name))
|
if (AggregateFunctionCombinatorPtr combinator = AggregateFunctionCombinatorFactory::instance().tryFindSuffix(name))
|
||||||
{
|
{
|
||||||
if (combinator->getName() == "Null")
|
if (combinator->isForInternalUsageOnly())
|
||||||
throw Exception("Aggregate function combinator 'Null' is only for internal usage", ErrorCodes::UNKNOWN_AGGREGATE_FUNCTION);
|
throw Exception("Aggregate function combinator '" + combinator->getName() + "' is only for internal usage", ErrorCodes::UNKNOWN_AGGREGATE_FUNCTION);
|
||||||
|
|
||||||
String nested_name = name.substr(0, name.size() - combinator->getName().size());
|
String nested_name = name.substr(0, name.size() - combinator->getName().size());
|
||||||
DataTypes nested_types = combinator->transformArguments(argument_types);
|
DataTypes nested_types = combinator->transformArguments(argument_types);
|
||||||
|
@ -18,6 +18,8 @@ class AggregateFunctionCombinatorNull final : public IAggregateFunctionCombinato
|
|||||||
public:
|
public:
|
||||||
String getName() const override { return "Null"; }
|
String getName() const override { return "Null"; }
|
||||||
|
|
||||||
|
bool isForInternalUsageOnly() const override { return true; }
|
||||||
|
|
||||||
DataTypes transformArguments(const DataTypes & arguments) const override
|
DataTypes transformArguments(const DataTypes & arguments) const override
|
||||||
{
|
{
|
||||||
size_t size = arguments.size();
|
size_t size = arguments.size();
|
||||||
|
@ -32,6 +32,8 @@ class IAggregateFunctionCombinator
|
|||||||
public:
|
public:
|
||||||
virtual String getName() const = 0;
|
virtual String getName() const = 0;
|
||||||
|
|
||||||
|
virtual bool isForInternalUsageOnly() const { return false; }
|
||||||
|
|
||||||
/** From the arguments for combined function (ex: UInt64, UInt8 for sumIf),
|
/** From the arguments for combined function (ex: UInt64, UInt8 for sumIf),
|
||||||
* get the arguments for nested function (ex: UInt64 for sum).
|
* get the arguments for nested function (ex: UInt64 for sum).
|
||||||
* If arguments are not suitable for combined function, throw an exception.
|
* If arguments are not suitable for combined function, throw an exception.
|
||||||
|
@ -115,7 +115,7 @@ void DataTypeFactory::registerAlias(const String & alias_name, const String & re
|
|||||||
throw Exception("DataTypeFactory: the alias name " + alias_name + " is already registered as datatype", ErrorCodes::LOGICAL_ERROR);
|
throw Exception("DataTypeFactory: the alias name " + alias_name + " is already registered as datatype", ErrorCodes::LOGICAL_ERROR);
|
||||||
|
|
||||||
if (case_sensitiveness == CaseInsensitive)
|
if (case_sensitiveness == CaseInsensitive)
|
||||||
if(!case_insensitive_aliases.emplace(alias_name_lowercase, real_type_dict_name).second)
|
if (!case_insensitive_aliases.emplace(alias_name_lowercase, real_type_dict_name).second)
|
||||||
throw Exception("DataTypeFactory: case insensitive alias name '" + alias_name + "' is not unique", ErrorCodes::LOGICAL_ERROR);
|
throw Exception("DataTypeFactory: case insensitive alias name '" + alias_name + "' is not unique", ErrorCodes::LOGICAL_ERROR);
|
||||||
|
|
||||||
if (!aliases.emplace(alias_name, real_type_dict_name).second)
|
if (!aliases.emplace(alias_name, real_type_dict_name).second)
|
||||||
|
@ -17,7 +17,7 @@ template <typename Self>
|
|||||||
class IStorageSystemOneBlock : public IStorage
|
class IStorageSystemOneBlock : public IStorage
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
virtual void fillData(MutableColumns & res_columns) const = 0;
|
virtual void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
IStorageSystemOneBlock(const String & name_) : name(name_)
|
IStorageSystemOneBlock(const String & name_) : name(name_)
|
||||||
@ -31,8 +31,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
BlockInputStreams read(const Names & column_names,
|
BlockInputStreams read(const Names & column_names,
|
||||||
const SelectQueryInfo & /*query_info*/,
|
const SelectQueryInfo & query_info,
|
||||||
const Context & /*context*/,
|
const Context & context,
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
QueryProcessingStage::Enum & processed_stage,
|
||||||
size_t /*max_block_size*/,
|
size_t /*max_block_size*/,
|
||||||
unsigned /*num_streams*/) override
|
unsigned /*num_streams*/) override
|
||||||
@ -42,7 +42,7 @@ public:
|
|||||||
|
|
||||||
Block sample_block = getSampleBlock();
|
Block sample_block = getSampleBlock();
|
||||||
MutableColumns res_columns = sample_block.cloneEmptyColumns();
|
MutableColumns res_columns = sample_block.cloneEmptyColumns();
|
||||||
fillData(res_columns);
|
fillData(res_columns, context, query_info);
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(sample_block.cloneWithColumns(std::move(res_columns))));
|
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(sample_block.cloneWithColumns(std::move(res_columns))));
|
||||||
}
|
}
|
||||||
|
@ -3,16 +3,26 @@
|
|||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
void StorageSystemAggregateFunctionCombinators::fillData(MutableColumns & res_columns) const
|
|
||||||
|
NamesAndTypesList StorageSystemAggregateFunctionCombinators::getNamesAndTypes()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
{"name", std::make_shared<DataTypeString>()},
|
||||||
|
{"is_internal", std::make_shared<DataTypeUInt8>()},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void StorageSystemAggregateFunctionCombinators::fillData(MutableColumns & res_columns, const Context &, const SelectQueryInfo &) const
|
||||||
{
|
{
|
||||||
const auto & combinators = AggregateFunctionCombinatorFactory::instance().getAllAggregateFunctionCombinators();
|
const auto & combinators = AggregateFunctionCombinatorFactory::instance().getAllAggregateFunctionCombinators();
|
||||||
for (const auto & pair : combinators)
|
for (const auto & pair : combinators)
|
||||||
{
|
{
|
||||||
res_columns[0]->insert(pair.first);
|
res_columns[0]->insert(pair.first);
|
||||||
if (pair.first != "Null")
|
if (pair.second->isForInternalUsageOnly())
|
||||||
res_columns[1]->insert(UInt64(0));
|
|
||||||
else
|
|
||||||
res_columns[1]->insert(UInt64(1));
|
res_columns[1]->insert(UInt64(1));
|
||||||
|
else
|
||||||
|
res_columns[1]->insert(UInt64(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,22 +10,16 @@ class StorageSystemAggregateFunctionCombinators : public ext::shared_ptr_helper<
|
|||||||
public IStorageSystemOneBlock<StorageSystemAggregateFunctionCombinators>
|
public IStorageSystemOneBlock<StorageSystemAggregateFunctionCombinators>
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
void fillData(MutableColumns & res_columns) const override;
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
|
|
||||||
public:
|
|
||||||
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
public:
|
||||||
|
|
||||||
std::string getName() const override
|
std::string getName() const override
|
||||||
{
|
{
|
||||||
return "SystemAggregateFunctionCombinators";
|
return "SystemAggregateFunctionCombinators";
|
||||||
}
|
}
|
||||||
|
|
||||||
static NamesAndTypesList getNamesAndTypes()
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
{
|
|
||||||
return {
|
|
||||||
{"name", std::make_shared<DataTypeString>()},
|
|
||||||
{"is_internal", std::make_shared<DataTypeUInt8>()},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,51 +1,32 @@
|
|||||||
#include <Storages/System/StorageSystemAsynchronousMetrics.h>
|
|
||||||
|
|
||||||
#include <Interpreters/AsynchronousMetrics.h>
|
#include <Interpreters/AsynchronousMetrics.h>
|
||||||
#include <Columns/ColumnsNumber.h>
|
#include <Storages/System/StorageSystemAsynchronousMetrics.h>
|
||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <DataTypes/DataTypeString.h>
|
|
||||||
#include <DataTypes/DataTypesNumber.h>
|
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
|
NamesAndTypesList StorageSystemAsynchronousMetrics::getNamesAndTypes()
|
||||||
StorageSystemAsynchronousMetrics::StorageSystemAsynchronousMetrics(const std::string & name_, const AsynchronousMetrics & async_metrics_)
|
|
||||||
: name(name_),
|
|
||||||
async_metrics(async_metrics_)
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{"metric", std::make_shared<DataTypeString>()},
|
{"metric", std::make_shared<DataTypeString>()},
|
||||||
{"value", std::make_shared<DataTypeFloat64>()},
|
{"value", std::make_shared<DataTypeFloat64>()},
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BlockInputStreams StorageSystemAsynchronousMetrics::read(
|
StorageSystemAsynchronousMetrics::StorageSystemAsynchronousMetrics(const std::string & name_, const AsynchronousMetrics & async_metrics_)
|
||||||
const Names & column_names,
|
: IStorageSystemOneBlock(name_), async_metrics(async_metrics_)
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context &,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
}
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
|
void StorageSystemAsynchronousMetrics::fillData(MutableColumns & res_columns, const Context &, const SelectQueryInfo &) const
|
||||||
|
{
|
||||||
auto async_metrics_values = async_metrics.getValues();
|
auto async_metrics_values = async_metrics.getValues();
|
||||||
|
|
||||||
for (const auto & name_value : async_metrics_values)
|
for (const auto & name_value : async_metrics_values)
|
||||||
{
|
{
|
||||||
res_columns[0]->insert(name_value.first);
|
res_columns[0]->insert(name_value.first);
|
||||||
res_columns[1]->insert(name_value.second);
|
res_columns[1]->insert(name_value.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <DataTypes/DataTypeString.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
|
|
||||||
|
#include <ext/shared_ptr_helper.h>
|
||||||
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
@ -13,26 +15,20 @@ class Context;
|
|||||||
|
|
||||||
/** Implements system table asynchronous_metrics, which allows to get values of periodically (asynchronously) updated metrics.
|
/** Implements system table asynchronous_metrics, which allows to get values of periodically (asynchronously) updated metrics.
|
||||||
*/
|
*/
|
||||||
class StorageSystemAsynchronousMetrics : public ext::shared_ptr_helper<StorageSystemAsynchronousMetrics>, public IStorage
|
class StorageSystemAsynchronousMetrics : public ext::shared_ptr_helper<StorageSystemAsynchronousMetrics>, public IStorageSystemOneBlock<StorageSystemAsynchronousMetrics>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemAsynchronousMetrics"; }
|
std::string getName() const override { return "SystemAsynchronousMetrics"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const std::string name;
|
|
||||||
const AsynchronousMetrics & async_metrics;
|
const AsynchronousMetrics & async_metrics;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemAsynchronousMetrics(const std::string & name_, const AsynchronousMetrics & async_metrics_);
|
StorageSystemAsynchronousMetrics(const std::string & name_, const AsynchronousMetrics & async_metrics_);
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,3 @@
|
|||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <DataTypes/DataTypeString.h>
|
|
||||||
#include <DataTypes/DataTypesNumber.h>
|
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
#include <Interpreters/Settings.h>
|
#include <Interpreters/Settings.h>
|
||||||
#include <Storages/System/StorageSystemBuildOptions.h>
|
#include <Storages/System/StorageSystemBuildOptions.h>
|
||||||
#include <Common/config_build.h>
|
#include <Common/config_build.h>
|
||||||
@ -9,38 +5,21 @@
|
|||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
|
NamesAndTypesList StorageSystemBuildOptions::getNamesAndTypes()
|
||||||
StorageSystemBuildOptions::StorageSystemBuildOptions(const std::string & name_)
|
|
||||||
: name(name_)
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{ "name", std::make_shared<DataTypeString>() },
|
{"name", std::make_shared<DataTypeString>()},
|
||||||
{ "value", std::make_shared<DataTypeString>() },
|
{"value", std::make_shared<DataTypeString>()},
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StorageSystemBuildOptions::fillData(MutableColumns & res_columns, const Context &, const SelectQueryInfo &) const
|
||||||
BlockInputStreams StorageSystemBuildOptions::read(
|
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context &,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
for (auto it = auto_config_build; *it; it += 2)
|
for (auto it = auto_config_build; *it; it += 2)
|
||||||
{
|
{
|
||||||
res_columns[0]->insert(String(it[0]));
|
res_columns[0]->insert(String(it[0]));
|
||||||
res_columns[1]->insert(String(it[1]));
|
res_columns[1]->insert(String(it[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <DataTypes/DataTypeString.h>
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -12,25 +13,18 @@ class Context;
|
|||||||
|
|
||||||
/** System table "build_options" with many params used for clickhouse building
|
/** System table "build_options" with many params used for clickhouse building
|
||||||
*/
|
*/
|
||||||
class StorageSystemBuildOptions : public ext::shared_ptr_helper<StorageSystemBuildOptions>, public IStorage
|
class StorageSystemBuildOptions : public ext::shared_ptr_helper<StorageSystemBuildOptions>, public IStorageSystemOneBlock<StorageSystemBuildOptions>
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
std::string getName() const override { return "SystemBuildOptions"; }
|
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemBuildOptions(const std::string & name_);
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
|
|
||||||
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
std::string getName() const override { return "SystemBuildOptions"; }
|
||||||
|
|
||||||
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,51 +1,29 @@
|
|||||||
#include <Storages/System/StorageSystemClusters.h>
|
|
||||||
#include <Interpreters/Cluster.h>
|
#include <Interpreters/Cluster.h>
|
||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <Columns/ColumnsNumber.h>
|
|
||||||
#include <DataTypes/DataTypeString.h>
|
|
||||||
#include <DataTypes/DataTypesNumber.h>
|
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
#include <Common/DNSResolver.h>
|
|
||||||
#include <Interpreters/Context.h>
|
#include <Interpreters/Context.h>
|
||||||
|
#include <Storages/System/StorageSystemClusters.h>
|
||||||
|
#include <Common/DNSResolver.h>
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
NamesAndTypesList StorageSystemClusters::getNamesAndTypes()
|
||||||
|
|
||||||
StorageSystemClusters::StorageSystemClusters(const std::string & name_)
|
|
||||||
: name(name_)
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{ "cluster", std::make_shared<DataTypeString>() },
|
{"cluster", std::make_shared<DataTypeString>()},
|
||||||
{ "shard_num", std::make_shared<DataTypeUInt32>() },
|
{"shard_num", std::make_shared<DataTypeUInt32>()},
|
||||||
{ "shard_weight", std::make_shared<DataTypeUInt32>() },
|
{"shard_weight", std::make_shared<DataTypeUInt32>()},
|
||||||
{ "replica_num", std::make_shared<DataTypeUInt32>() },
|
{"replica_num", std::make_shared<DataTypeUInt32>()},
|
||||||
{ "host_name", std::make_shared<DataTypeString>() },
|
{"host_name", std::make_shared<DataTypeString>()},
|
||||||
{ "host_address", std::make_shared<DataTypeString>() },
|
{"host_address", std::make_shared<DataTypeString>()},
|
||||||
{ "port", std::make_shared<DataTypeUInt16>() },
|
{"port", std::make_shared<DataTypeUInt16>()},
|
||||||
{ "is_local", std::make_shared<DataTypeUInt8>() },
|
{"is_local", std::make_shared<DataTypeUInt8>()},
|
||||||
{ "user", std::make_shared<DataTypeString>() },
|
{"user", std::make_shared<DataTypeString>()},
|
||||||
{ "default_database", std::make_shared<DataTypeString>() },
|
{"default_database", std::make_shared<DataTypeString>()},
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StorageSystemClusters::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo &) const
|
||||||
BlockInputStreams StorageSystemClusters::read(
|
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
auto updateColumns = [&](const std::string & cluster_name, const Cluster::ShardInfo & shard_info, const Cluster::Address & address) {
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
auto updateColumns = [&](const std::string & cluster_name, const Cluster::ShardInfo & shard_info,
|
|
||||||
const Cluster::Address & address)
|
|
||||||
{
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
res_columns[i++]->insert(cluster_name);
|
res_columns[i++]->insert(cluster_name);
|
||||||
res_columns[i++]->insert(static_cast<UInt64>(shard_info.shard_num));
|
res_columns[i++]->insert(static_cast<UInt64>(shard_info.shard_num));
|
||||||
@ -85,8 +63,5 @@ BlockInputStreams StorageSystemClusters::read(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <DataTypes/DataTypeString.h>
|
||||||
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -13,25 +15,17 @@ class Context;
|
|||||||
* that allows to obtain information about available clusters
|
* that allows to obtain information about available clusters
|
||||||
* (which may be specified in Distributed tables).
|
* (which may be specified in Distributed tables).
|
||||||
*/
|
*/
|
||||||
class StorageSystemClusters : public ext::shared_ptr_helper<StorageSystemClusters>, public IStorage
|
class StorageSystemClusters : public ext::shared_ptr_helper<StorageSystemClusters>, public IStorageSystemOneBlock<StorageSystemClusters>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemClusters"; }
|
std::string getName() const override { return "SystemClusters"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemClusters(const std::string & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,18 @@
|
|||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
void StorageSystemCollations::fillData(MutableColumns & res_columns) const
|
|
||||||
|
NamesAndTypesList StorageSystemCollations::getNamesAndTypes()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
{"name", std::make_shared<DataTypeString>()},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void StorageSystemCollations::fillData(MutableColumns & res_columns, const Context &, const SelectQueryInfo &) const
|
||||||
{
|
{
|
||||||
for (const auto & collation_name : Collator::getAvailableCollations())
|
for (const auto & collation_name : Collator::getAvailableCollations())
|
||||||
{
|
|
||||||
res_columns[0]->insert(collation_name);
|
res_columns[0]->insert(collation_name);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,25 +4,19 @@
|
|||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
class StorageSystemCollations : public ext::shared_ptr_helper<StorageSystemCollations>,
|
class StorageSystemCollations : public ext::shared_ptr_helper<StorageSystemCollations>,
|
||||||
public IStorageSystemOneBlock<StorageSystemCollations>
|
public IStorageSystemOneBlock<StorageSystemCollations>
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
void fillData(MutableColumns & res_columns) const override;
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
|
|
||||||
public:
|
|
||||||
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
public:
|
||||||
|
|
||||||
std::string getName() const override
|
std::string getName() const override { return "SystemTableCollations"; }
|
||||||
{
|
|
||||||
return "SystemTableCollations";
|
|
||||||
}
|
|
||||||
|
|
||||||
static NamesAndTypesList getNamesAndTypes()
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
{
|
|
||||||
return {
|
|
||||||
{"name", std::make_shared<DataTypeString>()},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,10 +15,8 @@
|
|||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
StorageSystemColumns::StorageSystemColumns(const std::string & name_)
|
NamesAndTypesList StorageSystemColumns::getNamesAndTypes() {
|
||||||
: name(name_)
|
return {
|
||||||
{
|
|
||||||
setColumns(ColumnsDescription({
|
|
||||||
{ "database", std::make_shared<DataTypeString>() },
|
{ "database", std::make_shared<DataTypeString>() },
|
||||||
{ "table", std::make_shared<DataTypeString>() },
|
{ "table", std::make_shared<DataTypeString>() },
|
||||||
{ "name", std::make_shared<DataTypeString>() },
|
{ "name", std::make_shared<DataTypeString>() },
|
||||||
@ -28,21 +26,11 @@ StorageSystemColumns::StorageSystemColumns(const std::string & name_)
|
|||||||
{ "data_compressed_bytes", std::make_shared<DataTypeUInt64>() },
|
{ "data_compressed_bytes", std::make_shared<DataTypeUInt64>() },
|
||||||
{ "data_uncompressed_bytes", std::make_shared<DataTypeUInt64>() },
|
{ "data_uncompressed_bytes", std::make_shared<DataTypeUInt64>() },
|
||||||
{ "marks_bytes", std::make_shared<DataTypeUInt64>() },
|
{ "marks_bytes", std::make_shared<DataTypeUInt64>() },
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StorageSystemColumns::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const
|
||||||
BlockInputStreams StorageSystemColumns::read(
|
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
Block block_to_filter;
|
Block block_to_filter;
|
||||||
|
|
||||||
std::map<std::pair<std::string, std::string>, StoragePtr> storages;
|
std::map<std::pair<std::string, std::string>, StoragePtr> storages;
|
||||||
@ -60,7 +48,7 @@ BlockInputStreams StorageSystemColumns::read(
|
|||||||
VirtualColumnUtils::filterBlockWithQuery(query_info.query, block_to_filter, context);
|
VirtualColumnUtils::filterBlockWithQuery(query_info.query, block_to_filter, context);
|
||||||
|
|
||||||
if (!block_to_filter.rows())
|
if (!block_to_filter.rows())
|
||||||
return BlockInputStreams();
|
return;
|
||||||
|
|
||||||
ColumnPtr database_column = block_to_filter.getByName("database").column;
|
ColumnPtr database_column = block_to_filter.getByName("database").column;
|
||||||
size_t rows = database_column->size();
|
size_t rows = database_column->size();
|
||||||
@ -98,14 +86,12 @@ BlockInputStreams StorageSystemColumns::read(
|
|||||||
VirtualColumnUtils::filterBlockWithQuery(query_info.query, block_to_filter, context);
|
VirtualColumnUtils::filterBlockWithQuery(query_info.query, block_to_filter, context);
|
||||||
|
|
||||||
if (!block_to_filter.rows())
|
if (!block_to_filter.rows())
|
||||||
return BlockInputStreams();
|
return;
|
||||||
|
|
||||||
ColumnPtr filtered_database_column = block_to_filter.getByName("database").column;
|
ColumnPtr filtered_database_column = block_to_filter.getByName("database").column;
|
||||||
ColumnPtr filtered_table_column = block_to_filter.getByName("table").column;
|
ColumnPtr filtered_table_column = block_to_filter.getByName("table").column;
|
||||||
|
|
||||||
/// We compose the result.
|
/// We compose the result.
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
size_t rows = filtered_database_column->size();
|
size_t rows = filtered_database_column->size();
|
||||||
for (size_t i = 0; i < rows; ++i)
|
for (size_t i = 0; i < rows; ++i)
|
||||||
{
|
{
|
||||||
@ -193,8 +179,6 @@ BlockInputStreams StorageSystemColumns::read(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -11,25 +11,17 @@ class Context;
|
|||||||
|
|
||||||
/** Implements system table 'columns', that allows to get information about columns for every table.
|
/** Implements system table 'columns', that allows to get information about columns for every table.
|
||||||
*/
|
*/
|
||||||
class StorageSystemColumns : public ext::shared_ptr_helper<StorageSystemColumns>, public IStorage
|
class StorageSystemColumns : public ext::shared_ptr_helper<StorageSystemColumns>, public IStorageSystemOneBlock<StorageSystemColumns>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemColumns"; }
|
std::string getName() const override { return "SystemColumns"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemColumns(const std::string & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
private:
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
const std::string name;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,70 +1,20 @@
|
|||||||
#include <Core/Field.h>
|
#include <Core/Field.h>
|
||||||
#include <DataTypes/DataTypeFactory.h>
|
#include <DataTypes/DataTypeFactory.h>
|
||||||
#include <Parsers/ASTFunction.h>
|
|
||||||
#include <Parsers/ASTLiteral.h>
|
|
||||||
#include <Storages/System/StorageSystemDataTypeFamilies.h>
|
#include <Storages/System/StorageSystemDataTypeFamilies.h>
|
||||||
#include <boost/algorithm/string/join.hpp>
|
|
||||||
#include <boost/algorithm/string/predicate.hpp>
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
namespace
|
|
||||||
|
NamesAndTypesList StorageSystemDataTypeFamilies::getNamesAndTypes()
|
||||||
{
|
{
|
||||||
void setTypePropertries(const DataTypePtr data_type, MutableColumns & res_columns)
|
return {
|
||||||
{
|
{"name", std::make_shared<DataTypeString>()},
|
||||||
res_columns[4]->insert(UInt64(data_type->isParametric()));
|
{"case_insensivie", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
||||||
res_columns[5]->insert(UInt64(data_type->haveSubtypes()));
|
{"alias_to", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeString>())},
|
||||||
res_columns[6]->insert(UInt64(data_type->cannotBeStoredInTables()));
|
};
|
||||||
res_columns[7]->insert(UInt64(data_type->isComparable()));
|
|
||||||
res_columns[8]->insert(UInt64(data_type->canBeComparedWithCollation()));
|
|
||||||
res_columns[9]->insert(UInt64(data_type->canBeUsedAsVersion()));
|
|
||||||
res_columns[10]->insert(UInt64(data_type->isSummable()));
|
|
||||||
res_columns[11]->insert(UInt64(data_type->canBeUsedInBitOperations()));
|
|
||||||
res_columns[12]->insert(UInt64(data_type->canBeUsedInBooleanContext()));
|
|
||||||
res_columns[13]->insert(UInt64(data_type->isCategorial()));
|
|
||||||
res_columns[14]->insert(UInt64(data_type->isNullable()));
|
|
||||||
res_columns[15]->insert(UInt64(data_type->onlyNull()));
|
|
||||||
res_columns[16]->insert(UInt64(data_type->canBeInsideNullable()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void setComplexTypeProperties(const String & name, MutableColumns & res_columns)
|
|
||||||
{
|
|
||||||
res_columns[3]->insert(Null());
|
|
||||||
res_columns[4]->insert(UInt64(1)); //complex types are always parametric
|
|
||||||
if (name == "AggregateFunction")
|
|
||||||
res_columns[5]->insert(UInt64(0));
|
|
||||||
else if (name == "Tuple")
|
|
||||||
res_columns[5]->insert(Null());
|
|
||||||
else
|
|
||||||
res_columns[5]->insert(UInt64(1));
|
|
||||||
|
|
||||||
for (size_t i = 6; i < StorageSystemDataTypeFamilies::getNamesAndTypes().size(); ++i)
|
|
||||||
res_columns[i]->insert(Null());
|
|
||||||
}
|
|
||||||
|
|
||||||
ASTPtr createFakeEnumCreationAst()
|
|
||||||
{
|
|
||||||
String fakename{"e"};
|
|
||||||
ASTPtr name = std::make_shared<ASTLiteral>(Field(fakename.c_str(), fakename.size()));
|
|
||||||
ASTPtr value = std::make_shared<ASTLiteral>(Field(UInt64(1)));
|
|
||||||
ASTPtr ast_func = makeASTFunction("equals", name, value);
|
|
||||||
ASTPtr clone = ast_func->clone();
|
|
||||||
clone->children.clear();
|
|
||||||
clone->children.push_back(ast_func);
|
|
||||||
return clone;
|
|
||||||
}
|
|
||||||
|
|
||||||
ASTPtr createFakeFixedStringAst()
|
|
||||||
{
|
|
||||||
ASTPtr result = std::make_shared<ASTLiteral>(Field(UInt64(1)));
|
|
||||||
auto clone = result->clone();
|
|
||||||
clone->children.clear();
|
|
||||||
clone->children.push_back(result);
|
|
||||||
return clone;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void StorageSystemDataTypeFamilies::fillData(MutableColumns & res_columns) const
|
void StorageSystemDataTypeFamilies::fillData(MutableColumns & res_columns, const Context &, const SelectQueryInfo &) const
|
||||||
{
|
{
|
||||||
const auto & factory = DataTypeFactory::instance();
|
const auto & factory = DataTypeFactory::instance();
|
||||||
auto names = factory.getAllDataTypeNames();
|
auto names = factory.getAllDataTypeNames();
|
||||||
@ -77,37 +27,7 @@ void StorageSystemDataTypeFamilies::fillData(MutableColumns & res_columns) const
|
|||||||
res_columns[2]->insert(factory.aliasTo(name));
|
res_columns[2]->insert(factory.aliasTo(name));
|
||||||
else
|
else
|
||||||
res_columns[2]->insert(String(""));
|
res_columns[2]->insert(String(""));
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
DataTypePtr type_ptr;
|
|
||||||
|
|
||||||
Field size = Null();
|
|
||||||
// hardcoded cases for simple parametric types
|
|
||||||
if (boost::starts_with(name, "Enum"))
|
|
||||||
{
|
|
||||||
type_ptr = factory.get(name, createFakeEnumCreationAst());
|
|
||||||
size = type_ptr->getMaximumSizeOfValueInMemory();
|
|
||||||
}
|
|
||||||
else if (name == "FixedString" || name == "BINARY")
|
|
||||||
{
|
|
||||||
type_ptr = factory.get(name, createFakeFixedStringAst());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
type_ptr = factory.get(name);
|
|
||||||
if (type_ptr->haveMaximumSizeOfValue())
|
|
||||||
size = type_ptr->getMaximumSizeOfValueInMemory();
|
|
||||||
}
|
|
||||||
|
|
||||||
res_columns[3]->insert(size);
|
|
||||||
|
|
||||||
setTypePropertries(type_ptr, res_columns);
|
|
||||||
}
|
|
||||||
catch (Exception & ex)
|
|
||||||
{
|
|
||||||
setComplexTypeProperties(name, res_columns);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,41 +7,19 @@
|
|||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
class StorageSystemDataTypeFamilies : public ext::shared_ptr_helper<StorageSystemDataTypeFamilies>,
|
class StorageSystemDataTypeFamilies : public ext::shared_ptr_helper<StorageSystemDataTypeFamilies>,
|
||||||
public IStorageSystemOneBlock<StorageSystemDataTypeFamilies>
|
public IStorageSystemOneBlock<StorageSystemDataTypeFamilies>
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
void fillData(MutableColumns & res_columns) const override;
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
|
|
||||||
public:
|
|
||||||
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
std::string getName() const override
|
public:
|
||||||
{
|
std::string getName() const override { return "SystemTableDataTypeFamilies"; }
|
||||||
return "SystemTableDataTypeFamilies";
|
|
||||||
}
|
|
||||||
|
|
||||||
static NamesAndTypesList getNamesAndTypes()
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
{
|
|
||||||
return {
|
|
||||||
{"name", std::make_shared<DataTypeString>()},
|
|
||||||
{"case_insensivie", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"alias_to", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeString>())},
|
|
||||||
{"size_in_bytes", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt16>())},
|
|
||||||
{"parametric", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"have_subtypes", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"cannot_be_stored_in_tables", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"comparable", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"can_be_compared_with_collation", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"can_be_used_as_version", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"is_summable", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"can_be_used_in_bit_operations", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"can_be_used_in_boolean_context", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"categorial", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"nullable", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"only_null", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
{"can_be_inside_nullable", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>())},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,40 +1,23 @@
|
|||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <DataTypes/DataTypeString.h>
|
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
#include <Databases/IDatabase.h>
|
#include <Databases/IDatabase.h>
|
||||||
#include <Storages/System/StorageSystemDatabases.h>
|
|
||||||
#include <Interpreters/Context.h>
|
#include <Interpreters/Context.h>
|
||||||
|
#include <Storages/System/StorageSystemDatabases.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
|
NamesAndTypesList StorageSystemDatabases::getNamesAndTypes()
|
||||||
StorageSystemDatabases::StorageSystemDatabases(const std::string & name_)
|
|
||||||
: name(name_)
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{"name", std::make_shared<DataTypeString>()},
|
{"name", std::make_shared<DataTypeString>()},
|
||||||
{"engine", std::make_shared<DataTypeString>()},
|
{"engine", std::make_shared<DataTypeString>()},
|
||||||
{"data_path", std::make_shared<DataTypeString>()},
|
{"data_path", std::make_shared<DataTypeString>()},
|
||||||
{"metadata_path", std::make_shared<DataTypeString>()},
|
{"metadata_path", std::make_shared<DataTypeString>()},
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StorageSystemDatabases::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo &) const
|
||||||
BlockInputStreams StorageSystemDatabases::read(
|
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
auto databases = context.getDatabases();
|
auto databases = context.getDatabases();
|
||||||
for (const auto & database : databases)
|
for (const auto & database : databases)
|
||||||
{
|
{
|
||||||
@ -43,9 +26,6 @@ BlockInputStreams StorageSystemDatabases::read(
|
|||||||
res_columns[2]->insert(database.second->getDataPath());
|
res_columns[2]->insert(database.second->getDataPath());
|
||||||
res_columns[3]->insert(database.second->getMetadataPath());
|
res_columns[3]->insert(database.second->getMetadataPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <DataTypes/DataTypeString.h>
|
||||||
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -12,25 +13,20 @@ class Context;
|
|||||||
|
|
||||||
/** Implements `databases` system table, which allows you to get information about all databases.
|
/** Implements `databases` system table, which allows you to get information about all databases.
|
||||||
*/
|
*/
|
||||||
class StorageSystemDatabases : public ext::shared_ptr_helper<StorageSystemDatabases>, public IStorage
|
class StorageSystemDatabases : public ext::shared_ptr_helper<StorageSystemDatabases>, public IStorageSystemOneBlock<StorageSystemDatabases>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemDatabases"; }
|
std::string getName() const override
|
||||||
std::string getTableName() const override { return name; }
|
{
|
||||||
|
return "SystemDatabases";
|
||||||
|
}
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemDatabases(const std::string & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo &) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,4 @@
|
|||||||
#include <Storages/System/StorageSystemDictionaries.h>
|
#include <Storages/System/StorageSystemDictionaries.h>
|
||||||
#include <DataTypes/DataTypeString.h>
|
|
||||||
#include <DataTypes/DataTypesNumber.h>
|
|
||||||
#include <DataTypes/DataTypeArray.h>
|
|
||||||
#include <DataTypes/DataTypeDateTime.h>
|
|
||||||
#include <Columns/ColumnsNumber.h>
|
|
||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <Columns/ColumnArray.h>
|
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
#include <Interpreters/Context.h>
|
#include <Interpreters/Context.h>
|
||||||
#include <Dictionaries/IDictionary.h>
|
#include <Dictionaries/IDictionary.h>
|
||||||
#include <Dictionaries/IDictionarySource.h>
|
#include <Dictionaries/IDictionarySource.h>
|
||||||
@ -18,10 +10,9 @@
|
|||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
StorageSystemDictionaries::StorageSystemDictionaries(const std::string & name)
|
NamesAndTypesList StorageSystemDictionaries::getNamesAndTypes()
|
||||||
: name{name}
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{ "name", std::make_shared<DataTypeString>() },
|
{ "name", std::make_shared<DataTypeString>() },
|
||||||
{ "origin", std::make_shared<DataTypeString>() },
|
{ "origin", std::make_shared<DataTypeString>() },
|
||||||
{ "type", std::make_shared<DataTypeString>() },
|
{ "type", std::make_shared<DataTypeString>() },
|
||||||
@ -36,27 +27,13 @@ StorageSystemDictionaries::StorageSystemDictionaries(const std::string & name)
|
|||||||
{ "creation_time", std::make_shared<DataTypeDateTime>() },
|
{ "creation_time", std::make_shared<DataTypeDateTime>() },
|
||||||
{ "source", std::make_shared<DataTypeString>() },
|
{ "source", std::make_shared<DataTypeString>() },
|
||||||
{ "last_exception", std::make_shared<DataTypeString>() },
|
{ "last_exception", std::make_shared<DataTypeString>() },
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StorageSystemDictionaries::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo &) const {
|
||||||
BlockInputStreams StorageSystemDictionaries::read(
|
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t,
|
|
||||||
const unsigned)
|
|
||||||
{
|
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
const auto & external_dictionaries = context.getExternalDictionaries();
|
const auto & external_dictionaries = context.getExternalDictionaries();
|
||||||
auto objects_map = external_dictionaries.getObjectsMap();
|
auto objects_map = external_dictionaries.getObjectsMap();
|
||||||
const auto & dictionaries = objects_map.get();
|
const auto & dictionaries = objects_map.get();
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
for (const auto & dict_info : dictionaries)
|
for (const auto & dict_info : dictionaries)
|
||||||
{
|
{
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
@ -102,8 +79,6 @@ BlockInputStreams StorageSystemDictionaries::read(
|
|||||||
else
|
else
|
||||||
res_columns[i++]->insertDefault();
|
res_columns[i++]->insertDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <DataTypes/DataTypeArray.h>
|
||||||
|
#include <DataTypes/DataTypeDateTime.h>
|
||||||
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
|
#include <DataTypes/DataTypeString.h>
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -10,25 +14,17 @@ namespace DB
|
|||||||
class Context;
|
class Context;
|
||||||
|
|
||||||
|
|
||||||
class StorageSystemDictionaries : public ext::shared_ptr_helper<StorageSystemDictionaries>, public IStorage
|
class StorageSystemDictionaries : public ext::shared_ptr_helper<StorageSystemDictionaries>, public IStorageSystemOneBlock<StorageSystemDictionaries>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemDictionaries"; }
|
std::string getName() const override { return "SystemDictionaries"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemDictionaries(const std::string & name);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,39 +1,19 @@
|
|||||||
#include <Common/ProfileEvents.h>
|
#include <Common/ProfileEvents.h>
|
||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <DataTypes/DataTypeString.h>
|
|
||||||
#include <DataTypes/DataTypesNumber.h>
|
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
#include <Storages/System/StorageSystemEvents.h>
|
#include <Storages/System/StorageSystemEvents.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
|
NamesAndTypesList StorageSystemEvents::getNamesAndTypes()
|
||||||
StorageSystemEvents::StorageSystemEvents(const std::string & name_)
|
|
||||||
: name(name_)
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription(
|
return {
|
||||||
{
|
|
||||||
{"event", std::make_shared<DataTypeString>()},
|
{"event", std::make_shared<DataTypeString>()},
|
||||||
{"value", std::make_shared<DataTypeUInt64>()},
|
{"value", std::make_shared<DataTypeUInt64>()},
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StorageSystemEvents::fillData(MutableColumns & res_columns, const Context &, const SelectQueryInfo &) const
|
||||||
BlockInputStreams StorageSystemEvents::read(
|
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context &,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
for (size_t i = 0, end = ProfileEvents::end(); i < end; ++i)
|
for (size_t i = 0, end = ProfileEvents::end(); i < end; ++i)
|
||||||
{
|
{
|
||||||
UInt64 value = ProfileEvents::counters[i];
|
UInt64 value = ProfileEvents::counters[i];
|
||||||
@ -44,9 +24,6 @@ BlockInputStreams StorageSystemEvents::read(
|
|||||||
res_columns[1]->insert(value);
|
res_columns[1]->insert(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <DataTypes/DataTypeString.h>
|
||||||
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
@ -12,25 +13,17 @@ class Context;
|
|||||||
|
|
||||||
/** Implements `events` system table, which allows you to obtain information for profiling.
|
/** Implements `events` system table, which allows you to obtain information for profiling.
|
||||||
*/
|
*/
|
||||||
class StorageSystemEvents : public ext::shared_ptr_helper<StorageSystemEvents>, public IStorage
|
class StorageSystemEvents : public ext::shared_ptr_helper<StorageSystemEvents>, public IStorageSystemOneBlock<StorageSystemEvents>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemEvents"; }
|
std::string getName() const override { return "SystemEvents"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemEvents(const std::string & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,17 @@
|
|||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
void StorageSystemFormats::fillData(MutableColumns & res_columns) const
|
|
||||||
|
NamesAndTypesList StorageSystemFormats::getNamesAndTypes()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
{"name", std::make_shared<DataTypeString>()},
|
||||||
|
{"is_input", std::make_shared<DataTypeUInt8>()},
|
||||||
|
{"is_output", std::make_shared<DataTypeUInt8>()},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void StorageSystemFormats::fillData(MutableColumns & res_columns, const Context &, const SelectQueryInfo &) const
|
||||||
{
|
{
|
||||||
const auto & formats = FormatFactory::instance().getAllFormats();
|
const auto & formats = FormatFactory::instance().getAllFormats();
|
||||||
for (const auto & pair : formats)
|
for (const auto & pair : formats)
|
||||||
@ -16,4 +26,5 @@ void StorageSystemFormats::fillData(MutableColumns & res_columns) const
|
|||||||
res_columns[2]->insert(has_output_format);
|
res_columns[2]->insert(has_output_format);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,23 +10,16 @@ namespace DB
|
|||||||
class StorageSystemFormats : public ext::shared_ptr_helper<StorageSystemFormats>, public IStorageSystemOneBlock<StorageSystemFormats>
|
class StorageSystemFormats : public ext::shared_ptr_helper<StorageSystemFormats>, public IStorageSystemOneBlock<StorageSystemFormats>
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
void fillData(MutableColumns & res_columns) const override;
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
|
|
||||||
public:
|
|
||||||
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
public:
|
||||||
|
|
||||||
std::string getName() const override
|
std::string getName() const override
|
||||||
{
|
{
|
||||||
return "SystemFormats";
|
return "SystemFormats";
|
||||||
}
|
}
|
||||||
|
|
||||||
static NamesAndTypesList getNamesAndTypes()
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
{
|
|
||||||
return {
|
|
||||||
{"name", std::make_shared<DataTypeString>()},
|
|
||||||
{"is_input", std::make_shared<DataTypeUInt8>()},
|
|
||||||
{"is_output", std::make_shared<DataTypeUInt8>()},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,41 +1,28 @@
|
|||||||
#include <Storages/System/StorageSystemFunctions.h>
|
|
||||||
#include <Functions/FunctionFactory.h>
|
|
||||||
#include <Functions/IFunction.h>
|
|
||||||
#include <AggregateFunctions/AggregateFunctionFactory.h>
|
#include <AggregateFunctions/AggregateFunctionFactory.h>
|
||||||
#include <Columns/ColumnString.h>
|
#include <Columns/ColumnString.h>
|
||||||
#include <Columns/ColumnsNumber.h>
|
#include <Columns/ColumnsNumber.h>
|
||||||
|
#include <DataStreams/OneBlockInputStream.h>
|
||||||
#include <DataTypes/DataTypeString.h>
|
#include <DataTypes/DataTypeString.h>
|
||||||
#include <DataTypes/DataTypesNumber.h>
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
#include <Functions/FunctionFactory.h>
|
||||||
|
#include <Functions/IFunction.h>
|
||||||
#include <Interpreters/Context.h>
|
#include <Interpreters/Context.h>
|
||||||
|
#include <Storages/System/StorageSystemFunctions.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
StorageSystemFunctions::StorageSystemFunctions(const std::string & name_)
|
NamesAndTypesList StorageSystemFunctions::getNamesAndTypes()
|
||||||
: name(name_)
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{ "name", std::make_shared<DataTypeString>() },
|
{"name", std::make_shared<DataTypeString>()},
|
||||||
{ "is_aggregate", std::make_shared<DataTypeUInt8>() },
|
{"is_aggregate", std::make_shared<DataTypeUInt8>()},
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StorageSystemFunctions::fillData(MutableColumns & res_columns, const Context &, const SelectQueryInfo &) const
|
||||||
BlockInputStreams StorageSystemFunctions::read(
|
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context &,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
const auto & functions = FunctionFactory::instance().functions;
|
const auto & functions = FunctionFactory::instance().functions;
|
||||||
for (const auto & it : functions)
|
for (const auto & it : functions)
|
||||||
{
|
{
|
||||||
@ -49,8 +36,6 @@ BlockInputStreams StorageSystemFunctions::read(
|
|||||||
res_columns[0]->insert(it.first);
|
res_columns[0]->insert(it.first);
|
||||||
res_columns[1]->insert(UInt64(1));
|
res_columns[1]->insert(UInt64(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <DataTypes/DataTypeString.h>
|
||||||
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -13,25 +15,17 @@ class Context;
|
|||||||
/** Implements `functions`system table, which allows you to get a list
|
/** Implements `functions`system table, which allows you to get a list
|
||||||
* all normal and aggregate functions.
|
* all normal and aggregate functions.
|
||||||
*/
|
*/
|
||||||
class StorageSystemFunctions : public ext::shared_ptr_helper<StorageSystemFunctions>, public IStorage
|
class StorageSystemFunctions : public ext::shared_ptr_helper<StorageSystemFunctions>, public IStorageSystemOneBlock<StorageSystemFunctions>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemFunctions"; }
|
std::string getName() const override { return "SystemFunctions"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemFunctions(const std::string & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
private:
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
const std::string name;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -124,10 +124,9 @@ static Strings getAllGraphiteSections(const AbstractConfiguration & config)
|
|||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
StorageSystemGraphite::StorageSystemGraphite(const std::string & name_)
|
NamesAndTypesList StorageSystemGraphite::getNamesAndTypes()
|
||||||
: name(name_)
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{"config_name", std::make_shared<DataTypeString>()},
|
{"config_name", std::make_shared<DataTypeString>()},
|
||||||
{"regexp", std::make_shared<DataTypeString>()},
|
{"regexp", std::make_shared<DataTypeString>()},
|
||||||
{"function", std::make_shared<DataTypeString>()},
|
{"function", std::make_shared<DataTypeString>()},
|
||||||
@ -135,23 +134,12 @@ StorageSystemGraphite::StorageSystemGraphite(const std::string & name_)
|
|||||||
{"precision", std::make_shared<DataTypeUInt64>()},
|
{"precision", std::make_shared<DataTypeUInt64>()},
|
||||||
{"priority", std::make_shared<DataTypeUInt16>()},
|
{"priority", std::make_shared<DataTypeUInt16>()},
|
||||||
{"is_default", std::make_shared<DataTypeUInt8>()},
|
{"is_default", std::make_shared<DataTypeUInt8>()},
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BlockInputStreams StorageSystemGraphite::read(
|
void StorageSystemGraphite::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo &) const
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t /*max_block_size*/,
|
|
||||||
unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
const auto & config = context.getConfigRef();
|
const auto & config = context.getConfigRef();
|
||||||
|
|
||||||
Strings sections = getAllGraphiteSections(config);
|
Strings sections = getAllGraphiteSections(config);
|
||||||
@ -172,8 +160,6 @@ BlockInputStreams StorageSystemGraphite::read(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,31 +1,25 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <Storages/IStorage.h>
|
#include <DataTypes/DataTypeString.h>
|
||||||
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
/// Provides information about Graphite configuration.
|
/// Provides information about Graphite configuration.
|
||||||
class StorageSystemGraphite : public ext::shared_ptr_helper<StorageSystemGraphite>, public IStorage
|
class StorageSystemGraphite : public ext::shared_ptr_helper<StorageSystemGraphite>, public IStorageSystemOneBlock<StorageSystemGraphite>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemGraphite"; }
|
std::string getName() const override { return "SystemGraphite"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemGraphite(const std::string & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,38 +1,21 @@
|
|||||||
#include <Common/Macros.h>
|
|
||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <DataTypes/DataTypeString.h>
|
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
#include <Storages/System/StorageSystemMacros.h>
|
|
||||||
#include <Interpreters/Context.h>
|
#include <Interpreters/Context.h>
|
||||||
|
#include <Storages/System/StorageSystemMacros.h>
|
||||||
|
#include <Common/Macros.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
|
NamesAndTypesList StorageSystemMacros::getNamesAndTypes()
|
||||||
StorageSystemMacros::StorageSystemMacros(const std::string & name_)
|
|
||||||
: name(name_)
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{"macro", std::make_shared<DataTypeString>()},
|
{"macro", std::make_shared<DataTypeString>()},
|
||||||
{"substitution", std::make_shared<DataTypeString>()},
|
{"substitution", std::make_shared<DataTypeString>()},
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StorageSystemMacros::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo &) const
|
||||||
BlockInputStreams StorageSystemMacros::read(
|
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
auto macros = context.getMacros();
|
auto macros = context.getMacros();
|
||||||
|
|
||||||
for (const auto & macro : macros->getMacroMap())
|
for (const auto & macro : macros->getMacroMap())
|
||||||
@ -40,9 +23,6 @@ BlockInputStreams StorageSystemMacros::read(
|
|||||||
res_columns[0]->insert(macro.first);
|
res_columns[0]->insert(macro.first);
|
||||||
res_columns[1]->insert(macro.second);
|
res_columns[1]->insert(macro.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <DataTypes/DataTypeString.h>
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -12,25 +13,17 @@ class Context;
|
|||||||
|
|
||||||
/** Information about macros for introspection.
|
/** Information about macros for introspection.
|
||||||
*/
|
*/
|
||||||
class StorageSystemMacros : public ext::shared_ptr_helper<StorageSystemMacros>, public IStorage
|
class StorageSystemMacros : public ext::shared_ptr_helper<StorageSystemMacros>, public IStorageSystemOneBlock<StorageSystemMacros>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemMacros"; }
|
std::string getName() const override { return "SystemMacros"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemMacros(const std::string & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,53 +1,36 @@
|
|||||||
#include <Storages/System/StorageSystemMerges.h>
|
|
||||||
#include <DataTypes/DataTypeString.h>
|
|
||||||
#include <DataTypes/DataTypesNumber.h>
|
|
||||||
#include <DataTypes/DataTypeArray.h>
|
|
||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
#include <Interpreters/Context.h>
|
#include <Interpreters/Context.h>
|
||||||
#include <Storages/MergeTree/MergeList.h>
|
#include <Storages/MergeTree/MergeList.h>
|
||||||
|
#include <Storages/System/StorageSystemMerges.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
StorageSystemMerges::StorageSystemMerges(const std::string & name)
|
NamesAndTypesList StorageSystemMerges::getNamesAndTypes()
|
||||||
: name{name}
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{ "database", std::make_shared<DataTypeString>() },
|
{"database", std::make_shared<DataTypeString>()},
|
||||||
{ "table", std::make_shared<DataTypeString>() },
|
{"table", std::make_shared<DataTypeString>()},
|
||||||
{ "elapsed", std::make_shared<DataTypeFloat64>() },
|
{"elapsed", std::make_shared<DataTypeFloat64>()},
|
||||||
{ "progress", std::make_shared<DataTypeFloat64>() },
|
{"progress", std::make_shared<DataTypeFloat64>()},
|
||||||
{ "num_parts", std::make_shared<DataTypeUInt64>() },
|
{"num_parts", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "source_part_names", std::make_shared<DataTypeArray>(std::make_shared<DataTypeString>()) },
|
{"source_part_names", std::make_shared<DataTypeArray>(std::make_shared<DataTypeString>())},
|
||||||
{ "result_part_name", std::make_shared<DataTypeString>() },
|
{"result_part_name", std::make_shared<DataTypeString>()},
|
||||||
{ "total_size_bytes_compressed", std::make_shared<DataTypeUInt64>() },
|
{"total_size_bytes_compressed", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "total_size_marks", std::make_shared<DataTypeUInt64>() },
|
{"total_size_marks", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "bytes_read_uncompressed", std::make_shared<DataTypeUInt64>() },
|
{"bytes_read_uncompressed", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "rows_read", std::make_shared<DataTypeUInt64>() },
|
{"rows_read", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "bytes_written_uncompressed", std::make_shared<DataTypeUInt64>() },
|
{"bytes_written_uncompressed", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "rows_written", std::make_shared<DataTypeUInt64>() },
|
{"rows_written", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "columns_written", std::make_shared<DataTypeUInt64>() },
|
{"columns_written", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "memory_usage", std::make_shared<DataTypeUInt64>() },
|
{"memory_usage", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "thread_number", std::make_shared<DataTypeUInt64>() },
|
{"thread_number", std::make_shared<DataTypeUInt64>()},
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BlockInputStreams StorageSystemMerges::read(
|
void StorageSystemMerges::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo &) const
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t,
|
|
||||||
const unsigned)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
for (const auto & merge : context.getMergeList().get())
|
for (const auto & merge : context.getMergeList().get())
|
||||||
{
|
{
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
@ -68,8 +51,6 @@ BlockInputStreams StorageSystemMerges::read(
|
|||||||
res_columns[i++]->insert(merge.memory_usage);
|
res_columns[i++]->insert(merge.memory_usage);
|
||||||
res_columns[i++]->insert(merge.thread_number);
|
res_columns[i++]->insert(merge.thread_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <DataTypes/DataTypeString.h>
|
||||||
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
|
#include <DataTypes/DataTypeArray.h>
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -10,25 +13,17 @@ namespace DB
|
|||||||
class Context;
|
class Context;
|
||||||
|
|
||||||
|
|
||||||
class StorageSystemMerges : public ext::shared_ptr_helper<StorageSystemMerges>, public IStorage
|
class StorageSystemMerges : public ext::shared_ptr_helper<StorageSystemMerges>, public IStorageSystemOneBlock<StorageSystemMerges>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemMerges"; }
|
std::string getName() const override { return "SystemMerges"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemMerges(const std::string & name);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,39 +1,23 @@
|
|||||||
|
|
||||||
#include <Common/CurrentMetrics.h>
|
#include <Common/CurrentMetrics.h>
|
||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <Columns/ColumnsNumber.h>
|
|
||||||
#include <DataTypes/DataTypeString.h>
|
#include <DataTypes/DataTypeString.h>
|
||||||
#include <DataTypes/DataTypesNumber.h>
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
#include <Storages/System/StorageSystemMetrics.h>
|
#include <Storages/System/StorageSystemMetrics.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
|
NamesAndTypesList StorageSystemMetrics::getNamesAndTypes()
|
||||||
StorageSystemMetrics::StorageSystemMetrics(const std::string & name_)
|
|
||||||
: name(name_)
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{"metric", std::make_shared<DataTypeString>()},
|
{"metric", std::make_shared<DataTypeString>()},
|
||||||
{"value", std::make_shared<DataTypeInt64>()},
|
{"value", std::make_shared<DataTypeInt64>()},
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StorageSystemMetrics::fillData(MutableColumns & res_columns, const Context &, const SelectQueryInfo &) const
|
||||||
BlockInputStreams StorageSystemMetrics::read(
|
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context &,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
for (size_t i = 0, end = CurrentMetrics::end(); i < end; ++i)
|
for (size_t i = 0, end = CurrentMetrics::end(); i < end; ++i)
|
||||||
{
|
{
|
||||||
Int64 value = CurrentMetrics::values[i].load(std::memory_order_relaxed);
|
Int64 value = CurrentMetrics::values[i].load(std::memory_order_relaxed);
|
||||||
@ -41,9 +25,6 @@ BlockInputStreams StorageSystemMetrics::read(
|
|||||||
res_columns[0]->insert(String(CurrentMetrics::getDescription(CurrentMetrics::Metric(i))));
|
res_columns[0]->insert(String(CurrentMetrics::getDescription(CurrentMetrics::Metric(i))));
|
||||||
res_columns[1]->insert(value);
|
res_columns[1]->insert(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -12,25 +12,17 @@ class Context;
|
|||||||
|
|
||||||
/** Implements `metrics` system table, which provides information about the operation of the server.
|
/** Implements `metrics` system table, which provides information about the operation of the server.
|
||||||
*/
|
*/
|
||||||
class StorageSystemMetrics : public ext::shared_ptr_helper<StorageSystemMetrics>, public IStorage
|
class StorageSystemMetrics : public ext::shared_ptr_helper<StorageSystemMetrics>, public IStorageSystemOneBlock<StorageSystemMetrics>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemMetrics"; }
|
std::string getName() const override { return "SystemMetrics"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemMetrics(const std::string & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,45 +2,29 @@
|
|||||||
#include <DataTypes/DataTypeString.h>
|
#include <DataTypes/DataTypeString.h>
|
||||||
#include <DataTypes/DataTypesNumber.h>
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
#include <DataTypes/DataTypeDateTime.h>
|
#include <DataTypes/DataTypeDateTime.h>
|
||||||
#include <Columns/ColumnsNumber.h>
|
|
||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
#include <Interpreters/Context.h>
|
#include <Interpreters/Context.h>
|
||||||
#include <Interpreters/ExternalModels.h>
|
#include <Interpreters/ExternalModels.h>
|
||||||
#include <Dictionaries/CatBoostModel.h>
|
#include <Dictionaries/CatBoostModel.h>
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
StorageSystemModels::StorageSystemModels(const std::string & name)
|
NamesAndTypesList StorageSystemModels::getNamesAndTypes()
|
||||||
: name{name}
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{ "name", std::make_shared<DataTypeString>() },
|
{ "name", std::make_shared<DataTypeString>() },
|
||||||
{ "origin", std::make_shared<DataTypeString>() },
|
{ "origin", std::make_shared<DataTypeString>() },
|
||||||
{ "type", std::make_shared<DataTypeString>() },
|
{ "type", std::make_shared<DataTypeString>() },
|
||||||
{ "creation_time", std::make_shared<DataTypeDateTime>() },
|
{ "creation_time", std::make_shared<DataTypeDateTime>() },
|
||||||
{ "last_exception", std::make_shared<DataTypeString>() },
|
{ "last_exception", std::make_shared<DataTypeString>() },
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StorageSystemModels::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo &) const
|
||||||
BlockInputStreams StorageSystemModels::read(
|
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t,
|
|
||||||
const unsigned)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
const auto & external_models = context.getExternalModels();
|
const auto & external_models = context.getExternalModels();
|
||||||
auto objects_map = external_models.getObjectsMap();
|
auto objects_map = external_models.getObjectsMap();
|
||||||
const auto & models = objects_map.get();
|
const auto & models = objects_map.get();
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
for (const auto & model_info : models)
|
for (const auto & model_info : models)
|
||||||
{
|
{
|
||||||
res_columns[0]->insert(model_info.first);
|
res_columns[0]->insert(model_info.first);
|
||||||
@ -73,8 +57,6 @@ BlockInputStreams StorageSystemModels::read(
|
|||||||
else
|
else
|
||||||
res_columns[4]->insertDefault();
|
res_columns[4]->insertDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -10,25 +10,17 @@ namespace DB
|
|||||||
class Context;
|
class Context;
|
||||||
|
|
||||||
|
|
||||||
class StorageSystemModels : public ext::shared_ptr_helper<StorageSystemModels>, public IStorage
|
class StorageSystemModels : public ext::shared_ptr_helper<StorageSystemModels>, public IStorageSystemOneBlock<StorageSystemModels>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemModels"; }
|
std::string getName() const override { return "SystemModels"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemModels(const std::string & name);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -13,10 +13,10 @@
|
|||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
StorageSystemMutations::StorageSystemMutations(const std::string & name_)
|
|
||||||
: name(name_)
|
NamesAndTypesList StorageSystemMutations::getNamesAndTypes()
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{ "database", std::make_shared<DataTypeString>() },
|
{ "database", std::make_shared<DataTypeString>() },
|
||||||
{ "table", std::make_shared<DataTypeString>() },
|
{ "table", std::make_shared<DataTypeString>() },
|
||||||
{ "mutation_id", std::make_shared<DataTypeString>() },
|
{ "mutation_id", std::make_shared<DataTypeString>() },
|
||||||
@ -28,21 +28,12 @@ StorageSystemMutations::StorageSystemMutations(const std::string & name_)
|
|||||||
std::make_shared<DataTypeInt64>()) },
|
std::make_shared<DataTypeInt64>()) },
|
||||||
{ "parts_to_do", std::make_shared<DataTypeInt64>() },
|
{ "parts_to_do", std::make_shared<DataTypeInt64>() },
|
||||||
{ "is_done", std::make_shared<DataTypeUInt8>() },
|
{ "is_done", std::make_shared<DataTypeUInt8>() },
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BlockInputStreams StorageSystemMutations::read(
|
void StorageSystemMutations::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
/// Collect a set of *MergeTree tables.
|
/// Collect a set of *MergeTree tables.
|
||||||
std::map<String, std::map<String, StoragePtr>> merge_tree_tables;
|
std::map<String, std::map<String, StoragePtr>> merge_tree_tables;
|
||||||
for (const auto & db : context.getDatabases())
|
for (const auto & db : context.getDatabases())
|
||||||
@ -83,13 +74,12 @@ BlockInputStreams StorageSystemMutations::read(
|
|||||||
VirtualColumnUtils::filterBlockWithQuery(query_info.query, filtered_block, context);
|
VirtualColumnUtils::filterBlockWithQuery(query_info.query, filtered_block, context);
|
||||||
|
|
||||||
if (!filtered_block.rows())
|
if (!filtered_block.rows())
|
||||||
return BlockInputStreams();
|
return;
|
||||||
|
|
||||||
col_database = filtered_block.getByName("database").column;
|
col_database = filtered_block.getByName("database").column;
|
||||||
col_table = filtered_block.getByName("table").column;
|
col_table = filtered_block.getByName("table").column;
|
||||||
}
|
}
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
for (size_t i_storage = 0; i_storage < col_database->size(); ++i_storage)
|
for (size_t i_storage = 0; i_storage < col_database->size(); ++i_storage)
|
||||||
{
|
{
|
||||||
auto database = (*col_database)[i_storage].safeGet<String>();
|
auto database = (*col_database)[i_storage].safeGet<String>();
|
||||||
@ -129,12 +119,6 @@ BlockInputStreams StorageSystemMutations::read(
|
|||||||
res_columns[col_num++]->insert(UInt64(status.is_done));
|
res_columns[col_num++]->insert(UInt64(status.is_done));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Block res = getSampleBlock().cloneEmpty();
|
|
||||||
for (size_t i_col = 0; i_col < res.columns(); ++i_col)
|
|
||||||
res.getByPosition(i_col).column = std::move(res_columns[i_col]);
|
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(res));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -12,25 +12,17 @@ class Context;
|
|||||||
|
|
||||||
/// Implements the `mutations` system table, which provides information about the status of mutations
|
/// Implements the `mutations` system table, which provides information about the status of mutations
|
||||||
/// in the MergeTree tables.
|
/// in the MergeTree tables.
|
||||||
class StorageSystemMutations : public ext::shared_ptr_helper<StorageSystemMutations>, public IStorage
|
class StorageSystemMutations : public ext::shared_ptr_helper<StorageSystemMutations>, public IStorageSystemOneBlock<StorageSystemMutations>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
String getName() const override { return "SystemMutations"; }
|
String getName() const override { return "SystemMutations"; }
|
||||||
String getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const String name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemMutations(const String & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,75 +1,60 @@
|
|||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <DataTypes/DataTypeString.h>
|
#include <DataTypes/DataTypeString.h>
|
||||||
#include <DataTypes/DataTypesNumber.h>
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
#include <Interpreters/Context.h>
|
||||||
#include <Interpreters/ProcessList.h>
|
#include <Interpreters/ProcessList.h>
|
||||||
#include <Storages/System/StorageSystemProcesses.h>
|
#include <Storages/System/StorageSystemProcesses.h>
|
||||||
#include <Interpreters/Context.h>
|
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
|
NamesAndTypesList StorageSystemProcesses::getNamesAndTypes()
|
||||||
StorageSystemProcesses::StorageSystemProcesses(const std::string & name_)
|
|
||||||
: name(name_)
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{ "is_initial_query", std::make_shared<DataTypeUInt8>() },
|
{"is_initial_query", std::make_shared<DataTypeUInt8>()},
|
||||||
|
|
||||||
{ "user", std::make_shared<DataTypeString>() },
|
{"user", std::make_shared<DataTypeString>()},
|
||||||
{ "query_id", std::make_shared<DataTypeString>() },
|
{"query_id", std::make_shared<DataTypeString>()},
|
||||||
{ "address", std::make_shared<DataTypeString>() },
|
{"address", std::make_shared<DataTypeString>()},
|
||||||
{ "port", std::make_shared<DataTypeUInt16>() },
|
{"port", std::make_shared<DataTypeUInt16>()},
|
||||||
|
|
||||||
{ "initial_user", std::make_shared<DataTypeString>() },
|
{"initial_user", std::make_shared<DataTypeString>()},
|
||||||
{ "initial_query_id", std::make_shared<DataTypeString>() },
|
{"initial_query_id", std::make_shared<DataTypeString>()},
|
||||||
{ "initial_address", std::make_shared<DataTypeString>() },
|
{"initial_address", std::make_shared<DataTypeString>()},
|
||||||
{ "initial_port", std::make_shared<DataTypeUInt16>() },
|
{"initial_port", std::make_shared<DataTypeUInt16>()},
|
||||||
|
|
||||||
{ "interface", std::make_shared<DataTypeUInt8>() },
|
{"interface", std::make_shared<DataTypeUInt8>()},
|
||||||
|
|
||||||
{ "os_user", std::make_shared<DataTypeString>() },
|
{"os_user", std::make_shared<DataTypeString>()},
|
||||||
{ "client_hostname", std::make_shared<DataTypeString>() },
|
{"client_hostname", std::make_shared<DataTypeString>()},
|
||||||
{ "client_name", std::make_shared<DataTypeString>() },
|
{"client_name", std::make_shared<DataTypeString>()},
|
||||||
{ "client_version_major", std::make_shared<DataTypeUInt64>() },
|
{"client_version_major", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "client_version_minor", std::make_shared<DataTypeUInt64>() },
|
{"client_version_minor", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "client_revision", std::make_shared<DataTypeUInt64>() },
|
{"client_revision", std::make_shared<DataTypeUInt64>()},
|
||||||
|
|
||||||
{ "http_method", std::make_shared<DataTypeUInt8>() },
|
{"http_method", std::make_shared<DataTypeUInt8>()},
|
||||||
{ "http_user_agent", std::make_shared<DataTypeString>() },
|
{"http_user_agent", std::make_shared<DataTypeString>()},
|
||||||
|
|
||||||
{ "quota_key", std::make_shared<DataTypeString>() },
|
{"quota_key", std::make_shared<DataTypeString>()},
|
||||||
|
|
||||||
{ "elapsed", std::make_shared<DataTypeFloat64>() },
|
{"elapsed", std::make_shared<DataTypeFloat64>()},
|
||||||
{ "is_cancelled", std::make_shared<DataTypeUInt8>() },
|
{"is_cancelled", std::make_shared<DataTypeUInt8>()},
|
||||||
{ "read_rows", std::make_shared<DataTypeUInt64>() },
|
{"read_rows", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "read_bytes", std::make_shared<DataTypeUInt64>() },
|
{"read_bytes", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "total_rows_approx", std::make_shared<DataTypeUInt64>() },
|
{"total_rows_approx", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "written_rows", std::make_shared<DataTypeUInt64>() },
|
{"written_rows", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "written_bytes", std::make_shared<DataTypeUInt64>() },
|
{"written_bytes", std::make_shared<DataTypeUInt64>()},
|
||||||
{ "memory_usage", std::make_shared<DataTypeInt64>() },
|
{"memory_usage", std::make_shared<DataTypeInt64>()},
|
||||||
{ "peak_memory_usage", std::make_shared<DataTypeInt64>() },
|
{"peak_memory_usage", std::make_shared<DataTypeInt64>()},
|
||||||
{ "query", std::make_shared<DataTypeString>() },
|
{"query", std::make_shared<DataTypeString>()},
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BlockInputStreams StorageSystemProcesses::read(
|
void StorageSystemProcesses::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo &) const
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
ProcessList::Info info = context.getProcessList().getInfo();
|
ProcessList::Info info = context.getProcessList().getInfo();
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
for (const auto & process : info)
|
for (const auto & process : info)
|
||||||
{
|
{
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
@ -103,9 +88,6 @@ BlockInputStreams StorageSystemProcesses::read(
|
|||||||
res_columns[i++]->insert(process.peak_memory_usage);
|
res_columns[i++]->insert(process.peak_memory_usage);
|
||||||
res_columns[i++]->insert(process.query);
|
res_columns[i++]->insert(process.query);
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -12,25 +12,17 @@ class Context;
|
|||||||
|
|
||||||
/** Implements `processes` system table, which allows you to get information about the queries that are currently executing.
|
/** Implements `processes` system table, which allows you to get information about the queries that are currently executing.
|
||||||
*/
|
*/
|
||||||
class StorageSystemProcesses : public ext::shared_ptr_helper<StorageSystemProcesses>, public IStorage
|
class StorageSystemProcesses : public ext::shared_ptr_helper<StorageSystemProcesses>, public IStorageSystemOneBlock<StorageSystemProcesses>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemProcesses"; }
|
std::string getName() const override { return "SystemProcesses"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemProcesses(const std::string & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
#include <DataTypes/DataTypesNumber.h>
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
#include <DataTypes/DataTypeDateTime.h>
|
#include <DataTypes/DataTypeDateTime.h>
|
||||||
#include <DataTypes/DataTypeArray.h>
|
#include <DataTypes/DataTypeArray.h>
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
#include <Storages/System/StorageSystemReplicationQueue.h>
|
#include <Storages/System/StorageSystemReplicationQueue.h>
|
||||||
#include <Storages/StorageReplicatedMergeTree.h>
|
#include <Storages/StorageReplicatedMergeTree.h>
|
||||||
#include <Storages/VirtualColumnUtils.h>
|
#include <Storages/VirtualColumnUtils.h>
|
||||||
@ -17,10 +16,10 @@ namespace DB
|
|||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
StorageSystemReplicationQueue::StorageSystemReplicationQueue(const std::string & name_)
|
|
||||||
: name(name_)
|
NamesAndTypesList StorageSystemReplicationQueue::getNamesAndTypes()
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
/// Table properties.
|
/// Table properties.
|
||||||
{ "database", std::make_shared<DataTypeString>() },
|
{ "database", std::make_shared<DataTypeString>() },
|
||||||
{ "table", std::make_shared<DataTypeString>() },
|
{ "table", std::make_shared<DataTypeString>() },
|
||||||
@ -43,21 +42,12 @@ StorageSystemReplicationQueue::StorageSystemReplicationQueue(const std::string &
|
|||||||
{ "num_postponed", std::make_shared<DataTypeUInt32>() },
|
{ "num_postponed", std::make_shared<DataTypeUInt32>() },
|
||||||
{ "postpone_reason", std::make_shared<DataTypeString>() },
|
{ "postpone_reason", std::make_shared<DataTypeString>() },
|
||||||
{ "last_postpone_time", std::make_shared<DataTypeDateTime>() },
|
{ "last_postpone_time", std::make_shared<DataTypeDateTime>() },
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BlockInputStreams StorageSystemReplicationQueue::read(
|
void StorageSystemReplicationQueue::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
std::map<String, std::map<String, StoragePtr>> replicated_tables;
|
std::map<String, std::map<String, StoragePtr>> replicated_tables;
|
||||||
for (const auto & db : context.getDatabases())
|
for (const auto & db : context.getDatabases())
|
||||||
for (auto iterator = db.second->getIterator(context); iterator->isValid(); iterator->next())
|
for (auto iterator = db.second->getIterator(context); iterator->isValid(); iterator->next())
|
||||||
@ -90,7 +80,7 @@ BlockInputStreams StorageSystemReplicationQueue::read(
|
|||||||
VirtualColumnUtils::filterBlockWithQuery(query_info.query, filtered_block, context);
|
VirtualColumnUtils::filterBlockWithQuery(query_info.query, filtered_block, context);
|
||||||
|
|
||||||
if (!filtered_block.rows())
|
if (!filtered_block.rows())
|
||||||
return BlockInputStreams();
|
return;
|
||||||
|
|
||||||
col_database_to_filter = filtered_block.getByName("database").column;
|
col_database_to_filter = filtered_block.getByName("database").column;
|
||||||
col_table_to_filter = filtered_block.getByName("table").column;
|
col_table_to_filter = filtered_block.getByName("table").column;
|
||||||
@ -99,8 +89,6 @@ BlockInputStreams StorageSystemReplicationQueue::read(
|
|||||||
StorageReplicatedMergeTree::LogEntriesData queue;
|
StorageReplicatedMergeTree::LogEntriesData queue;
|
||||||
String replica_name;
|
String replica_name;
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
for (size_t i = 0, tables_size = col_database_to_filter->size(); i < tables_size; ++i)
|
for (size_t i = 0, tables_size = col_database_to_filter->size(); i < tables_size; ++i)
|
||||||
{
|
{
|
||||||
String database = (*col_database_to_filter)[i].safeGet<const String &>();
|
String database = (*col_database_to_filter)[i].safeGet<const String &>();
|
||||||
@ -139,9 +127,6 @@ BlockInputStreams StorageSystemReplicationQueue::read(
|
|||||||
res_columns[col_num++]->insert(UInt64(entry.last_postpone_time));
|
res_columns[col_num++]->insert(UInt64(entry.last_postpone_time));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -12,25 +12,17 @@ class Context;
|
|||||||
|
|
||||||
/** Implements the `replication_queue` system table, which allows you to view the replication queues for the replicated tables.
|
/** Implements the `replication_queue` system table, which allows you to view the replication queues for the replicated tables.
|
||||||
*/
|
*/
|
||||||
class StorageSystemReplicationQueue : public ext::shared_ptr_helper<StorageSystemReplicationQueue>, public IStorage
|
class StorageSystemReplicationQueue : public ext::shared_ptr_helper<StorageSystemReplicationQueue>, public IStorageSystemOneBlock<StorageSystemReplicationQueue>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemReplicationQueue"; }
|
std::string getName() const override { return "SystemReplicationQueue"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemReplicationQueue(const std::string & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <Columns/ColumnsNumber.h>
|
|
||||||
#include <DataTypes/DataTypeString.h>
|
#include <DataTypes/DataTypeString.h>
|
||||||
#include <DataTypes/DataTypesNumber.h>
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
#include <Interpreters/Context.h>
|
#include <Interpreters/Context.h>
|
||||||
#include <Storages/System/StorageSystemSettings.h>
|
#include <Storages/System/StorageSystemSettings.h>
|
||||||
|
|
||||||
@ -10,34 +7,20 @@
|
|||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
|
NamesAndTypesList StorageSystemSettings::getNamesAndTypes()
|
||||||
StorageSystemSettings::StorageSystemSettings(const std::string & name_)
|
|
||||||
: name(name_)
|
|
||||||
{
|
{
|
||||||
setColumns(ColumnsDescription({
|
return {
|
||||||
{ "name", std::make_shared<DataTypeString>() },
|
{"name", std::make_shared<DataTypeString>()},
|
||||||
{ "value", std::make_shared<DataTypeString>() },
|
{"value", std::make_shared<DataTypeString>()},
|
||||||
{ "changed", std::make_shared<DataTypeUInt8>() },
|
{"changed", std::make_shared<DataTypeUInt8>()},
|
||||||
{ "description", std::make_shared<DataTypeString>() },
|
{"description", std::make_shared<DataTypeString>()},
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StorageSystemSettings::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo &) const
|
||||||
BlockInputStreams StorageSystemSettings::read(
|
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo &,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
const Settings & settings = context.getSettingsRef();
|
const Settings & settings = context.getSettingsRef();
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
#define ADD_SETTING(TYPE, NAME, DEFAULT, DESCRIPTION) \
|
#define ADD_SETTING(TYPE, NAME, DEFAULT, DESCRIPTION) \
|
||||||
res_columns[0]->insert(String(#NAME)); \
|
res_columns[0]->insert(String(#NAME)); \
|
||||||
res_columns[1]->insert(settings.NAME.toString()); \
|
res_columns[1]->insert(settings.NAME.toString()); \
|
||||||
@ -45,9 +28,6 @@ BlockInputStreams StorageSystemSettings::read(
|
|||||||
res_columns[3]->insert(String(DESCRIPTION));
|
res_columns[3]->insert(String(DESCRIPTION));
|
||||||
APPLY_FOR_SETTINGS(ADD_SETTING)
|
APPLY_FOR_SETTINGS(ADD_SETTING)
|
||||||
#undef ADD_SETTING
|
#undef ADD_SETTING
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -12,25 +12,17 @@ class Context;
|
|||||||
|
|
||||||
/** implements system table "settings", which allows to get information about the current settings.
|
/** implements system table "settings", which allows to get information about the current settings.
|
||||||
*/
|
*/
|
||||||
class StorageSystemSettings : public ext::shared_ptr_helper<StorageSystemSettings>, public IStorage
|
class StorageSystemSettings : public ext::shared_ptr_helper<StorageSystemSettings>, public IStorageSystemOneBlock<StorageSystemSettings>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemSettings"; }
|
std::string getName() const override { return "SystemSettings"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemSettings(const std::string & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,13 @@
|
|||||||
#include <TableFunctions/TableFunctionFactory.h>
|
#include <TableFunctions/TableFunctionFactory.h>
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
void StorageSystemTableFunctions::fillData(MutableColumns & res_columns) const
|
|
||||||
|
NamesAndTypesList StorageSystemTableFunctions::getNamesAndTypes()
|
||||||
|
{
|
||||||
|
return {{"name", std::make_shared<DataTypeString>()}};
|
||||||
|
}
|
||||||
|
|
||||||
|
void StorageSystemTableFunctions::fillData(MutableColumns & res_columns, const Context &, const SelectQueryInfo &) const
|
||||||
{
|
{
|
||||||
const auto & functions = TableFunctionFactory::instance().getAllTableFunctions();
|
const auto & functions = TableFunctionFactory::instance().getAllTableFunctions();
|
||||||
for (const auto & pair : functions)
|
for (const auto & pair : functions)
|
||||||
@ -11,4 +17,5 @@ void StorageSystemTableFunctions::fillData(MutableColumns & res_columns) const
|
|||||||
res_columns[0]->insert(pair.first);
|
res_columns[0]->insert(pair.first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,23 +5,25 @@
|
|||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
class StorageSystemTableFunctions : public ext::shared_ptr_helper<StorageSystemTableFunctions>,
|
class StorageSystemTableFunctions : public ext::shared_ptr_helper<StorageSystemTableFunctions>,
|
||||||
public IStorageSystemOneBlock<StorageSystemTableFunctions>
|
public IStorageSystemOneBlock<StorageSystemTableFunctions>
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
void fillData(MutableColumns & res_columns) const override;
|
|
||||||
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
|
||||||
|
|
||||||
std::string getName() const override
|
std::string getName() const override
|
||||||
{
|
{
|
||||||
return "SystemTableFunctions";
|
return "SystemTableFunctions";
|
||||||
}
|
}
|
||||||
|
|
||||||
static NamesAndTypesList getNamesAndTypes()
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
{
|
|
||||||
return {{"name", std::make_shared<DataTypeString>()}};
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
#include <Columns/ColumnString.h>
|
|
||||||
#include <Columns/ColumnsNumber.h>
|
|
||||||
#include <DataTypes/DataTypeString.h>
|
#include <DataTypes/DataTypeString.h>
|
||||||
#include <DataTypes/DataTypesNumber.h>
|
#include <DataTypes/DataTypesNumber.h>
|
||||||
#include <DataTypes/DataTypeDateTime.h>
|
#include <DataTypes/DataTypeDateTime.h>
|
||||||
#include <DataStreams/OneBlockInputStream.h>
|
|
||||||
#include <Storages/System/StorageSystemZooKeeper.h>
|
#include <Storages/System/StorageSystemZooKeeper.h>
|
||||||
#include <Parsers/ASTSelectQuery.h>
|
#include <Parsers/ASTSelectQuery.h>
|
||||||
#include <Parsers/ASTIdentifier.h>
|
#include <Parsers/ASTIdentifier.h>
|
||||||
@ -19,10 +16,8 @@ namespace DB
|
|||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
StorageSystemZooKeeper::StorageSystemZooKeeper(const std::string & name_)
|
NamesAndTypesList StorageSystemZooKeeper::getNamesAndTypes() {
|
||||||
: name(name_)
|
return {
|
||||||
{
|
|
||||||
setColumns(ColumnsDescription({
|
|
||||||
{ "name", std::make_shared<DataTypeString>() },
|
{ "name", std::make_shared<DataTypeString>() },
|
||||||
{ "value", std::make_shared<DataTypeString>() },
|
{ "value", std::make_shared<DataTypeString>() },
|
||||||
{ "czxid", std::make_shared<DataTypeInt64>() },
|
{ "czxid", std::make_shared<DataTypeInt64>() },
|
||||||
@ -37,7 +32,7 @@ StorageSystemZooKeeper::StorageSystemZooKeeper(const std::string & name_)
|
|||||||
{ "numChildren", std::make_shared<DataTypeInt32>() },
|
{ "numChildren", std::make_shared<DataTypeInt32>() },
|
||||||
{ "pzxid", std::make_shared<DataTypeInt64>() },
|
{ "pzxid", std::make_shared<DataTypeInt64>() },
|
||||||
{ "path", std::make_shared<DataTypeString>() },
|
{ "path", std::make_shared<DataTypeString>() },
|
||||||
}));
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -103,17 +98,8 @@ static String extractPath(const ASTPtr & query)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BlockInputStreams StorageSystemZooKeeper::read(
|
void StorageSystemZooKeeper::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
const size_t /*max_block_size*/,
|
|
||||||
const unsigned /*num_streams*/)
|
|
||||||
{
|
{
|
||||||
check(column_names);
|
|
||||||
processed_stage = QueryProcessingStage::FetchColumns;
|
|
||||||
|
|
||||||
String path = extractPath(query_info.query);
|
String path = extractPath(query_info.query);
|
||||||
if (path.empty())
|
if (path.empty())
|
||||||
throw Exception("SELECT from system.zookeeper table must contain condition like path = 'path' in WHERE clause.");
|
throw Exception("SELECT from system.zookeeper table must contain condition like path = 'path' in WHERE clause.");
|
||||||
@ -136,8 +122,6 @@ BlockInputStreams StorageSystemZooKeeper::read(
|
|||||||
for (const String & node : nodes)
|
for (const String & node : nodes)
|
||||||
futures.push_back(zookeeper->asyncTryGet(path_part + '/' + node));
|
futures.push_back(zookeeper->asyncTryGet(path_part + '/' + node));
|
||||||
|
|
||||||
MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();
|
|
||||||
|
|
||||||
for (size_t i = 0, size = nodes.size(); i < size; ++i)
|
for (size_t i = 0, size = nodes.size(); i < size; ++i)
|
||||||
{
|
{
|
||||||
auto res = futures[i].get();
|
auto res = futures[i].get();
|
||||||
@ -162,8 +146,6 @@ BlockInputStreams StorageSystemZooKeeper::read(
|
|||||||
res_columns[col_num++]->insert(Int64(stat.pzxid));
|
res_columns[col_num++]->insert(Int64(stat.pzxid));
|
||||||
res_columns[col_num++]->insert(path); /// This is the original path. In order to process the request, condition in WHERE should be triggered.
|
res_columns[col_num++]->insert(path); /// This is the original path. In order to process the request, condition in WHERE should be triggered.
|
||||||
}
|
}
|
||||||
|
|
||||||
return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ext/shared_ptr_helper.h>
|
#include <ext/shared_ptr_helper.h>
|
||||||
#include <Storages/IStorage.h>
|
#include <Storages/System/IStorageSystemOneBlock.h>
|
||||||
|
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -12,25 +12,17 @@ class Context;
|
|||||||
|
|
||||||
/** Implements `zookeeper` system table, which allows you to view the data in ZooKeeper for debugging purposes.
|
/** Implements `zookeeper` system table, which allows you to view the data in ZooKeeper for debugging purposes.
|
||||||
*/
|
*/
|
||||||
class StorageSystemZooKeeper : public ext::shared_ptr_helper<StorageSystemZooKeeper>, public IStorage
|
class StorageSystemZooKeeper : public ext::shared_ptr_helper<StorageSystemZooKeeper>, public IStorageSystemOneBlock<StorageSystemZooKeeper>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string getName() const override { return "SystemZooKeeper"; }
|
std::string getName() const override { return "SystemZooKeeper"; }
|
||||||
std::string getTableName() const override { return name; }
|
|
||||||
|
|
||||||
BlockInputStreams read(
|
static NamesAndTypesList getNamesAndTypes();
|
||||||
const Names & column_names,
|
|
||||||
const SelectQueryInfo & query_info,
|
|
||||||
const Context & context,
|
|
||||||
QueryProcessingStage::Enum & processed_stage,
|
|
||||||
size_t max_block_size,
|
|
||||||
unsigned num_streams) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::string name;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageSystemZooKeeper(const std::string & name_);
|
using IStorageSystemOneBlock::IStorageSystemOneBlock;
|
||||||
|
|
||||||
|
void fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo & query_info) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user