Repository: incubator-quickstep Updated Branches: refs/heads/lip-refactor-optimizer 72b349d5f -> 10eff2c1d
Updates Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/10eff2c1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/10eff2c1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/10eff2c1 Branch: refs/heads/lip-refactor-optimizer Commit: 10eff2c1d6aff4d29db469e64897be9e1d984779 Parents: 72b349d Author: Jianqiao Zhu <jianq...@cs.wisc.edu> Authored: Tue Oct 11 11:04:27 2016 -0500 Committer: Jianqiao Zhu <jianq...@cs.wisc.edu> Committed: Tue Oct 11 11:04:27 2016 -0500 ---------------------------------------------------------------------- query_optimizer/CMakeLists.txt | 20 --- query_optimizer/ExecutionGenerator.cpp | 51 +++--- query_optimizer/ExecutionGenerator.hpp | 10 +- query_optimizer/LIPFilterGenerator.cpp | 190 ---------------------- query_optimizer/LIPFilterGenerator.hpp | 129 --------------- relational_operators/AggregationOperator.cpp | 21 +-- relational_operators/AggregationOperator.hpp | 9 +- relational_operators/BuildHashOperator.cpp | 23 +-- relational_operators/BuildHashOperator.hpp | 18 +- relational_operators/HashJoinOperator.cpp | 52 +----- relational_operators/HashJoinOperator.hpp | 43 ++--- relational_operators/RelationalOperator.hpp | 12 +- relational_operators/SelectOperator.cpp | 67 +------- relational_operators/SelectOperator.hpp | 18 +- 14 files changed, 63 insertions(+), 600 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/query_optimizer/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/query_optimizer/CMakeLists.txt b/query_optimizer/CMakeLists.txt index e1f36d1..fa9141c 100644 --- a/query_optimizer/CMakeLists.txt +++ b/query_optimizer/CMakeLists.txt @@ -41,7 +41,6 @@ add_subdirectory(tests) # Declare micro-libs: add_library(quickstep_queryoptimizer_ExecutionGenerator ExecutionGenerator.cpp ExecutionGenerator.hpp) -add_library(quickstep_queryoptimizer_LIPFilterGenerator LIPFilterGenerator.cpp LIPFilterGenerator.hpp) add_library(quickstep_queryoptimizer_LogicalGenerator LogicalGenerator.cpp LogicalGenerator.hpp) add_library(quickstep_queryoptimizer_LogicalToPhysicalMapper ../empty_src.cpp @@ -73,7 +72,6 @@ target_link_libraries(quickstep_queryoptimizer_ExecutionGenerator quickstep_expressions_windowaggregation_WindowAggregateFunction_proto quickstep_queryexecution_QueryContext quickstep_queryexecution_QueryContext_proto - quickstep_queryoptimizer_LIPFilterGenerator quickstep_queryoptimizer_OptimizerContext quickstep_queryoptimizer_QueryHandle quickstep_queryoptimizer_QueryPlan @@ -153,23 +151,6 @@ if (ENABLE_DISTRIBUTED) target_link_libraries(quickstep_queryoptimizer_ExecutionGenerator quickstep_catalog_Catalog_proto) endif() -target_link_libraries(quickstep_queryoptimizer_LIPFilterGenerator - glog - quickstep_catalog_CatalogAttribute - quickstep_catalog_CatalogTypedefs - quickstep_queryexecution_QueryContext - quickstep_queryexecution_QueryContext_proto - quickstep_queryoptimizer_QueryPlan - quickstep_queryoptimizer_physical_Aggregate - quickstep_queryoptimizer_physical_HashJoin - quickstep_queryoptimizer_physical_LIPFilterConfiguration - quickstep_queryoptimizer_physical_Physical - quickstep_queryoptimizer_physical_Selection - quickstep_relationaloperators_RelationalOperator - quickstep_types_Type - quickstep_utility_lipfilter_LIPFilter - quickstep_utility_lipfilter_LIPFilterDeployment - quickstep_utility_lipfilter_LIPFilter_proto) target_link_libraries(quickstep_queryoptimizer_LogicalGenerator glog quickstep_parser_ParseStatement @@ -243,7 +224,6 @@ target_link_libraries(quickstep_queryoptimizer_Validator add_library(quickstep_queryoptimizer ../empty_src.cpp QueryOptimizerModule.hpp) target_link_libraries(quickstep_queryoptimizer quickstep_queryoptimizer_ExecutionGenerator - quickstep_queryoptimizer_LIPFilterGenerator quickstep_queryoptimizer_LogicalGenerator quickstep_queryoptimizer_LogicalToPhysicalMapper quickstep_queryoptimizer_Optimizer http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/query_optimizer/ExecutionGenerator.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/ExecutionGenerator.cpp b/query_optimizer/ExecutionGenerator.cpp index 23d9a53..9347c9c 100644 --- a/query_optimizer/ExecutionGenerator.cpp +++ b/query_optimizer/ExecutionGenerator.cpp @@ -54,11 +54,10 @@ #include "expressions/window_aggregation/WindowAggregateFunction.pb.h" #include "query_execution/QueryContext.hpp" #include "query_execution/QueryContext.pb.h" -#include "query_optimizer/LIPFilterGenerator.hpp" +#include "query_optimizer/ExecutionHeuristics.hpp" #include "query_optimizer/OptimizerContext.hpp" #include "query_optimizer/QueryHandle.hpp" #include "query_optimizer/QueryPlan.hpp" -#include "query_optimizer/cost_model/SimpleCostModel.hpp" #include "query_optimizer/cost_model/StarSchemaSimpleCostModel.hpp" #include "query_optimizer/expressions/AggregateFunction.hpp" #include "query_optimizer/expressions/Alias.hpp" @@ -77,7 +76,6 @@ #include "query_optimizer/physical/HashJoin.hpp" #include "query_optimizer/physical/InsertSelection.hpp" #include "query_optimizer/physical/InsertTuple.hpp" -#include "query_optimizer/physical/LIPFilterConfiguration.hpp" #include "query_optimizer/physical/NestedLoopsJoin.hpp" #include "query_optimizer/physical/PatternMatcher.hpp" #include "query_optimizer/physical/Physical.hpp" @@ -155,6 +153,9 @@ static const volatile bool aggregate_hashtable_type_dummy DEFINE_bool(parallelize_load, true, "Parallelize loading data files."); +DEFINE_bool(optimize_joins, false, + "Enable post execution plan generation optimizations for joins."); + namespace E = ::quickstep::optimizer::expressions; namespace P = ::quickstep::optimizer::physical; namespace S = ::quickstep::serialization; @@ -167,13 +168,6 @@ void ExecutionGenerator::generatePlan(const P::PhysicalPtr &physical_plan) { cost_model_.reset( new cost::StarSchemaSimpleCostModel(top_level_physical_plan_->shared_subplans())); - simple_cost_model_.reset( - new cost::SimpleCostModel(top_level_physical_plan_->shared_subplans())); - const P::LIPFilterConfigurationPtr &lip_filter_configuration = - top_level_physical_plan_->lip_filter_configuration(); - if (lip_filter_configuration != nullptr) { - lip_filter_generator_.reset(new LIPFilterGenerator(lip_filter_configuration)); - } const CatalogRelation *result_relation = nullptr; @@ -183,10 +177,6 @@ void ExecutionGenerator::generatePlan(const P::PhysicalPtr &physical_plan) { } generatePlanInternal(top_level_physical_plan_->plan()); - if (lip_filter_generator_ != nullptr) { - lip_filter_generator_->deployLIPFilters(execution_plan_, query_context_proto_); - } - // Set the query result relation if the input plan exists in physical_to_execution_map_, // which indicates the plan is the result of a SELECT query. const std::unordered_map<P::PhysicalPtr, CatalogRelationInfo>::const_iterator it = @@ -221,6 +211,11 @@ void ExecutionGenerator::generatePlan(const P::PhysicalPtr &physical_plan) { temporary_relation_info.producer_operator_index); } + // Optimize execution plan based on heuristics captured during execution plan generation, if enabled. + if (FLAGS_optimize_joins) { + execution_heuristics_->optimizeExecutionPlan(execution_plan_, query_context_proto_); + } + #ifdef QUICKSTEP_DISTRIBUTED catalog_database_cache_proto_->set_name(catalog_database_->getName()); @@ -243,10 +238,6 @@ void ExecutionGenerator::generatePlanInternal( generatePlanInternal(child); } - if (lip_filter_generator_ != nullptr) { - lip_filter_generator_->registerAttributeMap(physical_plan, attribute_substitution_map_); - } - switch (physical_plan->getPhysicalType()) { case P::PhysicalType::kAggregate: return convertAggregate( @@ -578,10 +569,6 @@ void ExecutionGenerator::convertSelection( std::forward_as_tuple(select_index, output_relation)); temporary_relation_info_vec_.emplace_back(select_index, output_relation); - - if (lip_filter_generator_ != nullptr) { - lip_filter_generator_->addSelectionInfo(physical_selection, select_index); - } } void ExecutionGenerator::convertSharedSubplanReference(const physical::SharedSubplanReferencePtr &physical_plan) { @@ -619,7 +606,7 @@ void ExecutionGenerator::convertHashJoin(const P::HashJoinPtr &physical_plan) { const CatalogRelation *referenced_stored_probe_relation = nullptr; const CatalogRelation *referenced_stored_build_relation = nullptr; - std::size_t build_cardinality = simple_cost_model_->estimateCardinality(build_physical); + std::size_t build_cardinality = cost_model_->estimateCardinality(build_physical); bool any_probe_attributes_nullable = false; bool any_build_attributes_nullable = false; @@ -842,10 +829,15 @@ void ExecutionGenerator::convertHashJoin(const P::HashJoinPtr &physical_plan) { output_relation)); temporary_relation_info_vec_.emplace_back(join_operator_index, output_relation); - if (lip_filter_generator_ != nullptr) { - lip_filter_generator_->addHashJoinInfo(physical_plan, - build_operator_index, - join_operator_index); + // Add heuristics for the Hash Join, if enabled. + if (FLAGS_optimize_joins && !skip_hash_join_optimization) { + execution_heuristics_->addHashJoinInfo(build_operator_index, + join_operator_index, + referenced_stored_build_relation, + referenced_stored_probe_relation, + std::move(build_original_attribute_ids), + std::move(probe_original_attribute_ids), + join_hash_table_index); } } @@ -1474,11 +1466,6 @@ void ExecutionGenerator::convertAggregate( execution_plan_->addDirectDependency(destroy_aggregation_state_operator_index, finalize_aggregation_operator_index, true); - - if (lip_filter_generator_ != nullptr) { - lip_filter_generator_->addAggregateInfo(physical_plan, - aggregation_operator_index); - } } void ExecutionGenerator::convertSort(const P::SortPtr &physical_sort) { http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/query_optimizer/ExecutionGenerator.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/ExecutionGenerator.hpp b/query_optimizer/ExecutionGenerator.hpp index 8890296..2aaf5ab 100644 --- a/query_optimizer/ExecutionGenerator.hpp +++ b/query_optimizer/ExecutionGenerator.hpp @@ -33,7 +33,7 @@ #include "catalog/CatalogTypedefs.hpp" #include "query_execution/QueryContext.hpp" #include "query_execution/QueryContext.pb.h" -#include "query_optimizer/LIPFilterGenerator.hpp" +#include "query_optimizer/ExecutionHeuristics.hpp" #include "query_optimizer/QueryHandle.hpp" #include "query_optimizer/QueryPlan.hpp" #include "query_optimizer/cost_model/CostModel.hpp" @@ -102,7 +102,8 @@ class ExecutionGenerator { : catalog_database_(DCHECK_NOTNULL(catalog_database)), query_handle_(DCHECK_NOTNULL(query_handle)), execution_plan_(DCHECK_NOTNULL(query_handle->getQueryPlanMutable())), - query_context_proto_(DCHECK_NOTNULL(query_handle->getQueryContextProtoMutable())) { + query_context_proto_(DCHECK_NOTNULL(query_handle->getQueryContextProtoMutable())), + execution_heuristics_(new ExecutionHeuristics()) { query_context_proto_->set_query_id(query_handle_->query_id()); #ifdef QUICKSTEP_DISTRIBUTED catalog_database_cache_proto_ = DCHECK_NOTNULL(query_handle->getCatalogDatabaseCacheProtoMutable()); @@ -385,6 +386,7 @@ class ExecutionGenerator { QueryHandle *query_handle_; QueryPlan *execution_plan_; // A part of QueryHandle. serialization::QueryContext *query_context_proto_; // A part of QueryHandle. + std::unique_ptr<ExecutionHeuristics> execution_heuristics_; #ifdef QUICKSTEP_DISTRIBUTED serialization::CatalogDatabase *catalog_database_cache_proto_; // A part of QueryHandle. @@ -420,13 +422,9 @@ class ExecutionGenerator { * @brief The cost model to use for creating the execution plan. */ std::unique_ptr<cost::CostModel> cost_model_; - std::unique_ptr<cost::CostModel> simple_cost_model_; physical::TopLevelPlanPtr top_level_physical_plan_; - // Sub-generator for deploying LIP (lookahead information passing) filters. - std::unique_ptr<LIPFilterGenerator> lip_filter_generator_; - DISALLOW_COPY_AND_ASSIGN(ExecutionGenerator); }; http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/query_optimizer/LIPFilterGenerator.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/LIPFilterGenerator.cpp b/query_optimizer/LIPFilterGenerator.cpp deleted file mode 100644 index ef10400..0000000 --- a/query_optimizer/LIPFilterGenerator.cpp +++ /dev/null @@ -1,190 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - **/ - -#include "query_optimizer/LIPFilterGenerator.hpp" - -#include <map> -#include <utility> - -#include "catalog/CatalogAttribute.hpp" -#include "catalog/CatalogTypedefs.hpp" -#include "query_execution/QueryContext.pb.h" -#include "relational_operators/RelationalOperator.hpp" -#include "types/Type.hpp" -#include "utility/lip_filter/LIPFilter.hpp" -#include "utility/lip_filter/LIPFilter.pb.h" - -#include "glog/logging.h" - -namespace quickstep { -namespace optimizer { - -namespace E = ::quickstep::optimizer::expressions; -namespace P = ::quickstep::optimizer::physical; - -void LIPFilterGenerator::registerAttributeMap( - const P::PhysicalPtr &node, - const std::unordered_map<E::ExprId, const CatalogAttribute *> &attribute_substitution_map) { - const auto &build_info_map = lip_filter_configuration_->getBuildInfoMap(); - const auto build_it = build_info_map.find(node); - if (build_it != build_info_map.end()) { - auto &map_entry = attribute_map_[node]; - for (const auto &info : build_it->second) { - E::ExprId attr_id = info.build_attribute->id(); - map_entry.emplace(attr_id, attribute_substitution_map.at(attr_id)); - } - } - const auto &probe_info_map = lip_filter_configuration_->getProbeInfoMap(); - const auto probe_it = probe_info_map.find(node); - if (probe_it != probe_info_map.end()) { - auto &map_entry = attribute_map_[node]; - for (const auto &info : probe_it->second) { - E::ExprId attr_id = info.probe_attribute->id(); - map_entry.emplace(attr_id, attribute_substitution_map.at(attr_id)); - } - } -} - -void LIPFilterGenerator::deployLIPFilters(QueryPlan *execution_plan, - serialization::QueryContext *query_context_proto) const { - LIPFilterBuilderMap lip_filter_builder_map; - - // Deploy builders - const auto &build_info_map = lip_filter_configuration_->getBuildInfoMap(); - for (const auto &info : builder_infos_) { - const auto build_it = build_info_map.find(info.builder_node); - if (build_it != build_info_map.end()) { - deployBuilderInternal(execution_plan, - query_context_proto, - info.builder_node, - info.builder_operator_index, - build_it->second, - &lip_filter_builder_map); - } - } - - // Deploy probers - const auto &probe_info_map = lip_filter_configuration_->getProbeInfoMap(); - for (const auto &info : prober_infos_) { - const auto probe_it = probe_info_map.find(info.prober_node); - if (probe_it != probe_info_map.end()) { - deployProberInteral(execution_plan, - query_context_proto, - info.prober_node, - info.prober_operator_index, - probe_it->second, - lip_filter_builder_map); - } - } -} - -void LIPFilterGenerator::deployBuilderInternal( - QueryPlan *execution_plan, - serialization::QueryContext *query_context_proto, - const physical::PhysicalPtr &builder_node, - const QueryPlan::DAGNodeIndex builder_operator_index, - const std::vector<physical::LIPFilterBuildInfo> &build_info_vec, - LIPFilterBuilderMap *lip_filter_builder_map) const { - const auto lip_deployment_index = query_context_proto->lip_filter_deployments_size(); - auto *lip_filter_deployment_info_proto = - query_context_proto->add_lip_filter_deployments(); - lip_filter_deployment_info_proto->set_action_type(serialization::LIPFilterActionType::BUILD); - - const auto &builder_attribute_map = attribute_map_.at(builder_node); - for (const auto &info : build_info_vec) { - const QueryContext::lip_filter_id lip_filter_id = query_context_proto->lip_filters_size(); - serialization::LIPFilter *lip_filter_proto = query_context_proto->add_lip_filters(); - const CatalogAttribute *target_attr = builder_attribute_map.at(info.build_attribute->id()); - const Type &attr_type = target_attr->getType(); - - switch (info.filter_type) { - case LIPFilterType::kSingleIdentityHashFilter: { - DCHECK(!attr_type.isVariableLength()); - lip_filter_proto->set_lip_filter_type( - serialization::LIPFilterType::SINGLE_IDENTITY_HASH_FILTER); - lip_filter_proto->SetExtension( - serialization::SingleIdentityHashFilter::filter_cardinality, info.filter_cardinality); - lip_filter_proto->SetExtension( - serialization::SingleIdentityHashFilter::attribute_size, attr_type.minimumByteLength()); - break; - } - default: - LOG(FATAL) << "Unsupported LIPFilter type"; - break; - } - - lip_filter_builder_map->emplace( - std::make_pair(info.build_attribute->id(), builder_node), - std::make_pair(lip_filter_id, builder_operator_index)); - - auto *lip_filter_entry_proto = lip_filter_deployment_info_proto->add_entries(); - lip_filter_entry_proto->set_lip_filter_id(lip_filter_id); - lip_filter_entry_proto->set_attribute_id(target_attr->getID()); - lip_filter_entry_proto->mutable_attribute_type()->CopyFrom(attr_type.getProto()); - - std::cerr << "Build " << info.build_attribute->toString() - << " @" << builder_node - << " size = " << info.filter_cardinality << "\n"; - } - - RelationalOperator *relop = - execution_plan->getQueryPlanDAGMutable()->getNodePayloadMutable(builder_operator_index); - relop->deployLIPFilter(lip_deployment_index); -} - -void LIPFilterGenerator::deployProberInteral( - QueryPlan *execution_plan, - serialization::QueryContext *query_context_proto, - const physical::PhysicalPtr &prober_node, - const QueryPlan::DAGNodeIndex prober_operator_index, - const std::vector<physical::LIPFilterProbeInfo> &probe_info_vec, - const LIPFilterBuilderMap &lip_filter_builder_map) const { - const auto lip_deployment_index = query_context_proto->lip_filter_deployments_size(); - auto *lip_filter_deployment_info_proto = - query_context_proto->add_lip_filter_deployments(); - lip_filter_deployment_info_proto->set_action_type(serialization::LIPFilterActionType::PROBE); - - const auto &prober_attribute_map = attribute_map_.at(prober_node); - for (const auto &info : probe_info_vec) { - const auto &builder_info = - lip_filter_builder_map.at( - std::make_pair(info.build_attribute->id(), info.builder)); - const CatalogAttribute *target_attr = prober_attribute_map.at(info.probe_attribute->id()); - - auto *lip_filter_entry_proto = lip_filter_deployment_info_proto->add_entries(); - lip_filter_entry_proto->set_lip_filter_id(builder_info.first); - lip_filter_entry_proto->set_attribute_id(target_attr->getID()); - lip_filter_entry_proto->mutable_attribute_type()->CopyFrom( - target_attr->getType().getProto()); - - execution_plan->addDirectDependency(prober_operator_index, - builder_info.second, - true /* is_pipeline_breaker */); - - std::cerr << "Probe " << info.probe_attribute->toString() - << " @" << prober_node << "\n"; - } - - RelationalOperator *relop = - execution_plan->getQueryPlanDAGMutable()->getNodePayloadMutable(prober_operator_index); - relop->deployLIPFilter(lip_deployment_index); -} - -} // namespace optimizer -} // namespace quickstep http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/query_optimizer/LIPFilterGenerator.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/LIPFilterGenerator.hpp b/query_optimizer/LIPFilterGenerator.hpp deleted file mode 100644 index 4b597cf..0000000 --- a/query_optimizer/LIPFilterGenerator.hpp +++ /dev/null @@ -1,129 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - **/ - -#ifndef QUICKSTEP_QUERY_OPTIMIZER_LIP_FILTER_GENERATOR_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_LIP_FILTER_GENERATOR_HPP_ - -#include <map> -#include <unordered_map> - -#include "catalog/CatalogTypedefs.hpp" -#include "query_execution/QueryContext.hpp" -#include "query_execution/QueryContext.pb.h" -#include "query_optimizer/QueryPlan.hpp" -#include "query_optimizer/physical/LIPFilterConfiguration.hpp" -#include "query_optimizer/physical/Aggregate.hpp" -#include "query_optimizer/physical/HashJoin.hpp" -#include "query_optimizer/physical/Physical.hpp" -#include "query_optimizer/physical/Selection.hpp" - -#include "glog/logging.h" - -namespace quickstep { - -class CatalogAttribute; - -namespace optimizer { - -/** \addtogroup QueryOptimizer - * @{ - */ - -class LIPFilterGenerator { - public: - LIPFilterGenerator(const physical::LIPFilterConfigurationPtr &lip_filter_configuration) - : lip_filter_configuration_(lip_filter_configuration) { - DCHECK(lip_filter_configuration_ != nullptr); - } - - void registerAttributeMap( - const physical::PhysicalPtr &node, - const std::unordered_map<expressions::ExprId, const CatalogAttribute *> &attribute_substitution_map); - - void addAggregateInfo(const physical::AggregatePtr &aggregate, - const QueryPlan::DAGNodeIndex aggregate_operator_index) { - prober_infos_.emplace_back(aggregate, aggregate_operator_index); - } - - void addHashJoinInfo(const physical::HashJoinPtr &hash_join, - const QueryPlan::DAGNodeIndex build_operator_index, - const QueryPlan::DAGNodeIndex join_operator_index) { - builder_infos_.emplace_back(hash_join, build_operator_index); - prober_infos_.emplace_back(hash_join, join_operator_index); - } - - void addSelectionInfo(const physical::SelectionPtr &selection, - const QueryPlan::DAGNodeIndex select_operator_index) { - prober_infos_.emplace_back(selection, select_operator_index); - } - - void deployLIPFilters(QueryPlan *execution_plan, - serialization::QueryContext *query_context_proto) const; - - private: - struct BuilderInfo { - BuilderInfo(const physical::PhysicalPtr &builder_node_in, - const QueryPlan::DAGNodeIndex builder_operator_index_in) - : builder_node(builder_node_in), - builder_operator_index(builder_operator_index_in) { - } - const physical::PhysicalPtr builder_node; - const QueryPlan::DAGNodeIndex builder_operator_index; - }; - - struct ProberInfo { - ProberInfo(const physical::PhysicalPtr &prober_node_in, - const QueryPlan::DAGNodeIndex prober_operator_index_in) - : prober_node(prober_node_in), - prober_operator_index(prober_operator_index_in) { - } - const physical::PhysicalPtr prober_node; - const QueryPlan::DAGNodeIndex prober_operator_index; - }; - - typedef std::map<std::pair<expressions::ExprId, physical::PhysicalPtr>, - std::pair<QueryContext::lip_filter_id, QueryPlan::DAGNodeIndex>> LIPFilterBuilderMap; - - void deployBuilderInternal(QueryPlan *execution_plan, - serialization::QueryContext *query_context_proto, - const physical::PhysicalPtr &builder_node, - const QueryPlan::DAGNodeIndex builder_operator_index, - const std::vector<physical::LIPFilterBuildInfo> &build_info_vec, - LIPFilterBuilderMap *lip_filter_builder_map) const; - - void deployProberInteral(QueryPlan *execution_plan, - serialization::QueryContext *query_context_proto, - const physical::PhysicalPtr &prober_node, - const QueryPlan::DAGNodeIndex prober_operator_index, - const std::vector<physical::LIPFilterProbeInfo> &probe_info_vec, - const LIPFilterBuilderMap &lip_filter_builder_map) const; - - const physical::LIPFilterConfigurationPtr lip_filter_configuration_; - std::map<physical::PhysicalPtr, std::map<expressions::ExprId, const CatalogAttribute *>> attribute_map_; - std::vector<BuilderInfo> builder_infos_; - std::vector<ProberInfo> prober_infos_; -}; - - -/** @} */ - -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_LIP_FILTER_GENERATOR_HPP_ */ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/relational_operators/AggregationOperator.cpp ---------------------------------------------------------------------- diff --git a/relational_operators/AggregationOperator.cpp b/relational_operators/AggregationOperator.cpp index 71baa53..056e76d 100644 --- a/relational_operators/AggregationOperator.cpp +++ b/relational_operators/AggregationOperator.cpp @@ -38,24 +38,14 @@ bool AggregationOperator::getAllWorkOrders( StorageManager *storage_manager, const tmb::client_id scheduler_client_id, tmb::MessageBus *bus) { - const LIPFilterDeployment *lip_filter_deployment = nullptr; - if (lip_deployment_index_ != QueryContext::kInvalidILIPDeploymentId) { - lip_filter_deployment = query_context->getLIPDeployment(lip_deployment_index_); - } - if (input_relation_is_stored_) { if (!started_) { for (const block_id input_block_id : input_relation_block_ids_) { - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr; - if (lip_filter_deployment != nullptr) { - lip_filter_adaptive_prober = lip_filter_deployment->createLIPFilterAdaptiveProber(); - } container->addNormalWorkOrder( new AggregationWorkOrder( query_id_, input_block_id, - query_context->getAggregationState(aggr_state_index_), - lip_filter_adaptive_prober), + query_context->getAggregationState(aggr_state_index_)), op_index_); } started_ = true; @@ -63,16 +53,11 @@ bool AggregationOperator::getAllWorkOrders( return started_; } else { while (num_workorders_generated_ < input_relation_block_ids_.size()) { - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr; - if (lip_filter_deployment != nullptr) { - lip_filter_adaptive_prober = lip_filter_deployment->createLIPFilterAdaptiveProber(); - } container->addNormalWorkOrder( new AggregationWorkOrder( query_id_, input_relation_block_ids_[num_workorders_generated_], - query_context->getAggregationState(aggr_state_index_), - lip_filter_adaptive_prober), + query_context->getAggregationState(aggr_state_index_)), op_index_); ++num_workorders_generated_; } @@ -113,7 +98,7 @@ serialization::WorkOrder* AggregationOperator::createWorkOrderProto(const block_ void AggregationWorkOrder::execute() { - state_->aggregateBlock(input_block_id_, lip_filter_adaptive_prober_.get()); + state_->aggregateBlock(input_block_id_); } } // namespace quickstep http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/relational_operators/AggregationOperator.hpp ---------------------------------------------------------------------- diff --git a/relational_operators/AggregationOperator.hpp b/relational_operators/AggregationOperator.hpp index da36d57..31c1da4 100644 --- a/relational_operators/AggregationOperator.hpp +++ b/relational_operators/AggregationOperator.hpp @@ -30,7 +30,6 @@ #include "relational_operators/WorkOrder.hpp" #include "storage/StorageBlockInfo.hpp" #include "utility/Macros.hpp" -#include "utility/lip_filter/LIPFilterAdaptiveProber.hpp" #include "glog/logging.h" @@ -141,12 +140,10 @@ class AggregationWorkOrder : public WorkOrder { **/ AggregationWorkOrder(const std::size_t query_id, const block_id input_block_id, - AggregationOperationState *state, - LIPFilterAdaptiveProber *lip_filter_adaptive_prober) + AggregationOperationState *state) : WorkOrder(query_id), input_block_id_(input_block_id), - state_(DCHECK_NOTNULL(state)), - lip_filter_adaptive_prober_(lip_filter_adaptive_prober) {} + state_(DCHECK_NOTNULL(state)) {} ~AggregationWorkOrder() override {} @@ -156,8 +153,6 @@ class AggregationWorkOrder : public WorkOrder { const block_id input_block_id_; AggregationOperationState *state_; - std::unique_ptr<LIPFilterAdaptiveProber> lip_filter_adaptive_prober_; - DISALLOW_COPY_AND_ASSIGN(AggregationWorkOrder); }; http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/relational_operators/BuildHashOperator.cpp ---------------------------------------------------------------------- diff --git a/relational_operators/BuildHashOperator.cpp b/relational_operators/BuildHashOperator.cpp index 35bb5cf..465621c 100644 --- a/relational_operators/BuildHashOperator.cpp +++ b/relational_operators/BuildHashOperator.cpp @@ -34,7 +34,6 @@ #include "storage/TupleReference.hpp" #include "storage/TupleStorageSubBlock.hpp" #include "storage/ValueAccessor.hpp" -#include "utility/lip_filter/LIPFilterBuilder.hpp" #include "glog/logging.h" @@ -69,14 +68,6 @@ bool BuildHashOperator::getAllWorkOrders( tmb::MessageBus *bus) { DCHECK(query_context != nullptr); - LIPFilterBuilderPtr lip_filter_builder = nullptr; - if (lip_deployment_index_ != QueryContext::kInvalidILIPDeploymentId) { - const LIPFilterDeployment *lip_filter_deployment = - query_context->getLIPDeployment(lip_deployment_index_); - lip_filter_builder = std::shared_ptr<LIPFilterBuilder>( - lip_filter_deployment->createLIPFilterBuilder()); - } - JoinHashTable *hash_table = query_context->getJoinHashTable(hash_table_index_); if (input_relation_is_stored_) { if (!started_) { @@ -88,8 +79,7 @@ bool BuildHashOperator::getAllWorkOrders( any_join_key_attributes_nullable_, input_block_id, hash_table, - storage_manager, - lip_filter_builder), + storage_manager), op_index_); } started_ = true; @@ -105,8 +95,7 @@ bool BuildHashOperator::getAllWorkOrders( any_join_key_attributes_nullable_, input_relation_block_ids_[num_workorders_generated_], hash_table, - storage_manager, - lip_filter_builder), + storage_manager), op_index_); ++num_workorders_generated_; } @@ -147,23 +136,17 @@ serialization::WorkOrder* BuildHashOperator::createWorkOrderProto(const block_id any_join_key_attributes_nullable_); proto->SetExtension(serialization::BuildHashWorkOrder::join_hash_table_index, hash_table_index_); proto->SetExtension(serialization::BuildHashWorkOrder::block_id, block); - // TODO(jianqiao): update lip_filter related stuff return proto; } + void BuildHashWorkOrder::execute() { BlockReference block( storage_manager_->getBlock(build_block_id_, input_relation_)); TupleReferenceGenerator generator(build_block_id_); std::unique_ptr<ValueAccessor> accessor(block->getTupleStorageSubBlock().createValueAccessor()); - - if (lip_filter_builder_ != nullptr) { - lip_filter_builder_->insertValueAccessor(accessor.get()); - accessor->beginIterationVirtual(); - } - HashTablePutResult result; if (join_key_attributes_.size() == 1) { result = hash_table_->putValueAccessor(accessor.get(), http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/relational_operators/BuildHashOperator.hpp ---------------------------------------------------------------------- diff --git a/relational_operators/BuildHashOperator.hpp b/relational_operators/BuildHashOperator.hpp index 940298c..4a80a8a 100644 --- a/relational_operators/BuildHashOperator.hpp +++ b/relational_operators/BuildHashOperator.hpp @@ -20,7 +20,6 @@ #ifndef QUICKSTEP_RELATIONAL_OPERATORS_BUILD_HASH_OPERATOR_HPP_ #define QUICKSTEP_RELATIONAL_OPERATORS_BUILD_HASH_OPERATOR_HPP_ -#include <memory> #include <string> #include <utility> #include <vector> @@ -32,7 +31,6 @@ #include "relational_operators/WorkOrder.hpp" #include "storage/StorageBlockInfo.hpp" #include "utility/Macros.hpp" -#include "utility/lip_filter/LIPFilterBuilder.hpp" #include "glog/logging.h" @@ -164,7 +162,6 @@ class BuildHashWorkOrder : public WorkOrder { * @param build_block_id The block id. * @param hash_table The JoinHashTable to use. * @param storage_manager The StorageManager to use. - * @param lip_filter_builder The attached builder for building LIP filters. **/ BuildHashWorkOrder(const std::size_t query_id, const CatalogRelationSchema &input_relation, @@ -172,16 +169,14 @@ class BuildHashWorkOrder : public WorkOrder { const bool any_join_key_attributes_nullable, const block_id build_block_id, JoinHashTable *hash_table, - StorageManager *storage_manager, - LIPFilterBuilderPtr lip_filter_builder = nullptr) + StorageManager *storage_manager) : WorkOrder(query_id), input_relation_(input_relation), join_key_attributes_(join_key_attributes), any_join_key_attributes_nullable_(any_join_key_attributes_nullable), build_block_id_(build_block_id), hash_table_(DCHECK_NOTNULL(hash_table)), - storage_manager_(DCHECK_NOTNULL(storage_manager)), - lip_filter_builder_(lip_filter_builder) {} + storage_manager_(DCHECK_NOTNULL(storage_manager)) {} /** * @brief Constructor for the distributed version. @@ -194,7 +189,6 @@ class BuildHashWorkOrder : public WorkOrder { * @param build_block_id The block id. * @param hash_table The JoinHashTable to use. * @param storage_manager The StorageManager to use. - * @param lip_filter_builder The attached builder for building LIP filters. **/ BuildHashWorkOrder(const std::size_t query_id, const CatalogRelationSchema &input_relation, @@ -202,16 +196,14 @@ class BuildHashWorkOrder : public WorkOrder { const bool any_join_key_attributes_nullable, const block_id build_block_id, JoinHashTable *hash_table, - StorageManager *storage_manager, - LIPFilterBuilderPtr lip_filter_builder = nullptr) + StorageManager *storage_manager) : WorkOrder(query_id), input_relation_(input_relation), join_key_attributes_(std::move(join_key_attributes)), any_join_key_attributes_nullable_(any_join_key_attributes_nullable), build_block_id_(build_block_id), hash_table_(DCHECK_NOTNULL(hash_table)), - storage_manager_(DCHECK_NOTNULL(storage_manager)), - lip_filter_builder_(lip_filter_builder) {} + storage_manager_(DCHECK_NOTNULL(storage_manager)) {} ~BuildHashWorkOrder() override {} @@ -230,8 +222,6 @@ class BuildHashWorkOrder : public WorkOrder { JoinHashTable *hash_table_; StorageManager *storage_manager_; - LIPFilterBuilderPtr lip_filter_builder_; - DISALLOW_COPY_AND_ASSIGN(BuildHashWorkOrder); }; http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/relational_operators/HashJoinOperator.cpp ---------------------------------------------------------------------- diff --git a/relational_operators/HashJoinOperator.cpp b/relational_operators/HashJoinOperator.cpp index 449a118..779c0fe 100644 --- a/relational_operators/HashJoinOperator.cpp +++ b/relational_operators/HashJoinOperator.cpp @@ -48,7 +48,6 @@ #include "types/TypedValue.hpp" #include "types/containers/ColumnVector.hpp" #include "types/containers/ColumnVectorsValueAccessor.hpp" -#include "utility/lip_filter/LIPFilterAdaptiveProber.hpp" #include "gflags/gflags.h" #include "glog/logging.h" @@ -181,11 +180,6 @@ bool HashJoinOperator::getAllNonOuterJoinWorkOrders( if (blocking_dependencies_met_) { DCHECK(query_context != nullptr); - const LIPFilterDeployment *lip_filter_deployment = nullptr; - if (lip_deployment_index_ != QueryContext::kInvalidILIPDeploymentId) { - lip_filter_deployment = query_context->getLIPDeployment(lip_deployment_index_); - } - const Predicate *residual_predicate = query_context->getPredicate(residual_predicate_index_); const vector<unique_ptr<const Scalar>> &selection = @@ -198,10 +192,6 @@ bool HashJoinOperator::getAllNonOuterJoinWorkOrders( if (probe_relation_is_stored_) { if (!started_) { for (const block_id probe_block_id : probe_relation_block_ids_) { - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr; - if (lip_filter_deployment != nullptr) { - lip_filter_adaptive_prober = lip_filter_deployment->createLIPFilterAdaptiveProber(); - } container->addNormalWorkOrder( new JoinWorkOrderClass(query_id_, build_relation_, @@ -213,8 +203,7 @@ bool HashJoinOperator::getAllNonOuterJoinWorkOrders( selection, hash_table, output_destination, - storage_manager, - lip_filter_adaptive_prober), + storage_manager), op_index_); } started_ = true; @@ -222,10 +211,6 @@ bool HashJoinOperator::getAllNonOuterJoinWorkOrders( return started_; } else { while (num_workorders_generated_ < probe_relation_block_ids_.size()) { - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr; - if (lip_filter_deployment != nullptr) { - lip_filter_adaptive_prober = lip_filter_deployment->createLIPFilterAdaptiveProber(); - } container->addNormalWorkOrder( new JoinWorkOrderClass( query_id_, @@ -238,8 +223,7 @@ bool HashJoinOperator::getAllNonOuterJoinWorkOrders( selection, hash_table, output_destination, - storage_manager, - lip_filter_adaptive_prober), + storage_manager), op_index_); ++num_workorders_generated_; } // end while @@ -439,17 +423,6 @@ void HashInnerJoinWorkOrder::execute() { const TupleStorageSubBlock &probe_store = probe_block->getTupleStorageSubBlock(); std::unique_ptr<ValueAccessor> probe_accessor(probe_store.createValueAccessor()); - - std::unique_ptr<TupleIdSequence> lip_filter_existence_map; - std::unique_ptr<ValueAccessor> base_accessor; - if (lip_filter_adaptive_prober_ != nullptr) { - base_accessor.reset(probe_accessor.release()); - lip_filter_existence_map.reset( - lip_filter_adaptive_prober_->filterValueAccessor(base_accessor.get())); - probe_accessor.reset( - base_accessor->createSharedTupleIdSequenceAdapterVirtual(*lip_filter_existence_map)); - } - MapBasedJoinedTupleCollector collector; if (join_key_attributes_.size() == 1) { hash_table_.getAllFromValueAccessor( @@ -556,16 +529,6 @@ void HashSemiJoinWorkOrder::executeWithResidualPredicate() { std::unique_ptr<ValueAccessor> probe_accessor(probe_store.createValueAccessor()); - std::unique_ptr<TupleIdSequence> lip_filter_existence_map; - std::unique_ptr<ValueAccessor> base_accessor; - if (lip_filter_adaptive_prober_ != nullptr) { - base_accessor.reset(probe_accessor.release()); - lip_filter_existence_map.reset( - lip_filter_adaptive_prober_->filterValueAccessor(base_accessor.get())); - probe_accessor.reset( - base_accessor->createSharedTupleIdSequenceAdapterVirtual(*lip_filter_existence_map)); - } - // We collect all the matching probe relation tuples, as there's a residual // preidcate that needs to be applied after collecting these matches. MapBasedJoinedTupleCollector collector; @@ -646,17 +609,6 @@ void HashSemiJoinWorkOrder::executeWithoutResidualPredicate() { const TupleStorageSubBlock &probe_store = probe_block->getTupleStorageSubBlock(); std::unique_ptr<ValueAccessor> probe_accessor(probe_store.createValueAccessor()); - - std::unique_ptr<TupleIdSequence> lip_filter_existence_map; - std::unique_ptr<ValueAccessor> base_accessor; - if (lip_filter_adaptive_prober_ != nullptr) { - base_accessor.reset(probe_accessor.release()); - lip_filter_existence_map.reset( - lip_filter_adaptive_prober_->filterValueAccessor(base_accessor.get())); - probe_accessor.reset( - base_accessor->createSharedTupleIdSequenceAdapterVirtual(*lip_filter_existence_map)); - } - SemiAntiJoinTupleCollector collector(probe_store); // We collect all the probe relation tuples which have at least one matching // tuple in the build relation. As a performance optimization, the hash table http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/relational_operators/HashJoinOperator.hpp ---------------------------------------------------------------------- diff --git a/relational_operators/HashJoinOperator.hpp b/relational_operators/HashJoinOperator.hpp index 29d6eba..fa393b6 100644 --- a/relational_operators/HashJoinOperator.hpp +++ b/relational_operators/HashJoinOperator.hpp @@ -35,7 +35,6 @@ #include "storage/HashTable.hpp" #include "storage/StorageBlockInfo.hpp" #include "utility/Macros.hpp" -#include "utility/lip_filter/LIPFilterAdaptiveProber.hpp" #include "glog/logging.h" @@ -308,8 +307,7 @@ class HashInnerJoinWorkOrder : public WorkOrder { const std::vector<std::unique_ptr<const Scalar>> &selection, const JoinHashTable &hash_table, InsertDestination *output_destination, - StorageManager *storage_manager, - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr) + StorageManager *storage_manager) : WorkOrder(query_id), build_relation_(build_relation), probe_relation_(probe_relation), @@ -320,8 +318,7 @@ class HashInnerJoinWorkOrder : public WorkOrder { selection_(selection), hash_table_(hash_table), output_destination_(DCHECK_NOTNULL(output_destination)), - storage_manager_(DCHECK_NOTNULL(storage_manager)), - lip_filter_adaptive_prober_(lip_filter_adaptive_prober) {} + storage_manager_(DCHECK_NOTNULL(storage_manager)) {} /** * @brief Constructor for the distributed version. @@ -357,8 +354,7 @@ class HashInnerJoinWorkOrder : public WorkOrder { const std::vector<std::unique_ptr<const Scalar>> &selection, const JoinHashTable &hash_table, InsertDestination *output_destination, - StorageManager *storage_manager, - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr) + StorageManager *storage_manager) : WorkOrder(query_id), build_relation_(build_relation), probe_relation_(probe_relation), @@ -369,8 +365,7 @@ class HashInnerJoinWorkOrder : public WorkOrder { selection_(selection), hash_table_(hash_table), output_destination_(DCHECK_NOTNULL(output_destination)), - storage_manager_(DCHECK_NOTNULL(storage_manager)), - lip_filter_adaptive_prober_(lip_filter_adaptive_prober) {} + storage_manager_(DCHECK_NOTNULL(storage_manager)) {} ~HashInnerJoinWorkOrder() override {} @@ -397,8 +392,6 @@ class HashInnerJoinWorkOrder : public WorkOrder { InsertDestination *output_destination_; StorageManager *storage_manager_; - std::unique_ptr<LIPFilterAdaptiveProber> lip_filter_adaptive_prober_; - DISALLOW_COPY_AND_ASSIGN(HashInnerJoinWorkOrder); }; @@ -442,8 +435,7 @@ class HashSemiJoinWorkOrder : public WorkOrder { const std::vector<std::unique_ptr<const Scalar>> &selection, const JoinHashTable &hash_table, InsertDestination *output_destination, - StorageManager *storage_manager, - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr) + StorageManager *storage_manager) : WorkOrder(query_id), build_relation_(build_relation), probe_relation_(probe_relation), @@ -454,8 +446,7 @@ class HashSemiJoinWorkOrder : public WorkOrder { selection_(selection), hash_table_(hash_table), output_destination_(DCHECK_NOTNULL(output_destination)), - storage_manager_(DCHECK_NOTNULL(storage_manager)), - lip_filter_adaptive_prober_(lip_filter_adaptive_prober) {} + storage_manager_(DCHECK_NOTNULL(storage_manager)) {} /** * @brief Constructor for the distributed version. @@ -491,8 +482,7 @@ class HashSemiJoinWorkOrder : public WorkOrder { const std::vector<std::unique_ptr<const Scalar>> &selection, const JoinHashTable &hash_table, InsertDestination *output_destination, - StorageManager *storage_manager, - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr) + StorageManager *storage_manager) : WorkOrder(query_id), build_relation_(build_relation), probe_relation_(probe_relation), @@ -503,8 +493,7 @@ class HashSemiJoinWorkOrder : public WorkOrder { selection_(selection), hash_table_(hash_table), output_destination_(DCHECK_NOTNULL(output_destination)), - storage_manager_(DCHECK_NOTNULL(storage_manager)), - lip_filter_adaptive_prober_(lip_filter_adaptive_prober) {} + storage_manager_(DCHECK_NOTNULL(storage_manager)) {} ~HashSemiJoinWorkOrder() override {} @@ -527,8 +516,6 @@ class HashSemiJoinWorkOrder : public WorkOrder { InsertDestination *output_destination_; StorageManager *storage_manager_; - std::unique_ptr<LIPFilterAdaptiveProber> lip_filter_adaptive_prober_; - DISALLOW_COPY_AND_ASSIGN(HashSemiJoinWorkOrder); }; @@ -572,8 +559,7 @@ class HashAntiJoinWorkOrder : public WorkOrder { const std::vector<std::unique_ptr<const Scalar>> &selection, const JoinHashTable &hash_table, InsertDestination *output_destination, - StorageManager *storage_manager, - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr) + StorageManager *storage_manager) : WorkOrder(query_id), build_relation_(build_relation), probe_relation_(probe_relation), @@ -584,8 +570,7 @@ class HashAntiJoinWorkOrder : public WorkOrder { selection_(selection), hash_table_(hash_table), output_destination_(DCHECK_NOTNULL(output_destination)), - storage_manager_(DCHECK_NOTNULL(storage_manager)), - lip_filter_adaptive_prober_(lip_filter_adaptive_prober) {} + storage_manager_(DCHECK_NOTNULL(storage_manager)) {} /** * @brief Constructor for the distributed version. @@ -621,8 +606,7 @@ class HashAntiJoinWorkOrder : public WorkOrder { const std::vector<std::unique_ptr<const Scalar>> &selection, const JoinHashTable &hash_table, InsertDestination *output_destination, - StorageManager *storage_manager, - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr) + StorageManager *storage_manager) : WorkOrder(query_id), build_relation_(build_relation), probe_relation_(probe_relation), @@ -633,8 +617,7 @@ class HashAntiJoinWorkOrder : public WorkOrder { selection_(selection), hash_table_(hash_table), output_destination_(DCHECK_NOTNULL(output_destination)), - storage_manager_(DCHECK_NOTNULL(storage_manager)), - lip_filter_adaptive_prober_(lip_filter_adaptive_prober) {} + storage_manager_(DCHECK_NOTNULL(storage_manager)) {} ~HashAntiJoinWorkOrder() override {} @@ -663,8 +646,6 @@ class HashAntiJoinWorkOrder : public WorkOrder { InsertDestination *output_destination_; StorageManager *storage_manager_; - std::unique_ptr<LIPFilterAdaptiveProber> lip_filter_adaptive_prober_; - DISALLOW_COPY_AND_ASSIGN(HashAntiJoinWorkOrder); }; http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/relational_operators/RelationalOperator.hpp ---------------------------------------------------------------------- diff --git a/relational_operators/RelationalOperator.hpp b/relational_operators/RelationalOperator.hpp index c2c8f11..f0303e5 100644 --- a/relational_operators/RelationalOperator.hpp +++ b/relational_operators/RelationalOperator.hpp @@ -245,13 +245,6 @@ class RelationalOperator { return op_index_; } - /** - * @brief TODO - */ - void deployLIPFilter(const QueryContext::lip_deployment_id lip_deployment_index) { - lip_deployment_index_ = lip_deployment_index; - } - protected: /** * @brief Constructor @@ -264,8 +257,7 @@ class RelationalOperator { const bool blocking_dependencies_met = false) : query_id_(query_id), blocking_dependencies_met_(blocking_dependencies_met), - done_feeding_input_relation_(false), - lip_deployment_index_(QueryContext::kInvalidILIPDeploymentId) {} + done_feeding_input_relation_(false) {} const std::size_t query_id_; @@ -273,8 +265,6 @@ class RelationalOperator { bool done_feeding_input_relation_; std::size_t op_index_; - QueryContext::lip_deployment_id lip_deployment_index_; - private: DISALLOW_COPY_AND_ASSIGN(RelationalOperator); }; http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/relational_operators/SelectOperator.cpp ---------------------------------------------------------------------- diff --git a/relational_operators/SelectOperator.cpp b/relational_operators/SelectOperator.cpp index d7855cf..d56326e 100644 --- a/relational_operators/SelectOperator.cpp +++ b/relational_operators/SelectOperator.cpp @@ -30,7 +30,6 @@ #include "storage/StorageBlock.hpp" #include "storage/StorageBlockInfo.hpp" #include "storage/StorageManager.hpp" -#include "utility/lip_filter/LIPFilterDeployment.hpp" #include "glog/logging.h" @@ -44,14 +43,9 @@ void SelectOperator::addWorkOrders(WorkOrdersContainer *container, StorageManager *storage_manager, const Predicate *predicate, const std::vector<std::unique_ptr<const Scalar>> *selection, - InsertDestination *output_destination, - const LIPFilterDeployment *lip_filter_deployment) { + InsertDestination *output_destination) { if (input_relation_is_stored_) { for (const block_id input_block_id : input_relation_block_ids_) { - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr; - if (lip_filter_deployment != nullptr) { - lip_filter_adaptive_prober = lip_filter_deployment->createLIPFilterAdaptiveProber(); - } container->addNormalWorkOrder(new SelectWorkOrder(query_id_, input_relation_, input_block_id, @@ -60,16 +54,11 @@ void SelectOperator::addWorkOrders(WorkOrdersContainer *container, simple_selection_, selection, output_destination, - storage_manager, - lip_filter_adaptive_prober), + storage_manager), op_index_); } } else { while (num_workorders_generated_ < input_relation_block_ids_.size()) { - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr; - if (lip_filter_deployment != nullptr) { - lip_filter_adaptive_prober = lip_filter_deployment->createLIPFilterAdaptiveProber(); - } container->addNormalWorkOrder( new SelectWorkOrder( query_id_, @@ -92,18 +81,13 @@ void SelectOperator::addPartitionAwareWorkOrders(WorkOrdersContainer *container, StorageManager *storage_manager, const Predicate *predicate, const std::vector<std::unique_ptr<const Scalar>> *selection, - InsertDestination *output_destination, - const LIPFilterDeployment *lip_filter_deployment) { + InsertDestination *output_destination) { DCHECK(placement_scheme_ != nullptr); const std::size_t num_partitions = input_relation_.getPartitionScheme().getPartitionSchemeHeader().getNumPartitions(); if (input_relation_is_stored_) { for (std::size_t part_id = 0; part_id < num_partitions; ++part_id) { for (const block_id input_block_id : input_relation_block_ids_in_partition_[part_id]) { - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr; - if (lip_filter_deployment != nullptr) { - lip_filter_adaptive_prober = lip_filter_deployment->createLIPFilterAdaptiveProber(); - } container->addNormalWorkOrder( new SelectWorkOrder( query_id_, @@ -115,7 +99,6 @@ void SelectOperator::addPartitionAwareWorkOrders(WorkOrdersContainer *container, selection, output_destination, storage_manager, - lip_filter_adaptive_prober, placement_scheme_->getNUMANodeForBlock(input_block_id)), op_index_); } @@ -126,10 +109,6 @@ void SelectOperator::addPartitionAwareWorkOrders(WorkOrdersContainer *container, input_relation_block_ids_in_partition_[part_id].size()) { block_id block_in_partition = input_relation_block_ids_in_partition_[part_id][num_workorders_generated_in_partition_[part_id]]; - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr; - if (lip_filter_deployment != nullptr) { - lip_filter_adaptive_prober = lip_filter_deployment->createLIPFilterAdaptiveProber(); - } container->addNormalWorkOrder( new SelectWorkOrder( query_id_, @@ -141,7 +120,6 @@ void SelectOperator::addPartitionAwareWorkOrders(WorkOrdersContainer *container, selection, output_destination, storage_manager, - lip_filter_adaptive_prober, placement_scheme_->getNUMANodeForBlock(block_in_partition)), op_index_); ++num_workorders_generated_in_partition_[part_id]; @@ -168,31 +146,16 @@ bool SelectOperator::getAllWorkOrders( InsertDestination *output_destination = query_context->getInsertDestination(output_destination_index_); - const LIPFilterDeployment *lip_filter_deployment = nullptr; - if (lip_deployment_index_ != QueryContext::kInvalidILIPDeploymentId) { - lip_filter_deployment = query_context->getLIPDeployment(lip_deployment_index_); - } - if (input_relation_is_stored_) { if (!started_) { if (input_relation_.hasPartitionScheme()) { #ifdef QUICKSTEP_HAVE_LIBNUMA if (input_relation_.hasNUMAPlacementScheme()) { - addPartitionAwareWorkOrders(container, - storage_manager, - predicate, - selection, - output_destination, - lip_filter_deployment); + addPartitionAwareWorkOrders(container, storage_manager, predicate, selection, output_destination); } #endif } else { - addWorkOrders(container, - storage_manager, - predicate, - selection, - output_destination, - lip_filter_deployment); + addWorkOrders(container, storage_manager, predicate, selection, output_destination); } started_ = true; } @@ -201,21 +164,11 @@ bool SelectOperator::getAllWorkOrders( if (input_relation_.hasPartitionScheme()) { #ifdef QUICKSTEP_HAVE_LIBNUMA if (input_relation_.hasNUMAPlacementScheme()) { - addPartitionAwareWorkOrders(container, - storage_manager, - predicate, - selection, - output_destination, - lip_filter_deployment); + addPartitionAwareWorkOrders(container, storage_manager, predicate, selection, output_destination); } #endif } else { - addWorkOrders(container, - storage_manager, - predicate, - selection, - output_destination, - lip_filter_deployment); + addWorkOrders(container, storage_manager, predicate, selection, output_destination); } return done_feeding_input_relation_; } @@ -269,13 +222,11 @@ void SelectWorkOrder::execute() { if (simple_projection_) { block->selectSimple(simple_selection_, predicate_, - output_destination_, - lip_filter_adaptive_prober_.get()); + output_destination_); } else { block->select(*DCHECK_NOTNULL(selection_), predicate_, - output_destination_, - lip_filter_adaptive_prober_.get()); + output_destination_); } } http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/10eff2c1/relational_operators/SelectOperator.hpp ---------------------------------------------------------------------- diff --git a/relational_operators/SelectOperator.hpp b/relational_operators/SelectOperator.hpp index 0d2ae16..0f5c712 100644 --- a/relational_operators/SelectOperator.hpp +++ b/relational_operators/SelectOperator.hpp @@ -38,7 +38,6 @@ #include "relational_operators/WorkOrder.hpp" #include "storage/StorageBlockInfo.hpp" #include "utility/Macros.hpp" -#include "utility/lip_filter/LIPFilterAdaptiveProber.hpp" #include "glog/logging.h" @@ -50,7 +49,6 @@ namespace quickstep { class CatalogRelationSchema; class InsertDestination; -class LIPFilterDeployment; class Predicate; class Scalar; class StorageManager; @@ -252,15 +250,13 @@ class SelectOperator : public RelationalOperator { StorageManager *storage_manager, const Predicate *predicate, const std::vector<std::unique_ptr<const Scalar>> *selection, - InsertDestination *output_destination, - const LIPFilterDeployment *lip_filter_deployment); + InsertDestination *output_destination); void addPartitionAwareWorkOrders(WorkOrdersContainer *container, StorageManager *storage_manager, const Predicate *predicate, const std::vector<std::unique_ptr<const Scalar>> *selection, - InsertDestination *output_destination, - const LIPFilterDeployment *lip_filter_deployment); + InsertDestination *output_destination); private: /** @@ -332,7 +328,6 @@ class SelectWorkOrder : public WorkOrder { const std::vector<std::unique_ptr<const Scalar>> *selection, InsertDestination *output_destination, StorageManager *storage_manager, - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr, const numa_node_id numa_node = 0) : WorkOrder(query_id), input_relation_(input_relation), @@ -342,8 +337,7 @@ class SelectWorkOrder : public WorkOrder { simple_selection_(simple_selection), selection_(selection), output_destination_(DCHECK_NOTNULL(output_destination)), - storage_manager_(DCHECK_NOTNULL(storage_manager)), - lip_filter_adaptive_prober_(lip_filter_adaptive_prober) { + storage_manager_(DCHECK_NOTNULL(storage_manager)) { preferred_numa_nodes_.push_back(numa_node); } @@ -376,7 +370,6 @@ class SelectWorkOrder : public WorkOrder { const std::vector<std::unique_ptr<const Scalar>> *selection, InsertDestination *output_destination, StorageManager *storage_manager, - LIPFilterAdaptiveProber *lip_filter_adaptive_prober = nullptr, const numa_node_id numa_node = 0) : WorkOrder(query_id), input_relation_(input_relation), @@ -386,8 +379,7 @@ class SelectWorkOrder : public WorkOrder { simple_selection_(std::move(simple_selection)), selection_(selection), output_destination_(DCHECK_NOTNULL(output_destination)), - storage_manager_(DCHECK_NOTNULL(storage_manager)), - lip_filter_adaptive_prober_(lip_filter_adaptive_prober) { + storage_manager_(DCHECK_NOTNULL(storage_manager)) { preferred_numa_nodes_.push_back(numa_node); } @@ -415,8 +407,6 @@ class SelectWorkOrder : public WorkOrder { InsertDestination *output_destination_; StorageManager *storage_manager_; - std::unique_ptr<LIPFilterAdaptiveProber> lip_filter_adaptive_prober_; - DISALLOW_COPY_AND_ASSIGN(SelectWorkOrder); };