//===----------------------------------------------------------------------===// // DuckDB // // duckdb/parser/expression/conjunction_expression.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/parser/parsed_expression.hpp" #include "duckdb/common/vector.hpp" namespace duckdb { //! Represents a conjunction (AND/OR) class ConjunctionExpression : public ParsedExpression { public: static constexpr const ExpressionClass TYPE = ExpressionClass::CONJUNCTION; public: DUCKDB_API explicit ConjunctionExpression(ExpressionType type); DUCKDB_API ConjunctionExpression(ExpressionType type, vector> children); DUCKDB_API ConjunctionExpression(ExpressionType type, unique_ptr left, unique_ptr right); vector> children; public: void AddExpression(unique_ptr expr); string ToString() const override; static bool Equal(const ConjunctionExpression &a, const ConjunctionExpression &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 result = "(" + entry.children[0]->ToString(); for (idx_t i = 1; i < entry.children.size(); i++) { result += " " + ExpressionTypeToOperator(entry.type) + " " + entry.children[i]->ToString(); } return result + ")"; } }; } // namespace duckdb