From f84b00c6d26eb7a3a6802210d2a8b12ddbf815aa Mon Sep 17 00:00:00 2001 From: Matt Broadstone Date: Tue, 16 Sep 2014 10:03:14 -0400 Subject: Expose QSqlDriverPrivate dbmsType in public QSqlDriver api dbmsType was previously kept as a private variable in QSqlDriverPrivate, however it's particularly useful for QODBC users. [ChangeLog][QtSql][QSqlDriver] Add support for determining DBMS type from SQL driver. Change-Id: If1c221520da9ac4ccef85a02db078679d76eac92 Reviewed-by: Mark Brand --- src/sql/kernel/qsqldriver.cpp | 26 ++++++++++++++++++++++++++ src/sql/kernel/qsqldriver.h | 14 ++++++++++++++ src/sql/kernel/qsqldriver_p.h | 6 ++---- src/sql/kernel/qsqlresult.cpp | 4 ++-- 4 files changed, 44 insertions(+), 6 deletions(-) (limited to 'src/sql/kernel') diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp index fdeb10e915..736fe310e3 100644 --- a/src/sql/kernel/qsqldriver.cpp +++ b/src/sql/kernel/qsqldriver.cpp @@ -236,6 +236,22 @@ bool QSqlDriver::isOpenError() const \value OtherSource The notification source is another connection */ +/*! + \enum QSqlDriver::DBMSType + + This enum contains DBMS types. + + \value UnknownDBMS + \value MSSqlServer + \value MySqlServer + \value PostgreSQL + \value Oracle + \value Sybase + \value SQLite + \value Interbase + \value DB2 +*/ + /*! \fn bool QSqlDriver::hasFeature(DriverFeature feature) const @@ -766,6 +782,16 @@ QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const return d_func()->precisionPolicy; } +/*! + \since 5.4 + + Returns the current DBMS type for the database connection. +*/ +QSqlDriver::DBMSType QSqlDriver::dbmsType() const +{ + return d_func()->dbmsType; +} + /*! \since 5.0 \internal diff --git a/src/sql/kernel/qsqldriver.h b/src/sql/kernel/qsqldriver.h index 659279a3b3..767c1ac74d 100644 --- a/src/sql/kernel/qsqldriver.h +++ b/src/sql/kernel/qsqldriver.h @@ -71,6 +71,18 @@ public: enum NotificationSource { UnknownSource, SelfSource, OtherSource }; + enum DBMSType { + UnknownDBMS, + MSSqlServer, + MySqlServer, + PostgreSQL, + Oracle, + Sybase, + SQLite, + Interbase, + DB2 + }; + explicit QSqlDriver(QObject *parent=0); ~QSqlDriver(); virtual bool isOpen() const; @@ -111,6 +123,8 @@ public: void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy); QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const; + DBMSType dbmsType() const; + public Q_SLOTS: virtual bool cancelQuery(); diff --git a/src/sql/kernel/qsqldriver_p.h b/src/sql/kernel/qsqldriver_p.h index bb44a831a3..427e3984fa 100644 --- a/src/sql/kernel/qsqldriver_p.h +++ b/src/sql/kernel/qsqldriver_p.h @@ -56,21 +56,19 @@ class QSqlDriverPrivate : public QObjectPrivate Q_DECLARE_PUBLIC(QSqlDriver) public: - enum DBMSType {UnknownDB, MSSqlServer, MySqlServer, PostgreSQL, Oracle, Sybase, SQLite, Interbase, DB2}; - QSqlDriverPrivate() : QObjectPrivate(), isOpen(false), isOpenError(false), precisionPolicy(QSql::LowPrecisionDouble), - dbmsType(UnknownDB) + dbmsType(QSqlDriver::UnknownDBMS) { } uint isOpen; uint isOpenError; QSqlError error; QSql::NumericalPrecisionPolicy precisionPolicy; - DBMSType dbmsType; + QSqlDriver::DBMSType dbmsType; }; QT_END_NAMESPACE diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index 074e630394..4cd4e6fec4 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -87,7 +87,7 @@ QString QSqlResultPrivate::positionalToNamedBinding(const QString &query) const result.reserve(n * 5 / 4); QChar closingQuote; int count = 0; - bool ignoreBraces = (sqldriver->d_func()->dbmsType == QSqlDriverPrivate::PostgreSQL); + bool ignoreBraces = (sqldriver->d_func()->dbmsType == QSqlDriver::PostgreSQL); for (int i = 0; i < n; ++i) { QChar ch = query.at(i); @@ -128,7 +128,7 @@ QString QSqlResultPrivate::namedToPositionalBinding(const QString &query) QChar closingQuote; int count = 0; int i = 0; - bool ignoreBraces = (sqldriver->d_func()->dbmsType == QSqlDriverPrivate::PostgreSQL); + bool ignoreBraces = (sqldriver->d_func()->dbmsType == QSqlDriver::PostgreSQL); while (i < n) { QChar ch = query.at(i); -- cgit v1.2.3