summaryrefslogtreecommitdiffstats
path: root/src/sql
diff options
context:
space:
mode:
authorMatt Broadstone <mbroadstone@devonit.com>2014-09-16 10:03:14 -0400
committerMark Brand <mabrand@mabrand.nl>2014-09-24 14:44:49 +0200
commitf84b00c6d26eb7a3a6802210d2a8b12ddbf815aa (patch)
treed21bb67ce89e136da1ae6be66a7d005f84c0cd93 /src/sql
parenteef1e51f97a652907bda29357c20388ab36f26ec (diff)
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 <mabrand@mabrand.nl>
Diffstat (limited to 'src/sql')
-rw-r--r--src/sql/drivers/db2/qsql_db2.cpp2
-rw-r--r--src/sql/drivers/ibase/qsql_ibase.cpp2
-rw-r--r--src/sql/drivers/mysql/qsql_mysql.cpp2
-rw-r--r--src/sql/drivers/oci/qsql_oci.cpp2
-rw-r--r--src/sql/drivers/odbc/qsql_odbc.cpp30
-rw-r--r--src/sql/drivers/psql/qsql_psql.cpp2
-rw-r--r--src/sql/drivers/sqlite/qsql_sqlite.cpp2
-rw-r--r--src/sql/drivers/sqlite2/qsql_sqlite2.cpp2
-rw-r--r--src/sql/drivers/tds/qsql_tds.cpp2
-rw-r--r--src/sql/kernel/qsqldriver.cpp26
-rw-r--r--src/sql/kernel/qsqldriver.h14
-rw-r--r--src/sql/kernel/qsqldriver_p.h6
-rw-r--r--src/sql/kernel/qsqlresult.cpp4
13 files changed, 67 insertions, 29 deletions
diff --git a/src/sql/drivers/db2/qsql_db2.cpp b/src/sql/drivers/db2/qsql_db2.cpp
index a7508963f9..09ac5bda46 100644
--- a/src/sql/drivers/db2/qsql_db2.cpp
+++ b/src/sql/drivers/db2/qsql_db2.cpp
@@ -66,7 +66,7 @@ static const SQLSMALLINT qParamType[4] = { SQL_PARAM_INPUT, SQL_PARAM_INPUT, SQL
class QDB2DriverPrivate : public QSqlDriverPrivate
{
public:
- QDB2DriverPrivate() : QSqlDriverPrivate(), hEnv(0), hDbc(0) { dbmsType = DB2; }
+ QDB2DriverPrivate() : QSqlDriverPrivate(), hEnv(0), hDbc(0) { dbmsType = QSqlDriver::DB2; }
SQLHANDLE hEnv;
SQLHANDLE hDbc;
QString user;
diff --git a/src/sql/drivers/ibase/qsql_ibase.cpp b/src/sql/drivers/ibase/qsql_ibase.cpp
index 4ca1edbde0..bb3ffe619e 100644
--- a/src/sql/drivers/ibase/qsql_ibase.cpp
+++ b/src/sql/drivers/ibase/qsql_ibase.cpp
@@ -306,7 +306,7 @@ class QIBaseDriverPrivate : public QSqlDriverPrivate
{
Q_DECLARE_PUBLIC(QIBaseDriver)
public:
- QIBaseDriverPrivate() : QSqlDriverPrivate(), ibase(0), trans(0), tc(0) { dbmsType = Interbase; }
+ QIBaseDriverPrivate() : QSqlDriverPrivate(), ibase(0), trans(0), tc(0) { dbmsType = QSqlDriver::Interbase; }
bool isError(const char *msg, QSqlError::ErrorType typ = QSqlError::UnknownError)
{
diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp
index b4dd6773e0..db54ce84da 100644
--- a/src/sql/drivers/mysql/qsql_mysql.cpp
+++ b/src/sql/drivers/mysql/qsql_mysql.cpp
@@ -78,7 +78,7 @@ public:
#else
tc(0),
#endif
- preparedQuerysEnabled(false) { dbmsType = MySqlServer; }
+ preparedQuerysEnabled(false) { dbmsType = QSqlDriver::MySqlServer; }
MYSQL *mysql;
QTextCodec *tc;
diff --git a/src/sql/drivers/oci/qsql_oci.cpp b/src/sql/drivers/oci/qsql_oci.cpp
index cf5ea7aa90..284fee8ccb 100644
--- a/src/sql/drivers/oci/qsql_oci.cpp
+++ b/src/sql/drivers/oci/qsql_oci.cpp
@@ -508,7 +508,7 @@ QOCIDriverPrivate::QOCIDriverPrivate()
: QSqlDriverPrivate(), env(0), svc(0), srvhp(0), authp(0), err(0), transaction(false),
serverVersion(-1), prefetchRows(-1), prefetchMem(QOCI_PREFETCH_MEM)
{
- dbmsType = Oracle;
+ dbmsType = QSqlDriver::Oracle;
}
void QOCIDriverPrivate::allocErrorHandle()
diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp
index 8e7f2f5025..f95fb8868e 100644
--- a/src/sql/drivers/odbc/qsql_odbc.cpp
+++ b/src/sql/drivers/odbc/qsql_odbc.cpp
@@ -1660,14 +1660,14 @@ QVariant QODBCResult::lastInsertId() const
QString sql;
switch (d->driverPrivate->dbmsType) {
- case QODBCDriverPrivate::MSSqlServer:
- case QODBCDriverPrivate::Sybase:
+ case QSqlDriver::MSSqlServer:
+ case QSqlDriver::Sybase:
sql = QLatin1String("SELECT @@IDENTITY;");
break;
- case QODBCDriverPrivate::MySqlServer:
+ case QSqlDriver::MySqlServer:
sql = QLatin1String("SELECT LAST_INSERT_ID();");
break;
- case QODBCDriverPrivate::PostgreSQL:
+ case QSqlDriver::PostgreSQL:
sql = QLatin1String("SELECT lastval();");
break;
default:
@@ -1807,14 +1807,14 @@ bool QODBCDriver::hasFeature(DriverFeature f) const
case CancelQuery:
return false;
case LastInsertId:
- return (d->dbmsType == QODBCDriverPrivate::MSSqlServer)
- || (d->dbmsType == QODBCDriverPrivate::Sybase)
- || (d->dbmsType == QODBCDriverPrivate::MySqlServer)
- || (d->dbmsType == QODBCDriverPrivate::PostgreSQL);
+ return (d->dbmsType == MSSqlServer)
+ || (d->dbmsType == Sybase)
+ || (d->dbmsType == MySqlServer)
+ || (d->dbmsType == PostgreSQL);
case MultipleResultSets:
return d->hasMultiResultSets;
case BLOB: {
- if (d->dbmsType == QODBCDriverPrivate::MySqlServer)
+ if (d->dbmsType == MySqlServer)
return true;
else
return false;
@@ -1911,7 +1911,7 @@ bool QODBCDriver::open(const QString & db,
d->checkDateTimePrecision();
setOpen(true);
setOpenError(false);
- if (d->dbmsType == QODBCDriverPrivate::MSSqlServer) {
+ if (d->dbmsType == MSSqlServer) {
QSqlQuery i(createResult());
i.exec(QLatin1String("SET QUOTED_IDENTIFIER ON"));
}
@@ -2097,15 +2097,15 @@ void QODBCDriverPrivate::checkDBMS()
serverType = QString::fromUtf8((const char *)serverString.constData(), t);
#endif
if (serverType.contains(QLatin1String("PostgreSQL"), Qt::CaseInsensitive))
- dbmsType = PostgreSQL;
+ dbmsType = QSqlDriver::PostgreSQL;
else if (serverType.contains(QLatin1String("Oracle"), Qt::CaseInsensitive))
- dbmsType = Oracle;
+ dbmsType = QSqlDriver::Oracle;
else if (serverType.contains(QLatin1String("MySql"), Qt::CaseInsensitive))
- dbmsType = MySqlServer;
+ dbmsType = QSqlDriver::MySqlServer;
else if (serverType.contains(QLatin1String("Microsoft SQL Server"), Qt::CaseInsensitive))
- dbmsType = MSSqlServer;
+ dbmsType = QSqlDriver::MSSqlServer;
else if (serverType.contains(QLatin1String("Sybase"), Qt::CaseInsensitive))
- dbmsType = Sybase;
+ dbmsType = QSqlDriver::Sybase;
}
r = SQLGetInfo(hDbc,
SQL_DRIVER_NAME,
diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp
index aa09191c71..e76dcc26a0 100644
--- a/src/sql/drivers/psql/qsql_psql.cpp
+++ b/src/sql/drivers/psql/qsql_psql.cpp
@@ -130,7 +130,7 @@ public:
sn(0),
pendingNotifyCheck(false),
hasBackslashEscape(false)
- { dbmsType = PostgreSQL; }
+ { dbmsType = QSqlDriver::PostgreSQL; }
PGconn *connection;
bool isUtf8;
diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp
index 33f504c49f..cbde2bfa9c 100644
--- a/src/sql/drivers/sqlite/qsql_sqlite.cpp
+++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp
@@ -131,7 +131,7 @@ private:
class QSQLiteDriverPrivate : public QSqlDriverPrivate
{
public:
- inline QSQLiteDriverPrivate() : QSqlDriverPrivate(), access(0) { dbmsType = SQLite; }
+ inline QSQLiteDriverPrivate() : QSqlDriverPrivate(), access(0) { dbmsType = QSqlDriver::SQLite; }
sqlite3 *access;
QList <QSQLiteResult *> results;
};
diff --git a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp
index 299810969a..760ece915f 100644
--- a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp
+++ b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp
@@ -86,7 +86,7 @@ public:
QSQLite2DriverPrivate::QSQLite2DriverPrivate() : QSqlDriverPrivate(), access(0)
{
utf8 = (qstrcmp(sqlite_encoding, "UTF-8") == 0);
- dbmsType = SQLite;
+ dbmsType = QSqlDriver::SQLite;
}
class QSQLite2ResultPrivate;
diff --git a/src/sql/drivers/tds/qsql_tds.cpp b/src/sql/drivers/tds/qsql_tds.cpp
index 933228f88e..5449930ae3 100644
--- a/src/sql/drivers/tds/qsql_tds.cpp
+++ b/src/sql/drivers/tds/qsql_tds.cpp
@@ -132,7 +132,7 @@ QSqlError qMakeError(const QString& err, QSqlError::ErrorType type, int errNo =
class QTDSDriverPrivate : public QSqlDriverPrivate
{
public:
- QTDSDriverPrivate() : QSqlDriverPrivate(), login(0), initialized(false) { dbmsType = Sybase; }
+ QTDSDriverPrivate() : QSqlDriverPrivate(), login(0), initialized(false) { dbmsType = QSqlDriver::Sybase; }
LOGINREC* login; // login information
QString hostName;
QString db;
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
@@ -237,6 +237,22 @@ bool QSqlDriver::isOpenError() const
*/
/*!
+ \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
Returns \c true if the driver supports feature \a feature; otherwise
@@ -767,6 +783,16 @@ QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const
}
/*!
+ \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);