diff --git a/include/orm/query/querybuilder.hpp b/include/orm/query/querybuilder.hpp index a73f1f322..3a6beff58 100644 --- a/include/orm/query/querybuilder.hpp +++ b/include/orm/query/querybuilder.hpp @@ -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 cleanBindings(const QVector &bindings) const; diff --git a/src/orm/query/querybuilder.cpp b/src/orm/query/querybuilder.cpp index 369afc839..1a72b8f8c 100644 --- a/src/orm/query/querybuilder.cpp +++ b/src/orm/query/querybuilder.cpp @@ -596,8 +596,9 @@ Builder &Builder::orWhereColumn(const QVector &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}); @@ -980,8 +981,9 @@ Builder &Builder::groupByRaw(const QString &sql, const QVector &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}); @@ -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 Builder::cleanBindings(const QVector &bindings) const @@ -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});