Skip to content

Commit

Permalink
log Executed prepared/unprepared query
Browse files Browse the repository at this point in the history
Correctly log executed query type, prepared vs unprepared.
  • Loading branch information
silverqx committed Jun 23, 2022
1 parent 9b33136 commit 8e1d0ec
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 23 deletions.
22 changes: 12 additions & 10 deletions include/orm/concerns/logsqueries.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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>
Expand All @@ -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
Expand Down
2 changes: 2 additions & 0 deletions include/orm/constants_extern.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions include/orm/constants_inline.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
8 changes: 4 additions & 4 deletions include/orm/databaseconnection.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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();

Expand Down Expand Up @@ -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;
}
Expand Down
21 changes: 16 additions & 5 deletions src/orm/concerns/logsqueries.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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});
Expand All @@ -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());
Expand Down Expand Up @@ -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();
Expand All @@ -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(),
Expand Down
2 changes: 2 additions & 0 deletions src/orm/constants_extern.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
8 changes: 4 additions & 4 deletions src/orm/databaseconnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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>
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 8e1d0ec

Please sign in to comment.