//===----------------------------------------------------------------------===// // DuckDB // // duckdb/execution/operator/persistent/physical_fixed_batch_copy.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/execution/physical_operator.hpp" #include "duckdb/parser/parsed_data/copy_info.hpp" #include "duckdb/function/copy_function.hpp" #include "duckdb/common/file_system.hpp" #include "duckdb/common/filename_pattern.hpp" namespace duckdb { class PhysicalFixedBatchCopy : public PhysicalOperator { public: static constexpr const PhysicalOperatorType TYPE = PhysicalOperatorType::FIXED_BATCH_COPY_TO_FILE; public: PhysicalFixedBatchCopy(vector types, CopyFunction function, unique_ptr bind_data, idx_t estimated_cardinality); CopyFunction function; unique_ptr bind_data; string file_path; bool use_tmp_file; public: // Source interface SourceResultType GetData(ExecutionContext &context, DataChunk &chunk, OperatorSourceInput &input) const override; bool IsSource() const override { return true; } public: // Sink interface SinkResultType Sink(ExecutionContext &context, DataChunk &chunk, OperatorSinkInput &input) const override; void Combine(ExecutionContext &context, GlobalSinkState &gstate, LocalSinkState &lstate) const override; SinkFinalizeType Finalize(Pipeline &pipeline, Event &event, ClientContext &context, GlobalSinkState &gstate) const override; unique_ptr GetLocalSinkState(ExecutionContext &context) const override; unique_ptr GetGlobalSinkState(ClientContext &context) const override; void NextBatch(ExecutionContext &context, GlobalSinkState &state, LocalSinkState &lstate_p) const override; bool RequiresBatchIndex() const override { return true; } bool IsSink() const override { return true; } bool ParallelSink() const override { return true; } public: void AddRawBatchData(ClientContext &context, GlobalSinkState &gstate_p, idx_t batch_index, unique_ptr collection) const; void RepartitionBatches(ClientContext &context, GlobalSinkState &gstate_p, idx_t min_index, bool final = false) const; void FlushBatchData(ClientContext &context, GlobalSinkState &gstate_p, idx_t min_index) const; bool ExecuteTask(ClientContext &context, GlobalSinkState &gstate_p) const; void ExecuteTasks(ClientContext &context, GlobalSinkState &gstate_p) const; SinkFinalizeType FinalFlush(ClientContext &context, GlobalSinkState &gstate_p) const; }; } // namespace duckdb