From bad2d71d77f4cd63c11ec47d255e407fb43eb388 Mon Sep 17 00:00:00 2001 From: Zwelf Date: Wed, 20 Jan 2021 14:22:42 +0100 Subject: [PATCH] Add ExecuteUpdate to database interface reporting affected rows --- src/engine/server/databases/connection.h | 3 +++ src/engine/server/databases/mysql.cpp | 12 ++++++++++++ src/engine/server/databases/mysql.h | 1 + src/engine/server/databases/sqlite.cpp | 6 ++++++ src/engine/server/databases/sqlite.h | 3 ++- 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/engine/server/databases/connection.h b/src/engine/server/databases/connection.h index a872c7d27..767202652 100644 --- a/src/engine/server/databases/connection.h +++ b/src/engine/server/databases/connection.h @@ -67,6 +67,9 @@ public: // executes the query and returns if a result row exists and selects it // when called multiple times the next row is selected virtual bool Step() = 0; + // executes the query and returns the number of rows affected by the update/insert/delete + // FIXME(2020-01-20): change function to AffectedRows() when moved to c-api of MySQL + virtual int ExecuteUpdate() = 0; virtual bool IsNull(int Col) const = 0; virtual float GetFloat(int Col) const = 0; diff --git a/src/engine/server/databases/mysql.cpp b/src/engine/server/databases/mysql.cpp index c0c120805..589032d89 100644 --- a/src/engine/server/databases/mysql.cpp +++ b/src/engine/server/databases/mysql.cpp @@ -261,6 +261,18 @@ bool CMysqlConnection::Step() #endif } +int CMysqlConnection::ExecuteUpdate() +{ +#if defined(CONF_SQL) + if(m_NewQuery) + { + m_NewQuery = false; + return m_pPreparedStmt->executeUpdate(); + } +#endif + return -1; +} + bool CMysqlConnection::IsNull(int Col) const { #if defined(CONF_SQL) diff --git a/src/engine/server/databases/mysql.h b/src/engine/server/databases/mysql.h index 2a4af9927..c9dddbe43 100644 --- a/src/engine/server/databases/mysql.h +++ b/src/engine/server/databases/mysql.h @@ -52,6 +52,7 @@ public: virtual void Print() {} virtual bool Step(); + virtual int ExecuteUpdate(); virtual bool IsNull(int Col) const; virtual float GetFloat(int Col) const; diff --git a/src/engine/server/databases/sqlite.cpp b/src/engine/server/databases/sqlite.cpp index 65d5ad0d8..146b2d7fb 100644 --- a/src/engine/server/databases/sqlite.cpp +++ b/src/engine/server/databases/sqlite.cpp @@ -190,6 +190,12 @@ bool CSqliteConnection::Step() return false; } +int CSqliteConnection::ExecuteUpdate() +{ + Step(); + return sqlite3_changes(m_pDb); +} + bool CSqliteConnection::IsNull(int Col) const { return sqlite3_column_type(m_pStmt, Col - 1) == SQLITE_NULL; diff --git a/src/engine/server/databases/sqlite.h b/src/engine/server/databases/sqlite.h index 00b2cfee1..8bd61edcc 100644 --- a/src/engine/server/databases/sqlite.h +++ b/src/engine/server/databases/sqlite.h @@ -39,6 +39,7 @@ public: virtual void Print(); virtual bool Step(); + virtual int ExecuteUpdate(); virtual bool IsNull(int Col) const; virtual float GetFloat(int Col) const; @@ -58,7 +59,7 @@ private: sqlite3_stmt *m_pStmt; bool m_Done; // no more rows available for Step bool m_Locked; - // returns true, if the query succeded + // returns true, if the query succeeded bool Execute(const char *pQuery); void ExceptionOnError(int Result);