//===----------------------------------------------------------------------===// // DuckDB // // duckdb/parser/expression/case_expression.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/parser/parsed_expression.hpp" #include "duckdb/common/vector.hpp" namespace duckdb { struct CaseCheck { unique_ptr when_expr; unique_ptr then_expr; void FormatSerialize(FormatSerializer &serializer) const; static CaseCheck FormatDeserialize(FormatDeserializer &deserializer); }; //! The CaseExpression represents a CASE expression in the query class CaseExpression : public ParsedExpression { public: static constexpr const ExpressionClass TYPE = ExpressionClass::CASE; public: DUCKDB_API CaseExpression(); vector case_checks; unique_ptr else_expr; public: string ToString() const override; static bool Equal(const CaseExpression &a, const CaseExpression &b); unique_ptr Copy() const override; void Serialize(FieldWriter &writer) const override; static unique_ptr Deserialize(ExpressionType type, FieldReader &source); void FormatSerialize(FormatSerializer &serializer) const override; static unique_ptr FormatDeserialize(ExpressionType type, FormatDeserializer &deserializer); public: template static string ToString(const T &entry) { string case_str = "CASE "; for (auto &check : entry.case_checks) { case_str += " WHEN (" + check.when_expr->ToString() + ")"; case_str += " THEN (" + check.then_expr->ToString() + ")"; } case_str += " ELSE " + entry.else_expr->ToString(); case_str += " END"; return case_str; } }; } // namespace duckdb