//===----------------------------------------------------------------------===// // DuckDB // // duckdb/planner/operator/logical_comparison_join.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/common/constants.hpp" #include "duckdb/common/enums/joinref_type.hpp" #include "duckdb/common/unordered_set.hpp" #include "duckdb/planner/joinside.hpp" #include "duckdb/planner/operator/logical_join.hpp" namespace duckdb { //! LogicalComparisonJoin represents a join that involves comparisons between the LHS and RHS class LogicalComparisonJoin : public LogicalJoin { public: static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_INVALID; public: explicit LogicalComparisonJoin(JoinType type, LogicalOperatorType logical_type = LogicalOperatorType::LOGICAL_COMPARISON_JOIN); //! The conditions of the join vector conditions; //! Used for duplicate-eliminated joins vector delim_types; public: string ParamsToString() const override; void Serialize(FieldWriter &writer) const override; static unique_ptr Deserialize(LogicalDeserializationState &state, FieldReader &reader); static void Deserialize(LogicalComparisonJoin &comparison_join, LogicalDeserializationState &state, FieldReader &reader); public: static unique_ptr CreateJoin(JoinType type, JoinRefType ref_type, unique_ptr left_child, unique_ptr right_child, unique_ptr condition); static unique_ptr CreateJoin(JoinType type, JoinRefType ref_type, unique_ptr left_child, unique_ptr right_child, vector conditions, vector> arbitrary_expressions); static void ExtractJoinConditions(JoinType type, unique_ptr &left_child, unique_ptr &right_child, unique_ptr condition, vector &conditions, vector> &arbitrary_expressions); static void ExtractJoinConditions(JoinType type, unique_ptr &left_child, unique_ptr &right_child, vector> &expressions, vector &conditions, vector> &arbitrary_expressions); static void ExtractJoinConditions(JoinType type, unique_ptr &left_child, unique_ptr &right_child, const unordered_set &left_bindings, const unordered_set &right_bindings, vector> &expressions, vector &conditions, vector> &arbitrary_expressions); }; } // namespace duckdb