http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/InsertSelection.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/InsertSelection.hpp b/query_optimizer/physical/InsertSelection.hpp deleted file mode 100644 index 4e22a6e..0000000 --- a/query_optimizer/physical/InsertSelection.hpp +++ /dev/null @@ -1,131 +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_PHYSICAL_INSERT_SELECTION_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_INSERT_SELECTION_HPP_ - -#include <memory> -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/physical/Physical.hpp" -#include "query_optimizer/physical/PhysicalType.hpp" -#include "utility/Macros.hpp" - -#include "glog/logging.h" - -namespace quickstep { -namespace optimizer { -namespace physical { - -/** \addtogroup OptimizerPhysical - * @{ - */ - -class InsertSelection; -typedef std::shared_ptr<const InsertSelection> InsertSelectionPtr; - -/** - * @brief Inserts the results from a SELECT query into a relation. - */ -class InsertSelection : public Physical { - public: - PhysicalType getPhysicalType() const override { - return PhysicalType::kInsertSelection; - } - - std::string getName() const override { return "InsertSelection"; } - - /** - * @return The destination relation to insert the selection to. - */ - const PhysicalPtr& destination() const { return destination_; } - - /** - * @return The selection to be inserted. - */ - const PhysicalPtr& selection() const { return selection_; } - - PhysicalPtr copyWithNewChildren( - const std::vector<PhysicalPtr> &new_children) const override { - DCHECK_EQ(getNumChildren(), new_children.size()); - return Create(new_children[0], new_children[1]); - } - - std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const override { - return {}; - } - - std::vector<expressions::AttributeReferencePtr> getReferencedAttributes() const override { - return selection_->getOutputAttributes(); - } - - bool maybeCopyWithPrunedExpressions( - const expressions::UnorderedNamedExpressionSet &referenced_expressions, - PhysicalPtr *output) const override { - return false; - } - - /** - * @brief Creates an InsertSelection physical node. - * - * @param destination The destination relation to insert the selection to. - * @param selection The selection to be inserted. - * @return An immutable InsertSelection node. - */ - static InsertSelectionPtr Create( - const PhysicalPtr &destination, - const PhysicalPtr &selection) { - return InsertSelectionPtr(new InsertSelection(destination, selection)); - } - - protected: - void getFieldStringItems( - std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override; - - private: - InsertSelection(const PhysicalPtr &destination, - const PhysicalPtr &selection) - : destination_(destination), - selection_(selection) { - addChild(destination_); - addChild(selection_); - } - - PhysicalPtr destination_; - PhysicalPtr selection_; - - DISALLOW_COPY_AND_ASSIGN(InsertSelection); -}; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_INSERT_SELECTION_HPP_ */
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/InsertTuple.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/InsertTuple.cpp b/query_optimizer/physical/InsertTuple.cpp deleted file mode 100644 index 3085389..0000000 --- a/query_optimizer/physical/InsertTuple.cpp +++ /dev/null @@ -1,49 +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/physical/InsertTuple.hpp" - -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/ScalarLiteral.hpp" -#include "utility/Cast.hpp" - -namespace quickstep { -namespace optimizer { -namespace physical { - -void InsertTuple::getFieldStringItems( - std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const { - non_container_child_field_names->push_back("input"); - non_container_child_fields->push_back(input_); - - container_child_field_names->push_back("column_values"); - container_child_fields->push_back(CastSharedPtrVector<OptimizerTreeBase>(column_values_)); -} - -} // namespace physical -} // namespace optimizer -} // namespace quickstep http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/InsertTuple.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/InsertTuple.hpp b/query_optimizer/physical/InsertTuple.hpp deleted file mode 100644 index 40f2582..0000000 --- a/query_optimizer/physical/InsertTuple.hpp +++ /dev/null @@ -1,138 +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_PHYSICAL_INSERT_TUPLE_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_INSERT_TUPLE_HPP_ - -#include <memory> -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/expressions/NamedExpression.hpp" -#include "query_optimizer/expressions/ScalarLiteral.hpp" -#include "query_optimizer/physical/Physical.hpp" -#include "query_optimizer/physical/PhysicalType.hpp" -#include "utility/Macros.hpp" - -#include "glog/logging.h" - -namespace quickstep { - -class CatalogRelation; - -namespace optimizer { -namespace physical { - -/** \addtogroup OptimizerPhysical - * @{ - */ - -class InsertTuple; -typedef std::shared_ptr<const InsertTuple> InsertTuplePtr; - -/** - * @brief Inserts a tuple with <column_values_> into a relation - * <catalog_relation>. - */ -class InsertTuple : public Physical { - public: - PhysicalType getPhysicalType() const override { - return PhysicalType::kInsertTuple; - } - - std::string getName() const override { return "InsertTuple"; } - - /** - * @return The input that produces the relation to insert the tuple to. - */ - const PhysicalPtr& input() const { return input_; } - - /** - * @return Column values to be used to compose a new tuple. - */ - const std::vector<expressions::ScalarLiteralPtr>& column_values() const { - return column_values_; - } - - PhysicalPtr copyWithNewChildren( - const std::vector<PhysicalPtr> &new_children) const override { - DCHECK_EQ(getNumChildren(), new_children.size()); - return Create(new_children[0], column_values_); - } - - std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const override { - return {}; - } - - std::vector<expressions::AttributeReferencePtr> getReferencedAttributes() const override { - return {}; - } - - bool maybeCopyWithPrunedExpressions( - const expressions::UnorderedNamedExpressionSet &referenced_expressions, - PhysicalPtr *output) const override { - return false; - } - - /** - * @brief Creates an InsertTuple physical node. - * - * @param input The input produces the relation to insert the tuple to. - * @param column_values The column values of the tuple to be inserted. - * The type checking is done in the Resolver. - * @return An immutable InsertTuple node. - */ - static InsertTuplePtr Create( - const PhysicalPtr &input, - const std::vector<expressions::ScalarLiteralPtr> &column_values) { - return InsertTuplePtr(new InsertTuple(input, column_values)); - } - - protected: - void getFieldStringItems( - std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override; - - private: - InsertTuple(const PhysicalPtr &input, - const std::vector<expressions::ScalarLiteralPtr> &column_values) - : input_(input), column_values_(column_values) { - addChild(input_); - } - - PhysicalPtr input_; - std::vector<expressions::ScalarLiteralPtr> column_values_; - - DISALLOW_COPY_AND_ASSIGN(InsertTuple); -}; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_INSERT_TUPLE_HPP_ */ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/Join.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/Join.hpp b/query_optimizer/physical/Join.hpp deleted file mode 100644 index 305aa52..0000000 --- a/query_optimizer/physical/Join.hpp +++ /dev/null @@ -1,88 +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_PHYSICAL_JOIN_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_JOIN_HPP_ - -#include <memory> -#include <vector> - -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/expressions/NamedExpression.hpp" -#include "query_optimizer/physical/Physical.hpp" -#include "utility/Macros.hpp" - -namespace quickstep { -namespace optimizer { -namespace physical { - -/** \addtogroup OptimizerPhysical - * @{ - */ - -class Join; -typedef std::shared_ptr<const Join> JoinPtr; - -/** - * @brief Base class for physical join nodes. - */ -class Join : public Physical { - public: - /** - * @brief Destructor. - */ - ~Join() override {} - - /** - * @brief Gets the project expressions. - * - * @return The list of project expressions. - */ - const std::vector<expressions::NamedExpressionPtr>& project_expressions() const { - return project_expressions_; - } - - std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const override { - return expressions::ToRefVector(project_expressions_); - } - - protected: - /** - * @brief Constructor. - * - * @param project_expressions The project expressions. - */ - explicit Join( - const std::vector<expressions::NamedExpressionPtr>& project_expressions) - : project_expressions_(project_expressions) {} - - private: - std::vector<expressions::NamedExpressionPtr> project_expressions_; - - DISALLOW_COPY_AND_ASSIGN(Join); -}; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_JOIN_HPP_ */ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/LIPFilterConfiguration.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/LIPFilterConfiguration.hpp b/query_optimizer/physical/LIPFilterConfiguration.hpp deleted file mode 100644 index 62a6149..0000000 --- a/query_optimizer/physical/LIPFilterConfiguration.hpp +++ /dev/null @@ -1,171 +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_PHYSICAL_LIP_FILTER_CONFIGURATION_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_LIP_FILTER_CONFIGURATION_HPP_ - -#include <cstddef> -#include <map> -#include <memory> -#include <vector> - -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "utility/Macros.hpp" -#include "utility/lip_filter/LIPFilter.hpp" - -namespace quickstep { -namespace optimizer { -namespace physical { - -/** \addtogroup OptimizerPhysical - * @{ - */ - -class Physical; -typedef std::shared_ptr<const Physical> PhysicalPtr; - -/** - * @brief Optimizer information for a LIP filter builder. - */ -struct LIPFilterBuildInfo { - /** - * @brief Constructor. - * - * @param build_attribute_in The attribute to build the LIP filter with. - * @param filter_cardinality_in The LIP filter's cardinality. - * @param filter_type_in The LIP filter's type. - */ - LIPFilterBuildInfo(const expressions::AttributeReferencePtr &build_attribute_in, - const std::size_t filter_cardinality_in, - const LIPFilterType &filter_type_in) - : build_attribute(build_attribute_in), - filter_cardinality(filter_cardinality_in), - filter_type(filter_type_in) { - } - const expressions::AttributeReferencePtr build_attribute; - const std::size_t filter_cardinality; - const LIPFilterType filter_type; -}; - -/** - * @brief Optimizer information for a LIP filter prober. - */ -struct LIPFilterProbeInfo { - /** - * @brief Constructor. - * - * @param probe_attribute_in The attribute to probe the LIP filter with. - * @param build_attribute_in The attribute that the LIP filter is built with. - * @param builder_in The physical node that the LIP filter's builder is attached to. - */ - LIPFilterProbeInfo(const expressions::AttributeReferencePtr &probe_attribute_in, - const expressions::AttributeReferencePtr &build_attribute_in, - const PhysicalPtr &builder_in) - : probe_attribute(probe_attribute_in), - build_attribute(build_attribute_in), - builder(builder_in) { - } - const expressions::AttributeReferencePtr probe_attribute; - const expressions::AttributeReferencePtr build_attribute; - const PhysicalPtr builder; -}; - - -class LIPFilterConfiguration; -typedef std::shared_ptr<const LIPFilterConfiguration> LIPFilterConfigurationPtr; - -/** - * @brief Configuration information of all the LIP filters in a query plan. - */ -class LIPFilterConfiguration { - public: - /** - * @brief Constructor. - */ - LIPFilterConfiguration() { - } - - /** - * @brief Add information for a LIP filter builder. - * - * @param build_attribute The attribute to build the LIP filter with. - * @param builder The physical node to attach the LIP filter builder to. - * @param filter_size The LIP filter's cardinality. - * @param filter_type The LIP filter's type. - */ - void addBuildInfo(const expressions::AttributeReferencePtr &build_attribute, - const PhysicalPtr &builder, - const std::size_t filter_size, - const LIPFilterType &filter_type) { - build_info_map_[builder].emplace_back( - build_attribute, filter_size, filter_type); - } - - /** - * @brief Add information for a LIP filter prober. - * - * @param probe_attribute The attribute to probe the LIP filter with. - * @param prober The physical node to attach the LIP filter prober to. - * @param build_attribute The attribute that the LIP filter is built with. - * @param builder The physical node that the LIP filter's builder is attached to. - */ - void addProbeInfo(const expressions::AttributeReferencePtr &probe_attribute, - const PhysicalPtr &prober, - const expressions::AttributeReferencePtr &build_attribute, - const PhysicalPtr &builder) { - probe_info_map_[prober].emplace_back( - probe_attribute, build_attribute, builder); - } - - /** - * @brief Get all the LIP filter builders. - * - * @return A map where each key is a physical node and each mapped value is - * a vector of all the LIP filter builders that are attached to the - * physical node. - */ - const std::map<PhysicalPtr, std::vector<LIPFilterBuildInfo>>& getBuildInfoMap() const { - return build_info_map_; - } - - /** - * @brief Get all the LIP filter probers. - * - * @return A map where each key is a physical node and each mapped value is - * a vector of all the LIP filter probers that are attached to the - * physical node. - */ - const std::map<PhysicalPtr, std::vector<LIPFilterProbeInfo>>& getProbeInfoMap() const { - return probe_info_map_; - } - - private: - std::map<PhysicalPtr, std::vector<LIPFilterBuildInfo>> build_info_map_; - std::map<PhysicalPtr, std::vector<LIPFilterProbeInfo>> probe_info_map_; - - DISALLOW_COPY_AND_ASSIGN(LIPFilterConfiguration); -}; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_LIP_FILTER_CONFIGURATION_HPP_ */ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/NestedLoopsJoin.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/NestedLoopsJoin.cpp b/query_optimizer/physical/NestedLoopsJoin.cpp deleted file mode 100644 index ba3d223..0000000 --- a/query_optimizer/physical/NestedLoopsJoin.cpp +++ /dev/null @@ -1,91 +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/physical/NestedLoopsJoin.hpp" - -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/expressions/NamedExpression.hpp" - -namespace quickstep { -namespace optimizer { -namespace physical { - -std::vector<expressions::AttributeReferencePtr> NestedLoopsJoin::getReferencedAttributes() const { - std::vector<expressions::AttributeReferencePtr> referenced_attributes; - for (const expressions::NamedExpressionPtr &project_expression : - project_expressions()) { - const std::vector<expressions::AttributeReferencePtr> referenced_attributes_in_expression = - project_expression->getReferencedAttributes(); - referenced_attributes.insert(referenced_attributes.end(), - referenced_attributes_in_expression.begin(), - referenced_attributes_in_expression.end()); - } - const std::vector<expressions::AttributeReferencePtr> referenced_attributes_in_predicate = - join_predicate_->getReferencedAttributes(); - referenced_attributes.insert(referenced_attributes.end(), - referenced_attributes_in_predicate.begin(), - referenced_attributes_in_predicate.end()); - return referenced_attributes; -} - -bool NestedLoopsJoin::maybeCopyWithPrunedExpressions( - const expressions::UnorderedNamedExpressionSet &referenced_expressions, - PhysicalPtr *output) const { - std::vector<expressions::NamedExpressionPtr> new_project_expressions; - const std::vector<expressions::NamedExpressionPtr> ¤t_project_expressions = - project_expressions(); - for (const expressions::NamedExpressionPtr &project_expression : - current_project_expressions) { - if (referenced_expressions.find(project_expression) != - referenced_expressions.end()) { - new_project_expressions.emplace_back(project_expression); - } - } - if (new_project_expressions.size() != current_project_expressions.size()) { - *output = Create(left(), right(), join_predicate_, new_project_expressions); - return true; - } - return false; -} - -void NestedLoopsJoin::getFieldStringItems( - std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const { - BinaryJoin::getFieldStringItems(inline_field_names, - inline_field_values, - non_container_child_field_names, - non_container_child_fields, - container_child_field_names, - container_child_fields); - non_container_child_field_names->push_back("join_predicate"); - non_container_child_fields->push_back(join_predicate_); -} - -} // namespace physical -} // namespace optimizer -} // namespace quickstep http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/NestedLoopsJoin.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/NestedLoopsJoin.hpp b/query_optimizer/physical/NestedLoopsJoin.hpp deleted file mode 100644 index c547ae8..0000000 --- a/query_optimizer/physical/NestedLoopsJoin.hpp +++ /dev/null @@ -1,133 +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_PHYSICAL_NESTED_LOOPS_JOIN_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_NESTED_LOOPS_JOIN_HPP_ - -#include <memory> -#include <set> -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/expressions/NamedExpression.hpp" -#include "query_optimizer/expressions/Predicate.hpp" -#include "query_optimizer/physical/BinaryJoin.hpp" -#include "query_optimizer/physical/Physical.hpp" -#include "query_optimizer/physical/PhysicalType.hpp" -#include "utility/Macros.hpp" - -#include "glog/logging.h" - -namespace quickstep { -namespace optimizer { -namespace physical { - -/** \addtogroup OptimizerPhysical - * @{ - */ - -class NestedLoopsJoin; -typedef std::shared_ptr<const NestedLoopsJoin> NestedLoopsJoinPtr; - -/** - * @brief Physical nested loops join node. - */ -class NestedLoopsJoin : public BinaryJoin { - public: - PhysicalType getPhysicalType() const override { - return PhysicalType::kNestedLoopsJoin; - } - - std::string getName() const override { return "NestedLoopsJoin"; } - - /** - * @return The join predicate. - */ - const expressions::PredicatePtr& join_predicate() const { - return join_predicate_; - } - - PhysicalPtr copyWithNewChildren( - const std::vector<PhysicalPtr> &new_children) const override { - DCHECK_EQ(children().size(), new_children.size()); - return Create(new_children[0], - new_children[1], - join_predicate_, - project_expressions()); - } - - std::vector<expressions::AttributeReferencePtr> getReferencedAttributes() const override; - - bool maybeCopyWithPrunedExpressions( - const expressions::UnorderedNamedExpressionSet &referenced_expressions, - PhysicalPtr *output) const override; - - /** - * @brief Creates a NestedLoopsJoin. - * - * @param left The left operand. - * @param right The right operand. - * @param join_predicate The join predicate. - * @param project_expressions The project expressions. - * @return An immutable NestedLoopsJoin. - */ - static NestedLoopsJoinPtr Create( - const PhysicalPtr &left, - const PhysicalPtr &right, - const expressions::PredicatePtr &join_predicate, - const std::vector<expressions::NamedExpressionPtr> &project_expressions) { - return NestedLoopsJoinPtr( - new NestedLoopsJoin(left, right, join_predicate, project_expressions)); - } - - protected: - void getFieldStringItems( - std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override; - - private: - NestedLoopsJoin( - const PhysicalPtr &left, - const PhysicalPtr &right, - const expressions::PredicatePtr &join_predicate, - const std::vector<expressions::NamedExpressionPtr> &project_expressions) - : BinaryJoin(left, right, project_expressions), - join_predicate_(join_predicate) { - DCHECK(join_predicate_ != nullptr); - } - - expressions::PredicatePtr join_predicate_; - - DISALLOW_COPY_AND_ASSIGN(NestedLoopsJoin); -}; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_NESTED_LOOPS_JOIN_HPP_ */ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/OptimizerPhysicalModule.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/OptimizerPhysicalModule.hpp b/query_optimizer/physical/OptimizerPhysicalModule.hpp deleted file mode 100644 index fd2cc02..0000000 --- a/query_optimizer/physical/OptimizerPhysicalModule.hpp +++ /dev/null @@ -1,24 +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. - **/ - -/** @defgroup OptimizerPhysical - * @ingroup QueryOptimizer - * - * Physical operators used in the query optimizer. - **/ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/PatternMatcher.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/PatternMatcher.hpp b/query_optimizer/physical/PatternMatcher.hpp deleted file mode 100644 index 5cd6fd3..0000000 --- a/query_optimizer/physical/PatternMatcher.hpp +++ /dev/null @@ -1,133 +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_PHYSICAL_PATTERN_MATCHER_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_PATTERN_MATCHER_HPP_ - -#include <memory> -#include <type_traits> - -#include "query_optimizer/physical/PhysicalType.hpp" - -namespace quickstep { -namespace optimizer { -namespace physical { - -class Aggregate; -class BinaryJoin; -class CopyFrom; -class CreateTable; -class DeleteTuples; -class DropTable; -class HashJoin; -class InsertTuple; -class Join; -class NestedLoopsJoin; -class Selection; -class SharedSubplanReference; -class Sort; -class TableReference; -class TopLevelPlan; -class UpdateTable; - -/** \addtogroup OptimizerPhysical - * @{ - */ - -/** - * @brief Templated matcher for each Physical node class. - * - * @param PhysicalClass The Physical class for the physical node to be matched with. - * @param physical_types All the physical types of the Physical class. - */ -template <class PhysicalClass, PhysicalType... physical_types> -class SomePhysicalNode { - public: - /** - * @brief Checks whether the object managed in \p physical is an instance - * of the template argument PhysicalClass by checking whether - * it is one of types in the given template arguments physical_types. - * - * @param physical The physical node to be checked. - * @return True for a match; otherwise false. - */ - template <class OtherPhysicalClass> - static bool Matches(const std::shared_ptr<const OtherPhysicalClass> &physical) { - for (const PhysicalType physical_type : kPhysicalTypes) { - if (physical->getPhysicalType() == physical_type) { - return true; - } - } - return false; - } - - /** - * @brief Checks whether the object managed in \p physical is an instance - * of the template argument PhysicalClass by checking whether - * it is one of types in the given template arguments physical_types, - * If true, it additionally casts \p physical to a std::shared_ptr - * \p cast_physical of the template argument PhysicalClass. - * - * @param physical The physical node to be checked. - * @param cast_physical The cast physical node. - * @return True if the object managed in \p physical is an instance of PhysicalClass. - */ - template <class OtherPhysicalClass> - static bool MatchesWithConditionalCast(const std::shared_ptr<const OtherPhysicalClass> &physical, - std::shared_ptr<const PhysicalClass> *cast_physical) { - bool is_match = Matches(physical); - if (is_match) { - *cast_physical = std::static_pointer_cast<const PhysicalClass>(physical); - } - return is_match; - } - - private: - constexpr static PhysicalType kPhysicalTypes[] = {physical_types...}; -}; - -template <class PhysicalClass, PhysicalType... physical_types> -constexpr PhysicalType SomePhysicalNode<PhysicalClass, physical_types...>::kPhysicalTypes[]; - -// Specializations for all Physical classes. - -using SomeAggregate = SomePhysicalNode<Aggregate, PhysicalType::kAggregate>; -using SomeBinaryJoin = SomePhysicalNode<BinaryJoin, PhysicalType::kHashJoin, PhysicalType::kNestedLoopsJoin>; -using SomeCopyFrom = SomePhysicalNode<CopyFrom, PhysicalType::kCopyFrom>; -using SomeCreateTable = SomePhysicalNode<CreateTable, PhysicalType::kCreateTable>; -using SomeDeleteTuples = SomePhysicalNode<DeleteTuples, PhysicalType::kDeleteTuples>; -using SomeDropTable = SomePhysicalNode<DropTable, PhysicalType::kDropTable>; -using SomeHashJoin = SomePhysicalNode<HashJoin, PhysicalType::kHashJoin>; -using SomeInsertTuple = SomePhysicalNode<InsertTuple, PhysicalType::kInsertTuple>; -using SomeJoin = SomePhysicalNode<Join, PhysicalType::kHashJoin, PhysicalType::kNestedLoopsJoin>; -using SomeNestedLoopsJoin = SomePhysicalNode<NestedLoopsJoin, PhysicalType::kNestedLoopsJoin>; -using SomeSelection = SomePhysicalNode<Selection, PhysicalType::kSelection>; -using SomeSharedSubplanReference = SomePhysicalNode<SharedSubplanReference, PhysicalType::kSharedSubplanReference>; -using SomeSort = SomePhysicalNode<Sort, PhysicalType::kSort>; -using SomeTableReference = SomePhysicalNode<TableReference, PhysicalType::kTableReference>; -using SomeTopLevelPlan = SomePhysicalNode<TopLevelPlan, PhysicalType::kTopLevelPlan>; -using SomeUpdateTable = SomePhysicalNode<UpdateTable, PhysicalType::kUpdateTable>; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_PATTERN_MATCHER_HPP_ */ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/Physical.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/Physical.hpp b/query_optimizer/physical/Physical.hpp deleted file mode 100644 index 4bed593..0000000 --- a/query_optimizer/physical/Physical.hpp +++ /dev/null @@ -1,105 +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_PHYSICAL_PHYSICAL_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_PHYSICAL_HPP_ - -#include <memory> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/physical/PhysicalType.hpp" - -#include "utility/Macros.hpp" - -namespace quickstep { -namespace optimizer { -namespace physical { - -/** \addtogroup OptimizerPhysical - * @{ - */ - -class Physical; -typedef std::shared_ptr<const Physical> PhysicalPtr; - -/** - * @brief Base class for physical plan nodes. - */ -class Physical : public OptimizerTree<Physical> { - public: - /** - * @brief Destructor. - */ - ~Physical() override {} - - /** - * @return The physical node type. - */ - virtual PhysicalType getPhysicalType() const = 0; - - /** - * @brief Gets the output attributes of this node. - * - * @return The output AttributeReferences by this node. - */ - virtual std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const = 0; - - /** - * @brief Returns AttributeReferences referenced by the input expressions of - * this physical node. - * - * @return A vector of AttributeReference referenced by the input expressions - * of this physical node. - */ - virtual std::vector<expressions::AttributeReferencePtr> getReferencedAttributes() const = 0; - - /** - * @brief Creates a new copy in \p output if there are some project - * expressions that are not in \p referenced_expressions. - * Otherwise, keeps \p output unchanged. - * - * @param referenced_attributes The attributes to be kept in the project - * expression list. - * @param output A new copy if some project expressions should be removed. - * @return True if a new copy is generated (i.e. \p output is changed). - */ - virtual bool maybeCopyWithPrunedExpressions( - const expressions::UnorderedNamedExpressionSet &referenced_expressions, - PhysicalPtr *output) const = 0; - - protected: - /** - * @brief Constructor. - */ - Physical() {} - - private: - DISALLOW_COPY_AND_ASSIGN(Physical); -}; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_PHYSICAL_HPP_ */ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/PhysicalType.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/PhysicalType.hpp b/query_optimizer/physical/PhysicalType.hpp deleted file mode 100644 index f5f35a1..0000000 --- a/query_optimizer/physical/PhysicalType.hpp +++ /dev/null @@ -1,62 +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_PHYSICAL_PHYSICAL_TYPE_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_PHYSICAL_TYPE_HPP_ - -namespace quickstep { -namespace optimizer { -namespace physical { - -/** \addtogroup OptimizerPhysical - * @{ - */ - -/** - * @brief Optimizer physical node types. - **/ -enum class PhysicalType { - kAggregate, - kCopyFrom, - kCreateIndex, - kCreateTable, - kDeleteTuples, - kDropTable, - kHashJoin, - kInsertSelection, - kInsertTuple, - kNestedLoopsJoin, - kSample, - kSelection, - kSharedSubplanReference, - kSort, - kTableGenerator, - kTableReference, - kTopLevelPlan, - kUpdateTable, - kWindowAggregate -}; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_PHYSICAL_TYPE_HPP_ */ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/Sample.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/Sample.cpp b/query_optimizer/physical/Sample.cpp deleted file mode 100644 index 689c3cc..0000000 --- a/query_optimizer/physical/Sample.cpp +++ /dev/null @@ -1,64 +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/physical/Sample.hpp" - -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/expressions/NamedExpression.hpp" -#include "utility/Cast.hpp" - -#include "glog/logging.h" - -namespace quickstep { -namespace optimizer { -namespace physical { - -namespace E = ::quickstep::optimizer::expressions; - -PhysicalPtr Sample::copyWithNewChildren( - const std::vector<PhysicalPtr> &new_children) const { - DCHECK_EQ(children().size(), new_children.size()); - return Create(new_children[0], is_block_sample_, percentage_); -} - -void Sample::getFieldStringItems( - std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const { - non_container_child_field_names->emplace_back("input"); - non_container_child_fields->emplace_back(input()); - - inline_field_names->emplace_back("percentage"); - inline_field_values->emplace_back(std::to_string(percentage_)); - - inline_field_names->emplace_back("is_block_sample"); - inline_field_values->emplace_back(std::to_string(is_block_sample_)); -} - -} // namespace physical -} // namespace optimizer -} // namespace quickstep http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/Sample.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/Sample.hpp b/query_optimizer/physical/Sample.hpp deleted file mode 100644 index e3e8f17..0000000 --- a/query_optimizer/physical/Sample.hpp +++ /dev/null @@ -1,138 +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_PHYSICAL_SAMPLE_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_SAMPLE_HPP_ - -#include <memory> -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/expressions/NamedExpression.hpp" -#include "query_optimizer/physical/Physical.hpp" -#include "query_optimizer/physical/PhysicalType.hpp" -#include "utility/Macros.hpp" - -namespace quickstep { -namespace optimizer { -namespace physical { - -/** \addtogroup OptimizerPhysical - * @{ - */ - -class Sample; -typedef std::shared_ptr<const Sample> SamplePtr; - -/** - * @brief Sample operator that samples the data at a block level or - * at the tuple level and outputs them as a new relation. - */ -class Sample : public Physical { - public: - PhysicalType getPhysicalType() const override { return PhysicalType::kSample; } - - std::string getName() const override { return " SAMPLE"; } - - std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const override { - return input_->getOutputAttributes(); - } - - std::vector<expressions::AttributeReferencePtr> getReferencedAttributes() const override { - return input_->getReferencedAttributes(); - } - - PhysicalPtr copyWithNewChildren( - const std::vector<PhysicalPtr> &new_children) const override; - - bool maybeCopyWithPrunedExpressions( - const expressions::UnorderedNamedExpressionSet &referenced_expressions, - PhysicalPtr *output) const override { - return false; - } - - /** - * @return the sample percentage. - */ - int percentage() const { - return percentage_; - } - - /** - * @return flag indicating if the sampling is block or tuple. - */ - const bool is_block_sample() const { - return is_block_sample_; - } - - /** - * @return Input physical node. - */ - const PhysicalPtr& input() const { return children()[0]; } - - /** - * @brief Creates a SamplePtr. - * @param input The input node. - * @param is_block_sample Flag indicating if the sample is block or tuple level - * @param percentage The percentage of rows or blocks to be sampled - * @return An immutable Sample. - */ - static SamplePtr Create(const PhysicalPtr &input, - const bool is_block_sample, - const int percentage) { - return SamplePtr(new Sample(input, is_block_sample, percentage)); - } - - protected: - void getFieldStringItems( - std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override; - - private: - Sample( - const PhysicalPtr &input, - const bool is_block_sample, - const int percentage) - : percentage_(percentage), - is_block_sample_(is_block_sample), - input_(input) { - addChild(input); - } - - const int percentage_; - const bool is_block_sample_; - const PhysicalPtr input_; - - DISALLOW_COPY_AND_ASSIGN(Sample); -}; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif // QUICKSTEP_QUERY_OPTIMIZER_SAMPLE_HPP_ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/Selection.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/Selection.cpp b/query_optimizer/physical/Selection.cpp deleted file mode 100644 index 36ade04..0000000 --- a/query_optimizer/physical/Selection.cpp +++ /dev/null @@ -1,107 +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/physical/Selection.hpp" - -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/expressions/NamedExpression.hpp" -#include "utility/Cast.hpp" - -#include "glog/logging.h" - -namespace quickstep { -namespace optimizer { -namespace physical { - -namespace E = ::quickstep::optimizer::expressions; - -PhysicalPtr Selection::copyWithNewChildren( - const std::vector<PhysicalPtr> &new_children) const { - DCHECK_EQ(children().size(), new_children.size()); - return Create(new_children[0], project_expressions_, filter_predicate_); -} - -std::vector<E::AttributeReferencePtr> Selection::getOutputAttributes() const { - return ToRefVector(project_expressions_); -} - -std::vector<E::AttributeReferencePtr> Selection::getReferencedAttributes() const { - std::vector<E::AttributeReferencePtr> referenced_attributes; - for (const E::NamedExpressionPtr &project_expression : project_expressions_) { - const std::vector<E::AttributeReferencePtr> referenced_attributes_in_expression = - project_expression->getReferencedAttributes(); - referenced_attributes.insert(referenced_attributes.end(), - referenced_attributes_in_expression.begin(), - referenced_attributes_in_expression.end()); - } - if (filter_predicate_ != nullptr) { - const std::vector<E::AttributeReferencePtr> referenced_attributes_in_predicate = - filter_predicate_->getReferencedAttributes(); - referenced_attributes.insert(referenced_attributes.end(), - referenced_attributes_in_predicate.begin(), - referenced_attributes_in_predicate.end()); - } - return referenced_attributes; -} - -bool Selection::maybeCopyWithPrunedExpressions( - const E::UnorderedNamedExpressionSet &referenced_attributes, - PhysicalPtr *output) const { - std::vector<E::NamedExpressionPtr> new_project_expressions; - for (const E::NamedExpressionPtr &project_expression : project_expressions_) { - if (referenced_attributes.find(project_expression) != - referenced_attributes.end()) { - new_project_expressions.emplace_back(project_expression); - } - } - if (new_project_expressions.size() != project_expressions_.size()) { - *output = Create(input(), new_project_expressions, filter_predicate_); - return true; - } - return false; -} - -void Selection::getFieldStringItems( - std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const { - non_container_child_field_names->emplace_back("input"); - non_container_child_fields->emplace_back(input()); - - if (filter_predicate_ != nullptr) { - non_container_child_field_names->emplace_back("filter_predicate"); - non_container_child_fields->emplace_back(filter_predicate_); - } - - container_child_field_names->emplace_back("project_expressions"); - container_child_fields->emplace_back( - CastSharedPtrVector<OptimizerTreeBase>(project_expressions_)); -} - -} // namespace physical -} // namespace optimizer -} // namespace quickstep http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/Selection.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/Selection.hpp b/query_optimizer/physical/Selection.hpp deleted file mode 100644 index b6874a1..0000000 --- a/query_optimizer/physical/Selection.hpp +++ /dev/null @@ -1,162 +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_PHYSICAL_SELECTION_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_SELECTION_HPP_ - -#include <memory> -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/expressions/NamedExpression.hpp" -#include "query_optimizer/expressions/LogicalAnd.hpp" -#include "query_optimizer/expressions/Predicate.hpp" -#include "query_optimizer/physical/Physical.hpp" -#include "query_optimizer/physical/PhysicalType.hpp" -#include "utility/Macros.hpp" - -namespace quickstep { -namespace optimizer { -namespace physical { - -/** \addtogroup OptimizerPhysical - * @{ - */ - -class Selection; -typedef std::shared_ptr<const Selection> SelectionPtr; - -/** - * @brief Physical node that evaluates a predicate for each input tuple, - * computes and outputs the values of project expressions if the - * predicate evaluates to true. - */ -class Selection : public Physical { - public: - PhysicalType getPhysicalType() const override { return PhysicalType::kSelection; } - - std::string getName() const override { return "Selection"; } - - /** - * @return Filter predicate to evaluate during scanning the input. - */ - inline const expressions::PredicatePtr& filter_predicate() const { - return filter_predicate_; - } - - /** - * @return Project expressions to compute. - */ - inline const std::vector<expressions::NamedExpressionPtr>& project_expressions() const { - return project_expressions_; - } - - /** - * @return Input physical node. - */ - inline const PhysicalPtr& input() const { return children()[0]; } - - PhysicalPtr copyWithNewChildren( - const std::vector<PhysicalPtr> &new_children) const override; - - std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const override; - - std::vector<expressions::AttributeReferencePtr> getReferencedAttributes() const override; - - bool maybeCopyWithPrunedExpressions( - const expressions::UnorderedNamedExpressionSet &referenced_attributes, - PhysicalPtr *output) const override; - - /** - * @brief Creates a Selection. - * - * @param input The input node. - * @param project_expressions The project expressions. - * @param filter_predicate The filter predicate. Can be NULL. - * @return An immutable Selection. - */ - static SelectionPtr Create( - const PhysicalPtr &input, - const std::vector<expressions::NamedExpressionPtr> &project_expressions, - const expressions::PredicatePtr &filter_predicate) { - return SelectionPtr( - new Selection(input, project_expressions, filter_predicate)); - } - - /** - * @brief Creates a conjunctive predicate with \p filter_predicates - * as operands, and creates a Selection with the predicate. - * - * @param input The input node. - * @param project_expressions The project expressions. - * @param filter_predicates A list of filter predicates. - * The predicate in the created Selection is - * a conjunction of them. - * @return An immutable Selection. - */ - static SelectionPtr CreateWithConjuction( - const PhysicalPtr &input, - const std::vector<expressions::NamedExpressionPtr> &project_expressions, - const std::vector<expressions::PredicatePtr> &filter_predicates) { - if (filter_predicates.size() > 1u) { - return Create(input, project_expressions, - expressions::LogicalAnd::Create(filter_predicates)); - } else if (filter_predicates.size() == 1u) { - return Create(input, project_expressions, filter_predicates[0]); - } else { - return Create(input, project_expressions, expressions::PredicatePtr()); - } - } - - protected: - void getFieldStringItems( - std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override; - - private: - Selection( - const PhysicalPtr &input, - const std::vector<expressions::NamedExpressionPtr> &project_expressions, - const expressions::PredicatePtr &filter_predicate) - : project_expressions_(project_expressions), - filter_predicate_(filter_predicate) { - addChild(input); - } - - std::vector<expressions::NamedExpressionPtr> project_expressions_; - // Can be NULL. If NULL, the filter predicate is treated as the literal true. - expressions::PredicatePtr filter_predicate_; - - DISALLOW_COPY_AND_ASSIGN(Selection); -}; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_SELECTION_HPP_ */ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/SharedSubplanReference.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/SharedSubplanReference.cpp b/query_optimizer/physical/SharedSubplanReference.cpp deleted file mode 100644 index 1ba9b16..0000000 --- a/query_optimizer/physical/SharedSubplanReference.cpp +++ /dev/null @@ -1,54 +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/physical/SharedSubplanReference.hpp" - -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/physical/Physical.hpp" -#include "utility/Cast.hpp" - -#include "glog/logging.h" - -namespace quickstep { -namespace optimizer { -namespace physical { - -void SharedSubplanReference::getFieldStringItems( - std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const { - inline_field_names->push_back("subplan_id"); - inline_field_values->push_back(std::to_string(subplan_id_)); - - container_child_field_names->push_back("referenced_attributes"); - container_child_fields->push_back(CastSharedPtrVector<OptimizerTreeBase>(referenced_attributes_)); - - container_child_field_names->push_back("output_attributes"); - container_child_fields->push_back(CastSharedPtrVector<OptimizerTreeBase>(output_attributes_)); -} - -} // namespace physical -} // namespace optimizer -} // namespace quickstep http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/SharedSubplanReference.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/SharedSubplanReference.hpp b/query_optimizer/physical/SharedSubplanReference.hpp deleted file mode 100644 index 60a2866..0000000 --- a/query_optimizer/physical/SharedSubplanReference.hpp +++ /dev/null @@ -1,148 +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_PHYSICAL_SHARED_SUBPLAN_REFERENCE_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_SHARED_SUBPLAN_REFERENCE_HPP_ - -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/expressions/NamedExpression.hpp" -#include "query_optimizer/physical/Physical.hpp" -#include "query_optimizer/physical/PhysicalType.hpp" -#include "utility/Macros.hpp" - -#include "glog/logging.h" - -namespace quickstep { -namespace optimizer { -namespace physical { - -/** \addtogroup OptimizerPhysical - * @{ - */ - -class SharedSubplanReference; -typedef std::shared_ptr<const SharedSubplanReference> SharedSubplanReferencePtr; - -/** - * @breif A reference to a shared subplan stored in the TopLevelPlan node. - */ -class SharedSubplanReference : public physical::Physical { - public: - PhysicalType getPhysicalType() const override { - return PhysicalType::kSharedSubplanReference; - } - - std::string getName() const override { - return "SharedSubplanReference"; - } - - /** - * @return The ID of the shared subplan. - */ - int subplan_id() const { - return subplan_id_; - } - - /** - * @return The attributes from the referenced shared subplan. - */ - const std::vector<expressions::AttributeReferencePtr>& referenced_attributes() const { - return referenced_attributes_; - } - - /** - * @return The output attributes of this shared subplan reference. - */ - const std::vector<expressions::AttributeReferencePtr>& output_attributes() const { - return output_attributes_; - } - - std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const override { - return output_attributes_; - } - - void getFieldStringItems( - std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override; - - PhysicalPtr copyWithNewChildren(const std::vector<PhysicalPtr> &new_children) const override { - DCHECK(new_children.empty()); - return Create(subplan_id_, referenced_attributes_, output_attributes_); - } - - std::vector<expressions::AttributeReferencePtr> getReferencedAttributes() const override { - return referenced_attributes_; - } - - bool maybeCopyWithPrunedExpressions( - const expressions::UnorderedNamedExpressionSet &referenced_expressions, - PhysicalPtr *output) const override { - return false; - } - - /** - * @brief Creates a SharedSubplanReference. - * - * @param subplan_id The ID of the shared subplan, which is the index of - * the referenced shared subplan in <shared_subplans_> of the TopLevelPlan. - * @param referenced_attributes The attributes from the referenced shared subplan. - * @param output_attributes The output attributes of this shared subplan reference. - * @return An immutable SharedSubplanReference. - */ - static SharedSubplanReferencePtr Create( - int subplan_id, - const std::vector<expressions::AttributeReferencePtr> &referenced_attributes, - const std::vector<expressions::AttributeReferencePtr> &output_attributes) { - return SharedSubplanReferencePtr( - new SharedSubplanReference(subplan_id, referenced_attributes, output_attributes)); - } - - private: - SharedSubplanReference(int subplan_id, - const std::vector<expressions::AttributeReferencePtr> &referenced_attributes, - const std::vector<expressions::AttributeReferencePtr> &output_attributes) - : subplan_id_(subplan_id), - referenced_attributes_(referenced_attributes), - output_attributes_(output_attributes) { - DCHECK_EQ(output_attributes_.size(), referenced_attributes_.size()); - } - - int subplan_id_; - std::vector<expressions::AttributeReferencePtr> referenced_attributes_; - std::vector<expressions::AttributeReferencePtr> output_attributes_; - - DISALLOW_COPY_AND_ASSIGN(SharedSubplanReference); -}; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_SHARED_SUBPLAN_REFERENCE_HPP_ */ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/Sort.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/Sort.cpp b/query_optimizer/physical/Sort.cpp deleted file mode 100644 index b8bbbd4..0000000 --- a/query_optimizer/physical/Sort.cpp +++ /dev/null @@ -1,101 +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/physical/Sort.hpp" - -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/physical/Physical.hpp" -#include "utility/Cast.hpp" - -namespace quickstep { -namespace optimizer { -namespace physical { - -bool Sort::maybeCopyWithPrunedExpressions( - const expressions::UnorderedNamedExpressionSet &referenced_attributes, - PhysicalPtr *output) const { - std::vector<expressions::AttributeReferencePtr> new_non_sort_attributes; - for (const expressions::AttributeReferencePtr &non_sort_attribute : non_sort_attributes_) { - if (referenced_attributes.find(non_sort_attribute) != referenced_attributes.end()) { - new_non_sort_attributes.emplace_back(non_sort_attribute); - } - } - if (new_non_sort_attributes.size() != non_sort_attributes_.size()) { - *output = Create(input_, - sort_attributes_, - new_non_sort_attributes, - sort_ascending_, - nulls_first_flags_, - limit_); - return true; - } - return false; -} - -void Sort::getFieldStringItems(std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const { - non_container_child_field_names->push_back("input"); - non_container_child_fields->push_back(input_); - - inline_field_names->push_back("is_ascending"); - std::string ascending_list("["); - for (bool is_ascending : sort_ascending_) { - if (is_ascending) { - ascending_list.append("true,"); - } else { - ascending_list.append("false,"); - } - } - ascending_list.pop_back(); - ascending_list.append("]"); - inline_field_values->push_back(ascending_list); - - inline_field_names->push_back("nulls_first"); - std::string nulls_first_flags("["); - for (bool nulls_first_flag : nulls_first_flags_) { - if (nulls_first_flag) { - nulls_first_flags.append("true,"); - } else { - nulls_first_flags.append("false,"); - } - } - nulls_first_flags.pop_back(); - nulls_first_flags.append("]"); - inline_field_values->push_back(nulls_first_flags); - - if (limit_ != -1) { - inline_field_names->push_back("limit"); - inline_field_values->push_back(std::to_string(limit_)); - } - - container_child_field_names->push_back("sort_attributes"); - container_child_fields->push_back(CastSharedPtrVector<OptimizerTreeBase>(sort_attributes_)); -} - -} // namespace physical -} // namespace optimizer -} // namespace quickstep http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/Sort.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/Sort.hpp b/query_optimizer/physical/Sort.hpp deleted file mode 100644 index d0c6fe8..0000000 --- a/query_optimizer/physical/Sort.hpp +++ /dev/null @@ -1,192 +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_PHYSICAL_SORT_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_SORT_HPP_ - -#include <string> -#include <vector> - -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/physical/Physical.hpp" -#include "query_optimizer/physical/PhysicalType.hpp" -#include "utility/Macros.hpp" - -#include "glog/logging.h" - -namespace quickstep { -namespace optimizer { -namespace physical { - -/** \addtogroup OptimizerPhysical - * @{ - */ - -class Sort; -typedef std::shared_ptr<const Sort> SortPtr; - -/** - * @brief Sort operator. - */ -class Sort : public Physical { - public: - PhysicalType getPhysicalType() const override { - return PhysicalType::kSort; - } - - std::string getName() const override { - return "Sort"; - } - - const PhysicalPtr& input() const { - return input_; - } - - /** - * @return The sorting attributes. - */ - const std::vector<expressions::AttributeReferencePtr>& sort_attributes() const { - return sort_attributes_; - } - - /** - * @brief The order direction for every sorting attributes. - */ - const std::vector<bool>& sort_ascending() const { - return sort_ascending_; - } - - /** - * @brief The order directions for null values. - */ - const std::vector<bool>& nulls_first_flags() const { - return nulls_first_flags_; - } - - /** - * @return The number of output sorted rows. -1 for a full table sort. - */ - int limit() const { - return limit_; - } - - std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const override { - return input_->getOutputAttributes(); - } - - std::vector<expressions::AttributeReferencePtr> getReferencedAttributes() const override { - std::vector<expressions::AttributeReferencePtr> referenced_attributes = - sort_attributes_; - referenced_attributes.insert(referenced_attributes.end(), - non_sort_attributes_.begin(), - non_sort_attributes_.end()); - return referenced_attributes; - } - - PhysicalPtr copyWithNewChildren(const std::vector<PhysicalPtr> &new_children) const override { - DCHECK_EQ(getNumChildren(), new_children.size()); - return Create(new_children[0], - sort_attributes_, - non_sort_attributes_, - sort_ascending_, - nulls_first_flags_, - limit_); - } - - bool maybeCopyWithPrunedExpressions( - const expressions::UnorderedNamedExpressionSet &referenced_attributes, - PhysicalPtr *output) const override; - - /** - * @brief Creates a physical Sort operator. - * - * @param input The input to the Sort. - * @param sort_attributes The attributes as the ordering keys. - * @param non_sort_attributes The output attributes other than sort_attributes. - * @param sort_ascending The vector of ordering directions. - * @param nulls_first_flags The vector of ordering directions for null values. - * @param limit The number of output rows. -1 for a full table sort. - * - * @return An immutable physical Sort. - */ - static SortPtr Create(const PhysicalPtr &input, - const std::vector<expressions::AttributeReferencePtr> &sort_attributes, - const std::vector<expressions::AttributeReferencePtr> &non_sort_attributes, - const std::vector<bool> &sort_ascending, - const std::vector<bool> &nulls_first_flags, - const int limit) { - DCHECK_EQ(sort_attributes.size(), sort_ascending.size()); - DCHECK_EQ(sort_attributes.size(), nulls_first_flags.size()); - - return SortPtr(new Sort(input, - sort_attributes, - non_sort_attributes, - sort_ascending, - nulls_first_flags, - limit)); - } - - protected: - void getFieldStringItems(std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override; - - private: - Sort(const PhysicalPtr &input, - const std::vector<expressions::AttributeReferencePtr> &sort_attributes, - const std::vector<expressions::AttributeReferencePtr> &non_sort_attributes, - const std::vector<bool> &sort_ascending, - const std::vector<bool> &nulls_first_flags, - const int limit) - : input_(input), - sort_attributes_(sort_attributes), - non_sort_attributes_(non_sort_attributes), - sort_ascending_(sort_ascending), - nulls_first_flags_(nulls_first_flags), - limit_(limit) { - addChild(input); - } - - PhysicalPtr input_; - std::vector<expressions::AttributeReferencePtr> sort_attributes_; - // non_sort_attributes_ is present only for Rule PruneColumns, - // which need attributes referenced by Sort (i.e. sort_attributes_) - // and others by its ancestors (i.e. non_sort_attributes_). - // The output attributes by Sort may contain additional non-sorting attributes, - // since the input physical of the Sort may not allow column pruning. - std::vector<expressions::AttributeReferencePtr> non_sort_attributes_; - std::vector<bool> sort_ascending_; - std::vector<bool> nulls_first_flags_; - int limit_; - - DISALLOW_COPY_AND_ASSIGN(Sort); -}; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_SORT_HPP_ */ http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/156290a4/query_optimizer/physical/TableGenerator.hpp ---------------------------------------------------------------------- diff --git a/query_optimizer/physical/TableGenerator.hpp b/query_optimizer/physical/TableGenerator.hpp deleted file mode 100644 index c9ff8a8..0000000 --- a/query_optimizer/physical/TableGenerator.hpp +++ /dev/null @@ -1,161 +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_PHYSICAL_TABLE_GENERATOR_HPP_ -#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_TABLE_GENERATOR_HPP_ - -#include <memory> -#include <string> -#include <vector> - -#include "expressions/table_generator/GeneratorFunctionHandle.hpp" -#include "query_optimizer/OptimizerTree.hpp" -#include "query_optimizer/expressions/AttributeReference.hpp" -#include "query_optimizer/expressions/ExprId.hpp" -#include "query_optimizer/expressions/ExpressionUtil.hpp" -#include "query_optimizer/physical/Physical.hpp" -#include "query_optimizer/physical/PhysicalType.hpp" -#include "utility/Cast.hpp" -#include "utility/Macros.hpp" - -namespace quickstep { -namespace optimizer { -namespace physical { - -namespace E = ::quickstep::optimizer::expressions; - -/** \addtogroup OptimizerPhysical - * @{ - */ - -class TableGenerator; -typedef std::shared_ptr<const TableGenerator> TableGeneratorPtr; - -/** - * @brief Leaf physical node that represents a table that will be populated - * by a generator function. - */ -class TableGenerator : public Physical { - public: - PhysicalType getPhysicalType() const override { - return PhysicalType::kTableGenerator; - } - - std::string getName() const override { return "TableGenerator"; } - - PhysicalPtr copyWithNewChildren( - const std::vector<PhysicalPtr> &new_children) const override { - return TableGeneratorPtr( - new TableGenerator(generator_function_handle_, - table_alias_, - attribute_list_)); - } - - bool maybeCopyWithPrunedExpressions( - const expressions::UnorderedNamedExpressionSet &referenced_expressions, - PhysicalPtr *output) const override { - // The number of output columns is fixed for generator functions. - return false; - } - - /** - * @return The reference to the generator function handle. - */ - const GeneratorFunctionHandlePtr& generator_function_handle() const { - return generator_function_handle_; - } - - /** - * @return The alias name of this table. - */ - const std::string& table_alias() const { - return table_alias_; - } - - const std::vector<expressions::AttributeReferencePtr>& attribute_list() const { - return attribute_list_; - } - - std::vector<E::AttributeReferencePtr> getOutputAttributes() const override { - return attribute_list_; - } - - std::vector<E::AttributeReferencePtr> getReferencedAttributes() const override { - return {}; - } - - void getFieldStringItems( - std::vector<std::string> *inline_field_names, - std::vector<std::string> *inline_field_values, - std::vector<std::string> *non_container_child_field_names, - std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields, - std::vector<std::string> *container_child_field_names, - std::vector<std::vector<OptimizerTreeBaseNodePtr>> * - container_child_fields) const override { - inline_field_names->push_back("function_name"); - inline_field_values->push_back(generator_function_handle_->getName()); - - if (table_alias_ != generator_function_handle_->getName()) { - inline_field_names->push_back("table_alias"); - inline_field_values->push_back(table_alias_); - } - - container_child_field_names->push_back(""); - container_child_fields->push_back(CastSharedPtrVector<OptimizerTreeBase>(attribute_list_)); - } - - /** - * @brief Creates a table generator that generates a table. - * - * @param A generator function handle. - * @return An immutable TableGenerator. - */ - static TableGeneratorPtr Create( - const GeneratorFunctionHandlePtr &generator_function_handle, - const std::string &table_alias, - const std::vector<E::AttributeReferencePtr> &attribute_list) { - return TableGeneratorPtr( - new TableGenerator(generator_function_handle, - table_alias, - attribute_list)); - } - - private: - TableGenerator(const GeneratorFunctionHandlePtr &generator_function_handle, - const std::string &table_alias, - const std::vector<E::AttributeReferencePtr> &attribute_list) - : generator_function_handle_(generator_function_handle), - table_alias_(table_alias), - attribute_list_(attribute_list) { - } - - GeneratorFunctionHandlePtr generator_function_handle_; - std::string table_alias_; - std::vector<E::AttributeReferencePtr> attribute_list_; - - DISALLOW_COPY_AND_ASSIGN(TableGenerator); -}; - -/** @} */ - -} // namespace physical -} // namespace optimizer -} // namespace quickstep - -#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_TABLE_GENERATOR_HPP_ */