//===----------------------------------------------------------------------===// // DuckDB // // duckdb/planner/operator/logical_distinct.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/planner/logical_operator.hpp" #include "duckdb/planner/bound_result_modifier.hpp" namespace duckdb { //! LogicalDistinct filters duplicate entries from its child operator class LogicalDistinct : public LogicalOperator { public: static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_DISTINCT; public: explicit LogicalDistinct(DistinctType distinct_type) : LogicalOperator(LogicalOperatorType::LOGICAL_DISTINCT), distinct_type(distinct_type) { } explicit LogicalDistinct(vector> targets, DistinctType distinct_type) : LogicalOperator(LogicalOperatorType::LOGICAL_DISTINCT), distinct_type(distinct_type), distinct_targets(std::move(targets)) { } //! Whether or not this is a DISTINCT or DISTINCT ON DistinctType distinct_type; //! The set of distinct targets vector> distinct_targets; //! The order by modifier (optional, only for distinct on) unique_ptr order_by; public: string ParamsToString() const override; vector GetColumnBindings() override { return children[0]->GetColumnBindings(); } void Serialize(FieldWriter &writer) const override; static unique_ptr Deserialize(LogicalDeserializationState &state, FieldReader &reader); protected: void ResolveTypes() override { types = children[0]->types; } }; } // namespace duckdb