107 lines
4.2 KiB
C++
107 lines
4.2 KiB
C++
#include "matador/query/criteria/criteria_operators.hpp"
|
|
|
|
#include "matador/query/criteria/between_criteria.hpp"
|
|
#include "matador/query/criteria/like_criteria.hpp"
|
|
#include "matador/query/criteria/logical_criteria.hpp"
|
|
#include "matador/query/criteria/not_criteria.hpp"
|
|
|
|
namespace matador::query {
|
|
criteria_ptr operator==(const sql::column &col, utils::placeholder p) {
|
|
return std::make_unique<binary_criteria>(col, binary_operator::EQUALS, p);
|
|
}
|
|
|
|
criteria_ptr operator!=(const sql::column &col, utils::placeholder p) {
|
|
return std::make_unique<binary_criteria>(col, binary_operator::NOT_EQUALS, p);
|
|
}
|
|
|
|
criteria_ptr operator>(const sql::column &col, utils::placeholder p) {
|
|
return std::make_unique<binary_criteria>(col, binary_operator::GREATER_THAN, p);
|
|
}
|
|
|
|
criteria_ptr operator>=(const sql::column &col, utils::placeholder p) {
|
|
return std::make_unique<binary_criteria>(col, binary_operator::GREATER_THAN_OR_EQUAL, p);
|
|
}
|
|
|
|
criteria_ptr operator<(const sql::column &col, utils::placeholder p) {
|
|
return std::make_unique<binary_criteria>(col, binary_operator::LESS_THAN, p);
|
|
}
|
|
|
|
criteria_ptr operator<=(const sql::column &col, utils::placeholder p) {
|
|
return std::make_unique<binary_criteria>(col, binary_operator::LESS_THAN_OR_EQUAL, p);
|
|
}
|
|
|
|
criteria_ptr operator==( const sql::column& col_left, const sql::column& col_right ) {
|
|
return std::make_unique<binary_column_criteria>(col_left, binary_operator::EQUALS, col_right);
|
|
}
|
|
|
|
criteria_ptr operator!=( const sql::column& col_left, const sql::column& col_right ) {
|
|
return std::make_unique<binary_column_criteria>(col_left, binary_operator::NOT_EQUALS, col_right);
|
|
}
|
|
|
|
criteria_ptr operator>( const sql::column& col_left, const sql::column& col_right ) {
|
|
return std::make_unique<binary_column_criteria>(col_left, binary_operator::GREATER_THAN, col_right);
|
|
}
|
|
|
|
criteria_ptr operator>=( const sql::column& col_left, const sql::column& col_right ) {
|
|
return std::make_unique<binary_column_criteria>(col_left, binary_operator::GREATER_THAN_OR_EQUAL, col_right);
|
|
}
|
|
|
|
criteria_ptr operator<( const sql::column& col_left, const sql::column& col_right ) {
|
|
return std::make_unique<binary_column_criteria>(col_left, binary_operator::LESS_THAN, col_right);
|
|
}
|
|
|
|
criteria_ptr operator<=( const sql::column& col_left, const sql::column& col_right ) {
|
|
return std::make_unique<binary_column_criteria>(col_left, binary_operator::LESS_THAN_OR_EQUAL, col_right);
|
|
}
|
|
|
|
criteria_ptr operator&&(criteria_ptr left, criteria_ptr right) {
|
|
return std::make_unique<logical_criteria>(std::move(left), logical_operator::AND, std::move(right));
|
|
}
|
|
|
|
criteria_ptr operator||(criteria_ptr left, criteria_ptr right) {
|
|
return std::make_unique<logical_criteria>(std::move(left), logical_operator::OR, std::move(right));
|
|
}
|
|
|
|
criteria_ptr operator!(criteria_ptr clause) {
|
|
return std::make_unique<not_criteria>(std::move(clause));
|
|
}
|
|
|
|
template <>
|
|
criteria_ptr in(const sql::column &col, const std::initializer_list<utils::placeholder> args) {
|
|
std::vector<criteria_value> values;
|
|
for ( auto &&arg : args ) {
|
|
values.emplace_back(arg);
|
|
}
|
|
return std::make_unique<collection_criteria>(col, collection_operator::In, std::move(values));
|
|
}
|
|
|
|
criteria_ptr in(const sql::column &col, sql::query_context &&ctx) {
|
|
return std::make_unique<collection_query_criteria>(col, collection_operator::In, std::move(ctx));
|
|
}
|
|
|
|
template <>
|
|
criteria_ptr out(const sql::column &col, const std::initializer_list<utils::placeholder> args) {
|
|
std::vector<criteria_value> values;
|
|
for ( auto &&arg : args ) {
|
|
values.emplace_back(arg);
|
|
}
|
|
return std::make_unique<collection_criteria>(col, collection_operator::Out, values);
|
|
}
|
|
|
|
criteria_ptr out(const sql::column &col, sql::query_context &&ctx) {
|
|
return std::make_unique<collection_query_criteria>(col, collection_operator::In, std::move(ctx));
|
|
}
|
|
|
|
criteria_ptr between(const sql::column &col, const int64_t min, const int64_t max) {
|
|
return std::make_unique<between_criteria>(col, min, max);
|
|
}
|
|
|
|
criteria_ptr between(const sql::column &col, utils::placeholder min, utils::placeholder max) {
|
|
return std::make_unique<between_criteria>(col, min, max);
|
|
}
|
|
|
|
criteria_ptr like(const sql::column &col, const std::string &pattern) {
|
|
return std::make_unique<like_criteria>(col, pattern);
|
|
}
|
|
}
|