Merge pull request #10459 from ClickHouse/refactor_istorage

Remove virtuals from IStorage as separate column
This commit is contained in:
alesapin 2020-04-24 11:42:04 +03:00 committed by GitHub
commit a2cb67c542
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 6 additions and 11 deletions

View File

@ -31,7 +31,7 @@ namespace ErrorCodes
extern const int DEADLOCK_AVOIDED; extern const int DEADLOCK_AVOIDED;
} }
IStorage::IStorage(StorageID storage_id_, ColumnsDescription virtuals_) : storage_id(std::move(storage_id_)), virtuals(std::move(virtuals_)) IStorage::IStorage(StorageID storage_id_, ColumnsDescription virtuals_) : storage_id(std::move(storage_id_)), columns(std::move(virtuals_))
{ {
} }
@ -40,11 +40,6 @@ const ColumnsDescription & IStorage::getColumns() const
return columns; return columns;
} }
const ColumnsDescription & IStorage::getVirtuals() const
{
return virtuals;
}
const IndicesDescription & IStorage::getIndices() const const IndicesDescription & IStorage::getIndices() const
{ {
return indices; return indices;
@ -296,9 +291,11 @@ void IStorage::setColumns(ColumnsDescription columns_)
{ {
if (columns_.getOrdinary().empty()) if (columns_.getOrdinary().empty())
throw Exception("Empty list of columns passed", ErrorCodes::EMPTY_LIST_OF_COLUMNS_PASSED); throw Exception("Empty list of columns passed", ErrorCodes::EMPTY_LIST_OF_COLUMNS_PASSED);
ColumnsDescription old_virtuals(columns.getVirtuals(), true);
columns = std::move(columns_); columns = std::move(columns_);
for (const auto & column : virtuals) for (const auto & column : old_virtuals)
{ {
if (!columns.has(column.name)) if (!columns.has(column.name))
columns.add(column); columns.add(column);

View File

@ -144,7 +144,6 @@ public:
public: /// thread-unsafe part. lockStructure must be acquired public: /// thread-unsafe part. lockStructure must be acquired
virtual const ColumnsDescription & getColumns() const; /// returns combined set of columns virtual const ColumnsDescription & getColumns() const; /// returns combined set of columns
virtual void setColumns(ColumnsDescription columns_); /// sets only real columns, possibly overwrites virtual ones. virtual void setColumns(ColumnsDescription columns_); /// sets only real columns, possibly overwrites virtual ones.
const ColumnsDescription & getVirtuals() const;
const IndicesDescription & getIndices() const; const IndicesDescription & getIndices() const;
const ConstraintsDescription & getConstraints() const; const ConstraintsDescription & getConstraints() const;
@ -184,14 +183,13 @@ protected: /// still thread-unsafe part.
/// Returns whether the column is virtual - by default all columns are real. /// Returns whether the column is virtual - by default all columns are real.
/// Initially reserved virtual column name may be shadowed by real column. /// Initially reserved virtual column name may be shadowed by real column.
virtual bool isVirtualColumn(const String & column_name) const; bool isVirtualColumn(const String & column_name) const;
private: private:
StorageID storage_id; StorageID storage_id;
mutable std::mutex id_mutex; mutable std::mutex id_mutex;
ColumnsDescription columns; /// combined real and virtual columns ColumnsDescription columns; /// combined real and virtual columns
const ColumnsDescription virtuals = {};
IndicesDescription indices; IndicesDescription indices;
ConstraintsDescription constraints; ConstraintsDescription constraints;

View File

@ -58,7 +58,7 @@ public:
protected: protected:
StorageFromMergeTreeDataPart(const MergeTreeData::DataPartPtr & part_) StorageFromMergeTreeDataPart(const MergeTreeData::DataPartPtr & part_)
: IStorage(getIDFromPart(part_), part_->storage.getVirtuals()) : IStorage(getIDFromPart(part_), ColumnsDescription(part_->storage.getColumns().getVirtuals(), true))
, part(part_) , part(part_)
{ {
setColumns(part_->storage.getColumns()); setColumns(part_->storage.getColumns());