mirror of
https://github.com/silverqx/TinyORM.git
synced 2026-01-06 02:49:31 -06:00
log Executed prepared/unprepared query
Correctly log executed query type, prepared vs unprepared.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user