diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp index e44533291a3..0a54529679e 100644 --- a/src/sql/kernel/qsqldatabase.cpp +++ b/src/sql/kernel/qsqldatabase.cpp @@ -110,8 +110,11 @@ QSqlDatabasePrivate::QSqlDatabasePrivate(const QSqlDatabasePrivate &other) : ref connOptions = other.connOptions; driver = other.driver; precisionPolicy = other.precisionPolicy; - if (driver) + if (driver) { driver->setNumericalPrecisionPolicy(other.driver->numericalPrecisionPolicy()); + auto drvPriv = static_cast(QObjectPrivate::get(driver)); + drvPriv->connectionName = connName; + } } QSqlDatabasePrivate::~QSqlDatabasePrivate() @@ -169,6 +172,8 @@ void QSqlDatabasePrivate::addDatabase(const QSqlDatabase &db, const QString &nam } sqlGlobals->connections.insert(name, db); db.d->connName = name; + auto drvPriv = static_cast(QObjectPrivate::get(db.d->driver)); + drvPriv->connectionName = name; } /*! \internal diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp index 6b868f5c403..e67a8d5d38b 100644 --- a/src/sql/kernel/qsqldriver.cpp +++ b/src/sql/kernel/qsqldriver.cpp @@ -801,6 +801,18 @@ int QSqlDriver::maximumIdentifierLength(QSqlDriver::IdentifierType type) const return INT_MAX; } +/*! + \since 6.9 + + Returns the database connection name the driver was created by with + QSqlDatabase::addDatabase() +*/ +QString QSqlDriver::connectionName() const +{ + Q_D(const QSqlDriver); + return d->connectionName; +} + QT_END_NAMESPACE #include "moc_qsqldriver.cpp" diff --git a/src/sql/kernel/qsqldriver.h b/src/sql/kernel/qsqldriver.h index 1c355dcea23..7385b3787b8 100644 --- a/src/sql/kernel/qsqldriver.h +++ b/src/sql/kernel/qsqldriver.h @@ -25,6 +25,7 @@ class QVariant; class Q_SQL_EXPORT QSqlDriver : public QObject { friend class QSqlDatabase; + friend class QSqlDatabasePrivate; friend class QSqlResultPrivate; Q_OBJECT Q_PROPERTY(QSql::NumericalPrecisionPolicy numericalPrecisionPolicy READ numericalPrecisionPolicy WRITE setNumericalPrecisionPolicy) @@ -98,6 +99,9 @@ public: DbmsType dbmsType() const; virtual int maximumIdentifierLength(IdentifierType type) const; + + QString connectionName() const; + public Q_SLOTS: virtual bool cancelQuery(); diff --git a/src/sql/kernel/qsqldriver_p.h b/src/sql/kernel/qsqldriver_p.h index cfa6a2fa472..29b86dfc5b0 100644 --- a/src/sql/kernel/qsqldriver_p.h +++ b/src/sql/kernel/qsqldriver_p.h @@ -32,6 +32,7 @@ public: dbmsType(type) { } + QString connectionName; QSqlError error; QSql::NumericalPrecisionPolicy precisionPolicy = QSql::LowPrecisionDouble; QSqlDriver::DbmsType dbmsType;