#include "matador/sql/condition.hpp" #include "matador/sql/query_intermediates.hpp" namespace matador::sql { condition::type>::condition(const column &fld, basic_condition::operand_t op, const placeholder &val) : basic_column_condition(fld, op), value(val) {} std::string condition::type>::evaluate(const dialect &d, query_context &query) const { query.bind_vars.emplace_back(field_.name); return d.prepare_identifier(field_) + " " + operand + " " + d.next_placeholder(query.bind_vars); } condition::condition(column col, basic_condition::operand_t op, const query_context &q) : basic_column_condition(std::move(col), op), query_(q) {} std::string condition::evaluate(const dialect &d, query_context &query) const { std::string result(d.prepare_identifier(field_) + " " + operand + " ("); result += query_.sql + (")"); return result; } condition in( const column& col, const query_context &q ) { return {col, basic_condition::operand_t::IN_LIST, q}; } condition in( const column& col, const query_select& q ) { return in(col, q.build()); } condition like( const column& col, const std::string& val ) { return {col, basic_condition::operand_t::LIKE, val}; } condition equals( const column& col, query_context& q ) { return {col, basic_condition::operand_t::EQUAL, q}; } condition operator==(const column &a, const column &b) { return {a, basic_condition::operand_t::EQUAL, b}; } }