diff --git a/include/orm/concerns/logsqueries.hpp b/include/orm/concerns/logsqueries.hpp index 58cc3154e..f02cf31ed 100644 --- a/include/orm/concerns/logsqueries.hpp +++ b/include/orm/concerns/logsqueries.hpp @@ -35,13 +35,14 @@ namespace Concerns inline virtual ~LogsQueries() = default; /*! Log a query into the connection's query log. */ - inline void logQuery(const QSqlQuery &query, std::optional elapsed) const; + inline void logQuery(const QSqlQuery &query, std::optional elapsed, + const QString &type) const; /*! Log a query into the connection's query log. */ inline void logQuery(const std::tuple &queryResult, - std::optional elapsed) const; + std::optional elapsed, const QString &type) const; /*! Log a query into the connection's query log in the pretending mode. */ - void logQueryForPretend(const QString &query, - const QVector &bindings) const; + void logQueryForPretend(const QString &query, const QVector &bindings, + const QString &type) const; /*! Log a transaction query into the connection's query log. */ void logTransactionQuery(const QString &query, std::optional elapsed) const; @@ -92,8 +93,8 @@ namespace Concerns private: /*! Log a query into the connection's query log. */ - void logQueryInternal(const QSqlQuery &query, - std::optional elapsed) const; + void logQueryInternal(const QSqlQuery &query, std::optional elapsed, + const QString &type) const; /*! Convert a named bindings map to the positional bindings vector. */ QVector @@ -111,16 +112,17 @@ namespace Concerns /* public */ void LogsQueries::logQuery( - const QSqlQuery &queryResult, std::optional elapsed) const + const QSqlQuery &queryResult, std::optional elapsed, + const QString &type) const { - logQueryInternal(queryResult, elapsed); + logQueryInternal(queryResult, elapsed, type); } void LogsQueries::logQuery( const std::tuple &queryResult, - std::optional elapsed) const + std::optional elapsed, const QString &type) const { - logQueryInternal(std::get<1>(queryResult), elapsed); + logQueryInternal(std::get<1>(queryResult), elapsed, type); } std::shared_ptr> LogsQueries::getQueryLog() const diff --git a/include/orm/constants_extern.hpp b/include/orm/constants_extern.hpp index 1e9af6669..be2938885 100644 --- a/include/orm/constants_extern.hpp +++ b/include/orm/constants_extern.hpp @@ -53,6 +53,8 @@ namespace Orm::Constants SHAREDLIB_EXPORT extern const QString NOSPACE; SHAREDLIB_EXPORT extern const QString EMPTY; SHAREDLIB_EXPORT extern const QString text_; + SHAREDLIB_EXPORT extern const QString Prepared; + SHAREDLIB_EXPORT extern const QString Unprepared; SHAREDLIB_EXPORT extern const QString QMYSQL; SHAREDLIB_EXPORT extern const QString QPSQL; diff --git a/include/orm/constants_inline.hpp b/include/orm/constants_inline.hpp index 2e05ddd7a..93420a233 100644 --- a/include/orm/constants_inline.hpp +++ b/include/orm/constants_inline.hpp @@ -52,6 +52,8 @@ namespace Orm::Constants inline const QString NOSPACE = QStringLiteral("%1%2"); inline const QString EMPTY = QLatin1String(""); inline const QString text_ = QStringLiteral("text"); + inline const QString Prepared = QStringLiteral("prepared"); + inline const QString Unprepared = QStringLiteral("unprepared"); inline const QString QMYSQL = QStringLiteral("QMYSQL"); inline const QString QPSQL = QStringLiteral("QPSQL"); diff --git a/include/orm/databaseconnection.hpp b/include/orm/databaseconnection.hpp index 1ea000de4..bb536ad5c 100644 --- a/include/orm/databaseconnection.hpp +++ b/include/orm/databaseconnection.hpp @@ -249,7 +249,7 @@ namespace SchemaNs template Return run( const QString &queryString, const QVector &bindings, - const RunCallback &callback); + const QString &type, const RunCallback &callback); /*! Run a SQL statement. */ template Return runQueryCallback( @@ -456,7 +456,7 @@ namespace SchemaNs Return DatabaseConnection::run( const QString &queryString, const QVector &bindings, - const RunCallback &callback) + const QString &type, const RunCallback &callback) { reconnectIfMissingConnection(); @@ -493,9 +493,9 @@ namespace SchemaNs to run and then log the query, bindings, and execution time. We'll log time in milliseconds. */ if (m_pretending) - logQueryForPretend(queryString, bindings); + logQueryForPretend(queryString, bindings, type); else - logQuery(result, elapsed); + logQuery(result, elapsed, type); return result; } diff --git a/src/orm/concerns/logsqueries.cpp b/src/orm/concerns/logsqueries.cpp index 29d742c29..7eee23127 100644 --- a/src/orm/concerns/logsqueries.cpp +++ b/src/orm/concerns/logsqueries.cpp @@ -22,7 +22,12 @@ namespace Orm::Concerns /* public */ void LogsQueries::logQueryForPretend( - const QString &query, const QVector &bindings) const + const QString &query, const QVector &bindings, +#ifdef TINYORM_DEBUG_SQL + const QString &type) const +#else + const QString &/*unused*/) const +#endif { if (m_loggingQueries && m_queryLog) m_queryLog->append({query, bindings, Log::Type::NORMAL, ++m_queryLogId}); @@ -34,7 +39,8 @@ void LogsQueries::logQueryForPretend( const auto &connectionName = databaseConnection().getName(); - qDebug("Pretended prepared query (%s) : %s", + qDebug("Pretended %s query (%s) : %s", + type.toUtf8().constData(), connectionName.isEmpty() ? "" : connectionName.toUtf8().constData(), QueryUtils::parseExecutedQueryForPretend(query, bindings).toUtf8().constData()); @@ -141,8 +147,12 @@ LogsQueries::withFreshQueryLog(const std::function()> &callback) /* private */ void LogsQueries::logQueryInternal( - const QSqlQuery &query, - const std::optional elapsed = std::nullopt) const + const QSqlQuery &query, const std::optional elapsed, +#ifdef TINYORM_DEBUG_SQL + const QString &type) const +#else + const QString &/*unused*/) const +#endif { if (m_loggingQueries && m_queryLog) { auto executedQuery = query.executedQuery(); @@ -167,7 +177,8 @@ void LogsQueries::logQueryInternal( const auto &connectionName = databaseConnection().getName(); - qDebug("Executed prepared query (%llims, %i results, %i affected%s) : %s", + qDebug("Executed %s query (%llims, %i results, %i affected%s) : %s", + type.toUtf8().constData(), elapsed ? *elapsed : -1, query.size(), query.numRowsAffected(), diff --git a/src/orm/constants_extern.cpp b/src/orm/constants_extern.cpp index c718ae2e0..d32fce8f8 100644 --- a/src/orm/constants_extern.cpp +++ b/src/orm/constants_extern.cpp @@ -42,6 +42,8 @@ namespace Orm::Constants const QString NOSPACE = QStringLiteral("%1%2"); const QString EMPTY = QLatin1String(""); const QString text_ = QStringLiteral("text"); + const QString Prepared = QStringLiteral("prepared"); + const QString Unprepared = QStringLiteral("unprepared"); const QString QMYSQL = QStringLiteral("QMYSQL"); const QString QPSQL = QStringLiteral("QPSQL"); diff --git a/src/orm/databaseconnection.cpp b/src/orm/databaseconnection.cpp index 70b1f24e2..13c3f18be 100644 --- a/src/orm/databaseconnection.cpp +++ b/src/orm/databaseconnection.cpp @@ -85,7 +85,7 @@ DatabaseConnection::select(const QString &queryString, { const auto functionName = __tiny_func__; - return run(queryString, bindings, + return run(queryString, bindings, Prepared, [this, &functionName] (const QString &queryString_, const QVector &bindings_) -> QSqlQuery @@ -133,7 +133,7 @@ QSqlQuery DatabaseConnection::statement(const QString &queryString, { const auto functionName = __tiny_func__; - return run(queryString, bindings, + return run(queryString, bindings, Prepared, [this, &functionName] (const QString &queryString_, const QVector &bindings_) -> QSqlQuery @@ -172,7 +172,7 @@ DatabaseConnection::affectingStatement(const QString &queryString, { const auto functionName = __tiny_func__; - return run>(queryString, bindings, + return run>(queryString, bindings, Prepared, [this, &functionName] (const QString &queryString_, const QVector &bindings_) -> std::tuple @@ -212,7 +212,7 @@ QSqlQuery DatabaseConnection::unprepared(const QString &queryString) { const auto functionName = __tiny_func__; - return run(queryString, {}, + return run(queryString, {}, Unprepared, [this, &functionName] (const QString &queryString_, const QVector &/*unused*/) -> QSqlQuery