82 explicit operator bool()
const
84 return !conditionString_.empty();
94 return conditionString_;
115 template <
typename... Arguments>
118 conditionString_ = sql.content_;
119 outputArgumentsFunc_ =
120 [args = std::make_tuple(std::forward<Arguments>(args)...)](
123 [&binder](
auto &&...args) {
124 (void)std::initializer_list<int>{
125 (binder << std::forward<Arguments>(args), 0)...};
131 template <
typename... Arguments>
134 conditionString_ = std::move(sql.content_);
135 outputArgumentsFunc_ =
136 [args = std::make_tuple(std::forward<Arguments>(args)...)](
139 [&binder](
auto &&...args) {
140 (void)std::initializer_list<int>{
141 (binder << std::forward<Arguments>(args), 0)...};
155 template <
typename T>
156 Criteria(
const std::string &colName,
const CompareOperator &opera, T &&arg)
158 assert(opera != CompareOperator::IsNotNull &&
159 opera != CompareOperator::IsNull);
160 conditionString_ = colName;
163 case CompareOperator::EQ:
164 conditionString_ +=
" = $?";
166 case CompareOperator::NE:
167 conditionString_ +=
" != $?";
169 case CompareOperator::GT:
170 conditionString_ +=
" > $?";
172 case CompareOperator::GE:
173 conditionString_ +=
" >= $?";
175 case CompareOperator::LT:
176 conditionString_ +=
" < $?";
178 case CompareOperator::LE:
179 conditionString_ +=
" <= $?";
181 case CompareOperator::Like:
182 conditionString_ +=
" like $?";
184 case CompareOperator::NotLike:
185 conditionString_ +=
" not like $?";
190 outputArgumentsFunc_ =
196 template <
typename T>
197 Criteria(
const std::string &colName,
198 const CompareOperator &opera,
199 const std::vector<T> &args)
201 const auto argsSize = args.size();
202 assert(((opera == CompareOperator::In) ||
203 (opera == CompareOperator::NotIn)) &&
205 if (opera == CompareOperator::In)
207 conditionString_ = colName +
" in (";
209 else if (opera == CompareOperator::NotIn)
211 conditionString_ = colName +
" not in (";
213 for (
size_t i = 0; i < argsSize; ++i)
215 if (i < (argsSize - 1))
216 conditionString_.append(
"$?,");
218 conditionString_.append(
"$?");
220 conditionString_.append(
")");
221 outputArgumentsFunc_ = [args](internal::SqlBinder &binder) {
222 for (
auto &arg : args)
229 template <
typename T>
230 Criteria(
const std::string &colName,
231 const CompareOperator &opera,
232 std::vector<T> &&args)
234 const auto argsSize = args.size();
235 assert(((opera == CompareOperator::In) ||
236 (opera == CompareOperator::NotIn)) &&
238 if (opera == CompareOperator::In)
240 conditionString_ = colName +
" in (";
242 else if (opera == CompareOperator::NotIn)
244 conditionString_ = colName +
" not in (";
246 for (
size_t i = 0; i < argsSize; ++i)
248 if (i < (argsSize - 1))
249 conditionString_.append(
"$?,");
251 conditionString_.append(
"$?");
253 conditionString_.append(
")");
254 outputArgumentsFunc_ =
255 [args = std::move(args)](internal::SqlBinder &binder) {
256 for (
auto &arg : args)
263 template <
typename T>
264 Criteria(
const std::string &colName,
265 const CompareOperator &opera,
266 std::vector<T> &args)
267 : Criteria(colName, opera, (const std::vector<T> &)args)
278 template <
typename T>
280 :
Criteria(colName, CompareOperator::EQ,
std::forward<T>(arg))
295 Criteria(
const std::string &colName,
const CompareOperator &opera)
297 assert(opera == CompareOperator::IsNotNull ||
298 opera == CompareOperator::IsNull);
299 conditionString_ = colName;
302 case CompareOperator::IsNull:
303 conditionString_ +=
" is null";
305 case CompareOperator::IsNotNull:
306 conditionString_ +=
" is not null";
313 Criteria(
const std::string &colName, CompareOperator &opera)
314 :
Criteria(colName, (const CompareOperator &)opera)
318 Criteria(
const std::string &colName, CompareOperator &&opera)
319 : Criteria(colName, (const CompareOperator &)opera)
337 explicit Criteria(
const Json::Value &json)
noexcept(
false);
348 if (outputArgumentsFunc_)
349 outputArgumentsFunc_(binder);
358 std::string conditionString_;
Criteria(const std::string &colName, T &&arg)
Construct a new Criteria object presenting a equal expression.
Definition Criteria.h:279
Criteria(const std::string &colName, const CompareOperator &opera)
Construct a new Criteria object presenting a expression without parameters.
Definition Criteria.h:295
Criteria(const CustomSql &sql, Arguments &&...args)
Construct a new custom Criteria object.
Definition Criteria.h:116
Criteria(const std::string &colName, const CompareOperator &opera, T &&arg)
Construct a new Criteria object.
Definition Criteria.h:156