drivers fixed new Clang Tidy v18 warnings

- clang-analyzer-core.StackAddressEscape
 - performance-enum-size
 - readability-avoid-return-with-void-value
 - readability-redundant-inline-specifier
 - readability-redundant-member-init
 - readability-static-accessed-through-instance
This commit is contained in:
silverqx
2024-03-17 10:22:53 +01:00
parent a2d729da4c
commit d5b9deac97
20 changed files with 90 additions and 90 deletions

View File

@@ -5,6 +5,8 @@
#include <orm/macros/systemheader.hpp>
TINY_SYSTEM_HEADER
#include <QtTypes>
#include <orm/macros/commonnamespace.hpp>
TINYORM_BEGIN_COMMON_NAMESPACE
@@ -13,7 +15,7 @@ namespace Orm::Drivers
{
/*! Result set cursor position type. */
enum CursorPosition
enum CursorPosition : qint8
{
/*! Cursor position before the first row. */
BeforeFirstRow = -1,
@@ -22,7 +24,7 @@ namespace Orm::Drivers
};
/*! Numerical precision policies for floating point numbers. */
enum struct NumericalPrecisionPolicy
enum struct NumericalPrecisionPolicy : qint8
{
/*! Force 32bit integer values. The fractional part is silently discarded. */
LowPrecisionInt32 = 0x01,
@@ -35,7 +37,7 @@ namespace Orm::Drivers
};
/*! Type of a bind parameter (dummy type for API compatibility). */
enum struct ParamType
enum struct ParamType : qint8
{
/*! The bind parameter to put data into the database. */
In = 0,

View File

@@ -24,7 +24,7 @@ namespace Orm::Drivers
{
public:
/*! An error type type. */
enum ErrorType
enum ErrorType : qint8
{
NoError,
ConnectionError,
@@ -38,17 +38,17 @@ namespace Orm::Drivers
const QString &driverText = {}, const QString &databaseText = {}, // NOLINT(google-explicit-constructor)
ErrorType errorType = NoError, const QString &errorCode = {}) noexcept;
/*! Default destructor. */
inline ~DummySqlError() = default;
~DummySqlError() = default;
/*! Copy constructor. */
inline DummySqlError(const DummySqlError &) = default;
DummySqlError(const DummySqlError &) = default;
/*! Copy assignment operator. */
inline DummySqlError &operator=(const DummySqlError &) = default;
DummySqlError &operator=(const DummySqlError &) = default;
/*! Move constructor. */
inline DummySqlError(DummySqlError &&) noexcept = default;
DummySqlError(DummySqlError &&) noexcept = default;
/*! Move assignment operator. */
inline DummySqlError &operator=(DummySqlError &&) noexcept = default;
DummySqlError &operator=(DummySqlError &&) noexcept = default;
/*! Equality comparison operator for the SqlError. */
inline bool operator==(const DummySqlError &other) const noexcept;
@@ -73,14 +73,14 @@ namespace Orm::Drivers
private:
/*! Driver-specific error text. */
QString m_driverText {};
QString m_driverText;
/*! Database-specific error text. */
QString m_databaseText {};
QString m_databaseText;
/*! An error type. */
[[maybe_unused]]
DummySqlError::ErrorType m_errorType = NoError;
/*! Database-specific error code. */
QString m_errorCode {};
QString m_errorCode;
};
/* public */

View File

@@ -17,9 +17,9 @@ namespace Orm::Drivers::Exceptions
struct MySqlErrorType
{
/*! Prepared database-specific error code. */
QString errNo {};
QString errNo;
/*! Prepared database-specific error message. */
QString errorMessage {};
QString errorMessage;
};
#endif // TINYDRIVERS_MYSQL_DRIVER

View File

@@ -40,14 +40,14 @@ namespace Orm::Drivers
~SqlDatabase() noexcept;
/*! Copy constructor. */
inline SqlDatabase(const SqlDatabase &) = default;
SqlDatabase(const SqlDatabase &) = default;
/*! Copy assignment operator. */
inline SqlDatabase &operator=(const SqlDatabase &) = default;
SqlDatabase &operator=(const SqlDatabase &) = default;
/*! Move constructor. */
inline SqlDatabase(SqlDatabase &&) noexcept = default;
SqlDatabase(SqlDatabase &&) noexcept = default;
/*! Move assignment operator. */
inline SqlDatabase &operator=(SqlDatabase &&) noexcept = default;
SqlDatabase &operator=(SqlDatabase &&) noexcept = default;
/* Database connection */
/*! Open the database connection using the current connection values. */

View File

@@ -24,21 +24,21 @@ namespace Orm::Drivers
{
protected:
/*! Default constructor. */
inline SqlDatabaseManager() = default;
SqlDatabaseManager() = default;
public:
/*! Copy constructor. */
inline SqlDatabaseManager(const SqlDatabaseManager &) = default;
SqlDatabaseManager(const SqlDatabaseManager &) = default;
/*! Copy assignment operator. */
inline SqlDatabaseManager &operator=(const SqlDatabaseManager &) = default; // clazy:exclude=function-args-by-value
SqlDatabaseManager &operator=(const SqlDatabaseManager &) = default; // clazy:exclude=function-args-by-value
/*! Move constructor. */
inline SqlDatabaseManager(SqlDatabaseManager &&) noexcept = default;
SqlDatabaseManager(SqlDatabaseManager &&) noexcept = default;
/*! Move assignment operator. */
inline SqlDatabaseManager &operator=(SqlDatabaseManager &&) noexcept = default;
SqlDatabaseManager &operator=(SqlDatabaseManager &&) noexcept = default;
/*! Default destructor. */
inline ~SqlDatabaseManager() = default;
~SqlDatabaseManager() = default;
/*! Default Database Connection Name. */
static const QString defaultConnection;

View File

@@ -41,7 +41,7 @@ namespace Orm::Drivers
but were added back to be API compatible with QSqlDriver::DriverFeature. */
/*! Supported driver features enum. */
enum DriverFeature
enum DriverFeature : qint8
{
/*! Supports batched operations (unused, for API compatibility). */
BatchOperations,
@@ -80,7 +80,7 @@ namespace Orm::Drivers
};
/*! Identifier type enum. */
enum IdentifierType
enum IdentifierType : qint8
{
/*! Field/column name. */
FieldName,
@@ -89,7 +89,7 @@ namespace Orm::Drivers
};
/*! Database driver type enum. */
enum DbmsType
enum DbmsType : qint8
{
/*! MySQL database driver. */
MySqlServer,

View File

@@ -24,7 +24,7 @@ namespace Orm::Drivers
using size_type = qint64;
/*! Determine whether a field is required during INSERT statements. */
enum struct RequiredStatus
enum struct RequiredStatus : qint8
{
/*! Unknown required field status. */
Unknown = -1,
@@ -41,20 +41,20 @@ namespace Orm::Drivers
explicit SqlField(QString fieldName = {}, QMetaType metaType = {},
QString tableName = {});
/*! Default destructor. */
inline ~SqlField() = default;
~SqlField() = default;
/*! Copy constructor. */
inline SqlField(const SqlField &) = default;
SqlField(const SqlField &) = default;
/*! Copy assignment operator. */
inline SqlField &operator=(const SqlField &) = default;
SqlField &operator=(const SqlField &) = default;
/*! Move constructor. */
inline SqlField(SqlField &&) noexcept = default;
SqlField(SqlField &&) noexcept = default;
/*! Move assignment operator. */
inline SqlField &operator=(SqlField &&) noexcept = default;
SqlField &operator=(SqlField &&) noexcept = default;
/*! Equality comparison operator for the SqlField. */
inline bool operator==(const SqlField &) const = default;
bool operator==(const SqlField &) const = default;
/*! Swap the SqlField. */
void swap(SqlField &other) noexcept;
@@ -155,9 +155,9 @@ namespace Orm::Drivers
/*! Table name a field belongs to. */
QString m_table;
/*! Underlying database field type name (DB dependent). */
QString m_sqlTypeName {}; // Moved up here for a better memory layout/padding
QString m_sqlTypeName; // Moved up here for a better memory layout/padding
/*! Field default value. */
QVariant m_defaultValue {};
QVariant m_defaultValue;
/*! Qt metatype. */
QMetaType m_metaType;
/*! Determine whether a field is required during INSERT statements. */

View File

@@ -21,22 +21,22 @@ namespace Orm::Drivers
using size_type = int;
/*! Default constructor. */
inline SqlRecord() = default;
SqlRecord() = default;
/*! Default destructor. */
inline ~SqlRecord() = default;
~SqlRecord() = default;
/*! Copy constructor. */
inline SqlRecord(const SqlRecord &) = default;
SqlRecord(const SqlRecord &) = default;
/*! Copy assignment operator. */
inline SqlRecord &operator=(const SqlRecord &) = default;
SqlRecord &operator=(const SqlRecord &) = default;
/*! Move constructor. */
inline SqlRecord(SqlRecord &&) noexcept = default;
SqlRecord(SqlRecord &&) noexcept = default;
/*! Move assignment operator. */
inline SqlRecord &operator=(SqlRecord &&) noexcept = default;
SqlRecord &operator=(SqlRecord &&) noexcept = default;
/*! Equality comparison operator for the SqlRecord. */
inline bool operator==(const SqlRecord &) const = default;
bool operator==(const SqlRecord &) const = default;
/*! Swap the SqlRecord. */
inline void swap(SqlRecord &other) noexcept;

View File

@@ -46,7 +46,7 @@ namespace Orm::Drivers
protected:
/*! Query placeholders syntax enum. */
enum BindingSyntax
enum BindingSyntax : qint8
{
/*! Positional placeholders using the ? character. */
PositionalBinding,

View File

@@ -58,8 +58,7 @@ namespace Private
static_assert (Private::is_comparable_to_nullptr<T>::value,
"The NotNull T template argument cannot be the nullptr.");
template<typename U,
typename = std::enable_if_t<std::is_convertible_v<U, T>>>
template<std::convertible_to<T> U>
constexpr NotNull(U &&u) // NOLINT(google-explicit-constructor)
: m_ptr(std::forward<U>(u))
{
@@ -67,25 +66,23 @@ namespace Private
std::terminate();
}
template<typename = std::enable_if_t<!std::is_same_v<std::nullptr_t, T>>>
constexpr NotNull(T u) // NOLINT(google-explicit-constructor)
constexpr NotNull(T u) requires (!std::is_same_v<std::nullptr_t, T>) // NOLINT(google-explicit-constructor)
: m_ptr(std::move(u))
{
if (m_ptr == nullptr)
std::terminate();
}
template<typename U,
typename = std::enable_if_t<std::is_convertible_v<U, T>>>
template<std::convertible_to<T> U>
constexpr NotNull(const NotNull<U> &other) // NOLINT(google-explicit-constructor)
: NotNull(other.get())
{}
inline NotNull(const NotNull &) = default;
inline NotNull &operator=(const NotNull &) = default;
NotNull(const NotNull &) = default;
NotNull &operator=(const NotNull &) = default;
inline NotNull(NotNull &&) = default;
inline NotNull &operator=(NotNull &&) = default;
NotNull(NotNull &&) = default;
NotNull &operator=(NotNull &&) = default;
/*! Return the managed pointer (allows access to the smart pointer). */
constexpr Private::value_or_reference_return_t<T> get() const // NOLINT(readability-const-return-type)

View File

@@ -35,7 +35,7 @@ namespace Support
/*! Constructor. */
inline explicit SqlDatabasePrivate(std::shared_ptr<SqlDriver> &&driver) noexcept;
/*! Default destructor. */
inline ~SqlDatabasePrivate() = default;
~SqlDatabasePrivate() = default;
/* Database connection */
/*! Clone the SqlDatabasePrivate. */
@@ -98,18 +98,18 @@ namespace Support
/*! Connection driver name. */
QString driverName;
/*! Connection name. */
QString connectionName {};
QString connectionName;
/*! Connection hostname. */
QString hostName {};
QString hostName;
/*! Connection database name. */
QString databaseName {};
QString databaseName;
/*! Connection username. */
QString username {};
QString username;
/*! Connection password. */
QString password {};
QString password;
/*! Connection extra options. */
QString connectionOptions {};
QString connectionOptions;
/*! Connection port. */
int port = -1;

View File

@@ -37,7 +37,7 @@ namespace Orm::Drivers
/*! Is the connection currently open? */
bool isOpen = false;
/*! The current database connection name (used in exceptions and logs). */
QString connectionName {};
QString connectionName;
};
/* public */

View File

@@ -36,7 +36,7 @@ namespace Orm::Drivers
/*! Constructor. */
explicit SqlResultPrivate(const std::weak_ptr<SqlDriver> &driver) noexcept;
/*! Default destructor. */
inline ~SqlResultPrivate() = default;
~SqlResultPrivate() = default;
/* Prepared queries */
/*! Determine whether a value stored in the given QVariant isNull(). */
@@ -47,12 +47,12 @@ namespace Orm::Drivers
std::weak_ptr<SqlDriver> sqldriver;
/*! The current database connection name (used in exceptions and logs). */
QString connectionName {};
QString connectionName;
/*! The current SQL query text. */
QString query {};
QString query;
/*! Bound values for a prepared statement. */
QList<QVariant> boundValues {};
QList<QVariant> boundValues;
/*! Connection numerical precision policy. */
NumericalPrecisionPolicy precisionPolicy = LowPrecisionDouble;

View File

@@ -35,9 +35,9 @@ namespace Orm::Drivers::Support
using size_type = typename ContainerType::size_type;
/*! Default constructor. */
inline ConnectionsHashPrivate() = default;
ConnectionsHashPrivate() = default;
/*! Default destructor. */
inline ~ConnectionsHashPrivate() = default;
~ConnectionsHashPrivate() = default;
/* Lookup */
/*! Get a connection by the given connection name. */
@@ -71,9 +71,9 @@ namespace Orm::Drivers::Support
private:
/*! Database connections hash. */
ContainerType m_data {};
ContainerType m_data;
/*! Shared mutex. */
mutable std::shared_mutex m_mutex {};
mutable std::shared_mutex m_mutex;
};
/* public */

View File

@@ -29,7 +29,7 @@ namespace Support
/*! Constructor. */
inline SqlDriverFactoryPrivate(QString &&driver, const QString &connection);
/*! Deleted destructor. */
inline ~SqlDriverFactoryPrivate() = default;
~SqlDriverFactoryPrivate() = default;
/*! Create a SqlDriver instance based on the driverName data member. */
std::shared_ptr<SqlDriver> make() const;

View File

@@ -121,13 +121,13 @@ namespace
/*! Get the MySQL driver shared library basename for MSVC. */
inline QStringList getDriverBasenameMsvc(const QString &driverBasenameRaw)
{
static auto versionMajor = QString::number(TINYDRIVERS_VERSION_MAJOR);
static const auto driverBasenameVersion = driverBasenameRaw % versionMajor;
static const auto versionMajor = QString::number(TINYDRIVERS_VERSION_MAJOR);
static const auto driverBasenameVersion = driverBasenameRaw + versionMajor;
return {
// qmake build doesn't support appending d after the basename for Debug builds
#if defined(TINYDRIVERS_DEBUG) && !defined(TINY_QMAKE_BUILD)
driverBasenameVersion % 'd'_L1, // TinyMySql0d.dll
driverBasenameVersion + 'd'_L1, // TinyMySql0d.dll
#endif
driverBasenameVersion, // TinyMySql0.dll
/* As the last, try to load from the raw basename without any postfixes,
@@ -141,16 +141,16 @@ namespace
/*! Get the MySQL driver shared library basename on Linux. */
inline QStringList getDriverBasenameLinux(const QString &driverBasenameRaw)
{
static const auto driverBasenameLib = u"lib"_s % driverBasenameRaw;
static const auto driverBasenameLib = u"lib"_s + driverBasenameRaw;
return {
// qmake build doesn't support appending d after the basename for Debug builds
#if defined(TINYDRIVERS_DEBUG) && !defined(TINY_QMAKE_BUILD)
driverBasenameLib % 'd'_L1, // libTinyMySqld.so
driverBasenameLib + 'd'_L1, // libTinyMySqld.so
#endif
driverBasenameLib, // libTinyMySql.so
#if defined(TINYDRIVERS_DEBUG) && !defined(TINY_QMAKE_BUILD)
driverBasenameRaw % 'd'_L1, // TinyMySqld.so
driverBasenameRaw + 'd'_L1, // TinyMySqld.so
#endif
/* As the last, try to load from the raw basename without any postfixes,
we don't use this but it can be helpful in some situations. */
@@ -163,22 +163,22 @@ namespace
/*! Get the MySQL driver shared library basename on MSYS2/MinGW. */
inline QStringList getDriverBasenameMinGW(const QString &driverBasenameRaw)
{
static auto versionMajor = QString::number(TINYDRIVERS_VERSION_MAJOR);
static const auto versionMajor = QString::number(TINYDRIVERS_VERSION_MAJOR);
// qmake build doesn't prepend lib for shared libraries on MSYS2
#ifdef TINY_QMAKE_BUILD
static const auto driverBasename = driverBasenameRaw;
#else
static const auto driverBasename = u"lib"_s % driverBasenameRaw;
static const auto driverBasenameVersion = driverBasename % versionMajor;
static const auto driverBasename = u"lib"_s + driverBasenameRaw;
static const auto driverBasenameVersion = driverBasename + versionMajor;
#endif
static const auto driverBasenameRawVersion = driverBasenameRaw % versionMajor;
static const auto driverBasenameRawVersion = driverBasenameRaw + versionMajor;
return {
// CMake builds only (or any other build system that prepends lib prefix)
#ifndef TINY_QMAKE_BUILD
# ifdef TINYDRIVERS_DEBUG
driverBasenameVersion % 'd'_L1, // libTinyMySql0d.dll
driverBasenameVersion + 'd'_L1, // libTinyMySql0d.dll
# endif
driverBasenameVersion, // libTinyMySql0.dll
driverBasename, // libTinyMySql.dll
@@ -186,7 +186,7 @@ namespace
// Also, try all other combinations without the lib prefix
// qmake build doesn't support appending d after the basename for Debug builds
#if defined(TINYDRIVERS_DEBUG) && !defined(TINY_QMAKE_BUILD)
driverBasenameRawVersion % 'd'_L1,
driverBasenameRawVersion + 'd'_L1,
#endif
driverBasenameRawVersion,
/* As the last, try to load from the raw basename without any postfixes,
@@ -321,7 +321,8 @@ QStringList SqlDriverFactoryPrivate::sqlDriverPaths() const
const auto envTinyPluginPath = qEnvironmentVariable("TINY_PLUGIN_PATH");
const auto hasTinyPluginPaths = !envTinyPluginPath.isEmpty();
const auto isTinyDriversInBuildTree = this->isTinyDriversInBuildTree();
const auto isTinyDriversInBuildTree = SqlDriverFactoryPrivate::
isTinyDriversInBuildTree();
constexpr static auto listSeparator = QDir::listSeparator();

View File

@@ -29,7 +29,7 @@ namespace Orm::Drivers::MySql
/*! Default constructor. */
MySqlDriver();
/*! Virtual destructor. */
inline ~MySqlDriver() final = default;
~MySqlDriver() final = default;
/*! Open the database connection using the given values. */
bool open(const QString &database, const QString &username,

View File

@@ -20,7 +20,7 @@ namespace Orm::Drivers::MySql
/*! Default constructor. */
inline MySqlDriverPrivate() noexcept;
/*! Virtual destructor. */
inline ~MySqlDriverPrivate() final = default;
~MySqlDriverPrivate() final = default;
/* open() */
struct SetConnectionOptionsResult;
@@ -59,7 +59,7 @@ namespace Orm::Drivers::MySql
/*! MYSQL handler. */
MYSQL *mysql = nullptr;
/*! The currently selected default database name. */
QString databaseName {};
QString databaseName;
private:
/* open() */

View File

@@ -37,7 +37,7 @@ namespace Orm::Drivers::MySql
{
/* Common for both */
/*! Field metatype. */
QMetaType metaType {};
QMetaType metaType;
/*! Field metadata. */
const MYSQL_FIELD *myField = nullptr; // Returned by mysql_fetch_field()
@@ -91,7 +91,7 @@ namespace Orm::Drivers::MySql
/* Data members */
/* Common for both */
/*! Fields for the currently obtained record/row. */
ResultFieldsType resultFields {};
ResultFieldsType resultFields;
/* Normal queries */
/*! Result set handle (from the mysql_store_result()). */

View File

@@ -158,7 +158,7 @@ void MySqlDriverPrivate::mysqlSelectDb(const QString &database)
{
// Nothing to do
if (database.isEmpty())
return databaseName.clear(); // clazy:exclude=returning-void-expression
return databaseName.clear(); // NOLINT(readability-avoid-return-with-void-value) clazy:exclude=returning-void-expression
if (mysql_select_db(mysql, database.toUtf8().constData()) == 0) {
databaseName = database;