SQL/SQLDatabase: do not copy q within QSqlDatabasePrivate::copy()

Copying the QSqlDatabase pointer inside QSqlDatabasePrivate::copy() is
not a good idea since it must point to the owning instance and not
another one. Since it's not used anywhere we can safely remove it.

Change-Id: Ie45b594305059afd9b8d8b25d4864dd77769acf7
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Christian Ehrlicher 2023-02-12 17:46:01 +01:00
parent 67f54358ad
commit f6d7065093

View File

@ -46,9 +46,8 @@ Q_GLOBAL_STATIC(QConnectionDict, dbDict)
class QSqlDatabasePrivate class QSqlDatabasePrivate
{ {
public: public:
QSqlDatabasePrivate(QSqlDatabase *d, QSqlDriver *dr = nullptr): QSqlDatabasePrivate(QSqlDriver *dr):
ref(1), ref(1),
q(d),
driver(dr), driver(dr),
port(-1) port(-1)
{ {
@ -61,7 +60,6 @@ public:
void disable(); void disable();
QAtomicInt ref; QAtomicInt ref;
QSqlDatabase *q;
QSqlDriver* driver; QSqlDriver* driver;
QString dbname; QString dbname;
QString uname; QString uname;
@ -84,7 +82,6 @@ public:
QSqlDatabasePrivate::QSqlDatabasePrivate(const QSqlDatabasePrivate &other) : ref(1) QSqlDatabasePrivate::QSqlDatabasePrivate(const QSqlDatabasePrivate &other) : ref(1)
{ {
q = other.q;
dbname = other.dbname; dbname = other.dbname;
uname = other.uname; uname = other.uname;
pword = other.pword; pword = other.pword;
@ -140,7 +137,7 @@ DriverDict &QSqlDatabasePrivate::driverDict()
QSqlDatabasePrivate *QSqlDatabasePrivate::shared_null() QSqlDatabasePrivate *QSqlDatabasePrivate::shared_null()
{ {
static QSqlNullDriver dr; static QSqlNullDriver dr;
static QSqlDatabasePrivate n(nullptr, &dr); static QSqlDatabasePrivate n(&dr);
return &n; return &n;
} }
@ -212,7 +209,6 @@ QSqlDatabase QSqlDatabasePrivate::database(const QString& name, bool open)
*/ */
void QSqlDatabasePrivate::copy(const QSqlDatabasePrivate *other) void QSqlDatabasePrivate::copy(const QSqlDatabasePrivate *other)
{ {
q = other->q;
dbname = other->dbname; dbname = other->dbname;
uname = other->uname; uname = other->uname;
pword = other->pword; pword = other->pword;
@ -587,8 +583,8 @@ QStringList QSqlDatabase::connectionNames()
*/ */
QSqlDatabase::QSqlDatabase(const QString &type) QSqlDatabase::QSqlDatabase(const QString &type)
: d(new QSqlDatabasePrivate(nullptr))
{ {
d = new QSqlDatabasePrivate(this);
d->init(type); d->init(type);
} }
@ -599,8 +595,8 @@ QSqlDatabase::QSqlDatabase(const QString &type)
*/ */
QSqlDatabase::QSqlDatabase(QSqlDriver *driver) QSqlDatabase::QSqlDatabase(QSqlDriver *driver)
: d(new QSqlDatabasePrivate(driver))
{ {
d = new QSqlDatabasePrivate(this, driver);
} }
/*! /*!
@ -609,8 +605,8 @@ QSqlDatabase::QSqlDatabase(QSqlDriver *driver)
objects. objects.
*/ */
QSqlDatabase::QSqlDatabase() QSqlDatabase::QSqlDatabase()
: d(QSqlDatabasePrivate::shared_null())
{ {
d = QSqlDatabasePrivate::shared_null();
d->ref.ref(); d->ref.ref();
} }