//===----------------------------------------------------------------------===// // DuckDB // // duckdb/planner/operator/logical_explain.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/parser/statement/explain_statement.hpp" #include "duckdb/planner/logical_operator.hpp" namespace duckdb { class LogicalExplain : public LogicalOperator { LogicalExplain(ExplainType explain_type) : LogicalOperator(LogicalOperatorType::LOGICAL_EXPLAIN), explain_type(explain_type) {}; public: static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_EXPLAIN; public: LogicalExplain(unique_ptr plan, ExplainType explain_type) : LogicalOperator(LogicalOperatorType::LOGICAL_EXPLAIN), explain_type(explain_type) { children.push_back(std::move(plan)); } ExplainType explain_type; string physical_plan; string logical_plan_unopt; string logical_plan_opt; public: void Serialize(FieldWriter &writer) const override; static unique_ptr Deserialize(LogicalDeserializationState &state, FieldReader &reader); idx_t EstimateCardinality(ClientContext &context) override { return 3; } //! Skips the serialization check in VerifyPlan bool SupportSerialization() const override { return false; } protected: void ResolveTypes() override { types = {LogicalType::VARCHAR, LogicalType::VARCHAR}; } vector GetColumnBindings() override { return {ColumnBinding(0, 0), ColumnBinding(0, 1)}; } }; } // namespace duckdb