diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2019-04-16 16:32:08 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2019-04-16 16:32:08 +0200 |
commit | 6630937e63ae5797487b86743a7733c8ae5cc42c (patch) | |
tree | 3d53dacf6430f9099e1fb20835881205de674961 /tests/auto/sql | |
parent | 37ed6dae00640f9cc980ffda05347c12a7eb5d7e (diff) | |
parent | c7af193d2e49e9f10b86262e63d8d13abf72b5cf (diff) |
Merge commit 'dev' into 'wip/cmake-merge'
Change-Id: I176c40d031be26a1dd1cf08843e448a660598783
Diffstat (limited to 'tests/auto/sql')
8 files changed, 155 insertions, 84 deletions
diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h index 97397e3159..55875359ff 100644 --- a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h +++ b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h @@ -79,14 +79,14 @@ inline QString fixupTableName(const QString &tableName, QSqlDatabase db) return tbName; } -inline static QString qTableName(const QString& prefix, const char *sourceFileName, QSqlDatabase db) +inline static QString qTableName(const QString &prefix, const char *sourceFileName, + QSqlDatabase db, bool escape = true) { - QString tableStr = QLatin1String("dbtst"); - if (db.driverName().toLower().contains("ODBC")) - tableStr += QLatin1String("_odbc"); - return fixupTableName(QString(QLatin1String("dbtst") + db.driverName() + - QString::number(qHash(QLatin1String(sourceFileName) + - "_" + qGetHostName().replace( "-", "_" )), 16) + "_" + prefix), db); + const auto tableStr = fixupTableName(QString(QLatin1String("dbtst") + db.driverName() + + QString::number(qHash(QLatin1String(sourceFileName) + + "_" + qGetHostName().replace("-", "_")), 16) + + "_" + prefix), db); + return escape ? db.driver()->escapeIdentifier(tableStr, QSqlDriver::TableName) : tableStr; } inline static QString qTableName(const QString& prefix, QSqlDatabase db) diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp index bdfa957083..f309231b10 100644 --- a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp +++ b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp @@ -314,10 +314,8 @@ void tst_QSqlDatabase::createTestTables(QSqlDatabase db) " (id integer not null, t_varchar varchar(40) not null, " "t_char char(40), t_numeric numeric(6, 3), primary key (id, t_varchar))")); } - if (testWhiteSpaceNames(db.driverName())) { - QString qry = "create table " - + db.driver()->escapeIdentifier(tableName + " test", QSqlDriver::TableName) + QString qry = "create table " + qTableName("qtest test", __FILE__, db) + '(' + db.driver()->escapeIdentifier(QLatin1String("test test"), QSqlDriver::FieldName) + " int not null primary key)"; @@ -341,6 +339,7 @@ void tst_QSqlDatabase::dropTestTables(QSqlDatabase db) const QString qtestTable = qTableName("qtest", __FILE__, db); QStringList tableNames; tableNames << qtestTable + << qTableName("qtest test", __FILE__, db) << qTableName("qtestfields", __FILE__, db) << qTableName("qtestalter", __FILE__, db) << qTableName("qtest_temp", __FILE__, db) @@ -513,7 +512,9 @@ void tst_QSqlDatabase::tables() CHECK_DATABASE(db); QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db); - const QString qtest(qTableName("qtest", __FILE__, db)), qtest_view(qTableName("qtest_view", __FILE__, db)), temp_tab(qTableName("test_tab", __FILE__, db)); + const auto qtest(qTableName("qtest", __FILE__, db, false)), + qtest_view(qTableName("qtest_view", __FILE__, db, false)), + temp_tab(qTableName("test_tab", __FILE__, db, false)); bool views = true; bool tempTables = false; @@ -578,10 +579,10 @@ void tst_QSqlDatabase::whitespaceInIdentifiers() const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db); if (testWhiteSpaceNames(db.driverName())) { - const QString tableName(qTableName("qtest", __FILE__, db) + " test"); + const auto tableName(qTableName("qtest test", __FILE__, db, false)); QVERIFY(db.tables().contains(tableName, Qt::CaseInsensitive)); - QSqlRecord rec = db.record(db.driver()->escapeIdentifier(tableName, QSqlDriver::TableName)); + QSqlRecord rec = db.record(tableName); QCOMPARE(rec.count(), 1); QCOMPARE(rec.fieldName(0), QString("test test")); if (dbType == QSqlDriver::Oracle) @@ -589,7 +590,7 @@ void tst_QSqlDatabase::whitespaceInIdentifiers() else QCOMPARE(rec.field(0).type(), QVariant::Int); - QSqlIndex idx = db.primaryIndex(db.driver()->escapeIdentifier(tableName, QSqlDriver::TableName)); + QSqlIndex idx = db.primaryIndex(tableName); QCOMPARE(idx.count(), 1); QCOMPARE(idx.fieldName(0), QString("test test")); if (dbType == QSqlDriver::Oracle) @@ -607,11 +608,12 @@ void tst_QSqlDatabase::alterTable() QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); const QString qtestalter(qTableName("qtestalter", __FILE__, db)); + const auto noEscapeAlterTable = qTableName("qtestalter", __FILE__, db, false); QSqlQuery q(db); QVERIFY_SQL(q, exec("create table " + qtestalter + " (F1 char(20), F2 char(20), F3 char(20))")); - QSqlRecord rec = db.record(qtestalter); + QSqlRecord rec = db.record(noEscapeAlterTable); QCOMPARE((int)rec.count(), 3); int i; @@ -623,7 +625,7 @@ void tst_QSqlDatabase::alterTable() QSKIP("DBMS doesn't support dropping columns in ALTER TABLE statement"); } - rec = db.record(qtestalter); + rec = db.record(noEscapeAlterTable); QCOMPARE((int)rec.count(), 2); @@ -681,13 +683,16 @@ void tst_QSqlDatabase::testRecord(const FieldDef fieldDefs[], const QSqlRecord& void tst_QSqlDatabase::commonFieldTest(const FieldDef fieldDefs[], QSqlDatabase db, const int fieldCount) { CHECK_DATABASE(db); - const QString tableName = qTableName("qtestfields", __FILE__, db); - QSqlRecord rec = db.record(tableName); - QCOMPARE((int)rec.count(), fieldCount+1); - testRecord(fieldDefs, rec, db); - + const QStringList tableNames = { qTableName("qtestfields", __FILE__, db), + qTableName("qtestfields", __FILE__, db, false) }; + for (const QString table : tableNames) { + QSqlRecord rec = db.record(table); + QCOMPARE(rec.count(), fieldCount + 1); + testRecord(fieldDefs, rec, db); + } QSqlQuery q(db); - QVERIFY_SQL(q, exec("select * from " + tableName)); + // Only check the escaped entry + QVERIFY_SQL(q, exec("select * from " + tableNames.at(0))); } void tst_QSqlDatabase::recordTDS() @@ -846,12 +851,8 @@ void tst_QSqlDatabase::recordPSQL() QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db); if (dbType == QSqlDriver::PostgreSQL) QVERIFY_SQL( q, exec("set client_min_messages='warning'")); - const QString tableName = qTableName("qtestfields", __FILE__, db); - q.exec("drop sequence " + tableName + "_t_bigserial_seq"); - q.exec("drop sequence " + tableName + "_t_serial_seq"); - // older psql cut off the table name - q.exec("drop sequence " + tableName + "_t_bigserial_seq"); - q.exec("drop sequence " + tableName + "_t_serial_seq"); + q.exec("drop sequence " + qTableName("qtestfields_t_bigserial_seq", __FILE__, db)); + q.exec("drop sequence " + qTableName("qtestfields_t_serial_seq", __FILE__, db)); const int fieldCount = createFieldTable(fieldDefs, db); QVERIFY(fieldCount > 0); @@ -912,7 +913,7 @@ void tst_QSqlDatabase::recordMySQL() FieldDef("date", QVariant::Date, QDate::currentDate()), FieldDef("datetime", QVariant::DateTime, dt), FieldDef("timestamp", QVariant::DateTime, dt, false), - FieldDef("time", QVariant::Time, dt.time()), + FieldDef("time", QVariant::String, dt.time()), FieldDef("year", QVariant::Int, 2003), FieldDef("char(20)", QVariant::String, "Blah"), FieldDef("varchar(20)", QVariant::String, "BlahBlah"), @@ -1205,27 +1206,40 @@ void tst_QSqlDatabase::caseSensivity() const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db); bool cs = false; - if (dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::SQLite || dbType == QSqlDriver::Sybase + if (dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::SQLite + || dbType == QSqlDriver::Sybase || dbType == QSqlDriver::PostgreSQL || dbType == QSqlDriver::MSSqlServer || db.driverName().startsWith("QODBC")) cs = true; - QSqlRecord rec = db.record(qTableName("qtest", __FILE__, db)); + QSqlRecord rec = db.record(qTableName("qtest", __FILE__, db, false)); QVERIFY((int)rec.count() > 0); if (!cs) { - rec = db.record(qTableName("QTEST", __FILE__, db).toUpper()); + rec = db.record(qTableName("QTEST", __FILE__, db, false).toUpper()); QVERIFY((int)rec.count() > 0); - rec = db.record(qTableName("qTesT", __FILE__, db)); + rec = db.record(qTableName("qTesT", __FILE__, db, false)); QVERIFY((int)rec.count() > 0); } - rec = db.primaryIndex(qTableName("qtest", __FILE__, db)); + rec = db.primaryIndex(qTableName("qtest", __FILE__, db, false)); QVERIFY((int)rec.count() > 0); if (!cs) { - rec = db.primaryIndex(qTableName("QTEST", __FILE__, db).toUpper()); + rec = db.primaryIndex(qTableName("QTEST", __FILE__, db, false).toUpper()); QVERIFY((int)rec.count() > 0); - rec = db.primaryIndex(qTableName("qTesT", __FILE__, db)); + rec = db.primaryIndex(qTableName("qTesT", __FILE__, db, false)); QVERIFY((int)rec.count() > 0); } + + // Explicit test for case sensitive table creation without quoting + QSqlQuery qry(db); + const auto noQuotesTable = qTableName("NoQuotes", __FILE__, db, false); + tst_Databases::safeDropTable(db, noQuotesTable); + QVERIFY_SQL(qry, exec("CREATE TABLE " + noQuotesTable + " (id INTEGER)")); + QVERIFY_SQL(qry, exec("INSERT INTO " + noQuotesTable + " VALUES(1)")); + QVERIFY_SQL(qry, exec("SELECT * FROM " + noQuotesTable)); + QVERIFY_SQL(qry, next()); + QCOMPARE(qry.value(0).toInt(), 1); + rec = db.record(cs ? noQuotesTable.toLower() : noQuotesTable); + QVERIFY(rec.count() > 0); } void tst_QSqlDatabase::noEscapedFieldNamesInRecord() @@ -1260,17 +1274,19 @@ void tst_QSqlDatabase::psql_schemas() const QString schemaName = qTableName("qtestschema", __FILE__, db); QVERIFY_SQL(q, exec("CREATE SCHEMA " + schemaName)); - QString table = schemaName + '.' + qTableName("qtesttable", __FILE__, db); + const auto table = schemaName + '.' + qTableName("qtesttable", __FILE__, db); + const auto noescapeTable = qTableName("qtestschema", __FILE__, db, false) + '.' + + qTableName("qtesttable", __FILE__, db, false); QVERIFY_SQL(q, exec("CREATE TABLE " + table + " (id int primary key, name varchar(20))")); - QVERIFY(db.tables().contains(table, Qt::CaseInsensitive)); + QVERIFY(db.tables().contains(noescapeTable, Qt::CaseInsensitive)); - QSqlRecord rec = db.record(table); + QSqlRecord rec = db.record(noescapeTable); QCOMPARE(rec.count(), 2); QCOMPARE(rec.fieldName(0), QString("id")); QCOMPARE(rec.fieldName(1), QString("name")); - QSqlIndex idx = db.primaryIndex(table); + QSqlIndex idx = db.primaryIndex(noescapeTable); QCOMPARE(idx.count(), 1); QCOMPARE(idx.fieldName(0), QString("id")); } @@ -1288,18 +1304,21 @@ void tst_QSqlDatabase::psql_escapedIdentifiers() QSqlQuery q(db); QVERIFY_SQL( q, exec("set client_min_messages='warning'")); - const QString schemaName(qTableName("qtestScHeMa", __FILE__, db)), + const char bumpyCase[] = "qtestScHeMa"; + const QString schemaName(qTableName(bumpyCase, __FILE__, db)), tableName(qTableName("qtest", __FILE__, db)), field1Name(QLatin1String("fIeLdNaMe")), field2Name(QLatin1String("ZuLu")); - q.exec(QString("DROP SCHEMA \"%1\" CASCADE").arg(schemaName)); - QString createSchema = QString("CREATE SCHEMA \"%1\"").arg(schemaName); + q.exec(QString("DROP SCHEMA %1 CASCADE").arg(schemaName)); + const auto createSchema = QString("CREATE SCHEMA %1").arg(schemaName); QVERIFY_SQL(q, exec(createSchema)); - QString createTable = QString("CREATE TABLE \"%1\".\"%2\" (\"%3\" int PRIMARY KEY, \"%4\" varchar(20))").arg(schemaName).arg(tableName).arg(field1Name).arg(field2Name); + const auto createTable = QString("CREATE TABLE %1.%2 (\"%3\" int PRIMARY KEY, \"%4\" varchar(20))") + .arg(schemaName, tableName, field1Name, field2Name); QVERIFY_SQL(q, exec(createTable)); - QVERIFY(db.tables().contains(schemaName + '.' + tableName, Qt::CaseSensitive)); + QVERIFY(db.tables().contains(qTableName(bumpyCase, __FILE__, db, false) + '.' + + qTableName("qtest", __FILE__, db, false), Qt::CaseSensitive)); QSqlField fld1(field1Name, QVariant::Int); QSqlField fld2(field2Name, QVariant::String); @@ -1307,7 +1326,9 @@ void tst_QSqlDatabase::psql_escapedIdentifiers() rec.append(fld1); rec.append(fld2); - QVERIFY_SQL(q, exec(drv->sqlStatement(QSqlDriver::SelectStatement, db.driver()->escapeIdentifier(schemaName, QSqlDriver::TableName) + '.' + db.driver()->escapeIdentifier(tableName, QSqlDriver::TableName), rec, false))); + QVERIFY_SQL(q, exec(drv->sqlStatement(QSqlDriver::SelectStatement, + schemaName + '.' + tableName, + rec, false))); rec = q.record(); QCOMPARE(rec.count(), 2); @@ -1315,7 +1336,7 @@ void tst_QSqlDatabase::psql_escapedIdentifiers() QCOMPARE(rec.fieldName(1), field2Name); QCOMPARE(rec.field(0).type(), QVariant::Int); - q.exec(QString("DROP SCHEMA \"%1\" CASCADE").arg(schemaName)); + q.exec(QString("DROP SCHEMA %1 CASCADE").arg(schemaName)); } void tst_QSqlDatabase::psql_escapeBytea() @@ -2146,7 +2167,7 @@ void tst_QSqlDatabase::eventNotificationPSQL() CHECK_DATABASE(db); QSqlQuery query(db); - QString procedureName = qTableName("posteventProc", __FILE__, db); + const auto procedureName = qTableName("posteventProc", __FILE__, db, false); QString payload = "payload"; QSqlDriver &driver=*(db.driver()); QVERIFY_SQL(driver, subscribeToNotification(procedureName)); @@ -2170,21 +2191,22 @@ void tst_QSqlDatabase::eventNotificationSQLite() QSKIP("QSQLITE specific test"); } const QString tableName(qTableName("sqlitnotifytest", __FILE__, db)); + const auto noEscapeTableName(qTableName("sqlitnotifytest", __FILE__, db, false)); tst_Databases::safeDropTable(db, tableName); QSignalSpy notificationSpy(db.driver(), SIGNAL(notification(QString))); QSignalSpy notificationSpyExt(db.driver(), SIGNAL(notification(QString,QSqlDriver::NotificationSource,QVariant))); QSqlQuery q(db); QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + " (id INTEGER, realVal REAL)")); - db.driver()->subscribeToNotification(tableName); + db.driver()->subscribeToNotification(noEscapeTableName); QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id, realVal) VALUES (1, 2.3)")); QTRY_COMPARE(notificationSpy.count(), 1); QTRY_COMPARE(notificationSpyExt.count(), 1); QList<QVariant> arguments = notificationSpy.takeFirst(); - QCOMPARE(arguments.at(0).toString(), tableName); + QCOMPARE(arguments.at(0).toString(), noEscapeTableName); arguments = notificationSpyExt.takeFirst(); - QCOMPARE(arguments.at(0).toString(), tableName); - db.driver()->unsubscribeFromNotification(tableName); + QCOMPARE(arguments.at(0).toString(), noEscapeTableName); + db.driver()->unsubscribeFromNotification(noEscapeTableName); QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id, realVal) VALUES (1, 2.3)")); QTRY_COMPARE(notificationSpy.count(), 0); QTRY_COMPARE(notificationSpyExt.count(), 0); @@ -2422,6 +2444,16 @@ public slots: QSqlDatabase invalidDb = QSqlDatabase::database("invalid"); QVERIFY(!invalidDb.isValid()); + + { + QSqlDatabase clonedDatabase = QSqlDatabase::cloneDatabase(dbName, "CloneDB"); + QVERIFY(!clonedDatabase.isOpen()); + QVERIFY(clonedDatabase.isValid()); + QVERIFY(clonedDatabase.open()); + QVERIFY(clonedDatabase.isOpen()); + clonedDatabase.close(); + } + QThread::currentThread()->exit(); } private: diff --git a/tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp b/tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp index 08c6039e37..be0285537e 100644 --- a/tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp +++ b/tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp @@ -46,6 +46,7 @@ private slots: void construction(); void moveOperator(); void operators(); + void qtbug_74575(); }; tst_QSqlError::tst_QSqlError() @@ -113,6 +114,7 @@ void tst_QSqlError::construction() QVERIFY(!obj4.isValid()); QCOMPARE(obj4.driverText(), QString()); QCOMPARE(obj4.databaseText(), QString()); + QCOMPARE(obj4.text(), QString()); QCOMPARE(obj4.type(), QSqlError::NoError); QCOMPARE(obj4.number(), -1); QCOMPARE(obj4.nativeErrorCode(), QString()); @@ -180,6 +182,28 @@ void tst_QSqlError::operators() QVERIFY(error1 != error3); } +void tst_QSqlError::qtbug_74575() +{ + const QString driverText(QStringLiteral("drivertext")); + const QString databaseText(QStringLiteral("databasetext")); + const QString databaseTextNewline(QStringLiteral("databasetext\n")); + + QSqlError error1(driverText, databaseText, + QSqlError::UnknownError, QStringLiteral("123")); + QCOMPARE(error1.text(), databaseText + QLatin1Char(' ') + driverText); + + QSqlError error2(QString(), databaseText, + QSqlError::UnknownError, QStringLiteral("123")); + QCOMPARE(error2.text(), databaseText); + + QSqlError error3(driverText, QString(), + QSqlError::UnknownError, QStringLiteral("123")); + QCOMPARE(error3.text(), driverText); + + QSqlError error4(driverText, databaseTextNewline, + QSqlError::UnknownError, QStringLiteral("123")); + QCOMPARE(error4.text(), databaseTextNewline + driverText); +} QTEST_MAIN(tst_QSqlError) #include "tst_qsqlerror.moc" diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp index 4ce1009c90..784d0a70d7 100644 --- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp @@ -158,6 +158,8 @@ private slots: void lastInsertId(); void lastQuery_data() { generic_data(); } void lastQuery(); + void lastQueryTwoQueries_data() { generic_data(); } + void lastQueryTwoQueries(); void bindBool_data() { generic_data(); } void bindBool(); void psql_bindWithDoubleColonCastOperator_data() { generic_data("QPSQL"); } @@ -633,13 +635,20 @@ void tst_QSqlQuery::bindBool() QVERIFY_SQL(q, exec()); } - QVERIFY_SQL(q, exec("SELECT id, flag FROM " + tableName)); + QVERIFY_SQL(q, exec("SELECT id, flag FROM " + tableName + " ORDER BY id")); for (int i = 0; i < 2; ++i) { bool flag = i; QVERIFY_SQL(q, next()); QCOMPARE(q.value(0).toInt(), i); QCOMPARE(q.value(1).toBool(), flag); } + QVERIFY_SQL(q, prepare("SELECT flag FROM " + tableName + " WHERE flag = :filter")); + const bool filter = true; + q.bindValue(":filter", filter); + QVERIFY_SQL(q, exec()); + QVERIFY_SQL(q, next()); + QCOMPARE(q.value(0).toBool(), filter); + QFAIL_SQL(q, next()); QVERIFY_SQL(q, exec("DROP TABLE " + tableName)); } @@ -1089,7 +1098,7 @@ void tst_QSqlQuery::record() for (int i = 0; i < 3; ++i) QCOMPARE(q.record().field(i).tableName().toLower(), lowerQTest); q.clear(); - const auto tst_record = qTableName("tst_record", __FILE__, db).toLower(); + const auto tst_record = qTableName("tst_record", __FILE__, db, false).toLower(); SETUP_RECORD_TABLE; CHECK_RECORD; q.clear(); @@ -2806,6 +2815,25 @@ void tst_QSqlQuery::lastQuery() QCOMPARE( q.executedQuery(), sql ); } +void tst_QSqlQuery::lastQueryTwoQueries() +{ + QFETCH(QString, dbName); + QSqlDatabase db = QSqlDatabase::database(dbName); + CHECK_DATABASE(db); + + QSqlQuery q(db); + + QString sql = QLatin1String("select * from ") + qtest; + QVERIFY_SQL(q, exec(sql)); + QCOMPARE(q.lastQuery(), sql); + QCOMPARE(q.executedQuery(), sql); + + sql = QLatin1String("select id from ") + qtest; + QVERIFY_SQL(q, exec(sql)); + QCOMPARE(q.lastQuery(), sql); + QCOMPARE(q.executedQuery(), sql); +} + void tst_QSqlQuery::psql_bindWithDoubleColonCastOperator() { QFETCH( QString, dbName ); @@ -3735,15 +3763,13 @@ void tst_QSqlQuery::QTBUG_5251() const QString timetest(qTableName("timetest", __FILE__, db)); tst_Databases::safeDropTable(db, timetest); QSqlQuery q(db); - QVERIFY_SQL(q, exec(QStringLiteral("CREATE TABLE \"") + timetest + QStringLiteral("\" (t TIME)"))); - QVERIFY_SQL(q, exec(QStringLiteral("INSERT INTO \"") + timetest + - QStringLiteral("\" VALUES ('1:2:3.666')"))); + QVERIFY_SQL(q, exec(QStringLiteral("CREATE TABLE ") + timetest + QStringLiteral(" (t TIME)"))); + QVERIFY_SQL(q, exec(QStringLiteral("INSERT INTO ") + timetest + + QStringLiteral(" VALUES ('1:2:3.666')"))); QSqlTableModel timetestModel(0,db); timetestModel.setEditStrategy(QSqlTableModel::OnManualSubmit); timetestModel.setTable(timetest); - if (tst_Databases::getDatabaseType(db) == QSqlDriver::PostgreSQL) - QEXPECT_FAIL("", "Currently broken for PostgreSQL due to case sensitivity problems - see QTBUG-65788", Abort); QVERIFY_SQL(timetestModel, select()); QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("01:02:03.666")); @@ -3752,8 +3778,8 @@ void tst_QSqlQuery::QTBUG_5251() QVERIFY_SQL(timetestModel, submitAll()); QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("00:12:34.500")); - QVERIFY_SQL(q, exec(QStringLiteral("UPDATE \"") + timetest + - QStringLiteral("\" SET t = '0:11:22.33'"))); + QVERIFY_SQL(q, exec(QStringLiteral("UPDATE ") + timetest + + QStringLiteral(" SET t = '0:11:22.33'"))); QVERIFY_SQL(timetestModel, select()); QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("00:11:22.330")); diff --git a/tests/auto/sql/models/models.pro b/tests/auto/sql/models/models.pro index 2c3ae4ef0a..da807f4351 100644 --- a/tests/auto/sql/models/models.pro +++ b/tests/auto/sql/models/models.pro @@ -1,8 +1,8 @@ TEMPLATE=subdirs -SUBDIRS=\ +qtHaveModule(widgets): SUBDIRS = \ qsqlquerymodel \ - qsqlrelationaltablemodel \ + qsqlrelationaldelegate + +SUBDIRS += qsqlrelationaltablemodel \ qsqltablemodel \ -!qtHaveModule(widgets): SUBDIRS -= \ - qsqlquerymodel diff --git a/tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp b/tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp index 36f592395e..a7089c06a1 100644 --- a/tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp +++ b/tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp @@ -158,12 +158,13 @@ void tst_QSqlRelationalDelegate::comboBoxEditor() QTest::keyClick(editor, Qt::Key_Down); QTest::keyClick(editor, Qt::Key_Enter); QCOMPARE(editor->currentText(), "mister"); + QTest::keyClick(tv.viewport(), Qt::Key_Tab); QVERIFY_SQL(model, submitAll()); QSqlQuery qry(db); QVERIFY_SQL(qry, exec("SELECT title_key FROM " + reltest1 + " WHERE id=1")); QVERIFY(qry.next()); - QCOMPARE(qry.value(0).toString(), "mister"); + QCOMPARE(qry.value(0).toString(), "2"); } QTEST_MAIN(tst_QSqlRelationalDelegate) diff --git a/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp b/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp index e4a277e096..722ef9c570 100644 --- a/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp +++ b/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp @@ -122,13 +122,13 @@ void tst_QSqlRelationalTableModel::recreateTestTables(QSqlDatabase db) QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('mister', 'Mr')")); if (testWhiteSpaceNames(db.driverName())) { - QString reltest6 = db.driver()->escapeIdentifier(qTableName("rel", __FILE__, db) + " test6", QSqlDriver::TableName); + const auto reltest6 = qTableName("rel test6", __FILE__, db); QVERIFY_SQL( q, exec("create table " + reltest6 + " (id int not null primary key, " + db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName) + " int, " + db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName) + " int)")); QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(1, 1,9)")); QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(2, 2,8)")); - QString reltest7 = db.driver()->escapeIdentifier(qTableName("rel", __FILE__, db) + " test7", QSqlDriver::TableName); + const auto reltest7 = qTableName("rel test7", __FILE__, db); QVERIFY_SQL( q, exec("create table " + reltest7 + " (" + db.driver()->escapeIdentifier("city id", QSqlDriver::TableName) + " int not null primary key, " + db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName) + " varchar(20))")); QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(1, 'New York')")); QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(2, 'Washington')")); @@ -170,8 +170,8 @@ void tst_QSqlRelationalTableModel::dropTestTables( QSqlDatabase db ) << reltest3 << reltest4 << reltest5 - << (qTableName("rel", __FILE__, db) + " test6") - << (qTableName( "rel", __FILE__, db) + " test7") + << qTableName("rel test6", __FILE__, db) + << qTableName("rel test7", __FILE__, db) << qTableName("CASETEST1", db) << qTableName("casetest1", db); tst_Databases::safeDropTables( db, tableNames ); @@ -1379,9 +1379,9 @@ void tst_QSqlRelationalTableModel::whiteSpaceInIdentifiers() if (!testWhiteSpaceNames(db.driverName())) QSKIP("White space test irrelevant for driver"); QSqlRelationalTableModel model(0, db); - model.setTable(db.driver()->escapeIdentifier(qTableName("rel", __FILE__, db) + " test6", QSqlDriver::TableName)); + model.setTable(qTableName("rel test6", __FILE__, db)); model.setSort(0, Qt::DescendingOrder); - model.setRelation(1, QSqlRelation(db.driver()->escapeIdentifier(qTableName("rel", __FILE__, db) + " test7", QSqlDriver::TableName), + model.setRelation(1, QSqlRelation(qTableName("rel test7", __FILE__, db), db.driver()->escapeIdentifier("city id", QSqlDriver::FieldName), db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName))); QVERIFY_SQL(model, select()); @@ -1547,8 +1547,6 @@ void tst_QSqlRelationalTableModel::relationOnFirstColumn() //modify the model data QVERIFY_SQL(model, setData(model.index(0, 0), 40)); - if (tst_Databases::getDatabaseType(db) == QSqlDriver::PostgreSQL) - QEXPECT_FAIL("", "Currently broken for PostgreSQL due to case sensitivity problems - see QTBUG-65788", Abort); QVERIFY_SQL(model, submit()); QVERIFY_SQL(model, setData(model.index(1, 0), 50)); QVERIFY_SQL(model, submit()); diff --git a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp index da31f437d9..b617151a36 100644 --- a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp +++ b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp @@ -383,8 +383,6 @@ void tst_QSqlTableModel::selectRow() q.exec("UPDATE " + tbl + " SET a = 'Qt' WHERE id = 1"); QCOMPARE(model.data(idx).toString(), QString("b")); model.selectRow(1); - if (tst_Databases::getDatabaseType(db) == QSqlDriver::PostgreSQL) - QEXPECT_FAIL("", "Currently broken for PostgreSQL due to case sensitivity problems - see QTBUG-65788", Abort); QCOMPARE(model.data(idx).toString(), QString("Qt")); // Check if selectRow() refreshes a changed row. @@ -441,8 +439,6 @@ void tst_QSqlTableModel::selectRowOverride() // both rows should have changed QCOMPARE(model.data(idx).toString(), QString("Qt")); idx = model.index(2, 1); - if (tst_Databases::getDatabaseType(db) == QSqlDriver::PostgreSQL) - QEXPECT_FAIL("", "Currently broken for PostgreSQL due to case sensitivity problems - see QTBUG-65788", Abort); QCOMPARE(model.data(idx).toString(), QString("Qt")); q.exec("DELETE FROM " + tbl); @@ -854,8 +850,6 @@ void tst_QSqlTableModel::insertRowFailure() // populate 1 row const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db); - if (dbType == QSqlDriver::PostgreSQL && submitpolicy != QSqlTableModel::OnManualSubmit) - QEXPECT_FAIL("", "Currently broken for PostgreSQL due to case sensitivity problems - see QTBUG-65788", Abort); QVERIFY_SQL(model, insertRecord(0, values)); QVERIFY_SQL(model, submitAll()); QVERIFY_SQL(model, select()); @@ -899,8 +893,6 @@ void tst_QSqlTableModel::insertRowFailure() // restore empty table model.revertAll(); QVERIFY_SQL(model, removeRow(0)); - if (dbType == QSqlDriver::PostgreSQL) - QEXPECT_FAIL("", "Currently broken for PostgreSQL due to case sensitivity problems - see QTBUG-65788", Abort); QVERIFY_SQL(model, submitAll()); QVERIFY_SQL(model, select()); QCOMPARE(model.rowCount(), 0); @@ -2009,8 +2001,6 @@ void tst_QSqlTableModel::tableModifyWithBlank() //Should be equivalent to QSqlQuery INSERT INTO... command) QVERIFY_SQL(model, insertRow(0)); QVERIFY_SQL(model, setData(model.index(0,0),timeString)); - if (tst_Databases::getDatabaseType(db) == QSqlDriver::PostgreSQL) - QEXPECT_FAIL("", "Currently broken for PostgreSQL due to case sensitivity problems - see QTBUG-65788", Abort); QVERIFY_SQL(model, submitAll()); //set a filter on the table so the only record we get is the one we just made |