Fixed tests

This commit is contained in:
Maksim Kita 2023-07-31 19:39:11 +03:00
parent 4109283d05
commit d4b4763917
2 changed files with 28 additions and 9 deletions

View File

@ -42,6 +42,7 @@
#include <Storages/ColumnsDescription.h> #include <Storages/ColumnsDescription.h>
#include <Storages/SelectQueryInfo.h> #include <Storages/SelectQueryInfo.h>
#include <Storages/StorageDummy.h> #include <Storages/StorageDummy.h>
#include <Storages/StorageDistributed.h>
#include <Storages/IStorage.h> #include <Storages/IStorage.h>
#include <Analyzer/Utils.h> #include <Analyzer/Utils.h>
@ -159,14 +160,16 @@ void collectFiltersForAnalysis(const QueryTreeNodePtr & query_tree, const Planne
for (auto & [table_expression, table_expression_data] : planner_context->getTableExpressionNodeToData()) for (auto & [table_expression, table_expression_data] : planner_context->getTableExpressionNodeToData())
{ {
auto * table_node = table_expression->as<TableNode>(); auto * table_node = table_expression->as<TableNode>();
if (!table_node) auto * table_function_node = table_expression->as<TableFunctionNode>();
if (!table_node && !table_function_node)
continue; continue;
if (typeid_cast<const StorageDummy *>(table_node->getStorage().get())) const auto & storage = table_node ? table_node->getStorage() : table_function_node->getStorage();
continue; if (typeid_cast<const StorageDistributed *>(storage.get()))
{
collect_filters = true; collect_filters = true;
break; break;
}
} }
if (!collect_filters) if (!collect_filters)

View File

@ -376,14 +376,30 @@ QueryTreeNodePtr replaceTableExpressionsWithDummyTables(const QueryTreeNodePtr &
if (table_node || table_function_node) if (table_node || table_function_node)
{ {
const auto & storage_snapshot = table_node ? table_node->getStorageSnapshot() : table_function_node->getStorageSnapshot(); const auto & storage_snapshot = table_node ? table_node->getStorageSnapshot() : table_function_node->getStorageSnapshot();
auto get_column_options = GetColumnsOptions(GetColumnsOptions::All).withExtendedObjects().withVirtuals();
if (storage_snapshot->storage.supportsSubcolumns())
get_column_options.withSubcolumns();
storage_dummy storage_dummy
= std::make_shared<StorageDummy>(storage_snapshot->storage.getStorageID(), storage_snapshot->metadata->getColumns()); = std::make_shared<StorageDummy>(storage_snapshot->storage.getStorageID(), ColumnsDescription(storage_snapshot->getColumns(get_column_options)));
} }
else if (subquery_node || union_node) else if (subquery_node || union_node)
{ {
const auto & projection_columns const auto & subquery_projection_columns
= subquery_node ? subquery_node->getProjectionColumns() : union_node->computeProjectionColumns(); = subquery_node ? subquery_node->getProjectionColumns() : union_node->computeProjectionColumns();
storage_dummy = std::make_shared<StorageDummy>(StorageID{"dummy", "subquery_" + std::to_string(subquery_index)}, ColumnsDescription(projection_columns));
NameSet unique_column_names;
NamesAndTypes storage_dummy_columns;
storage_dummy_columns.reserve(subquery_projection_columns.size());
for (const auto & projection_column : subquery_projection_columns)
{
auto [_, inserted] = unique_column_names.insert(projection_column.name);
if (inserted)
storage_dummy_columns.emplace_back(projection_column);
}
storage_dummy = std::make_shared<StorageDummy>(StorageID{"dummy", "subquery_" + std::to_string(subquery_index)}, ColumnsDescription(storage_dummy_columns));
++subquery_index; ++subquery_index;
} }