118 lines
4.5 KiB
C++
118 lines
4.5 KiB
C++
#ifndef MATADOR_EXPRESSION_OPERATORS_HPP
|
|
#define MATADOR_EXPRESSION_OPERATORS_HPP
|
|
|
|
#include "matador/query/expression/binary_column_expression.hpp"
|
|
#include "matador/query/expression/table_column_expression.hpp"
|
|
#include "matador/query/expression/value_expression.hpp"
|
|
#include "matador/query/expression/column_expression.hpp"
|
|
|
|
#include "matador/utils/placeholder.hpp"
|
|
|
|
namespace matador::query {
|
|
template<typename Type>
|
|
column_expression operator+(const table_column& col, Type&& val) {
|
|
return column_expression{std::make_unique<binary_column_expression>(
|
|
std::make_unique<table_column_expression>(col),
|
|
binary_expression_operator::Plus,
|
|
std::make_unique<value_expression>(std::forward<Type>(val))
|
|
)};
|
|
}
|
|
|
|
template<typename Type>
|
|
column_expression operator+(Type&& val, const table_column& col) {
|
|
return column_expression{std::make_unique<binary_column_expression>(
|
|
std::make_unique<value_expression>(std::forward<Type>(val)),
|
|
binary_expression_operator::Plus,
|
|
std::make_unique<table_column_expression>(col)
|
|
)};
|
|
}
|
|
|
|
column_expression operator+(const table_column& col, utils::placeholder /*val*/);
|
|
column_expression operator+(utils::placeholder /*val*/, const table_column& col);
|
|
|
|
template<typename Type>
|
|
column_expression operator-(const table_column& col, Type&& val) {
|
|
return column_expression{std::make_unique<binary_column_expression>(
|
|
std::make_unique<table_column_expression>(col),
|
|
binary_expression_operator::Minus,
|
|
std::make_unique<value_expression>(std::forward<Type>(val))
|
|
)};
|
|
}
|
|
|
|
template<typename Type>
|
|
column_expression operator-(Type&& val, const table_column& col) {
|
|
return column_expression{std::make_unique<binary_column_expression>(
|
|
std::make_unique<value_expression>(std::forward<Type>(val)),
|
|
binary_expression_operator::Minus,
|
|
std::make_unique<table_column_expression>(col)
|
|
)};
|
|
}
|
|
|
|
column_expression operator-(const table_column& col, utils::placeholder /*val*/);
|
|
column_expression operator-(utils::placeholder /*val*/, const table_column& col);
|
|
|
|
template<typename Type>
|
|
column_expression operator*(const table_column& col, Type&& val) {
|
|
return column_expression{std::make_unique<binary_column_expression>(
|
|
std::make_unique<table_column_expression>(col),
|
|
binary_expression_operator::Multiply,
|
|
std::make_unique<value_expression>(std::forward<Type>(val))
|
|
)};
|
|
}
|
|
|
|
template<typename Type>
|
|
column_expression operator*(Type&& val, const table_column& col) {
|
|
return std::make_unique<binary_column_expression>(
|
|
std::make_unique<value_expression>(std::forward<Type>(val)),
|
|
binary_expression_operator::Multiply,
|
|
std::make_unique<table_column_expression>(col)
|
|
);
|
|
}
|
|
|
|
column_expression operator*(const table_column& col, utils::placeholder /*val*/);
|
|
column_expression operator*(utils::placeholder /*val*/, const table_column& col);
|
|
column_expression operator*(column_expression&& left, column_expression&& right);
|
|
|
|
template<typename Type>
|
|
column_expression operator/(const table_column& col, Type&& val) {
|
|
return column_expression{std::make_unique<binary_column_expression>(
|
|
std::make_unique<table_column_expression>(col),
|
|
binary_expression_operator::Divide,
|
|
std::make_unique<value_expression>(std::forward<Type>(val))
|
|
)};
|
|
}
|
|
|
|
template<typename Type>
|
|
column_expression operator/(Type&& val, const table_column& col) {
|
|
return column_expression{std::make_unique<binary_column_expression>(
|
|
std::make_unique<value_expression>(std::forward<Type>(val)),
|
|
binary_expression_operator::Divide,
|
|
std::make_unique<table_column_expression>(col)
|
|
)};
|
|
}
|
|
|
|
column_expression operator/(const table_column& col, utils::placeholder /*val*/);
|
|
column_expression operator/(utils::placeholder /*val*/, const table_column& col);
|
|
|
|
template<typename Type>
|
|
column_expression operator%(const table_column& col, Type&& val) {
|
|
return column_expression{std::make_unique<binary_column_expression>(
|
|
std::make_unique<table_column_expression>(col),
|
|
binary_expression_operator::Modulo,
|
|
std::make_unique<value_expression>(std::forward<Type>(val))
|
|
)};
|
|
}
|
|
|
|
template<typename Type>
|
|
column_expression operator%(Type&& val, const table_column& col) {
|
|
return column_expression{std::make_unique<binary_column_expression>(
|
|
std::make_unique<value_expression>(std::forward<Type>(val)),
|
|
binary_expression_operator::Modulo,
|
|
std::make_unique<table_column_expression>(col)
|
|
)};
|
|
}
|
|
|
|
column_expression operator%(const table_column& col, utils::placeholder /*val*/);
|
|
column_expression operator%(utils::placeholder /*val*/, const table_column& col);
|
|
}
|
|
#endif //MATADOR_EXPRESSION_OPERATORS_HPP
|