ClickHouse/dbms/src/Storages/ColumnsDescription.h

94 lines
3.3 KiB
C++
Raw Normal View History

#pragma once
#include <Core/NamesAndTypes.h>
#include <Core/Names.h>
#include <Storages/ColumnDefault.h>
#include <Core/Block.h>
2018-10-11 02:57:48 +00:00
#include <Storages/ColumnCodec.h>
#include <optional>
namespace DB
{
struct ColumnDescription
{
String name;
DataTypePtr type;
ColumnDefault default_desc;
String comment;
CompressionCodecPtr codec;
ASTPtr ttl;
ColumnDescription() = default;
ColumnDescription(String name_, DataTypePtr type_) : name(std::move(name_)), type(std::move(type_)) {}
bool operator==(const ColumnDescription & other) const;
bool operator!=(const ColumnDescription & other) const { return !(*this == other); }
void writeText(WriteBuffer & buf) const;
void readText(ReadBuffer & buf);
};
2018-11-12 15:45:35 +00:00
2019-03-15 18:52:45 +00:00
class ColumnsDescription
{
public:
ColumnsDescription() = default;
explicit ColumnsDescription(NamesAndTypesList ordinary_);
2019-03-15 18:52:45 +00:00
ColumnsDescription(const ColumnsDescription & other);
ColumnsDescription & operator=(const ColumnsDescription & other);
ColumnsDescription(ColumnsDescription &&) noexcept = default;
ColumnsDescription & operator=(ColumnsDescription &&) noexcept = default;
/// `after_column` can be a Nested column name;
void add(ColumnDescription column, const String & after_column = String());
/// `column_name` can be a Nested column name;
void remove(const String & column_name);
void flattenNested(); /// TODO: remove, insert already flattened Nested columns.
bool operator==(const ColumnsDescription & other) const { return columns == other.columns; }
bool operator!=(const ColumnsDescription & other) const { return !(*this == other); }
std::list<ColumnDescription>::const_iterator begin() const { return columns.begin(); }
std::list<ColumnDescription>::const_iterator end() const { return columns.end(); }
NamesAndTypesList getOrdinary() const;
NamesAndTypesList getMaterialized() const;
NamesAndTypesList getAliases() const;
/// ordinary + materialized + aliases.
NamesAndTypesList getAll() const;
using ColumnTTLs = std::unordered_map<String, ASTPtr>;
ColumnTTLs getColumnTTLs() const;
bool has(const String & column_name) const;
bool hasNested(const String & column_name) const;
ColumnDescription & get(const String & column_name);
const ColumnDescription & get(const String & column_name) const;
/// ordinary + materialized.
NamesAndTypesList getAllPhysical() const;
Names getNamesOfPhysical() const;
2018-03-13 15:00:28 +00:00
bool hasPhysical(const String & column_name) const;
NameAndTypePair getPhysical(const String & column_name) const;
ColumnDefaults getDefaults() const; /// TODO: remove
bool hasDefault(const String & column_name) const;
std::optional<ColumnDefault> getDefault(const String & column_name) const;
2018-12-21 12:17:30 +00:00
CompressionCodecPtr getCodecOrDefault(const String & column_name, CompressionCodecPtr default_codec) const;
CompressionCodecPtr getCodecOrDefault(const String & column_name) const;
String toString() const;
static ColumnsDescription parse(const String & str);
2018-10-11 02:57:48 +00:00
static const ColumnsDescription * loadFromContext(const Context & context, const String & db, const String & table);
2019-03-15 18:52:45 +00:00
private:
std::list<ColumnDescription> columns;
std::unordered_map<String, std::list<ColumnDescription>::iterator> name_to_column;
};
}