apache / incubator-retired-quickstep / 696a783e5d8adb3ca62ca9044a8d7ccd89f67b3a / . / query_optimizer / rules / RuleHelper.hpp

/** | |

* 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_RULES_RULE_HELPER_HPP_ | |

#define QUICKSTEP_QUERY_OPTIMIZER_RULES_RULE_HELPER_HPP_ | |

#include <vector> | |

#include "query_optimizer/expressions/Expression.hpp" | |

#include "query_optimizer/expressions/NamedExpression.hpp" | |

#include "query_optimizer/expressions/Predicate.hpp" | |

namespace quickstep { | |

namespace optimizer { | |

/** \addtogroup OptimizerRules | |

* @{ | |

*/ | |

/** | |

* @brief Returns the operand predicates if \p predicate is a conjunction, | |

* otherwise returns \p predicate itself. | |

* | |

* @param predicate The input predicate. | |

* @return The operand predicates if \p predicate is a conjunction; | |

* otherwise returns \p predicate itself. | |

*/ | |

std::vector<expressions::PredicatePtr> GetConjunctivePredicates( | |

const expressions::PredicatePtr &predicate); | |

/** | |

* @brief Updates the expressions in \p non_project_expression_lists | |

* and \p project_expression_list by replacing the attribute | |

* references to the Aliases in \p project_expressions_for_pullup | |

* with the child expressions (i.e. the referent) of the Aliases. | |

* For project expressions, the expression IDs remain unchanged. | |

* For example, assume a project expression 'attr1+attr2' in | |

* project_expression_lists and assume that 'attr1' is defined in | |

* project_expressions_for_pullup as '1+1'. | |

* The new project expression after the 'pulling up' | |

* \p project_expressions_for_pullup is '1+1+attr2'. | |

* This is used when we want to merge two projects | |

* or pull up selections. | |

* | |

* @param project_expressions_for_pullup The project expressions to to be pulled up. | |

* @param non_project_expression_lists Non-project expressions to be updated. Any reference | |

* to an Alias in project_expressions_for_pullup is to | |

* be replaced with the child expression of the Alias. | |

* @param project_expression_lists Project expressions to be updated. The expression IDs are not changed. | |

*/ | |

void PullUpProjectExpressions( | |

const std::vector<expressions::NamedExpressionPtr> &project_expressions_for_pullup, | |

const std::vector<std::vector<expressions::ExpressionPtr>*> &non_project_expression_lists, | |

const std::vector<std::vector<expressions::NamedExpressionPtr>*> &project_expression_lists); | |

/** @} */ | |

} // namespace optimizer | |

} // namespace quickstep | |

#endif /* QUICKSTEP_QUERY_OPTIMIZER_RULES_RULE_HELPER_HPP_ */ |