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/23 21:03:14 UTC
incubator-quickstep git commit: fixed cpplint issue
Repository: incubator-quickstep
Updated Branches:
refs/heads/SQL-window-aggregation 5aa705835 -> 0210099e0
fixed cpplint issue
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/0210099e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/0210099e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/0210099e
Branch: refs/heads/SQL-window-aggregation
Commit: 0210099e0655813311a973581f70cb69886320d9
Parents: 5aa7058
Author: shixuan-fan <sh...@apache.org>
Authored: Thu Jun 23 21:03:02 2016 +0000
Committer: shixuan-fan <sh...@apache.org>
Committed: Thu Jun 23 21:03:02 2016 +0000
----------------------------------------------------------------------
query_optimizer/expressions/CMakeLists.txt | 2 +-
query_optimizer/expressions/PatternMatcher.hpp | 3 ++
.../expressions/WindowAggregateFunction.cpp | 4 +-
.../expressions/WindowAggregateFunction.hpp | 4 +-
query_optimizer/logical/PatternMatcher.hpp | 2 +
query_optimizer/logical/WindowAggregate.cpp | 1 -
query_optimizer/resolver/Resolver.cpp | 51 ++++++++++----------
7 files changed, 36 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0210099e/query_optimizer/expressions/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_optimizer/expressions/CMakeLists.txt b/query_optimizer/expressions/CMakeLists.txt
index cde56b2..08d7df5 100644
--- a/query_optimizer/expressions/CMakeLists.txt
+++ b/query_optimizer/expressions/CMakeLists.txt
@@ -345,4 +345,4 @@ target_link_libraries(quickstep_queryoptimizer_expressions
quickstep_queryoptimizer_expressions_SimpleCase
quickstep_queryoptimizer_expressions_SubqueryExpression
quickstep_queryoptimizer_expressions_UnaryExpression
- quickstep_queryoptimizer_expressions_WindowAggregate)
+ quickstep_queryoptimizer_expressions_WindowAggregateFunction)
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0210099e/query_optimizer/expressions/PatternMatcher.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/expressions/PatternMatcher.hpp b/query_optimizer/expressions/PatternMatcher.hpp
index 87bc52a..2cc91d6 100644
--- a/query_optimizer/expressions/PatternMatcher.hpp
+++ b/query_optimizer/expressions/PatternMatcher.hpp
@@ -52,6 +52,7 @@ class Scalar;
class ScalarLiteral;
class Sum;
class UnaryExpression;
+class WindowAggregateFunction;
/** \addtogroup OptimizerExpressions
* @{
@@ -155,6 +156,8 @@ using SomeScalar = SomeExpressionNode<Scalar,
ExpressionType::kUnaryExpression>;
using SomeScalarLiteral = SomeExpressionNode<ScalarLiteral, ExpressionType::kScalarLiteral>;
using SomeUnaryExpression = SomeExpressionNode<UnaryExpression, ExpressionType::kUnaryExpression>;
+using SomeWindowAggregateFunction = SomeExpressionNode<WindowAggregateFunction,
+ ExpressionType::kWindowAggregateFunction>;
using SomeAggregateFunction = SomeExpressionNode<AggregateFunction,
ExpressionType::kAggregateFunction>;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0210099e/query_optimizer/expressions/WindowAggregateFunction.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/expressions/WindowAggregateFunction.cpp b/query_optimizer/expressions/WindowAggregateFunction.cpp
index 39b5abf..5cab5d6 100644
--- a/query_optimizer/expressions/WindowAggregateFunction.cpp
+++ b/query_optimizer/expressions/WindowAggregateFunction.cpp
@@ -111,7 +111,7 @@ std::vector<AttributeReferencePtr> WindowAggregateFunction::getReferencedAttribu
referenced_attributes.insert(referenced_attributes.end(),
window_info_.order_by_attributes.begin(),
window_info_.order_by_attributes.end());
-
+
return referenced_attributes;
}
@@ -171,7 +171,7 @@ void WindowAggregateFunction::getFieldStringItems(
if (window_info_.frame_info != nullptr) {
const WindowFrameInfo *frame_info = window_info_.frame_info;
-
+
inline_field_names->push_back("frame_mode");
inline_field_values->push_back(frame_info->is_row ? "row" : "range");
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0210099e/query_optimizer/expressions/WindowAggregateFunction.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/expressions/WindowAggregateFunction.hpp b/query_optimizer/expressions/WindowAggregateFunction.hpp
index 977f0b4..319dccd 100644
--- a/query_optimizer/expressions/WindowAggregateFunction.hpp
+++ b/query_optimizer/expressions/WindowAggregateFunction.hpp
@@ -60,7 +60,7 @@ struct WindowFrameInfo {
: is_row(is_row_in),
num_preceding(num_preceding_in),
num_following(num_following_in) {}
-
+
const bool is_row;
const int num_preceding;
const int num_following;
@@ -87,7 +87,7 @@ struct WindowInfo {
order_by_directions(order_by_directions_in),
nulls_first(nulls_first_in),
frame_info(frame_info_in) {}
-
+
const std::vector<AttributeReferencePtr> partition_by_attributes;
const std::vector<AttributeReferencePtr> order_by_attributes;
const std::vector<bool> order_by_directions;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0210099e/query_optimizer/logical/PatternMatcher.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/logical/PatternMatcher.hpp b/query_optimizer/logical/PatternMatcher.hpp
index ff8f3d0..de8609e 100644
--- a/query_optimizer/logical/PatternMatcher.hpp
+++ b/query_optimizer/logical/PatternMatcher.hpp
@@ -45,6 +45,7 @@ class Sort;
class TableReference;
class TopLevelPlan;
class UpdateTable;
+class WindowAggregate;
/** \addtogroup OptimizerLogical
* @{
@@ -130,6 +131,7 @@ using SomeSort = SomeLogicalNode<Sort, LogicalType::kSort>;
using SomeTableReference = SomeLogicalNode<TableReference, LogicalType::kTableReference>;
using SomeTopLevelPlan = SomeLogicalNode<TopLevelPlan, LogicalType::kTopLevelPlan>;
using SomeUpdateTable = SomeLogicalNode<UpdateTable, LogicalType::kUpdateTable>;
+using SomeWindowAggregate = SomeLogicalNode<WindowAggregate, LogicalType::kWindowAggregate>;
/** @} */
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0210099e/query_optimizer/logical/WindowAggregate.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/logical/WindowAggregate.cpp b/query_optimizer/logical/WindowAggregate.cpp
index 0eb634d..4dc787b 100644
--- a/query_optimizer/logical/WindowAggregate.cpp
+++ b/query_optimizer/logical/WindowAggregate.cpp
@@ -47,7 +47,6 @@ LogicalPtr WindowAggregate::copyWithNewChildren(
std::vector<E::AttributeReferencePtr> WindowAggregate::getOutputAttributes() const {
std::vector<E::AttributeReferencePtr> output_attributes(input_->getOutputAttributes());
output_attributes.push_back(E::ToRef(window_aggregate_expression_));
-
return output_attributes;
}
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0210099e/query_optimizer/resolver/Resolver.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/Resolver.cpp b/query_optimizer/resolver/Resolver.cpp
index bad818f..bcd0357 100644
--- a/query_optimizer/resolver/Resolver.cpp
+++ b/query_optimizer/resolver/Resolver.cpp
@@ -208,7 +208,7 @@ struct Resolver::ExpressionResolutionInfo {
// Alias expressions that wraps window aggregate functions.
WindowAggregationInfo *window_aggregation_info = 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.
@@ -1027,21 +1027,21 @@ L::LogicalPtr Resolver::resolveSelect(
THROW_SQL_ERROR_AT(window.name())
<< "Duplicate definition of window " << window.name()->value();
}
-
+
E::WindowInfo resolved_window = resolveWindow(window, *name_resolver);
L::LogicalPtr sorted_logical_plan = resolveSortInWindow(logical_plan,
resolved_window);
WindowPlan window_plan(resolved_window, sorted_logical_plan);
-
+
sorted_window_map.emplace(window.name()->value(), window_plan);
}
}
QueryAggregationInfo query_aggregation_info(
(select_query.group_by() != nullptr));
- WindowAggregationInfo window_aggregation_info(sorted_window_map);
-
+ WindowAggregationInfo window_aggregation_info(sorted_window_map);
+
// Resolve SELECT-list clause.
std::vector<E::NamedExpressionPtr> select_list_expressions;
std::vector<bool> has_aggregate_per_expression;
@@ -1061,16 +1061,19 @@ L::LogicalPtr Resolver::resolveSelect(
// Create window aggregate node if needed
for (E::AliasPtr alias : window_aggregation_info.window_aggregate_expressions) {
- E::WindowAggregateFunctionPtr window_aggregate_function
- = std::static_pointer_cast<const E::WindowAggregateFunction>(alias->expression());
+ E::WindowAggregateFunctionPtr window_aggregate_function;
+ if (!E::SomeWindowAggregateFunction::MatchesWithConditionalCast(alias->expression(),
+ &window_aggregate_function)) {
+ THROW_SQL_ERROR()
+ << "Unexpected expression in window aggregation function";
+ }
L::LogicalPtr sorted_logical_plan;
// Get the sorted logical plan
const std::string window_name = window_aggregate_function->window_name();
if (window_name != "") {
sorted_logical_plan = sorted_window_map.at(window_name).logical_plan;
- }
- else {
+ } else {
sorted_logical_plan = resolveSortInWindow(logical_plan,
window_aggregate_function->window_info());
}
@@ -1664,7 +1667,7 @@ E::WindowInfo Resolver::resolveWindow(const ParseWindow &parse_window,
*order_by_item.ordering_expression(),
nullptr, // No Type hint.
&expr_resolution_info);
-
+
if (order_by_scalar->isConstant()) {
THROW_SQL_ERROR_AT(&order_by_item)
<< "Constant expression not allowed in ORDER BY";
@@ -1862,19 +1865,19 @@ L::LogicalPtr Resolver::resolveSortInWindow(
sort_attributes.insert(sort_attributes.end(),
window_info.order_by_attributes.begin(),
window_info.order_by_attributes.end());
-
+
std::vector<bool> sort_directions(
window_info.partition_by_attributes.size(), true);
sort_directions.insert(sort_directions.end(),
window_info.order_by_directions.begin(),
window_info.order_by_directions.end());
-
+
std::vector<bool> sort_nulls_first(
window_info.partition_by_attributes.size(), false);
sort_nulls_first.insert(sort_nulls_first.end(),
window_info.nulls_first.begin(),
window_info.nulls_first.end());
-
+
L::LogicalPtr sorted_logical_plan =
L::Sort::Create(logical_plan,
sort_attributes,
@@ -1884,7 +1887,6 @@ L::LogicalPtr Resolver::resolveSortInWindow(
return sorted_logical_plan;
}
-
void Resolver::resolveSelectClause(
const ParseSelectionClause &parse_selection,
@@ -2684,9 +2686,9 @@ E::ScalarPtr Resolver::resolveWindowAggregateFunction(
THROW_SQL_ERROR_AT(&parse_function_call)
<< "Currently we only support single window aggregate in the query";
}
-
+
std::string function_name = ToLower(parse_function_call.name()->value());
-
+
// First check for the special case COUNT(*).
bool count_star = false;
if (parse_function_call.star() != nullptr) {
@@ -2711,9 +2713,9 @@ E::ScalarPtr Resolver::resolveWindowAggregateFunction(
resolveExpression(unresolved_argument,
nullptr, // No Type hint.
&expr_resolution_info));
-
+
// We don't allow aggregate or window aggregate nested in a window
- // aggregate function
+ // aggregate function.
if (expr_resolution_info.hasAggregate() &&
first_aggregate_function == nullptr) {
first_aggregate_function =
@@ -2787,23 +2789,22 @@ E::ScalarPtr Resolver::resolveWindowAggregateFunction(
std::string window_name = parse_function_call.window_name()->value();
std::unordered_map<std::string, WindowPlan>::const_iterator map_it
= window_map.find(window_name);
-
+
if (map_it == window_map.end()) {
THROW_SQL_ERROR_AT(parse_function_call.window_name())
<< "Undefined window " << window_name;
}
-
+
window_aggregate_function =
E::WindowAggregateFunction::Create(*window_aggregate,
resolved_arguments,
map_it->second.window_info,
parse_function_call.window_name()->value(),
parse_function_call.is_distinct());
- }
- else {
+ } else {
E::WindowInfo resolved_window = resolveWindow(*parse_function_call.window(),
expression_resolution_info->name_resolver);
-
+
window_aggregate_function =
E::WindowAggregateFunction::Create(*window_aggregate,
resolved_arguments,
@@ -2819,13 +2820,13 @@ E::ScalarPtr Resolver::resolveWindowAggregateFunction(
"" /* attribute_name */,
internal_alias,
"$window_aggregate" /* relation_name */);
-
+
expression_resolution_info->window_aggregation_info
->window_aggregate_expressions.emplace_back(aggregate_alias);
expression_resolution_info->parse_window_aggregate_expression = &parse_function_call;
return E::ToRef(aggregate_alias);
}
-
+
std::vector<E::PredicatePtr> Resolver::resolvePredicates(
const PtrList<ParsePredicate> &parse_predicates,
ExpressionResolutionInfo *expression_resolution_info) {