//===----------------------------------------------------------------------===// // DuckDB // // duckdb/execution/operator/projection/physical_tableinout_function.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/execution/physical_operator.hpp" #include "duckdb/function/function.hpp" #include "duckdb/function/table_function.hpp" namespace duckdb { class PhysicalTableInOutFunction : public PhysicalOperator { public: static constexpr const PhysicalOperatorType TYPE = PhysicalOperatorType::INOUT_FUNCTION; public: PhysicalTableInOutFunction(vector types, TableFunction function_p, unique_ptr bind_data_p, vector column_ids_p, idx_t estimated_cardinality, vector projected_input); public: unique_ptr GetOperatorState(ExecutionContext &context) const override; unique_ptr GetGlobalOperatorState(ClientContext &context) const override; OperatorResultType Execute(ExecutionContext &context, DataChunk &input, DataChunk &chunk, GlobalOperatorState &gstate, OperatorState &state) const override; OperatorFinalizeResultType FinalExecute(ExecutionContext &context, DataChunk &chunk, GlobalOperatorState &gstate, OperatorState &state) const override; bool ParallelOperator() const override { return true; } bool RequiresFinalExecute() const override { return function.in_out_function_final; } private: //! The table function TableFunction function; //! Bind data of the function unique_ptr bind_data; //! The set of column ids to fetch vector column_ids; //! The set of input columns to project out vector projected_input; }; } // namespace duckdb