Better getVirtuals method

This commit is contained in:
alesapin 2020-06-17 17:37:21 +03:00
parent 33c27de54d
commit ef8781cce7
4 changed files with 6 additions and 6 deletions

View File

@ -38,10 +38,10 @@ const ColumnsDescription & IStorage::getColumns() const
}
bool IStorage::isVirtualColumn(const String & column_name) const
bool IStorage::isVirtualColumn(const String & column_name, const StorageMetadataPtr & metadata_snapshot) const
{
/// Virtual column maybe overriden by real column
return !getColumns().has(column_name) && getVirtuals().contains(column_name);
return !metadata_snapshot->getColumns().has(column_name) && getVirtuals().contains(column_name);
}
RWLockImpl::LockHolder IStorage::tryLockTimed(

View File

@ -159,7 +159,7 @@ protected:
/// Returns whether the column is virtual - by default all columns are real.
/// Initially reserved virtual column name may be shadowed by real column.
bool isVirtualColumn(const String & column_name) const;
bool isVirtualColumn(const String & column_name, const StorageMetadataPtr & metadata_snapshot) const;
private:

View File

@ -464,7 +464,7 @@ QueryProcessingStage::Enum StorageDistributed::getQueryProcessingStage(const Con
Pipes StorageDistributed::read(
const Names & column_names,
const StorageMetadataPtr & /*metadata_snapshot*/,
const StorageMetadataPtr & metadata_snapshot,
const SelectQueryInfo & query_info,
const Context & context,
QueryProcessingStage::Enum processed_stage,
@ -497,7 +497,7 @@ Pipes StorageDistributed::read(
const Scalars & scalars = context.hasQueryContext() ? context.getQueryContext().getScalars() : Scalars{};
bool has_virtual_shard_num_column = std::find(column_names.begin(), column_names.end(), "_shard_num") != column_names.end();
if (has_virtual_shard_num_column && !isVirtualColumn("_shard_num"))
if (has_virtual_shard_num_column && !isVirtualColumn("_shard_num", metadata_snapshot))
has_virtual_shard_num_column = false;
ClusterProxy::SelectStreamFactory select_stream_factory = remote_table_function_ptr

View File

@ -146,7 +146,7 @@ Pipes StorageMerge::read(
for (const auto & column_name : column_names)
{
if (column_name == "_table" && isVirtualColumn(column_name))
if (column_name == "_table" && isVirtualColumn(column_name, metadata_snapshot))
has_table_virtual_column = true;
else
real_column_names.push_back(column_name);