diff options
author | Christian Ehrlicher <[email protected]> | 2024-12-17 19:54:55 +0100 |
---|---|---|
committer | Christian Ehrlicher <[email protected]> | 2024-12-20 03:46:08 +0100 |
commit | 5b07e3de3fe5335d9338c65ca40cfe656a389167 (patch) | |
tree | a9d22ede190453d424fa55344dcfb885e549c136 | |
parent | ec3a5f4994a2bafc65fa8e01fb0861219580f622 (diff) |
QSqlDriver: return the connection name of the assoicated QSqlDatabase
A QSqlDriver instance is directly bound to a QSqlDatabase object. But
there was no way to get the QSqlDatabase out of a QSqlQuery/QSqlDriver.
Fix it by storing the connection name also in the driver during
creation and add a getter for it.
[ChangeLog][QtSql][QSqlDriver] Added connectionName() which returns the
connection name of the associated QSqlDatabase instance.
Pick-to: 6.9
Task-number: QTBUG-123603
Change-Id: If78b85413cf6ca965ff6bf9f3600cb54169b5569
Reviewed-by: Volker Hilsheimer <[email protected]>
-rw-r--r-- | src/sql/kernel/qsqldatabase.cpp | 7 | ||||
-rw-r--r-- | src/sql/kernel/qsqldriver.cpp | 12 | ||||
-rw-r--r-- | src/sql/kernel/qsqldriver.h | 4 | ||||
-rw-r--r-- | src/sql/kernel/qsqldriver_p.h | 1 |
4 files changed, 23 insertions, 1 deletions
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<QSqlDriverPrivate *>(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<QSqlDriverPrivate *>(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; |