diff --git a/autotests/KDbTestUtils.h b/autotests/KDbTestUtils.h --- a/autotests/KDbTestUtils.h +++ b/autotests/KDbTestUtils.h @@ -22,11 +22,13 @@ #include "kdbtestutils_export.h" -#include -#include +#include +#include #include #include -#include + +#include +#include Q_DECLARE_METATYPE(KDbField::TypeGroup) Q_DECLARE_METATYPE(KDbField::Type) @@ -110,9 +112,30 @@ KDBTEST_METHOD_DECL(testDriverManager, (), ()); KDBTEST_METHOD_DECL(testSqliteDriver, (), ()); - KDBTEST_METHOD_DECL(testConnect, (const KDbConnectionData &cdata), (cdata)); + + //! Connects to a database + //! @since 3.2 + KDBTEST_METHOD_DECL(testConnect, + (const KDbConnectionData &cdata, + const KDbConnectionOptions &options = KDbConnectionOptions()), + (cdata, options)); + KDBTEST_METHOD_DECL(testUse, (), ()); + //! Convenience method that performs testConnect and testUse in one go + //! @since 3.2 + KDBTEST_METHOD_DECL(testConnectAndUse, + (const KDbConnectionData &cdata, + const KDbConnectionOptions &options = KDbConnectionOptions()), + (cdata, options)); + + //! Overload of testConnectAndUse for file-based databases + //! @since 3.2 + KDBTEST_METHOD_DECL(testConnectAndUse, + (const QString &path, + const KDbConnectionOptions &options = KDbConnectionOptions()), + (path, options)); + //! Creates database with name @a dbName //! Does not use the database. //! @todo don't hardcode SQLite here diff --git a/autotests/KDbTestUtils.cpp b/autotests/KDbTestUtils.cpp --- a/autotests/KDbTestUtils.cpp +++ b/autotests/KDbTestUtils.cpp @@ -110,23 +110,24 @@ QVERIFY2(mimeTypes.contains(KDb::defaultFileBasedDriverMimeType()), "SQLite's MIME types should include the default file based one"); } -void KDbTestUtils::testConnectInternal(const KDbConnectionData &cdata) +void KDbTestUtils::testConnectInternal(const KDbConnectionData &cdata, + const KDbConnectionOptions &options) { //qDebug() << cdata; if (!driver) { //! @todo don't hardcode SQLite here KDB_VERIFY(manager.resultable(), driver = manager.driver("org.kde.kdb.sqlite"), "Driver not found"); } - KDbConnectionOptions connOptions; + KDbConnectionOptions connOptionsOverride(options); QStringList extraSqliteExtensionPaths; extraSqliteExtensionPaths << SQLITE_LOCAL_ICU_EXTENSION_PATH; - connOptions.insert("extraSqliteExtensionPaths", extraSqliteExtensionPaths); + connOptionsOverride.insert("extraSqliteExtensionPaths", extraSqliteExtensionPaths); connection.reset(); // remove previous connection if present const int connCount = driver->connections().count(); - connection.reset(driver->createConnection(cdata, connOptions)); + connection.reset(driver->createConnection(cdata, connOptionsOverride)); KDB_VERIFY(driver, !connection.isNull(), "Failed to create connection"); QVERIFY2(cdata.driverId().isEmpty(), "Connection data has filled driver ID"); QCOMPARE(connection->data().driverId(), driver->metaData()->id()); @@ -155,6 +156,29 @@ KDB_VERIFY(connection, connection->isDatabaseUsed(), "Database not used after call to useDatabase()"); } +void KDbTestUtils::testConnectAndUseInternal(const KDbConnectionData &cdata, + const KDbConnectionOptions &options) +{ + if (!testConnect(cdata, options) || !connection) { + qWarning() << driver->result(); + QFAIL("testConnect"); + } + if (!testUse() || !connection->isDatabaseUsed()) { + qWarning() << connection->result(); + bool result = testDisconnect(); + Q_UNUSED(result); + QFAIL("testUse"); + } +} + +void KDbTestUtils::testConnectAndUseInternal(const QString &path, + const KDbConnectionOptions &options) +{ + KDbConnectionData cdata; + cdata.setDatabaseName(path); + testConnectAndUseInternal(cdata, options); +} + void KDbTestUtils::testCreateDbInternal(const QString &dbName) { //open connection diff --git a/autotests/parser/SqlParserTest.cpp b/autotests/parser/SqlParserTest.cpp --- a/autotests/parser/SqlParserTest.cpp +++ b/autotests/parser/SqlParserTest.cpp @@ -42,10 +42,9 @@ bool SqlParserTest::openDatabase(const QString &path) { - KDbConnectionData cdata; - cdata.setDatabaseName(path); - if (!m_utils.testConnect(cdata) || !m_utils.connection) { - qWarning() << m_utils.driver->result(); + KDbConnectionOptions options; + options.setReadOnly(true); + if (!m_utils.testConnectAndUse(path, options)) { return false; } m_parser.reset(new KDbParser(m_utils.connection.data())); @@ -63,12 +62,6 @@ return false; } #endif - if (!m_utils.testUse() || !m_utils.connection->isDatabaseUsed()) { - qWarning() << m_utils.connection->result(); - bool result = m_utils.testDisconnect(); - Q_UNUSED(result); - return false; - } return true; }