log Executed prepared/unprepared query

Correctly log executed query type, prepared vs unprepared.
This commit is contained in:
silverqx
2022-06-23 17:45:31 +02:00
parent 9b331362d4
commit 8e1d0ec2d8
7 changed files with 42 additions and 23 deletions

View File

@@ -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<qint64> elapsed) const;
inline void logQuery(const QSqlQuery &query, std::optional<qint64> elapsed,
const QString &type) const;
/*! Log a query into the connection's query log. */
inline void logQuery(const std::tuple<int, QSqlQuery> &queryResult,
std::optional<qint64> elapsed) const;
std::optional<qint64> 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<QVariant> &bindings) const;
void logQueryForPretend(const QString &query, const QVector<QVariant> &bindings,
const QString &type) const;
/*! Log a transaction query into the connection's query log. */
void logTransactionQuery(const QString &query,
std::optional<qint64> 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<qint64> elapsed) const;
void logQueryInternal(const QSqlQuery &query, std::optional<qint64> elapsed,
const QString &type) const;
/*! Convert a named bindings map to the positional bindings vector. */
QVector<QVariant>
@@ -111,16 +112,17 @@ namespace Concerns
/* public */
void LogsQueries::logQuery(
const QSqlQuery &queryResult, std::optional<qint64> elapsed) const
const QSqlQuery &queryResult, std::optional<qint64> elapsed,
const QString &type) const
{
logQueryInternal(queryResult, elapsed);
logQueryInternal(queryResult, elapsed, type);
}
void LogsQueries::logQuery(
const std::tuple<int, QSqlQuery> &queryResult,
std::optional<qint64> elapsed) const
std::optional<qint64> elapsed, const QString &type) const
{
logQueryInternal(std::get<1>(queryResult), elapsed);
logQueryInternal(std::get<1>(queryResult), elapsed, type);
}
std::shared_ptr<QVector<Log>> LogsQueries::getQueryLog() const

View File

@@ -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;

View File

@@ -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");

View File

@@ -249,7 +249,7 @@ namespace SchemaNs
template<typename Return>
Return run(
const QString &queryString, const QVector<QVariant> &bindings,
const RunCallback<Return> &callback);
const QString &type, const RunCallback<Return> &callback);
/*! Run a SQL statement. */
template<typename Return>
Return runQueryCallback(
@@ -456,7 +456,7 @@ namespace SchemaNs
Return
DatabaseConnection::run(
const QString &queryString, const QVector<QVariant> &bindings,
const RunCallback<Return> &callback)
const QString &type, const RunCallback<Return> &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;
}

View File

@@ -22,7 +22,12 @@ namespace Orm::Concerns
/* public */
void LogsQueries::logQueryForPretend(
const QString &query, const QVector<QVariant> &bindings) const
const QString &query, const QVector<QVariant> &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<QVector<Log>()> &callback)
/* private */
void LogsQueries::logQueryInternal(
const QSqlQuery &query,
const std::optional<qint64> elapsed = std::nullopt) const
const QSqlQuery &query, const std::optional<qint64> 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(),

View File

@@ -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");

View File

@@ -85,7 +85,7 @@ DatabaseConnection::select(const QString &queryString,
{
const auto functionName = __tiny_func__;
return run<QSqlQuery>(queryString, bindings,
return run<QSqlQuery>(queryString, bindings, Prepared,
[this, &functionName]
(const QString &queryString_, const QVector<QVariant> &bindings_)
-> QSqlQuery
@@ -133,7 +133,7 @@ QSqlQuery DatabaseConnection::statement(const QString &queryString,
{
const auto functionName = __tiny_func__;
return run<QSqlQuery>(queryString, bindings,
return run<QSqlQuery>(queryString, bindings, Prepared,
[this, &functionName]
(const QString &queryString_, const QVector<QVariant> &bindings_)
-> QSqlQuery
@@ -172,7 +172,7 @@ DatabaseConnection::affectingStatement(const QString &queryString,
{
const auto functionName = __tiny_func__;
return run<std::tuple<int, QSqlQuery>>(queryString, bindings,
return run<std::tuple<int, QSqlQuery>>(queryString, bindings, Prepared,
[this, &functionName]
(const QString &queryString_, const QVector<QVariant> &bindings_)
-> std::tuple<int, QSqlQuery>
@@ -212,7 +212,7 @@ QSqlQuery DatabaseConnection::unprepared(const QString &queryString)
{
const auto functionName = __tiny_func__;
return run<QSqlQuery>(queryString, {},
return run<QSqlQuery>(queryString, {}, Unprepared,
[this, &functionName]
(const QString &queryString_, const QVector<QVariant> &/*unused*/)
-> QSqlQuery