You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by sh...@apache.org on 2016/06/22 14:49:42 UTC
incubator-quickstep git commit: Pass the reference of
window_aggregation_expressions into ExpressionResolutionInfo to keep it
updated as resolving
Repository: incubator-quickstep
Updated Branches:
refs/heads/SQL-window-aggregation a540e82ec -> 9434e6c73
Pass the reference of window_aggregation_expressions into ExpressionResolutionInfo to keep it updated as resolving
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/9434e6c7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/9434e6c7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/9434e6c7
Branch: refs/heads/SQL-window-aggregation
Commit: 9434e6c730023d66728e59482259ee8da7df514c
Parents: a540e82
Author: shixuan-fan <sh...@apache.org>
Authored: Wed Jun 22 14:49:24 2016 +0000
Committer: shixuan-fan <sh...@apache.org>
Committed: Wed Jun 22 14:49:24 2016 +0000
----------------------------------------------------------------------
query_optimizer/resolver/Resolver.cpp | 22 +++++++++++++++-------
query_optimizer/resolver/Resolver.hpp | 4 ++++
2 files changed, 19 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/9434e6c7/query_optimizer/resolver/Resolver.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/Resolver.cpp b/query_optimizer/resolver/Resolver.cpp
index 1d594fd..a673ec1 100644
--- a/query_optimizer/resolver/Resolver.cpp
+++ b/query_optimizer/resolver/Resolver.cpp
@@ -165,9 +165,11 @@ struct Resolver::ExpressionResolutionInfo {
*/
ExpressionResolutionInfo(const NameResolver &name_resolver_in,
QueryAggregationInfo *query_aggregation_info_in,
+ std::vector<E::AliasPtr> *window_aggregate_expressions_in,
SelectListInfo *select_list_info_in)
: name_resolver(name_resolver_in),
query_aggregation_info(query_aggregation_info_in),
+ window_aggregate_expressions(window_aggregate_expressions_in),
select_list_info(select_list_info_in) {}
/**
@@ -181,6 +183,7 @@ struct Resolver::ExpressionResolutionInfo {
: name_resolver(parent.name_resolver),
not_allow_aggregate_here(parent.not_allow_aggregate_here),
query_aggregation_info(parent.query_aggregation_info),
+ window_aggregate_expressions(parent.window_aggregate_expressions),
select_list_info(parent.select_list_info) {}
/**
@@ -199,11 +202,12 @@ struct Resolver::ExpressionResolutionInfo {
// Empty if aggregations are allowed.
const std::string not_allow_aggregate_here;
- // Alias expressions that wraps window aggregate functions
- std::vector<E::AliasPtr> window_aggregate_expressions;
-
// Can be NULL if aggregations are not allowed.
QueryAggregationInfo *query_aggregation_info = nullptr;
+
+ // Alias expressions that wraps window aggregate functions.
+ std::vector<E::AliasPtr> *window_aggregate_expressions = nullptr;
+
// Can be NULL if alias references to SELECT-list expressions are not allowed.
SelectListInfo *select_list_info = nullptr;
// The first aggregate in the expression.
@@ -1047,6 +1051,7 @@ L::LogicalPtr Resolver::resolveSelect(
QueryAggregationInfo query_aggregation_info(
(select_query.group_by() != nullptr));
+ std::vector<E::AliasPtr> window_aggregate_expressions;
// Resolve SELECT-list clause.
std::vector<E::NamedExpressionPtr> select_list_expressions;
@@ -1057,6 +1062,7 @@ L::LogicalPtr Resolver::resolveSelect(
type_hints,
*name_resolver,
&query_aggregation_info,
+ &window_aggregate_expressions,
&select_list_expressions,
&has_aggregate_per_expression,
&has_window_aggregate_per_expression);
@@ -1114,7 +1120,7 @@ L::LogicalPtr Resolver::resolveSelect(
E::PredicatePtr having_predicate;
if (select_query.having() != nullptr) {
ExpressionResolutionInfo expr_resolution_info(
- *name_resolver, &query_aggregation_info, &select_list_info);
+ *name_resolver, &query_aggregation_info, &window_aggregate_expressions, &select_list_info);
having_predicate = resolvePredicate(
*select_query.having()->having_predicate(), &expr_resolution_info);
}
@@ -1128,7 +1134,7 @@ L::LogicalPtr Resolver::resolveSelect(
for (const ParseOrderByItem &order_by_item :
*select_query.order_by()->order_by_items()) {
ExpressionResolutionInfo expr_resolution_info(
- *name_resolver, &query_aggregation_info, &select_list_info);
+ *name_resolver, &query_aggregation_info, &window_aggregate_expressions, &select_list_info);
E::ScalarPtr order_by_scalar = resolveExpression(
*order_by_item.ordering_expression(),
nullptr, // No Type hint.
@@ -1848,7 +1854,8 @@ void Resolver::resolveSelectClause(
const std::vector<const Type*> *type_hints,
const NameResolver &name_resolver,
QueryAggregationInfo *query_aggregation_info,
- std::vector<expressions::NamedExpressionPtr> *project_expressions,
+ std::vector<E::AliasPtr> *window_aggregate_expressions,
+ std::vector<E::NamedExpressionPtr> *project_expressions,
std::vector<bool> *has_aggregate_per_expression,
std::vector<bool> *has_window_aggregate_per_expression) {
project_expressions->clear();
@@ -1879,6 +1886,7 @@ void Resolver::resolveSelectClause(
ExpressionResolutionInfo expr_resolution_info(
name_resolver,
query_aggregation_info,
+ window_aggregate_expressions,
nullptr /* select_list_info */);
const E::ScalarPtr project_scalar =
resolveExpression(*parse_project_expression,
@@ -2759,7 +2767,7 @@ E::ScalarPtr Resolver::resolveWindowAggregateFunction(
internal_alias,
"$window_aggregate" /* relation_name */);
- expression_resolution_info->window_aggregate_expressions.emplace_back(aggregate_alias);
+ expression_resolution_info->window_aggregate_expressions->emplace_back(aggregate_alias);
expression_resolution_info->parse_window_aggregate_expression = &parse_function_call;
return E::ToRef(aggregate_alias);
}
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/9434e6c7/query_optimizer/resolver/Resolver.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/Resolver.hpp b/query_optimizer/resolver/Resolver.hpp
index 7ecabf5..eee4d71 100644
--- a/query_optimizer/resolver/Resolver.hpp
+++ b/query_optimizer/resolver/Resolver.hpp
@@ -24,6 +24,7 @@
#include <vector>
#include "query_optimizer/expressions/AggregateFunction.hpp"
+#include "query_optimizer/expressions/Alias.hpp"
#include "query_optimizer/expressions/ExprId.hpp"
#include "query_optimizer/expressions/NamedExpression.hpp"
#include "query_optimizer/expressions/Predicate.hpp"
@@ -278,6 +279,8 @@ class Resolver {
* @param name_resolver NameResolver to resolve the relation/attribute names.
* @param query_aggregation_info Passed down to each expression to collects
* aggregate expressions.
+ * @param window_aggregate_expressions Passed down to each expressions to
+ * collects window aggregate expressions.
* @param project_expressions Converted SELECT-list expressions.
* @param has_aggregate_per_expression For each SELECT-list expression,
* indicates whether it contains
@@ -292,6 +295,7 @@ class Resolver {
const std::vector<const Type*> *type_hints,
const NameResolver &name_resolver,
QueryAggregationInfo *query_aggregation_info,
+ std::vector<expressions::AliasPtr> *window_aggregate_expressions,
std::vector<expressions::NamedExpressionPtr> *project_expressions,
std::vector<bool> *has_aggregate_per_expression,
std::vector<bool> *has_window_aggregate_per_expression);