Skip to content

Commit 3adc62a

Browse files
committed
bugfix invalidOperator() did nothing
QueryBuilder::invalidOperator() did nothing, now it throws exception, but only for debug builds that enough.
1 parent 30ecc70 commit 3adc62a

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

include/orm/query/querybuilder.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -809,8 +809,8 @@ namespace Orm::Query
809809
QString stripTableForPluck(const QString &column) const;
810810

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

815815
/*! Remove all of the expressions from a list of bindings. */
816816
QVector<QVariant> cleanBindings(const QVector<QVariant> &bindings) const;

src/orm/query/querybuilder.cpp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -596,8 +596,9 @@ Builder &Builder::orWhereColumn(const QVector<WhereColumnItem> &values)
596596
Builder &Builder::whereColumn(const Column &first, const QString &comparison,
597597
const Column &second, const QString &condition)
598598
{
599-
// Compile check for a invalid comparison operator
600-
invalidOperator(comparison);
599+
#ifdef TINYORM_DEBUG
600+
throwIfInvalidOperator(comparison);
601+
#endif
601602

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

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

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

14341436
/* protected */
14351437

1436-
bool Builder::invalidOperator(const QString &comparison) const
1438+
void Builder::throwIfInvalidOperator(const QString &comparison) const
14371439
{
14381440
const auto comparison_ = comparison.toLower();
14391441

1440-
return !getOperators().contains(comparison_) &&
1441-
!m_grammar.getOperators().contains(comparison_);
1442+
if (getOperators().contains(comparison_) ||
1443+
m_grammar.getOperators().contains(comparison_)
1444+
)
1445+
return;
1446+
1447+
throw Exceptions::InvalidArgumentError(
1448+
QStringLiteral("The '%1' operator is not valid for the '%2' database "
1449+
"in %3().")
1450+
.arg(comparison_, getConnection().driverNamePrintable(), __tiny_func__));
14421451
}
14431452

14441453
QVector<QVariant> Builder::cleanBindings(const QVector<QVariant> &bindings) const
@@ -1719,7 +1728,9 @@ Builder &Builder::whereInternal(
17191728
const Column &column, const QString &comparison, QVariant value,
17201729
const QString &condition, const WhereType type)
17211730
{
1722-
invalidOperator(comparison);
1731+
#ifdef TINYORM_DEBUG
1732+
throwIfInvalidOperator(comparison);
1733+
#endif
17231734

17241735
m_wheres.append({.column = column, .value = value, .comparison = comparison,
17251736
.condition = condition, .type = type});

0 commit comments

Comments
 (0)