fix

fix
This commit is contained in:
feng lv 2020-11-11 03:45:06 +00:00
parent fec4080d42
commit f04bd0643d
3 changed files with 150 additions and 80 deletions

View File

@ -33,10 +33,8 @@ struct CustomizeASTSelectWithUnionQueryNormalize
{ {
if (auto * inner_union = ast_select->as<ASTSelectWithUnionQuery>()) if (auto * inner_union = ast_select->as<ASTSelectWithUnionQuery>())
{ {
/// We need flatten from last to first for (auto & child : inner_union->list_of_selects->children)
for (auto child = inner_union->list_of_selects->children.rbegin(); child != inner_union->list_of_selects->children.rend(); getSelectsFromUnionListNode(child, selects);
++child)
getSelectsFromUnionListNode(*child, selects);
return; return;
} }
@ -85,13 +83,13 @@ struct CustomizeASTSelectWithUnionQueryNormalize
auto distinct_list = std::make_shared<ASTSelectWithUnionQuery>(); auto distinct_list = std::make_shared<ASTSelectWithUnionQuery>();
distinct_list->list_of_selects = std::make_shared<ASTExpressionList>(); distinct_list->list_of_selects = std::make_shared<ASTExpressionList>();
distinct_list->children.push_back(distinct_list->list_of_selects); distinct_list->children.push_back(distinct_list->list_of_selects);
for (int j = i + 1; j >= 0; j--)
for (int j = 0; j <= i + 1; ++j)
{ {
getSelectsFromUnionListNode(select_list[j], distinct_list->list_of_selects->children); getSelectsFromUnionListNode(select_list[j], distinct_list->list_of_selects->children);
} }
distinct_list->union_mode = ASTSelectWithUnionQuery::Mode::DISTINCT; distinct_list->union_mode = ASTSelectWithUnionQuery::Mode::DISTINCT;
// Reverse children list
std::reverse(distinct_list->list_of_selects->children.begin(), distinct_list->list_of_selects->children.end());
distinct_list->is_normalized = true; distinct_list->is_normalized = true;
selects.push_back(std::move(distinct_list)); selects.push_back(std::move(distinct_list));
break; break;

View File

@ -38,7 +38,7 @@ bool ParserSelectWithUnionQuery::parseImpl(Pos & pos, ASTPtr & node, Expected &
auto select_with_union_query = std::make_shared<ASTSelectWithUnionQuery>(); auto select_with_union_query = std::make_shared<ASTSelectWithUnionQuery>();
node = select_with_union_query; node = select_with_union_query;
select_with_union_query->list_of_selects = list_node; //std::make_shared<ASTExpressionList>(); select_with_union_query->list_of_selects = list_node;
select_with_union_query->children.push_back(select_with_union_query->list_of_selects); select_with_union_query->children.push_back(select_with_union_query->list_of_selects);
select_with_union_query->list_of_modes = parser.getUnionModes(); select_with_union_query->list_of_modes = parser.getUnionModes();

View File

@ -1,252 +1,324 @@
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Distinct Distinct
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Union Union
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)
Expression (Projection) Expression (Projection)
Expression (Before ORDER BY and SELECT) Expression (Before ORDER BY and SELECT)
ReadFromStorage (Read from SystemOne) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ReadFromStorage (SystemOne)