query/include/matador/query/criteria/binary_criteria.hpp

51 lines
1.4 KiB
C++

#ifndef CRITERIA_BINARY_CRITERIA_NODE_HPP
#define CRITERIA_BINARY_CRITERIA_NODE_HPP
#include "matador/query/criteria/abstract_column_criteria.hpp"
#include "matador/query/criteria/criteria_utils.hpp"
#include "matador/query/table_column.hpp"
namespace matador::query {
enum class binary_operator {
EQUALS,
NOT_EQUALS,
GREATER_THAN,
GREATER_THAN_OR_EQUAL,
LESS_THAN,
LESS_THAN_OR_EQUAL,
};
class binary_criteria final : public abstract_column_criteria {
public:
binary_criteria() = delete;
binary_criteria(const table_column& col, binary_operator operand, criteria_value value);
void accept( criteria_visitor& visitor ) const override;
[[nodiscard]] binary_operator operand() const;
[[nodiscard]] const criteria_value& value() const;
private:
binary_operator operator_{};
criteria_value value_;
};
class binary_column_criteria final : public abstract_criteria {
public:
binary_column_criteria() = delete;
binary_column_criteria(const table_column& left_column, binary_operator operand, const table_column& right_column);
void accept(criteria_visitor& visitor) const override;
[[nodiscard]] const table_column& left_column() const;
[[nodiscard]] binary_operator operand() const;
[[nodiscard]] const table_column& right_column() const;
private:
table_column left_column_;
binary_operator operator_{};
table_column right_column_;
};
}
#endif //CRITERIA_BINARY_CRITERIA_NODE_HPP