summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorAaron McCarthy <amccarthy@sigtec.com>2012-11-08 15:13:10 +1000
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-18 23:13:29 +0100
commit7456562e7f647e7cb2c854c4272c5599b26dbd37 (patch)
treeec81d7d072f1078474516a1bf1455c2f1b065e1d /tests
parent597a6024f468e97d26a22105791b21bc05bdfca6 (diff)
Fix error reporting in TDS SQL driver.
The error and message handlers used by the freetds library were getting reset to back to the default every time a database was opened. The Qt TDS SQL driver was calling dbinit() from QTDSDriver::open(). This had two problems: 1. dbinit() would reset the error handler previously set by a call to dberrhandle(). A db error would then cause the application to abort. 2. freetds expects dbinit() and dbexit() to be called symmetrically. Opening multiple database connections would result in freetds not cleaning up on application close. Solved by moving the dbinit() call into the QTDSDriver constructor. Change-Id: I59018d83238672c903b96a4d7f3f21b664c3ff4c Reviewed-by: Andy Shaw <andy.shaw@digia.com> Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp32
1 files changed, 32 insertions, 0 deletions
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);