diff options
Diffstat (limited to 'tests/auto/sql/kernel/qsqldriver/tst_qsqldriver.cpp')
-rw-r--r-- | tests/auto/sql/kernel/qsqldriver/tst_qsqldriver.cpp | 64 |
1 files changed, 37 insertions, 27 deletions
diff --git a/tests/auto/sql/kernel/qsqldriver/tst_qsqldriver.cpp b/tests/auto/sql/kernel/qsqldriver/tst_qsqldriver.cpp index e2877a1157..fb8d804843 100644 --- a/tests/auto/sql/kernel/qsqldriver/tst_qsqldriver.cpp +++ b/tests/auto/sql/kernel/qsqldriver/tst_qsqldriver.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> @@ -35,6 +35,7 @@ static bool driverSupportsDefaultValues(QSqlDriver::DbmsType dbType) case QSqlDriver::SQLite: case QSqlDriver::PostgreSQL: case QSqlDriver::Oracle: + case QSqlDriver::MySqlServer: return true; default: break; @@ -52,47 +53,48 @@ void tst_QSqlDriver::initTestCase_data() void tst_QSqlDriver::recreateTestTables(QSqlDatabase db) { QSqlQuery q(db); - const QString relTEST1(qTableName("relTEST1", __FILE__, db)); + const QString tableName(qTableName("relTEST1", __FILE__, db)); + tst_Databases::safeDropTables(db, {tableName}); QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db); if (dbType == QSqlDriver::PostgreSQL) QVERIFY_SQL( q, exec("set client_min_messages='warning'")); - tst_Databases::safeDropTable( db, relTEST1 ); QString doubleField; if (dbType == QSqlDriver::SQLite) doubleField = "more_data double"; else if (dbType == QSqlDriver::Oracle) doubleField = "more_data number(8,7)"; - else if (dbType == QSqlDriver::PostgreSQL) + else if (dbType == QSqlDriver::PostgreSQL || dbType == QSqlDriver::MimerSQL) doubleField = "more_data double precision"; else if (dbType == QSqlDriver::Interbase) doubleField = "more_data numeric(8,7)"; else doubleField = "more_data double(8,7)"; const QString defValue(driverSupportsDefaultValues(dbType) ? QStringLiteral("DEFAULT 'defaultVal'") : QString()); - QVERIFY_SQL( q, exec("create table " + relTEST1 + + QVERIFY_SQL( q, exec("create table " + tableName + " (id int not null primary key, name varchar(20) " + defValue + ", title_key int, another_title_key int, " + doubleField + QLatin1Char(')'))); - QVERIFY_SQL( q, exec("insert into " + relTEST1 + " values(1, 'harry', 1, 2, 1.234567)")); - QVERIFY_SQL( q, exec("insert into " + relTEST1 + " values(2, 'trond', 2, 1, 8.901234)")); - QVERIFY_SQL( q, exec("insert into " + relTEST1 + " values(3, 'vohi', 1, 2, 5.678901)")); - QVERIFY_SQL( q, exec("insert into " + relTEST1 + " values(4, 'boris', 2, 2, 2.345678)")); + QVERIFY_SQL( q, exec("insert into " + tableName + " values(1, 'harry', 1, 2, 1.234567)")); + QVERIFY_SQL( q, exec("insert into " + tableName + " values(2, 'trond', 2, 1, 8.901234)")); + QVERIFY_SQL( q, exec("insert into " + tableName + " values(3, 'vohi', 1, 2, 5.678901)")); + QVERIFY_SQL( q, exec("insert into " + tableName + " values(4, 'boris', 2, 2, 2.345678)")); } void tst_QSqlDriver::initTestCase() { - foreach (const QString &dbname, dbs.dbNames) + for (const QString &dbname : std::as_const(dbs.dbNames)) recreateTestTables(QSqlDatabase::database(dbname)); } void tst_QSqlDriver::cleanupTestCase() { - foreach (const QString &dbName, dbs.dbNames) { + for (const QString &dbName : std::as_const(dbs.dbNames)) { QSqlDatabase db = QSqlDatabase::database(dbName); - tst_Databases::safeDropTable(db, qTableName("relTEST1", __FILE__, db)); + QStringList tables = {qTableName("relTEST1", __FILE__, db)}; const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db); if (dbType == QSqlDriver::Oracle) - tst_Databases::safeDropTable(db, qTableName("clobTable", __FILE__, db)); + tables.push_back(qTableName("clobTable", __FILE__, db)); + tst_Databases::safeDropTables(db, tables); } dbs.close(); } @@ -111,7 +113,7 @@ void tst_QSqlDriver::record() QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); - QString tablename(qTableName("relTEST1", __FILE__, db)); + QString tablename(qTableName("relTEST1", __FILE__, db, false)); QStringList fields; fields << "id" << "name" << "title_key" << "another_title_key" << "more_data"; @@ -131,8 +133,14 @@ void tst_QSqlDriver::record() for (int i = 0; i < fields.size(); ++i) QCOMPARE(rec.fieldName(i), fields[i]); - if (driverSupportsDefaultValues(dbType)) - QCOMPARE(rec.field(QStringLiteral("name")).defaultValue().toString(), QStringLiteral("defaultVal")); + if (driverSupportsDefaultValues(dbType)) { + auto defVal = rec.field(QStringLiteral("name")).defaultValue().toString(); + if (dbType == QSqlDriver::MySqlServer && defVal.startsWith('\'') && defVal.endsWith('\'')) { + qDebug() << "MariaDB 10.6 default string value is escaped:" << defVal; + defVal = defVal.mid(1, defVal.size() - 2); + } + QCOMPARE(defVal, QStringLiteral("defaultVal")); + } if (dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2) tablename = tablename.toUpper(); @@ -155,8 +163,9 @@ void tst_QSqlDriver::record() //check that we can't get records using incorrect tablename casing that's been quoted rec = db.driver()->record(db.driver()->escapeIdentifier(tablename,QSqlDriver::TableName)); - if (dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::SQLite || dbType == QSqlDriver::Sybase - || dbType == QSqlDriver::MSSqlServer || tst_Databases::isMSAccess(db)) + if (dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::SQLite + || dbType == QSqlDriver::Sybase || dbType == QSqlDriver::MSSqlServer + || tst_Databases::isMSAccess(db) || dbType == QSqlDriver::MimerSQL) QCOMPARE(rec.count(), 5); //mysql, sqlite and tds will match else QCOMPARE(rec.count(), 0); @@ -169,7 +178,7 @@ void tst_QSqlDriver::primaryIndex() QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); - QString tablename(qTableName("relTEST1", __FILE__, db)); + QString tablename(qTableName("relTEST1", __FILE__, db, false)); //check that we can get primary index using unquoted mixed case table name QSqlIndex index = db.driver()->primaryIndex(tablename); QCOMPARE(index.count(), 1); @@ -205,22 +214,23 @@ void tst_QSqlDriver::primaryIndex() tablename = tablename.toUpper(); index = db.driver()->primaryIndex(db.driver()->escapeIdentifier(tablename, QSqlDriver::TableName)); - if (dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::SQLite || dbType == QSqlDriver::Sybase - || dbType == QSqlDriver::MSSqlServer || tst_Databases::isMSAccess(db)) + if (dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::SQLite + || dbType == QSqlDriver::Sybase || dbType == QSqlDriver::MSSqlServer + || tst_Databases::isMSAccess(db) || dbType == QSqlDriver::MimerSQL) QCOMPARE(index.count(), 1); //mysql will always find the table name regardless of casing else QCOMPARE(index.count(), 0); // Test getting a primary index for a table with a clob in it - QTBUG-64427 if (dbType == QSqlDriver::Oracle) { - const QString clobTable(qTableName("clobTable", __FILE__, db)); + TableScope ts(db, "clobTable", __FILE__); QSqlQuery qry(db); - QVERIFY_SQL(qry, exec("CREATE TABLE " + clobTable + " (id INTEGER, clobField CLOB)")); - QVERIFY_SQL(qry, exec("CREATE UNIQUE INDEX " + clobTable + "IDX ON " + clobTable + " (id)")); - QVERIFY_SQL(qry, exec("ALTER TABLE " + clobTable + " ADD CONSTRAINT " + clobTable + + QVERIFY_SQL(qry, exec("CREATE TABLE " + ts.tableName() + " (id INTEGER, clobField CLOB)")); + QVERIFY_SQL(qry, exec("CREATE UNIQUE INDEX " + ts.tableName() + "IDX ON " + ts.tableName() + " (id)")); + QVERIFY_SQL(qry, exec("ALTER TABLE " + ts.tableName() + " ADD CONSTRAINT " + ts.tableName() + "PK PRIMARY KEY(id)")); - QVERIFY_SQL(qry, exec("ALTER TABLE " + clobTable + " MODIFY (id NOT NULL ENABLE)")); - const QSqlIndex primaryIndex = db.driver()->primaryIndex(clobTable); + QVERIFY_SQL(qry, exec("ALTER TABLE " + ts.tableName() + " MODIFY (id NOT NULL ENABLE)")); + const QSqlIndex primaryIndex = db.driver()->primaryIndex(ts.tableName()); QCOMPARE(primaryIndex.count(), 1); QCOMPARE(primaryIndex.fieldName(0), QStringLiteral("ID")); } |