From 1e18ff37c6e98d18b894259eed9f20b6d3eb3ee9 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Sat, 31 Jan 2015 00:19:35 +0300 Subject: [PATCH] dbms: fixed error with JOIN [#METR-14847]. --- dbms/include/DB/Interpreters/ExpressionAnalyzer.h | 2 +- dbms/src/Interpreters/ExpressionActions.cpp | 9 ++++++++- dbms/src/Interpreters/ExpressionAnalyzer.cpp | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/dbms/include/DB/Interpreters/ExpressionAnalyzer.h b/dbms/include/DB/Interpreters/ExpressionAnalyzer.h index 0f49c5f2339..aaca96438a5 100644 --- a/dbms/include/DB/Interpreters/ExpressionAnalyzer.h +++ b/dbms/include/DB/Interpreters/ExpressionAnalyzer.h @@ -147,7 +147,7 @@ private: */ NamesAndTypesList columns; - /// Столбцы после ARRAY JOIN и/или агрегации. + /// Столбцы после ARRAY JOIN, JOIN и/или агрегации. NamesAndTypesList aggregated_columns; /// Таблица, из которой делается запрос. diff --git a/dbms/src/Interpreters/ExpressionActions.cpp b/dbms/src/Interpreters/ExpressionActions.cpp index e218c7dff30..295e0e75fe1 100644 --- a/dbms/src/Interpreters/ExpressionActions.cpp +++ b/dbms/src/Interpreters/ExpressionActions.cpp @@ -85,6 +85,13 @@ void ExpressionAction::prepare(Block & sample_block) { // std::cerr << "preparing: " << toString() << std::endl; + /** Константные выражения следует вычислить, и положить результат в sample_block. + * Для неконстантных столбцов, следует в качестве column в sample_block положить nullptr. + * + * Тот факт, что только для константных выражений column != nullptr, + * может использоваться в дальнейшем при оптимизации запроса. + */ + switch (type) { case APPLY_FUNCTION: @@ -156,7 +163,7 @@ void ExpressionAction::prepare(Block & sample_block) case JOIN: { for (const auto & col : columns_added_by_join) - sample_block.insert(ColumnWithNameAndType(col.type->createColumn(), col.type, col.name)); + sample_block.insert(ColumnWithNameAndType(nullptr, col.type, col.name)); break; } diff --git a/dbms/src/Interpreters/ExpressionAnalyzer.cpp b/dbms/src/Interpreters/ExpressionAnalyzer.cpp index 68bbb27ec45..9ebb555f976 100644 --- a/dbms/src/Interpreters/ExpressionAnalyzer.cpp +++ b/dbms/src/Interpreters/ExpressionAnalyzer.cpp @@ -152,6 +152,7 @@ void ExpressionAnalyzer::analyzeAggregation() group_asts.pop_back(); i -= 1; + continue; }