From 8f125985dbebef9ab9db31e8a180d01b7452030e Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Thu, 4 Apr 2013 08:45:50 +0200 Subject: Cleanup the SQL tests This removes some XFAILS that were no longer correct and fixes some existing problems in the tests where ODBC is concerned. Change-Id: I91de526bb50ad4046ba07ddb5336aa3714966687 Reviewed-by: Mark Brand Reviewed-by: Caroline Chao --- .../tst_qsqlrelationaltablemodel.cpp | 81 ++++++++++++---------- 1 file changed, 46 insertions(+), 35 deletions(-) (limited to 'tests/auto/sql/models/qsqlrelationaltablemodel') diff --git a/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp b/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp index b218a0c4f7..37c08e5101 100644 --- a/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp +++ b/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp @@ -151,14 +151,15 @@ void tst_QSqlRelationalTableModel::initTestCase() { foreach (const QString &dbname, dbs.dbNames) { QSqlDatabase db=QSqlDatabase::database(dbname); - if (db.driverName().startsWith("QIBASE")) + QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db); + if (dbType == QSqlDriverPrivate::Interbase) { db.exec("SET DIALECT 3"); - else if (tst_Databases::isSqlServer(db)) { + } else if (dbType == QSqlDriverPrivate::MSSqlServer) { db.exec("SET ANSI_DEFAULTS ON"); db.exec("SET IMPLICIT_TRANSACTIONS OFF"); - } - else if(tst_Databases::isPostgreSQL(db)) + } else if (dbType == QSqlDriverPrivate::PostgreSQL) { db.exec("set client_min_messages='warning'"); + } recreateTestTables(db); } } @@ -245,6 +246,7 @@ void tst_QSqlRelationalTableModel::setData() QFETCH_GLOBAL(QString, dbName); QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); + const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db); // set the values using OnRowChange Strategy { @@ -327,7 +329,7 @@ void tst_QSqlRelationalTableModel::setData() //sybase doesn't allow tables with the same alias used twice as col names //so don't set up an identical relation when using the tds driver - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) model.setRelation(3, QSqlRelation(reltest2, "tid", "title")); model.setEditStrategy(QSqlTableModel::OnManualSubmit); @@ -340,7 +342,7 @@ void tst_QSqlRelationalTableModel::setData() QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi2")); QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr")); else QCOMPARE(model.data(model.index(0, 3)).toInt(), 1); @@ -358,12 +360,12 @@ void tst_QSqlRelationalTableModel::setData() QCOMPARE(model.data(model.index(0, 3)).toInt(), 1); model.setRelation(2, QSqlRelation(reltest2, "tid", "title")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) model.setRelation(3, QSqlRelation(reltest2, "tid", "title")); QVERIFY_SQL(model, select()); QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr")); else QCOMPARE(model.data(model.index(0, 3)).toInt(), 1); @@ -560,6 +562,7 @@ void tst_QSqlRelationalTableModel::insertWithStrategies() QFETCH_GLOBAL(QString, dbName); QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); + const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db); QSqlRelationalTableModel model(0, db); @@ -567,14 +570,14 @@ void tst_QSqlRelationalTableModel::insertWithStrategies() model.setRelation(2, QSqlRelation(reltest2, "tid", "title")); model.setSort(0, Qt::AscendingOrder); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) model.setRelation(3, QSqlRelation(reltest2, "tid", "title")); QVERIFY_SQL(model, select()); QCOMPARE(model.data(model.index(0,0)).toInt(), 1); QCOMPARE(model.data(model.index(0,1)).toString(), QString("harry")); QCOMPARE(model.data(model.index(0,2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) QCOMPARE(model.data(model.index(0,3)).toString(), QString("mister")); else QCOMPARE(model.data(model.index(0,3)).toInt(), 2); @@ -588,7 +591,7 @@ void tst_QSqlRelationalTableModel::insertWithStrategies() QCOMPARE(model.data(model.index(0,0)).toInt(), 1011); QCOMPARE(model.data(model.index(0,1)).toString(), QString("test")); QCOMPARE(model.data(model.index(0,2)).toString(), QString("mister")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) QCOMPARE(model.data(model.index(0,3)).toString(), QString("herr")); else QCOMPARE(model.data(model.index(0,3)).toInt(), 1); @@ -596,7 +599,7 @@ void tst_QSqlRelationalTableModel::insertWithStrategies() QCOMPARE(model.data(model.index(1,0)).toInt(), 1); QCOMPARE(model.data(model.index(1,1)).toString(), QString("harry")); QCOMPARE(model.data(model.index(1,2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) QCOMPARE(model.data(model.index(1,3)).toString(), QString("mister")); else QCOMPARE(model.data(model.index(1,3)).toInt(), 2); @@ -613,7 +616,7 @@ void tst_QSqlRelationalTableModel::insertWithStrategies() QCOMPARE(model.data(model.index(0,1)).toString(), QString("harry")); QCOMPARE(model.data(model.index(0,2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) { + if (dbType != QSqlDriverPrivate::Sybase) { QCOMPARE(model.data(model.index(0,3)).toString(), QString("mister")); model.setData(model.index(0,3),1); QCOMPARE(model.data(model.index(0,3)).toString(), QString("herr")); @@ -637,7 +640,7 @@ void tst_QSqlRelationalTableModel::insertWithStrategies() QCOMPARE(model.data(model.index(0,0)).toInt(),1012); QCOMPARE(model.data(model.index(0,1)).toString(), QString("george")); QCOMPARE(model.data(model.index(0,2)).toString(), QString("mister")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) QCOMPARE(model.data(model.index(0,3)).toString(), QString("mister")); else QCOMPARE(model.data(model.index(0,3)).toInt(), 2); @@ -646,7 +649,7 @@ void tst_QSqlRelationalTableModel::insertWithStrategies() QCOMPARE(model.data(model.index(1,0)).toInt(),1013); QCOMPARE(model.data(model.index(1,1)).toString(), QString("kramer")); QCOMPARE(model.data(model.index(1,2)).toString(), QString("mister")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) QCOMPARE(model.data(model.index(1,3)).toString(), QString("herr")); else QCOMPARE(model.data(model.index(1,3)).toInt(), 1); @@ -654,7 +657,7 @@ void tst_QSqlRelationalTableModel::insertWithStrategies() QCOMPARE(model.data(model.index(2,0)).toInt(), 1); QCOMPARE(model.data(model.index(2,1)).toString(), QString("harry")); QCOMPARE(model.data(model.index(2,2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) QCOMPARE(model.data(model.index(2,3)).toString(), QString("herr")); else QCOMPARE(model.data(model.index(2,3)).toInt(), 1); @@ -751,12 +754,13 @@ void tst_QSqlRelationalTableModel::sort() QFETCH_GLOBAL(QString, dbName); QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); + const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db); QSqlRelationalTableModel model(0, db); model.setTable(reltest1); model.setRelation(2, QSqlRelation(reltest2, "tid", "title")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) model.setRelation(3, QSqlRelation(reltest2, "tid", "title")); model.setSort(2, Qt::DescendingOrder); @@ -772,7 +776,7 @@ void tst_QSqlRelationalTableModel::sort() model.setSort(3, Qt::AscendingOrder); QVERIFY_SQL(model, select()); - if (!db.driverName().startsWith("QTDS")) { + if (dbType != QSqlDriverPrivate::Sybase) { QCOMPARE(model.rowCount(), 4); QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr")); QCOMPARE(model.data(model.index(1, 3)).toString(), QString("mister")); @@ -801,7 +805,7 @@ void tst_QSqlRelationalTableModel::sort() model.setSort(3, Qt::AscendingOrder); QVERIFY_SQL(model, select()); - if (!db.driverName().startsWith("QTDS")) { + if (dbType != QSqlDriverPrivate::Sybase) { QCOMPARE(model.rowCount(), 6); QCOMPARE(model.data(model.index(0, 3)).toString(), QString("")); QCOMPARE(model.data(model.index(1, 3)).toString(), QString("herr")); @@ -916,13 +920,14 @@ void tst_QSqlRelationalTableModel::clearDisplayValuesCache() QFETCH_GLOBAL(QString, dbName); QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); + const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db); QSqlRelationalTableModel model(0, db); model.setTable(reltest1); model.setRelation(2, QSqlRelation(reltest2, "tid", "title")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) model.setRelation(3, QSqlRelation(reltest2, "tid", "title")); model.setSort(1, Qt::AscendingOrder); model.setEditStrategy(QSqlTableModel::OnManualSubmit); @@ -932,7 +937,7 @@ void tst_QSqlRelationalTableModel::clearDisplayValuesCache() QCOMPARE(model.data(model.index(3, 0)).toInt(), 3); QCOMPARE(model.data(model.index(3, 1)).toString(), QString("vohi")); QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) QCOMPARE(model.data(model.index(3, 3)).toString(), QString("mister")); else QCOMPARE(model.data(model.index(3, 3)).toInt(), 2 ); @@ -947,7 +952,7 @@ void tst_QSqlRelationalTableModel::clearDisplayValuesCache() QCOMPARE(model.data(model.index(0, 0)).toInt(), 7); QCOMPARE(model.data(model.index(0, 1)).toString(), QString("anders")); QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr")); else QCOMPARE(model.data(model.index(0, 3)).toInt(), 1); @@ -955,7 +960,7 @@ void tst_QSqlRelationalTableModel::clearDisplayValuesCache() QCOMPARE(model.data(model.index(4, 0)).toInt(), 3); QCOMPARE(model.data(model.index(4, 1)).toString(), QString("vohi")); QCOMPARE(model.data(model.index(4, 2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) + if (dbType != QSqlDriverPrivate::Sybase) QCOMPARE(model.data(model.index(4, 3)).toString(), QString("mister")); else QCOMPARE(model.data(model.index(4, 3)).toInt(), 2); @@ -969,6 +974,7 @@ void tst_QSqlRelationalTableModel::insertRecordDuplicateFieldNames() QFETCH_GLOBAL(QString, dbName); QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); + const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db); QSqlRelationalTableModel model(0, db); model.setTable(reltest3); @@ -979,7 +985,7 @@ void tst_QSqlRelationalTableModel::insertRecordDuplicateFieldNames() model.setRelation(2, QSqlRelation(reltest4, "id", "name")); QVERIFY_SQL(model, select()); - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { + if (dbType == QSqlDriverPrivate::Interbase || dbType == QSqlDriverPrivate::Oracle || dbType == QSqlDriverPrivate::DB2) { QCOMPARE(model.record(1).value((reltest4+QLatin1String("_name_2")).toUpper()).toString(), QString("Trondheim")); } else { @@ -992,7 +998,7 @@ void tst_QSqlRelationalTableModel::insertRecordDuplicateFieldNames() rec.setValue(1, "Berge"); rec.setValue(2, 1); // Must insert the key value - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { + if (dbType == QSqlDriverPrivate::Interbase || dbType == QSqlDriverPrivate::Oracle || dbType == QSqlDriverPrivate::DB2) { QCOMPARE(rec.fieldName(0), QLatin1String("ID")); QCOMPARE(rec.fieldName(1), QLatin1String("NAME")); // This comes from main table } else { @@ -1001,7 +1007,7 @@ void tst_QSqlRelationalTableModel::insertRecordDuplicateFieldNames() } // The duplicate field names is aliased because it's comes from the relation's display column. - if(db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) + if (dbType == QSqlDriverPrivate::Interbase || dbType == QSqlDriverPrivate::Oracle || dbType == QSqlDriverPrivate::DB2) QCOMPARE(rec.fieldName(2), (reltest4+QLatin1String("_name_2")).toUpper()); else QCOMPARE(rec.fieldName(2), reltest4+QLatin1String("_name_2")); @@ -1090,8 +1096,9 @@ void tst_QSqlRelationalTableModel::casing() QFETCH_GLOBAL(QString, dbName); QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); + const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db); - if (db.driverName().startsWith("QSQLITE") || db.driverName().startsWith("QIBASE") || tst_Databases::isSqlServer(db)) + if (dbType == QSqlDriverPrivate::Interbase || dbType == QSqlDriverPrivate::SQLite || dbType == QSqlDriverPrivate::MSSqlServer) QSKIP("The casing test for this database is irrelevant since this database does not treat different cases as separate entities"); QSqlQuery q(db); @@ -1110,7 +1117,7 @@ void tst_QSqlRelationalTableModel::casing() QVERIFY_SQL( q, exec("insert into " + qTableName("casetest1", db) + " values(2, 'george', 2)")); QVERIFY_SQL( q, exec("insert into " + qTableName("casetest1", db) + " values(4, 'kramer', 2)")); - if (db.driverName().startsWith("QOCI")) { + if (dbType == QSqlDriverPrivate::Oracle) { //try an owner that doesn't exist QSqlRecord rec = db.driver()->record("doug." + qTableName("CASETEST1", db).toUpper()); QCOMPARE( rec.count(), 0); @@ -1156,13 +1163,15 @@ void tst_QSqlRelationalTableModel::escapedRelations() QFETCH_GLOBAL(QString, dbName); QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); + const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db); + recreateTestTables(db); QSqlRelationalTableModel model(0, db); model.setTable(reltest1); //try with relation table name quoted - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { + if (dbType == QSqlDriverPrivate::Interbase || dbType == QSqlDriverPrivate::Oracle || dbType == QSqlDriverPrivate::DB2) { model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(reltest2.toUpper(),QSqlDriver::TableName), "tid", "title")); @@ -1187,7 +1196,7 @@ void tst_QSqlRelationalTableModel::escapedRelations() //try with index column quoted model.setJoinMode(QSqlRelationalTableModel::InnerJoin); - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { + if (dbType == QSqlDriverPrivate::Interbase || dbType == QSqlDriverPrivate::Oracle || dbType == QSqlDriverPrivate::DB2) { model.setRelation(2, QSqlRelation(reltest2, db.driver()->escapeIdentifier("tid", QSqlDriver::FieldName).toUpper(), "title")); @@ -1211,7 +1220,7 @@ void tst_QSqlRelationalTableModel::escapedRelations() //try with display column quoted model.setJoinMode(QSqlRelationalTableModel::InnerJoin); - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { + if (dbType == QSqlDriverPrivate::Interbase || dbType == QSqlDriverPrivate::Oracle || dbType == QSqlDriverPrivate::DB2) { model.setRelation(2, QSqlRelation(reltest2, "tid", @@ -1237,7 +1246,7 @@ void tst_QSqlRelationalTableModel::escapedRelations() //try with tablename and index and display columns quoted in the relation model.setJoinMode(QSqlRelationalTableModel::InnerJoin); - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { + if (dbType == QSqlDriverPrivate::Interbase || dbType == QSqlDriverPrivate::Oracle || dbType == QSqlDriverPrivate::DB2) { model.setRelation(2, QSqlRelation(reltest2, "tid", db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper())); @@ -1265,12 +1274,13 @@ void tst_QSqlRelationalTableModel::escapedTableName() QFETCH_GLOBAL(QString, dbName); QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); + const QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db); // set the values using OnRowChange Strategy with an escaped tablename { QSqlRelationalTableModel model(0, db); - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { + if (dbType == QSqlDriverPrivate::Interbase || dbType == QSqlDriverPrivate::Oracle || dbType == QSqlDriverPrivate::DB2) { model.setTable(db.driver()->escapeIdentifier(reltest1.toUpper(), QSqlDriver::TableName)); } else { model.setTable(db.driver()->escapeIdentifier(reltest1, QSqlDriver::TableName)); @@ -1317,7 +1327,7 @@ void tst_QSqlRelationalTableModel::escapedTableName() { QSqlRelationalTableModel model(0, db); - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { + if (dbType == QSqlDriverPrivate::Interbase || dbType == QSqlDriverPrivate::Oracle || dbType == QSqlDriverPrivate::DB2) { model.setTable(db.driver()->escapeIdentifier(reltest1.toUpper(), QSqlDriver::TableName)); } else { model.setTable(db.driver()->escapeIdentifier(reltest1, QSqlDriver::TableName)); @@ -1453,8 +1463,9 @@ void tst_QSqlRelationalTableModel::psqlSchemaTest() QFETCH_GLOBAL(QString, dbName); QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); + QSqlDriverPrivate::DBMSType dbType = tst_Databases::getDatabaseType(db); - if(!tst_Databases::isPostgreSQL(db)) + if (dbType != QSqlDriverPrivate::PostgreSQL) QSKIP("Postgresql specific test"); QSqlRelationalTableModel model(0, db); -- cgit v1.2.3