From cd5b999f06494f8f1fd7fbc3ec0de7f39ac81e00 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 11 Dec 2020 15:04:50 +0000 Subject: [PATCH] fix regression since 53de5dc0f6c5dada367c7abf7eb71817fa43c4ec Signed-off-by: Ivailo Monev --- src/sql/kernel/qsqldatabase.cpp | 43 ++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp index a4de90c0d..29f8108c8 100644 --- a/src/sql/kernel/qsqldatabase.cpp +++ b/src/sql/kernel/qsqldatabase.cpp @@ -59,7 +59,6 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, sqlloader, const char *QSqlDatabase::defaultConnection = "qt_sql_default_connection"; - typedef QHash QConnectionDict; Q_GLOBAL_STATIC(QConnectionDict, dbDict) Q_GLOBAL_STATIC(QReadWriteLock, dbDictLock) @@ -101,17 +100,17 @@ public: }; QSqlDatabasePrivate::QSqlDatabasePrivate(const QSqlDatabasePrivate &other) + : ref(1), + dbname(other.dbname), + uname(other.uname), + pword(other.pword), + hname(other.hname), + drvName(other.drvName), + port(other.port), + connOptions(other.connOptions), + driver(other.driver), + precisionPolicy(other.precisionPolicy) { - ref = 1; - dbname = other.dbname; - uname = other.uname; - pword = other.pword; - hname = other.hname; - drvName = other.drvName; - port = other.port; - connOptions = other.connOptions; - driver = other.driver; - precisionPolicy = other.precisionPolicy; } QSqlDatabasePrivate::~QSqlDatabasePrivate() @@ -178,6 +177,14 @@ void QSqlDatabasePrivate::addDatabase(const QSqlDatabase &db, const QString &nam db.d->connName = name; } +static bool qCleanConnectionsInit = false; + +static void qCleanDict() +{ + QSqlDatabasePrivate::cleanConnections(); + qCleanConnectionsInit = false; +} + /*! \internal */ QSqlDatabase QSqlDatabasePrivate::database(const QString& name, bool open) @@ -404,6 +411,11 @@ void QSqlDatabase::removeDatabase(const QString& connectionName) QStringList QSqlDatabase::drivers() { + if (!qCleanConnectionsInit) { + qCleanConnectionsInit = true; + qAddPostRoutine(qCleanDict); + } + QStringList list; list << QLatin1String("QSQLITE"); @@ -530,6 +542,11 @@ void QSqlDatabasePrivate::init(const QString &type) driver = new QSQLiteDriver(); } + if (!driver && !qCleanConnectionsInit) { + qCleanConnectionsInit = true; + qAddPostRoutine(qCleanDict); + } + #ifndef QT_NO_LIBRARY if (!driver && sqlloader()) { if (QSqlDriverFactoryInterface *factory = qobject_cast(sqlloader()->instance(type))) @@ -592,7 +609,7 @@ QSqlQuery QSqlDatabase::exec(const QString & query) const bool QSqlDatabase::open() { return d->driver->open(d->dbname, d->uname, d->pword, d->hname, - d->port, d->connOptions); + d->port, d->connOptions); } /*! @@ -613,7 +630,7 @@ bool QSqlDatabase::open(const QString& user, const QString& password) { setUserName(user); return d->driver->open(d->dbname, user, password, d->hname, - d->port, d->connOptions); + d->port, d->connOptions); } /*! -- 2.11.0