summaryrefslogtreecommitdiffstats
path: root/src/sql/drivers
diff options
context:
space:
mode:
authorIsrael Lins <israelins85@yahoo.com.br>2013-02-15 19:40:35 -0300
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-26 22:01:27 +0100
commitbc5170f274572a4b262569c12d5d3c6ef892aaf2 (patch)
tree4d81991666b9ebc62ad229d7c8a027c512ffae9b /src/sql/drivers
parent4da840f23092f292012d5b1462727cbc8e8fdc31 (diff)
ODBC: improve detection of DBMS
Change-Id: Ia93c3adb54fd28e290ff6fc85cb98138514885f1 Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src/sql/drivers')
-rw-r--r--src/sql/drivers/odbc/qsql_odbc.cpp30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp
index a52e3ee451..8f2e4c0cc6 100644
--- a/src/sql/drivers/odbc/qsql_odbc.cpp
+++ b/src/sql/drivers/odbc/qsql_odbc.cpp
@@ -115,9 +115,10 @@ class QODBCDriverPrivate
{
public:
enum DefaultCase{Lower, Mixed, Upper, Sensitive};
+ enum DBMSType {UnknownDB, MSSqlServer, MySqlServer, PostgreSQL, Oracle, Sybase};
QODBCDriverPrivate()
- : hEnv(0), hDbc(0), unicode(false), useSchema(false), disconnectCount(0), datetime_precision(19), isMySqlServer(false),
- isMSSqlServer(false), isFreeTDSDriver(false), hasSQLFetchScroll(true),
+ : hEnv(0), hDbc(0), unicode(false), useSchema(false), disconnectCount(0), datetime_precision(19),
+ dbmsType(UnknownDB), isFreeTDSDriver(false), hasSQLFetchScroll(true),
hasMultiResultSets(false), isQuoteInitialized(false), quote(QLatin1Char('"'))
{
}
@@ -129,15 +130,14 @@ public:
bool useSchema;
int disconnectCount;
int datetime_precision;
- bool isMySqlServer;
- bool isMSSqlServer;
+ DBMSType dbmsType;
bool isFreeTDSDriver;
bool hasSQLFetchScroll;
bool hasMultiResultSets;
bool checkDriver() const;
void checkUnicode();
- void checkSqlServer();
+ void checkDBMS();
void checkHasSQLFetchScroll();
void checkHasMultiResults();
void checkSchemaUsage();
@@ -1806,7 +1806,7 @@ bool QODBCDriver::hasFeature(DriverFeature f) const
case MultipleResultSets:
return d->hasMultiResultSets;
case BLOB: {
- if(d->isMySqlServer)
+ if (d->dbmsType == QODBCDriverPrivate::MySqlServer)
return true;
else
return false;
@@ -1896,13 +1896,13 @@ bool QODBCDriver::open(const QString & db,
d->checkUnicode();
d->checkSchemaUsage();
- d->checkSqlServer();
+ d->checkDBMS();
d->checkHasSQLFetchScroll();
d->checkHasMultiResults();
d->checkDateTimePrecision();
setOpen(true);
setOpenError(false);
- if(d->isMSSqlServer) {
+ if (d->dbmsType == QODBCDriverPrivate::MSSqlServer) {
QSqlQuery i(createResult());
i.exec(QLatin1String("SET QUOTED_IDENTIFIER ON"));
}
@@ -2069,7 +2069,7 @@ void QODBCDriverPrivate::checkSchemaUsage()
useSchema = (val != 0);
}
-void QODBCDriverPrivate::checkSqlServer()
+void QODBCDriverPrivate::checkDBMS()
{
SQLRETURN r;
QVarLengthArray<SQLTCHAR> serverString(200);
@@ -2088,8 +2088,16 @@ void QODBCDriverPrivate::checkSqlServer()
#else
serverType = QString::fromUtf8((const char *)serverString.constData(), t);
#endif
- isMySqlServer = serverType.contains(QLatin1String("mysql"), Qt::CaseInsensitive);
- isMSSqlServer = serverType.contains(QLatin1String("Microsoft SQL Server"), Qt::CaseInsensitive);
+ if (serverType.contains(QLatin1String("PostgreSQL"), Qt::CaseInsensitive))
+ dbmsType = PostgreSQL;
+ else if (serverType.contains(QLatin1String("Oracle"), Qt::CaseInsensitive))
+ dbmsType = Oracle;
+ else if (serverType.contains(QLatin1String("MySql"), Qt::CaseInsensitive))
+ dbmsType = MySqlServer;
+ else if (serverType.contains(QLatin1String("Microsoft SQL Server"), Qt::CaseInsensitive))
+ dbmsType = MSSqlServer;
+ else if (serverType.contains(QLatin1String("Sybase"), Qt::CaseInsensitive))
+ dbmsType = Sybase;
}
r = SQLGetInfo(hDbc,
SQL_DRIVER_NAME,