QSqlError: Make QSqlErrorPrivate implicitly shared

Make QSqlError implicitly shared and adjust the ctors / assignment
operators to be consistent with other implicitly shared Qt classes.

Fixes: QTBUG-91912
Change-Id: Ie73292817fd4e7b274a3033a74d62e712a01c2b0
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
bb10
Christian Ehrlicher 2023-03-25 13:40:16 +01:00
parent f4bf7982a6
commit d7607a463d
2 changed files with 12 additions and 23 deletions

View File

@ -19,7 +19,7 @@ QDebug operator<<(QDebug dbg, const QSqlError &s)
} }
#endif #endif
class QSqlErrorPrivate class QSqlErrorPrivate : public QSharedData
{ {
public: public:
QString driverError; QString driverError;
@ -27,7 +27,7 @@ public:
QSqlError::ErrorType errorType; QSqlError::ErrorType errorType;
QString errorCode; QString errorCode;
}; };
QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QSqlErrorPrivate)
/*! /*!
\class QSqlError \class QSqlError
@ -104,26 +104,15 @@ QSqlError::QSqlError(const QString &driverText, const QString &databaseText,
Creates a copy of \a other. Creates a copy of \a other.
*/ */
QSqlError::QSqlError(const QSqlError &other) QSqlError::QSqlError(const QSqlError &other)
: d(new QSqlErrorPrivate(*other.d)) = default;
{
}
/*! /*!
Assigns the \a other error's values to this error. Assigns the \a other error's values to this error.
*/ */
QSqlError &QSqlError::operator=(const QSqlError &other) QSqlError &QSqlError::operator=(const QSqlError &other)
{ = default;
if (&other == this)
return *this;
if (d && other.d)
*d = *other.d;
else if (d)
*d = QSqlErrorPrivate();
else if (other.d)
d = new QSqlErrorPrivate(*other.d);
return *this;
}
/*! /*!
Compare the \a other error's type() and nativeErrorCode() Compare the \a other error's type() and nativeErrorCode()
@ -154,9 +143,7 @@ bool QSqlError::operator!=(const QSqlError &other) const
*/ */
QSqlError::~QSqlError() QSqlError::~QSqlError()
{ = default;
delete d;
}
/*! /*!
Returns the text of the error as reported by the driver. This may Returns the text of the error as reported by the driver. This may

View File

@ -5,11 +5,13 @@
#define QSQLERROR_H #define QSQLERROR_H
#include <QtSql/qtsqlglobal.h> #include <QtSql/qtsqlglobal.h>
#include <QtCore/qshareddata.h>
#include <QtCore/qstring.h> #include <QtCore/qstring.h>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QSqlErrorPrivate; class QSqlErrorPrivate;
QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QSqlErrorPrivate, Q_SQL_EXPORT)
class Q_SQL_EXPORT QSqlError class Q_SQL_EXPORT QSqlError
{ {
@ -26,15 +28,15 @@ public:
ErrorType type = NoError, ErrorType type = NoError,
const QString &errorCode = QString()); const QString &errorCode = QString());
QSqlError(const QSqlError &other); QSqlError(const QSqlError &other);
QSqlError(QSqlError &&other) noexcept : d(other.d) { other.d = nullptr; } QSqlError(QSqlError &&other) noexcept = default;
QSqlError& operator=(const QSqlError &other); QSqlError& operator=(const QSqlError &other);
QSqlError &operator=(QSqlError &&other) noexcept { swap(other); return *this; } QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QSqlError)
~QSqlError(); ~QSqlError();
bool operator==(const QSqlError &other) const; bool operator==(const QSqlError &other) const;
bool operator!=(const QSqlError &other) const; bool operator!=(const QSqlError &other) const;
void swap(QSqlError &other) noexcept { qt_ptr_swap(d, other.d); } void swap(QSqlError &other) noexcept { d.swap(other.d); }
QString driverText() const; QString driverText() const;
QString databaseText() const; QString databaseText() const;
@ -44,7 +46,7 @@ public:
bool isValid() const; bool isValid() const;
private: private:
QSqlErrorPrivate *d = nullptr; QExplicitlySharedDataPointer<QSqlErrorPrivate> d;
}; };
Q_DECLARE_SHARED(QSqlError) Q_DECLARE_SHARED(QSqlError)