mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
Fixed tests
This commit is contained in:
parent
8ac7f4423b
commit
3862dd96fe
@ -53,9 +53,31 @@ IQueryTreeNode::IQueryTreeNode(size_t children_size)
|
||||
children.resize(children_size);
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
using NodePair = std::pair<const IQueryTreeNode *, const IQueryTreeNode *>;
|
||||
|
||||
struct NodePairHash
|
||||
{
|
||||
size_t operator()(const NodePair & node_pair) const
|
||||
{
|
||||
auto hash = std::hash<const IQueryTreeNode *>();
|
||||
|
||||
size_t result = 0;
|
||||
boost::hash_combine(result, hash(node_pair.first));
|
||||
boost::hash_combine(result, hash(node_pair.second));
|
||||
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
bool IQueryTreeNode::isEqual(const IQueryTreeNode & rhs) const
|
||||
{
|
||||
std::vector<std::pair<const IQueryTreeNode *, const IQueryTreeNode *>> nodes_to_process;
|
||||
std::vector<NodePair> nodes_to_process;
|
||||
std::unordered_set<NodePair, NodePairHash> equals_pairs;
|
||||
|
||||
nodes_to_process.emplace_back(this, &rhs);
|
||||
|
||||
@ -67,6 +89,9 @@ bool IQueryTreeNode::isEqual(const IQueryTreeNode & rhs) const
|
||||
const auto * lhs_node_to_compare = nodes_to_compare.first;
|
||||
const auto * rhs_node_to_compare = nodes_to_compare.second;
|
||||
|
||||
if (equals_pairs.contains(std::make_pair(lhs_node_to_compare, rhs_node_to_compare)))
|
||||
continue;
|
||||
|
||||
assert(lhs_node_to_compare);
|
||||
assert(rhs_node_to_compare);
|
||||
|
||||
@ -121,6 +146,8 @@ bool IQueryTreeNode::isEqual(const IQueryTreeNode & rhs) const
|
||||
|
||||
nodes_to_process.emplace_back(lhs_strong_pointer.get(), rhs_strong_pointer.get());
|
||||
}
|
||||
|
||||
equals_pairs.emplace(lhs_node_to_compare, rhs_node_to_compare);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -208,7 +208,7 @@ std::optional<AggregationAnalysisResult> analyzeAggregation(QueryTreeNodePtr & q
|
||||
return aggregation_analysis_result;
|
||||
}
|
||||
|
||||
/** Construct aggregation analysis result if query tree has window functions.
|
||||
/** Construct window analysis result if query tree has window functions.
|
||||
* Actions before window functions are added into actions chain, if result is not null optional.
|
||||
*/
|
||||
std::optional<WindowAnalysisResult> analyzeWindow(QueryTreeNodePtr & query_tree,
|
||||
@ -323,8 +323,8 @@ ProjectionAnalysisResult analyzeProjection(const QueryNode & query_node,
|
||||
if (projection_columns_size != projection_outputs_size)
|
||||
throw Exception(ErrorCodes::LOGICAL_ERROR,
|
||||
"QueryTree projection nodes size mismatch. Expected {}. Actual {}",
|
||||
projection_outputs_size,
|
||||
projection_columns_size);
|
||||
projection_columns_size,
|
||||
projection_outputs_size);
|
||||
|
||||
for (size_t i = 0; i < projection_outputs_size; ++i)
|
||||
{
|
||||
@ -487,7 +487,7 @@ PlannerExpressionsAnalysisResult buildExpressionAnalysisResult(QueryTreeNodePtr
|
||||
|
||||
if (having_action_step_index_optional && having_analysis_result_optional)
|
||||
{
|
||||
auto & having_analysis_result = *where_analysis_result_optional;
|
||||
auto & having_analysis_result = *having_analysis_result_optional;
|
||||
auto & having_actions_chain_node = actions_chain.at(*having_action_step_index_optional);
|
||||
having_analysis_result.remove_filter_column = !having_actions_chain_node->getChildRequiredOutputColumnsNames().contains(having_analysis_result.filter_column_name);
|
||||
expressions_analysis_result.addHaving(std::move(having_analysis_result));
|
||||
|
Loading…
Reference in New Issue
Block a user