Skip to content

Commit

Permalink
bugfix invalidOperator() did nothing
Browse files Browse the repository at this point in the history
QueryBuilder::invalidOperator() did nothing, now it throws exception,
but only for debug builds that enough.
  • Loading branch information
silverqx committed Nov 21, 2022
1 parent 30ecc70 commit 3adc62a
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 10 deletions.
4 changes: 2 additions & 2 deletions include/orm/query/querybuilder.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -809,8 +809,8 @@ namespace Orm::Query
QString stripTableForPluck(const QString &column) const;

protected:
/*! Determine if the given operator is supported. */
bool invalidOperator(const QString &comparison) const;
/*! Throw if the given operator is not valid for the current DB connection. */
void throwIfInvalidOperator(const QString &comparison) const;

/*! Remove all of the expressions from a list of bindings. */
QVector<QVariant> cleanBindings(const QVector<QVariant> &bindings) const;
Expand Down
27 changes: 19 additions & 8 deletions src/orm/query/querybuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -596,8 +596,9 @@ Builder &Builder::orWhereColumn(const QVector<WhereColumnItem> &values)
Builder &Builder::whereColumn(const Column &first, const QString &comparison,
const Column &second, const QString &condition)
{
// Compile check for a invalid comparison operator
invalidOperator(comparison);
#ifdef TINYORM_DEBUG
throwIfInvalidOperator(comparison);
#endif

m_wheres.append({.column = first, .comparison = comparison, .condition = condition,
.type = WhereType::COLUMN, .columnTwo = second});
Expand Down Expand Up @@ -980,8 +981,9 @@ Builder &Builder::groupByRaw(const QString &sql, const QVector<QVariant> &bindin
Builder &Builder::having(const Column &column, const QString &comparison,
const QVariant &value, const QString &condition)
{
// Compile check for a invalid comparison operator
invalidOperator(comparison);
#ifdef TINYORM_DEBUG
throwIfInvalidOperator(comparison);
#endif

m_havings.append({column, value, comparison, condition, HavingType::BASIC});

Expand Down Expand Up @@ -1433,12 +1435,19 @@ QString Builder::stripTableForPluck(const QString &column) const

/* protected */

bool Builder::invalidOperator(const QString &comparison) const
void Builder::throwIfInvalidOperator(const QString &comparison) const
{
const auto comparison_ = comparison.toLower();

return !getOperators().contains(comparison_) &&
!m_grammar.getOperators().contains(comparison_);
if (getOperators().contains(comparison_) ||
m_grammar.getOperators().contains(comparison_)
)
return;

throw Exceptions::InvalidArgumentError(
QStringLiteral("The '%1' operator is not valid for the '%2' database "
"in %3().")
.arg(comparison_, getConnection().driverNamePrintable(), __tiny_func__));
}

QVector<QVariant> Builder::cleanBindings(const QVector<QVariant> &bindings) const
Expand Down Expand Up @@ -1719,7 +1728,9 @@ Builder &Builder::whereInternal(
const Column &column, const QString &comparison, QVariant value,
const QString &condition, const WhereType type)
{
invalidOperator(comparison);
#ifdef TINYORM_DEBUG
throwIfInvalidOperator(comparison);
#endif

m_wheres.append({.column = column, .value = value, .comparison = comparison,
.condition = condition, .type = type});
Expand Down

0 comments on commit 3adc62a

Please sign in to comment.