| /** |
| * Copyright 2011-2015 Quickstep Technologies LLC. |
| * Copyright 2015 Pivotal Software, Inc. |
| * Copyright 2016, Quickstep Research Group, Computer Sciences Department, |
| * University of Wisconsin—Madison. |
| * |
| * Licensed 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/expressions/ExpressionUtil.hpp" |
| |
| #include <vector> |
| |
| #include "query_optimizer/expressions/AttributeReference.hpp" |
| #include "query_optimizer/expressions/NamedExpression.hpp" |
| |
| namespace quickstep { |
| namespace optimizer { |
| namespace expressions { |
| |
| AttributeReferencePtr ToRef(const NamedExpressionPtr &expression) { |
| return AttributeReference::Create(expression->id(), |
| expression->attribute_name(), |
| expression->attribute_alias(), |
| expression->relation_name(), |
| expression->getValueType(), |
| AttributeReferenceScope::kLocal); |
| } |
| |
| std::vector<AttributeReferencePtr> GetNullableAttributeVector( |
| const std::vector<AttributeReferencePtr> &attributes) { |
| std::vector<AttributeReferencePtr> nullable_attributes; |
| for (const auto &attr : attributes) { |
| if (!attr->getValueType().isNullable()) { |
| nullable_attributes.emplace_back( |
| AttributeReference::Create(attr->id(), |
| attr->attribute_name(), |
| attr->attribute_alias(), |
| attr->relation_name(), |
| attr->getValueType().getNullableVersion(), |
| attr->scope())); |
| } else { |
| nullable_attributes.emplace_back(attr); |
| } |
| } |
| return nullable_attributes; |
| } |
| |
| std::vector<AttributeReferencePtr> GetAttributeReferencesWithinScope( |
| const std::vector<AttributeReferencePtr> &attributes, |
| const AttributeReferenceScope scope) { |
| std::vector<AttributeReferencePtr> filtered_attributes; |
| for (const auto &attr_it : attributes) { |
| if (attr_it->scope() == scope) { |
| filtered_attributes.emplace_back(attr_it); |
| } |
| } |
| return filtered_attributes; |
| } |
| |
| } // namespace expressions |
| } // namespace optimizer |
| } // namespace quickstep |