diff options
author | louiz’ <louiz@louiz.org> | 2018-01-14 21:46:49 +0100 |
---|---|---|
committer | louiz’ <louiz@louiz.org> | 2018-01-14 21:46:49 +0100 |
commit | 7e64a2e361adcdbd2fce5ad76051a150b4de062d (patch) | |
tree | b90208a43341ba626fffb42a6a6d63dd126ba561 /src/database | |
parent | 3cd649023680bd49f9865fd62474d4db6a9d7c68 (diff) | |
download | biboumi-7e64a2e361adcdbd2fce5ad76051a150b4de062d.tar.gz biboumi-7e64a2e361adcdbd2fce5ad76051a150b4de062d.tar.bz2 biboumi-7e64a2e361adcdbd2fce5ad76051a150b4de062d.tar.xz biboumi-7e64a2e361adcdbd2fce5ad76051a150b4de062d.zip |
Add a DEBUG_SQL_QUERIES to log info about the executed SQL queries
fix #3324
Diffstat (limited to 'src/database')
-rw-r--r-- | src/database/count_query.hpp | 3 | ||||
-rw-r--r-- | src/database/insert_query.hpp | 4 | ||||
-rw-r--r-- | src/database/postgresql_engine.cpp | 6 | ||||
-rw-r--r-- | src/database/query.hpp | 29 | ||||
-rw-r--r-- | src/database/select_query.hpp | 4 | ||||
-rw-r--r-- | src/database/sqlite3_engine.cpp | 7 | ||||
-rw-r--r-- | src/database/update_query.hpp | 4 |
7 files changed, 57 insertions, 0 deletions
diff --git a/src/database/count_query.hpp b/src/database/count_query.hpp index e8d24ef..118ce44 100644 --- a/src/database/count_query.hpp +++ b/src/database/count_query.hpp @@ -16,6 +16,9 @@ struct CountQuery: public Query int64_t execute(DatabaseEngine& db) { +#ifdef DEBUG_SQL_QUERIES + const auto timer = this->log_and_time(); +#endif auto statement = db.prepare(this->body); int64_t res = 0; if (statement->step() != StepResult::Error) diff --git a/src/database/insert_query.hpp b/src/database/insert_query.hpp index 17cc245..9726424 100644 --- a/src/database/insert_query.hpp +++ b/src/database/insert_query.hpp @@ -39,6 +39,10 @@ struct InsertQuery: public Query template <typename... T> void execute(DatabaseEngine& db, std::tuple<T...>& columns) { +#ifdef DEBUG_SQL_QUERIES + const auto timer = this->log_and_time(); +#endif + auto statement = db.prepare(this->body); this->bind_param(columns, *statement); diff --git a/src/database/postgresql_engine.cpp b/src/database/postgresql_engine.cpp index 150ca42..984a959 100644 --- a/src/database/postgresql_engine.cpp +++ b/src/database/postgresql_engine.cpp @@ -3,6 +3,8 @@ #include <utils/scopeguard.hpp> +#include <database/query.hpp> + #include <database/postgresql_engine.hpp> #include <database/postgresql_statement.hpp> @@ -51,6 +53,10 @@ std::set<std::string> PostgresqlEngine::get_all_columns_from_table(const std::st std::tuple<bool, std::string> PostgresqlEngine::raw_exec(const std::string& query) { +#ifdef DEBUG_SQL_QUERIES + log_debug("SQL QUERY: ", query); + const auto timer = make_sql_timer(); +#endif PGresult* res = PQexec(this->conn, query.data()); auto sg = utils::make_scope_guard([res](){ PQclear(res); diff --git a/src/database/query.hpp b/src/database/query.hpp index 7f8aecb..547138f 100644 --- a/src/database/query.hpp +++ b/src/database/query.hpp @@ -1,5 +1,7 @@ #pragma once +#include <biboumi.h> + #include <utils/optional_bool.hpp> #include <database/statement.hpp> #include <database/column.hpp> @@ -13,6 +15,20 @@ void actual_bind(Statement& statement, const std::string& value, int index); void actual_bind(Statement& statement, const std::size_t value, int index); void actual_bind(Statement& statement, const OptionalBool& value, int index); +#ifdef DEBUG_SQL_QUERIES +#include <utils/scopetimer.hpp> + +inline auto make_sql_timer() +{ + return make_scope_timer([](const std::chrono::steady_clock::duration& elapsed) + { + const auto seconds = std::chrono::duration_cast<std::chrono::seconds>(elapsed); + const auto rest = elapsed - seconds; + log_debug("Query executed in ", seconds.count(), ".", rest.count(), "s."); + }); +} +#endif + struct Query { std::string body; @@ -22,6 +38,18 @@ struct Query Query(std::string str): body(std::move(str)) {} + +#ifdef DEBUG_SQL_QUERIES + auto log_and_time() + { + std::ostringstream os; + os << this->body << "; "; + for (const auto& param: this->params) + os << "'" << param << "' "; + log_debug("SQL QUERY: ", os.str()); + return make_sql_timer(); + } +#endif }; template <typename ColumnType> @@ -58,3 +86,4 @@ operator<<(Query& query, const Integer& i) actual_add_param(query, i); return query; } + diff --git a/src/database/select_query.hpp b/src/database/select_query.hpp index af2ac1c..5a17f38 100644 --- a/src/database/select_query.hpp +++ b/src/database/select_query.hpp @@ -110,6 +110,10 @@ struct SelectQuery: public Query { std::vector<Row<T...>> rows; +#ifdef DEBUG_SQL_QUERIES + const auto timer = this->log_and_time(); +#endif + auto statement = db.prepare(this->body); statement->bind(std::move(this->params)); diff --git a/src/database/sqlite3_engine.cpp b/src/database/sqlite3_engine.cpp index 92d514b..ae4a146 100644 --- a/src/database/sqlite3_engine.cpp +++ b/src/database/sqlite3_engine.cpp @@ -6,6 +6,8 @@ #include <database/sqlite3_statement.hpp> +#include <database/query.hpp> + #include <utils/tolower.hpp> #include <logger/logger.hpp> #include <vector> @@ -57,6 +59,11 @@ std::unique_ptr<DatabaseEngine> Sqlite3Engine::open(const std::string& filename) std::tuple<bool, std::string> Sqlite3Engine::raw_exec(const std::string& query) { +#ifdef DEBUG_SQL_QUERIES + log_debug("SQL QUERY: ", query); + const auto timer = make_sql_timer(); +#endif + char* error; const auto result = sqlite3_exec(db, query.data(), nullptr, nullptr, &error); if (result != SQLITE_OK) diff --git a/src/database/update_query.hpp b/src/database/update_query.hpp index 32befc0..a29ac3f 100644 --- a/src/database/update_query.hpp +++ b/src/database/update_query.hpp @@ -64,6 +64,10 @@ struct UpdateQuery: public Query template <typename... T> void execute(DatabaseEngine& db, const std::tuple<T...>& columns) { +#ifdef DEBUG_SQL_QUERIES + const auto timer = this->log_and_time(); +#endif + auto statement = db.prepare(this->body); this->bind_param(columns, *statement); this->bind_id(columns, *statement); |