//===----------------------------------------------------------------------===// // DuckDB // // duckdb/planner/operator/logical_expression_get.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/planner/logical_operator.hpp" namespace duckdb { //! LogicalExpressionGet represents a scan operation over a set of to-be-executed expressions class LogicalExpressionGet : public LogicalOperator { public: static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_EXPRESSION_GET; public: LogicalExpressionGet(idx_t table_index, vector types, vector>> expressions) : LogicalOperator(LogicalOperatorType::LOGICAL_EXPRESSION_GET), table_index(table_index), expr_types(types), expressions(std::move(expressions)) { } //! The table index in the current bind context idx_t table_index; //! The types of the expressions vector expr_types; //! The set of expressions vector>> expressions; public: vector GetColumnBindings() override { return GenerateColumnBindings(table_index, expr_types.size()); } void Serialize(FieldWriter &writer) const override; static unique_ptr Deserialize(LogicalDeserializationState &state, FieldReader &reader); idx_t EstimateCardinality(ClientContext &context) override { return expressions.size(); } vector GetTableIndex() const override; string GetName() const override; protected: void ResolveTypes() override { // types are resolved in the constructor this->types = expr_types; } }; } // namespace duckdb