//===----------------------------------------------------------------------===// // DuckDB // // duckdb/execution/operator/join/physical_delim_join.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/common/types/chunk_collection.hpp" #include "duckdb/execution/physical_operator.hpp" namespace duckdb { class PhysicalHashAggregate; //! PhysicalDelimJoin represents a join where the LHS will be duplicate eliminated and pushed into a //! PhysicalColumnDataScan in the RHS. class PhysicalDelimJoin : public PhysicalOperator { public: static constexpr const PhysicalOperatorType TYPE = PhysicalOperatorType::DELIM_JOIN; public: PhysicalDelimJoin(vector types, unique_ptr original_join, vector> delim_scans, idx_t estimated_cardinality); unique_ptr join; unique_ptr distinct; vector> delim_scans; public: vector> GetChildren() const override; public: unique_ptr GetGlobalSinkState(ClientContext &context) const override; unique_ptr GetLocalSinkState(ExecutionContext &context) const override; SinkResultType Sink(ExecutionContext &context, DataChunk &chunk, OperatorSinkInput &input) const override; void Combine(ExecutionContext &context, GlobalSinkState &state, LocalSinkState &lstate) const override; SinkFinalizeType Finalize(Pipeline &pipeline, Event &event, ClientContext &context, GlobalSinkState &gstate) const override; bool IsSink() const override { return true; } bool ParallelSink() const override { return true; } OrderPreservationType SourceOrder() const override { return OrderPreservationType::NO_ORDER; } bool SinkOrderDependent() const override { return false; } string ParamsToString() const override; public: void BuildPipelines(Pipeline ¤t, MetaPipeline &meta_pipeline) override; }; } // namespace duckdb