//===----------------------------------------------------------------------===// // DuckDB // // duckdb/optimizer/rule/distributivity.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/optimizer/rule.hpp" #include "duckdb/parser/expression_map.hpp" namespace duckdb { // (X AND B) OR (X AND C) OR (X AND D) = X AND (B OR C OR D) class DistributivityRule : public Rule { public: explicit DistributivityRule(ExpressionRewriter &rewriter); unique_ptr Apply(LogicalOperator &op, vector> &bindings, bool &changes_made, bool is_root) override; private: void AddExpressionSet(Expression &expr, expression_set_t &set); unique_ptr ExtractExpression(BoundConjunctionExpression &conj, idx_t idx, Expression &expr); }; } // namespace duckdb