30#include "sql/builder/sqlQuery.hpp"
45 using ClauseMaker = std::function<std::string(
const std::string&)>;
49 using ValueChecker = std::function<std::optional<std::string>(
const T&)>;
73 class ClausesBuilder {
81 std::ostringstream _buffer;
84 std::list<std::string> _values;
119 ClausesBuilder(
ClauseMaker clause,
const T& value);
185 ClausesBuilder&
field(
const std::string& column);
194 ClausesBuilder&
NOT(
const std::string& clauses);
256 ClausesBuilder&
in(
const std::vector<T>& values);
271 ClausesBuilder&
notIn(
const std::vector<T>& values);
377 ClausesBuilder&
OR();
499 ClausesBuilder&
AND(
const ClausesBuilder& other);
508 ClausesBuilder&
OR(
const ClausesBuilder& other);
532 ClausesBuilder& checkAndAddClauses(
const std::string& boolAgg,
const ClausesBuilder& other);
539 void addBooleanAggregator(
const std::string& boolAgg);
565 ClausesBuilder& checkAndAddClause(
const std::string& boolAgg,
const std::string& column,
ClauseMaker clause, T& value,
ValueChecker<T> checker);
582 ClausesBuilder& checkAndAddClause(
const std::string& boolAgg,
const std::string& column,
ClauseMaker clause, T& value1, T& value2,
ValueChecker<T> checker);
591 return checkAndAddClause(
"AND", NULL, clause, value, checker);
597 return checkAndAddClause(
"AND", column, clause, value, checker);
603 return checkAndAddClause(
"AND", column, clause, value1, value2, checker);
609 return checkAndAddClause(
"OR", NULL, clause, value, checker);
615 return checkAndAddClause(
"OR", column, clause, value, checker);
621 return checkAndAddClause(
"OR", column, clause, value1, value2, checker);
626 ClausesBuilder::checkAndAddClause(
const std::string& boolAgg,
const std::string& column,
ClauseMaker clause, T& value,
ValueChecker<T> checker) {
627 auto optVal = checker(value);
629 addBooleanAggregator(boolAgg);
630 _buffer << clause(column);
631 _values.push_back(optVal.value());
647 _firstClause =
false;
654 ClausesBuilder::checkAndAddClause(
const std::string& boolAgg,
const std::string& column,
ClauseMaker clause, T& value1, T& value2,
ValueChecker<T> checker) {
655 auto optVal1 = checker(value1);
656 auto optVal2 = checker(value2);
657 if(optVal1 && optVal2) {
658 addBooleanAggregator(boolAgg);
659 _buffer << clause(column);
660 _values.push_back(optVal1.value());
661 _values.push_back(optVal2.value());
674 _firstClause =
false;
SQL clauses builder.
Definition clausesBuilder.hpp:73
ClausesBuilder & OR(const ClausesBuilder &other)
ClausesBuilder & field(const std::string &column)
ClausesBuilder & notLike()
ClausesBuilder & greater()
ClausesBuilder & notExists(const anch::sql::SelectBuilder &query)
virtual ~ClausesBuilder()
ClausesBuilder & in(const anch::sql::SQLQuery &query)
ClausesBuilder & isNotNull()
ClausesBuilder & in(const anch::sql::SelectBuilder &query)
ClausesBuilder & equals()
ClausesBuilder & exists(const anch::sql::SelectBuilder &query)
ClausesBuilder & AND(const ClausesBuilder &other)
ClausesBuilder & lesserEquals()
ClausesBuilder & notIn(const anch::sql::SQLQuery &query)
ClausesBuilder & between()
ClausesBuilder & operator||(const ClausesBuilder &other)
ClausesBuilder & NOT(const std::string &clauses)
ClausesBuilder & notEquals()
ClausesBuilder & isNull()
ClausesBuilder & AND(anch::sql::ClausesProvider clauses)
ClausesBuilder & notIn(const std::vector< T > &values)
ClausesBuilder & notBetween()
ClausesBuilder(const ClausesBuilder &other)
ClausesBuilder & greaterEquals()
ClausesBuilder & in(const std::vector< T > &values)
ClausesBuilder & notIn(const anch::sql::SelectBuilder &query)
ClausesBuilder & lesser()
ClausesBuilder & OR(anch::sql::ClausesProvider clauses)
Definition fromBuilder.hpp:41
SQL query.
Definition sqlQuery.hpp:42
Dynamic SQL select request builder.
Definition selectBuilder.hpp:47
SQL namespace.
Definition clauses.hpp:26
std::optional< std::string > isValidValue(T &value)
std::function< std::optional< std::string >(const T &)> ValueChecker
Definition clausesBuilder.hpp:49
std::function< const anch::sql::ClausesBuilder &()> ClausesProvider
Definition clausesBuilder.hpp:52
std::function< std::string(const std::string &)> ClauseMaker
Definition clausesBuilder.hpp:45
AnCH framework base namespace.
Definition app.hpp:28