1 /* 2 SPDX-FileCopyrightText: 2012 Volker Krause <vkrause@kde.org> 3 4 SPDX-License-Identifier: LGPL-2.0-or-later 5 */ 6 7 #include <QDebug> 8 #include <QObject> 9 #include <QTest> 10 11 #include <aktest.h> 12 #include <storage/dbexception.h> 13 #include <storage/dbintrospector.h> 14 15 #define QL1S(x) QLatin1String(x) 16 17 using namespace Akonadi::Server; 18 19 class DbIntrospectorTest : public QObject 20 { 21 Q_OBJECT 22 private Q_SLOTS: testHasIndexQuery_data()23 void testHasIndexQuery_data() 24 { 25 QTest::addColumn<QString>("driverName"); 26 QTest::addColumn<QString>("indexQuery"); 27 28 QTest::newRow("mysql") << "QMYSQL" 29 << "SHOW INDEXES FROM myTable WHERE `Key_name` = 'myIndex'"; 30 QTest::newRow("sqlite") << "QSQLITE" 31 << "SELECT * FROM sqlite_master WHERE type='index' AND tbl_name='myTable' AND name='myIndex';"; 32 QTest::newRow("psql") << "QPSQL" 33 << "SELECT indexname FROM pg_catalog.pg_indexes WHERE tablename ilike 'myTable' AND indexname ilike 'myIndex' UNION SELECT " 34 "conname FROM pg_catalog.pg_constraint WHERE conname ilike 'myIndex'"; 35 } 36 testHasIndexQuery()37 void testHasIndexQuery() 38 { 39 QFETCH(QString, driverName); 40 QFETCH(QString, indexQuery); 41 42 if (QSqlDatabase::drivers().contains(driverName)) { 43 QSqlDatabase db = QSqlDatabase::addDatabase(driverName, driverName); 44 DbIntrospector::Ptr introspector = DbIntrospector::createInstance(db); 45 QVERIFY(introspector); 46 QCOMPARE(introspector->hasIndexQuery(QL1S("myTable"), QL1S("myIndex")), indexQuery); 47 } 48 } 49 testHasIndex_data()50 void testHasIndex_data() 51 { 52 QTest::addColumn<QString>("driverName"); 53 QTest::addColumn<bool>("shouldThrow"); 54 55 QTest::newRow("mysql") << "QMYSQL" << true; 56 QTest::newRow("sqlite") << "QSQLITE" << true; 57 QTest::newRow("psql") << "QPSQL" << true; 58 } 59 testHasIndex()60 void testHasIndex() 61 { 62 QFETCH(QString, driverName); 63 QFETCH(bool, shouldThrow); 64 65 if (QSqlDatabase::drivers().contains(driverName)) { 66 QSqlDatabase db = QSqlDatabase::addDatabase(driverName, driverName + QL1S("hasIndex")); 67 DbIntrospector::Ptr introspector = DbIntrospector::createInstance(db); 68 QVERIFY(introspector); 69 70 bool didThrow = false; 71 try { 72 QVERIFY(introspector->hasIndex(QL1S("myTable"), QL1S("myIndex"))); 73 } catch (const DbException &e) { 74 didThrow = true; 75 qDebug() << Q_FUNC_INFO << e.what(); 76 } 77 QCOMPARE(didThrow, shouldThrow); 78 } 79 } 80 }; 81 82 AKTEST_MAIN(DbIntrospectorTest) 83 84 #include "dbintrospectortest.moc" 85