From 424b5f6bf34d3ebd70841044a6950b3741516d2b Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Tue, 6 Aug 2024 09:51:19 +0100 Subject: Add a helper template for checking MySQL errors. --- src/modules/extra/m_mysql.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/modules/extra/m_mysql.cpp') diff --git a/src/modules/extra/m_mysql.cpp b/src/modules/extra/m_mysql.cpp index 17df7ca4a..aaf87f076 100644 --- a/src/modules/extra/m_mysql.cpp +++ b/src/modules/extra/m_mysql.cpp @@ -85,6 +85,16 @@ class SQLConnection; class MySQLresult; class DispatcherThread; +namespace +{ + template + bool IsMySQLError(Numeric num) + { + // MySQL regularly returns -1 on error in unsigned fields. + return num == static_cast(-1); + } +} + struct QueryQueueItem final { // An SQL database which this query is executed on. @@ -170,8 +180,7 @@ public: MySQLresult(MYSQL_RES* res, unsigned long affected_rows) : err(SQL::SUCCESS) { - // mysql returns -1 on error even though the return type is unsigned - if (affected_rows >= 1 && affected_rows != (unsigned long)-1) + if (affected_rows >= 1 && !IsMySQLError(affected_rows)) { rows = int(affected_rows); fieldlists.resize(rows); @@ -285,7 +294,7 @@ private: // unsigned type even though -1 is returned on error so checking whether an error // happened is a bit cursed. unsigned long escapedsize = mysql_escape_string(buffer.data(), in.c_str(), in.length()); - if (escapedsize == static_cast(-1)) + if (IsMySQLError(escapedsize)) { SQL::Error err(SQL::QSEND_FAIL, INSP_FORMAT("{}: {}", mysql_errno(connection), mysql_error(connection))); query->OnError(err); -- cgit v1.3.1-10-gc9f91