diff options
-rw-r--r-- | src/sql/drivers/tds/qsql_tds.cpp | 6 | ||||
-rw-r--r-- | tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp | 32 |
2 files changed, 36 insertions, 2 deletions
diff --git a/src/sql/drivers/tds/qsql_tds.cpp b/src/sql/drivers/tds/qsql_tds.cpp index 35195c6f02..f740360550 100644 --- a/src/sql/drivers/tds/qsql_tds.cpp +++ b/src/sql/drivers/tds/qsql_tds.cpp @@ -138,10 +138,11 @@ QSqlError qMakeError(const QString& err, QSqlError::ErrorType type, int errNo = class QTDSDriverPrivate { public: - QTDSDriverPrivate(): login(0) {} + QTDSDriverPrivate(): login(0), initialized(false) {} LOGINREC* login; // login information QString hostName; QString db; + bool initialized; }; @@ -537,6 +538,7 @@ QVariant QTDSDriver::handle() const void QTDSDriver::init() { d = new QTDSDriverPrivate(); + d->initialized = (dbinit() == SUCCEED); // the following two code-lines will fail compilation on some FreeTDS versions // just comment them out if you have FreeTDS (you won't get any errors and warnings then) dberrhandle((QERRHANDLE)qTdsErrHandler); @@ -578,7 +580,7 @@ bool QTDSDriver::open(const QString & db, { if (isOpen()) close(); - if (!dbinit()) { + if (!d->initialized) { setOpenError(true); return false; } diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp index 8fae3f73aa..2a84b6c3d5 100644 --- a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp +++ b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp @@ -86,6 +86,8 @@ private slots: void eventNotification_data() { generic_data(); } void eventNotification(); void addDatabase(); + void errorReporting_data(); + void errorReporting(); //database specific tests void recordMySQL_data() { generic_data("QMYSQL"); } @@ -442,6 +444,36 @@ void tst_QSqlDatabase::addDatabase() QVERIFY(!QSqlDatabase::contains("INVALID_CONNECTION")); } +void tst_QSqlDatabase::errorReporting_data() +{ + QTest::addColumn<QString>("driver"); + + QTest::newRow("QTDS") << QString::fromLatin1("QTDS"); + QTest::newRow("QTDS7") << QString::fromLatin1("QTDS7"); +} + +void tst_QSqlDatabase::errorReporting() +{ + QFETCH(QString, driver); + + if (!QSqlDatabase::drivers().contains(driver)) + QSKIP(QString::fromLatin1("Database driver %1 not available").arg(driver).toLocal8Bit().constData()); + + const QString dbName = QLatin1String("errorReportingDb-") + driver; + QSqlDatabase db = QSqlDatabase::addDatabase(driver, dbName); + + db.setHostName(QLatin1String("127.0.0.1")); + db.setDatabaseName(QLatin1String("NonExistantDatabase")); + db.setUserName(QLatin1String("InvalidUser")); + db.setPassword(QLatin1String("IncorrectPassword")); + + QVERIFY(!db.open()); + + db = QSqlDatabase(); + + QSqlDatabase::removeDatabase(dbName); +} + void tst_QSqlDatabase::open() { QFETCH(QString, dbName); |