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 16:01:43 UTC
incubator-quickstep git commit: Formed logical plan. A window
aggregate function could form a logical plan now. It will be intercepted by
the stratagy in physical plan generator.
Repository: incubator-quickstep
Updated Branches:
refs/heads/SQL-window-aggregation 9ac2fb0d7 -> 160761c82
Formed logical plan.
A window aggregate function could form a logical plan now.
It will be intercepted by the stratagy in physical plan generator.
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/160761c8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/160761c8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/160761c8
Branch: refs/heads/SQL-window-aggregation
Commit: 160761c82407d6e6da2283fabdffae68607a7c08
Parents: 9ac2fb0
Author: shixuan-fan <sh...@apache.org>
Authored: Thu Jun 23 15:59:42 2016 +0000
Committer: shixuan-fan <sh...@apache.org>
Committed: Thu Jun 23 16:00:15 2016 +0000
----------------------------------------------------------------------
query_optimizer/expressions/CMakeLists.txt | 16 +++++++++++++++-
query_optimizer/logical/CMakeLists.txt | 14 ++++++++++++++
query_optimizer/resolver/CMakeLists.txt | 1 +
query_optimizer/resolver/Resolver.cpp | 14 +++++++++++++-
query_optimizer/strategy/CMakeLists.txt | 3 ++-
query_optimizer/strategy/OneToOne.cpp | 5 +++++
query_optimizer/tests/resolver/Select.test | 9 +++++++++
7 files changed, 59 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/160761c8/query_optimizer/expressions/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_optimizer/expressions/CMakeLists.txt b/query_optimizer/expressions/CMakeLists.txt
index e019c8e..cde56b2 100644
--- a/query_optimizer/expressions/CMakeLists.txt
+++ b/query_optimizer/expressions/CMakeLists.txt
@@ -302,6 +302,19 @@ target_link_libraries(quickstep_queryoptimizer_expressions_UnaryExpression
quickstep_types_operations_unaryoperations_UnaryOperation
quickstep_types_operations_unaryoperations_UnaryOperationID
quickstep_utility_Macros)
+target_link_libraries(quickstep_queryoptimizer_expressions_WindowAggregateFunction
+ glog
+ quickstep_expressions_aggregation_AggregateFunction
+ quickstep_queryoptimizer_OptimizerTree
+ quickstep_queryoptimizer_expressions_AttributeReference
+ quickstep_queryoptimizer_expressions_Expression
+ quickstep_queryoptimizer_expressions_ExpressionType
+ quickstep_queryoptimizer_expressions_PatternMatcher
+ quickstep_queryoptimizer_expressions_Scalar
+ quickstep_types_Type
+ quickstep_utility_Cast
+ quickstep_utility_Macros)
+
# Module all-in-one library:
add_library(quickstep_queryoptimizer_expressions ../../empty_src.cpp OptimizerExpressionsModule.hpp)
@@ -331,4 +344,5 @@ target_link_libraries(quickstep_queryoptimizer_expressions
quickstep_queryoptimizer_expressions_SearchedCase
quickstep_queryoptimizer_expressions_SimpleCase
quickstep_queryoptimizer_expressions_SubqueryExpression
- quickstep_queryoptimizer_expressions_UnaryExpression)
+ quickstep_queryoptimizer_expressions_UnaryExpression
+ quickstep_queryoptimizer_expressions_WindowAggregate)
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/160761c8/query_optimizer/logical/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_optimizer/logical/CMakeLists.txt b/query_optimizer/logical/CMakeLists.txt
index e33e9fb..b787c60 100644
--- a/query_optimizer/logical/CMakeLists.txt
+++ b/query_optimizer/logical/CMakeLists.txt
@@ -260,6 +260,20 @@ target_link_libraries(quickstep_queryoptimizer_logical_UpdateTable
quickstep_queryoptimizer_logical_LogicalType
quickstep_utility_Cast
quickstep_utility_Macros)
+target_link_libraries(quickstep_queryoptimizer_logical_WindowAggregate
+ glog
+ quickstep_queryoptimizer_expressions_Alias
+ quickstep_queryoptimizer_expressions_AttributeReference
+ quickstep_queryoptimizer_expressions_Expression
+ quickstep_queryoptimizer_expressions_ExpressionUtil
+ quickstep_queryoptimizer_expressions_NamedExpression
+ quickstep_queryoptimizer_expressions_PatternMatcher
+ quickstep_queryoptimizer_logical_Logical
+ quickstep_queryoptimizer_logical_LogicalType
+ quickstep_queryoptimizer_OptimizerTree
+ quickstep_utility_Cast
+ quickstep_utility_Macros)
+
# Module all-in-one library:
add_library(quickstep_queryoptimizer_logical ../../empty_src.cpp OptimizerLogicalModule.hpp)
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/160761c8/query_optimizer/resolver/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/CMakeLists.txt b/query_optimizer/resolver/CMakeLists.txt
index 4c7a70b..fb75767 100644
--- a/query_optimizer/resolver/CMakeLists.txt
+++ b/query_optimizer/resolver/CMakeLists.txt
@@ -110,6 +110,7 @@ target_link_libraries(quickstep_queryoptimizer_resolver_Resolver
quickstep_queryoptimizer_logical_TableReference
quickstep_queryoptimizer_logical_TopLevelPlan
quickstep_queryoptimizer_logical_UpdateTable
+ quickstep_queryoptimizer_logical_WindowAggregate
quickstep_queryoptimizer_resolver_NameResolver
quickstep_storage_StorageBlockLayout_proto
quickstep_storage_StorageConstants
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/160761c8/query_optimizer/resolver/Resolver.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/Resolver.cpp b/query_optimizer/resolver/Resolver.cpp
index 24e4430..211092f 100644
--- a/query_optimizer/resolver/Resolver.cpp
+++ b/query_optimizer/resolver/Resolver.cpp
@@ -105,6 +105,7 @@
#include "query_optimizer/logical/TableReference.hpp"
#include "query_optimizer/logical/TopLevelPlan.hpp"
#include "query_optimizer/logical/UpdateTable.hpp"
+#include "query_optimizer/logical/WindowAggregate.hpp"
#include "query_optimizer/resolver/NameResolver.hpp"
#include "storage/StorageBlockLayout.pb.h"
#include "storage/StorageConstants.hpp"
@@ -1021,6 +1022,7 @@ L::LogicalPtr Resolver::resolveSelect(
// Sort the table according to the window.
for (const ParseWindow &window : *select_query.window_list()) {
// Check for duplicate definition.
+ // Currently this is useless since we only support one window.
if (sorted_window_map.find(window.name()->value()) != sorted_window_map.end()) {
THROW_SQL_ERROR_AT(window.name())
<< "Duplicate definition of window " << window.name()->value();
@@ -1064,7 +1066,17 @@ L::LogicalPtr Resolver::resolveSelect(
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 {
+ sorted_logical_plan = resolveSortInWindow(logical_plan,
+ window_aggregate_function->window_info());
+ }
+ logical_plan = L::WindowAggregate::Create(sorted_logical_plan,
+ alias);
}
// Resolve GROUP BY.
@@ -2800,7 +2812,7 @@ E::ScalarPtr Resolver::resolveWindowAggregateFunction(
parse_function_call.is_distinct());
}
- const std::string internal_alias = GenerateAggregateAttributeAlias(
+ const std::string internal_alias = GenerateWindowAggregateAttributeAlias(
expression_resolution_info->query_aggregation_info->aggregate_expressions.size());
const E::AliasPtr aggregate_alias = E::Alias::Create(context_->nextExprId(),
window_aggregate_function,
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/160761c8/query_optimizer/strategy/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_optimizer/strategy/CMakeLists.txt b/query_optimizer/strategy/CMakeLists.txt
index 74f5a4b..84e151e 100644
--- a/query_optimizer/strategy/CMakeLists.txt
+++ b/query_optimizer/strategy/CMakeLists.txt
@@ -105,7 +105,8 @@ target_link_libraries(quickstep_queryoptimizer_strategy_OneToOne
quickstep_queryoptimizer_physical_TopLevelPlan
quickstep_queryoptimizer_physical_UpdateTable
quickstep_queryoptimizer_strategy_Strategy
- quickstep_utility_Macros)
+ quickstep_utility_Macros
+ quickstep_utility_SqlError)
target_link_libraries(quickstep_queryoptimizer_strategy_Selection
glog
quickstep_queryoptimizer_LogicalToPhysicalMapper
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/160761c8/query_optimizer/strategy/OneToOne.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/strategy/OneToOne.cpp b/query_optimizer/strategy/OneToOne.cpp
index 7f59151..f49a25c 100644
--- a/query_optimizer/strategy/OneToOne.cpp
+++ b/query_optimizer/strategy/OneToOne.cpp
@@ -55,6 +55,7 @@
#include "query_optimizer/physical/TableReference.hpp"
#include "query_optimizer/physical/TopLevelPlan.hpp"
#include "query_optimizer/physical/UpdateTable.hpp"
+#include "utility/SqlError.hpp"
namespace quickstep {
namespace optimizer {
@@ -208,6 +209,10 @@ bool OneToOne::generatePlan(const L::LogicalPtr &logical_input,
update_table->predicate());
return true;
}
+ case L::LogicalType::kWindowAggregate: {
+ THROW_SQL_ERROR()
+ << "Window aggregate function is not supported currently :(";
+ }
default:
return false;
}
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/160761c8/query_optimizer/tests/resolver/Select.test
----------------------------------------------------------------------
diff --git a/query_optimizer/tests/resolver/Select.test b/query_optimizer/tests/resolver/Select.test
index 141bfa0..33f0ed9 100644
--- a/query_optimizer/tests/resolver/Select.test
+++ b/query_optimizer/tests/resolver/Select.test
@@ -3126,3 +3126,12 @@ FROM test;
ERROR: The substring length must be greater than 0 (1 : 8)
SELECT SUBSTRING(char_col FROM 1 FOR ...
^
+==
+
+SELECT avg(int_col) OVER w FROM test
+WINDOW w AS
+(PARTITION BY char_col
+ ORDER BY long_col DESC NULLS LAST
+ ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING);
+--
+