summaryrefslogtreecommitdiffstats
path: root/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp')
-rw-r--r--tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp1494
1 files changed, 0 insertions, 1494 deletions
diff --git a/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp b/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
deleted file mode 100644
index 5f1a6211aa..0000000000
--- a/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
+++ /dev/null
@@ -1,1494 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QtTest/QtTest>
-#include <QtSql/QtSql>
-
-#include "../qsqldatabase/tst_databases.h"
-
-const QString reltest1(qTableName("reltest1", __FILE__)),
- reltest2(qTableName("reltest2", __FILE__)),
- reltest3(qTableName("reltest3", __FILE__)),
- reltest4(qTableName("reltest4", __FILE__)),
- reltest5(qTableName("reltest5", __FILE__));
-
-
-//TESTED_CLASS=
-//TESTED_FILES=
-
-class tst_QSqlRelationalTableModel : public QObject
-{
- Q_OBJECT
-
-public:
- void recreateTestTables(QSqlDatabase);
-
- tst_Databases dbs;
-
-public slots:
- void initTestCase_data();
- void initTestCase();
- void cleanupTestCase();
- void init();
- void cleanup();
-
-private slots:
- void data();
- void setData();
- void multipleRelation();
- void insertRecord();
- void setRecord();
- void insertWithStrategies();
- void removeColumn();
- void filter();
- void sort();
- void revert();
-
- void clearDisplayValuesCache();
- void insertRecordDuplicateFieldNames();
- void invalidData();
- void relationModel();
- void casing();
- void escapedRelations();
- void escapedTableName();
- void whiteSpaceInIdentifiers();
- void psqlSchemaTest();
- void selectAfterUpdate();
-
-private:
- void dropTestTables( QSqlDatabase db );
-};
-
-
-void tst_QSqlRelationalTableModel::initTestCase_data()
-{
- dbs.open();
- if (dbs.fillTestTable() == 0) {
- qWarning("NO DATABASES");
- QSKIP("No database drivers are available in this Qt configuration", SkipAll);
- }
-}
-
-void tst_QSqlRelationalTableModel::recreateTestTables(QSqlDatabase db)
-{
- dropTestTables(db);
-
- QSqlQuery q(db);
- QVERIFY_SQL( q, exec("create table " + reltest1 +
- " (id int not null primary key, name varchar(20), title_key int, another_title_key int)"));
- QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(1, 'harry', 1, 2)"));
- QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(2, 'trond', 2, 1)"));
- QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(3, 'vohi', 1, 2)"));
- QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(4, 'boris', 2, 2)"));
- QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(5, 'nat', NULL, NULL)"));
- QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(6, 'ale', NULL, 2)"));
-
- QVERIFY_SQL( q, exec("create table " + reltest2 + " (tid int not null primary key, title varchar(20))"));
- QVERIFY_SQL( q, exec("insert into " + reltest2 + " values(1, 'herr')"));
- QVERIFY_SQL( q, exec("insert into " + reltest2 + " values(2, 'mister')"));
-
- QVERIFY_SQL( q, exec("create table " + reltest3 + " (id int not null primary key, name varchar(20), city_key int)"));
- QVERIFY_SQL( q, exec("insert into " + reltest3 + " values(1, 'Gustav', 1)"));
- QVERIFY_SQL( q, exec("insert into " + reltest3 + " values(2, 'Heidi', 2)"));
-
- QVERIFY_SQL( q, exec("create table " + reltest4 + " (id int not null primary key, name varchar(20))"));
- QVERIFY_SQL( q, exec("insert into " + reltest4 + " values(1, 'Oslo')"));
- QVERIFY_SQL( q, exec("insert into " + reltest4 + " values(2, 'Trondheim')"));
-
- QVERIFY_SQL( q, exec("create table " + reltest5 + " (title varchar(20) not null primary key, abbrev varchar(20))"));
- QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('herr', 'Hr')"));
- QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('mister', 'Mr')"));
-
- if (testWhiteSpaceNames(db.driverName())) {
- QString reltest6 = db.driver()->escapeIdentifier(qTableName("rel", __FILE__)+" test6", QSqlDriver::TableName);
- 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__)+" test7", QSqlDriver::TableName);
- 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')"));
- }
-}
-
-void tst_QSqlRelationalTableModel::initTestCase()
-{
- foreach (const QString &dbname, dbs.dbNames) {
- QSqlDatabase db=QSqlDatabase::database(dbname);
- if (db.driverName().startsWith("QIBASE"))
- db.exec("SET DIALECT 3");
- else if (tst_Databases::isSqlServer(db)) {
- db.exec("SET ANSI_DEFAULTS ON");
- db.exec("SET IMPLICIT_TRANSACTIONS OFF");
- }
- else if(tst_Databases::isPostgreSQL(db))
- db.exec("set client_min_messages='warning'");
- recreateTestTables(db);
- }
-}
-
-void tst_QSqlRelationalTableModel::cleanupTestCase()
-{
- foreach (const QString &dbName, dbs.dbNames) {
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE( db );
- dropTestTables( QSqlDatabase::database(dbName) );
- }
- dbs.close();
-}
-
-void tst_QSqlRelationalTableModel::dropTestTables( QSqlDatabase db )
-{
- QStringList tableNames;
- tableNames << reltest1
- << reltest2
- << reltest3
- << reltest4
- << reltest5
- << (qTableName( "rel", __FILE__)+" test6")
- << (qTableName( "rel", __FILE__)+" test7")
- << qTableName("CASETEST1", db.driver() )
- << qTableName("casetest1", db.driver() );
- tst_Databases::safeDropTables( db, tableNames );
-
- db.exec("DROP SCHEMA "+qTableName("QTBUG_5373", __FILE__)+" CASCADE");
- db.exec("DROP SCHEMA "+qTableName("QTBUG_5373_s2", __FILE__)+" CASCADE");
-}
-
-void tst_QSqlRelationalTableModel::init()
-{
-}
-
-void tst_QSqlRelationalTableModel::cleanup()
-{
-}
-
-void tst_QSqlRelationalTableModel::data()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.columnCount(), 4);
- 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"));
-
- //try a non-existent index
- QVERIFY2(model.data(model.index(0,4)).isValid() == false,"Invalid index returned valid QVariant");
-
- // check row with null relation: they are reported only in LeftJoin mode
- QCOMPARE(model.rowCount(), 4);
-
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(4, 0)).toInt(), 5);
- QCOMPARE(model.data(model.index(4, 1)).toString(), QString("nat"));
- QVERIFY2(model.data(model.index(4, 2)).isValid() == true, "NULL relation reported with invalid QVariant");
-
- //check data retrieval when relational key is a non-integer type
- //in this case a string
- QSqlRelationalTableModel model2(0,db);
- model2.setTable(reltest2);
- model2.setRelation(1, QSqlRelation(reltest5,"title","abbrev"));
- QVERIFY_SQL(model2, select());
-
- QCOMPARE(model2.data(model2.index(0, 1)).toString(), QString("Hr"));
- QCOMPARE(model2.data(model2.index(1, 1)).toString(), QString("Mr"));
-}
-
-void tst_QSqlRelationalTableModel::setData()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- // set the values using OnRowChange Strategy
- {
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setSort(0, Qt::AscendingOrder);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- QVERIFY_SQL(model, select());
-
- QVERIFY(model.setData(model.index(0, 1), QString("harry2")));
- QVERIFY(model.setData(model.index(0, 2), 2));
-
- QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry2"));
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
-
- model.submit();
-
- QVERIFY(model.setData(model.index(3,1), QString("boris2")));
- QVERIFY(model.setData(model.index(3, 2), 1));
-
- QCOMPARE(model.data(model.index(3,1)).toString(), QString("boris2"));
- QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr"));
-
- model.submit();
- }
- { //verify values
- QSqlRelationalTableModel model(0, db);
- model.setTable(reltest1);
- model.setSort(0, Qt::AscendingOrder);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry2"));
- QCOMPARE(model.data(model.index(0, 2)).toInt(), 2);
- QCOMPARE(model.data(model.index(3, 1)).toString(), QString("boris2"));
- QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
-
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- QVERIFY_SQL(model, select());
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
- QCOMPARE(model.data(model.index(3,2)).toString(), QString("herr"));
-
- }
-
- //set the values using OnFieldChange strategy
- {
- QSqlRelationalTableModel model(0, db);
- model.setTable(reltest1);
- model.setEditStrategy(QSqlTableModel::OnFieldChange);
- model.setSort(0, Qt::AscendingOrder);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- QVERIFY_SQL(model, select());
-
- QVERIFY(model.setData(model.index(1,1), QString("trond2")));
- QVERIFY(model.setData(model.index(2,2), 2));
-
- QCOMPARE(model.data(model.index(1,1)).toString(), QString("trond2"));
- QCOMPARE(model.data(model.index(2,2)).toString(), QString("mister"));
- }
- { //verify values
- QSqlRelationalTableModel model(0, db);
- model.setTable(reltest1);
- model.setSort(0, Qt::AscendingOrder);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond2"));
- QCOMPARE(model.data(model.index(2, 2)).toInt(), 2);
-
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- QVERIFY_SQL(model, select());
- QCOMPARE(model.data(model.index(2, 2)).toString(), QString("mister"));
- }
-
- //set values using OnManualSubmit strategy
- {
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
-
- //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"))
- model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
-
- model.setEditStrategy(QSqlTableModel::OnManualSubmit);
- model.setSort(0, Qt::AscendingOrder);
- QVERIFY_SQL(model, select());
-
- QVERIFY(model.setData(model.index(2, 1), QString("vohi2")));
- QVERIFY(model.setData(model.index(3, 2), 1));
- QVERIFY(model.setData(model.index(0, 3), 1));
-
- 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"))
- QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr"));
- else
- QCOMPARE(model.data(model.index(0, 3)).toInt(), 1);
-
- QVERIFY_SQL(model, submitAll());
- }
- { //verify values
- QSqlRelationalTableModel model(0, db);
- model.setTable(reltest1);
- model.setSort(0, Qt::AscendingOrder);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi2"));
- QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
- QCOMPARE(model.data(model.index(0, 3)).toInt(), 1);
-
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- if (!db.driverName().startsWith("QTDS"))
- 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"))
- QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr"));
- else
- QCOMPARE(model.data(model.index(0, 3)).toInt(), 1);
- }
-
- //check setting of data when the relational key is a non-integer type
- //in this case a string.
- {
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest2);
- model.setRelation(1, QSqlRelation(reltest5, "title", "abbrev"));
- model.setEditStrategy(QSqlTableModel::OnManualSubmit);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(0,1)).toString(), QString("Hr"));
- QVERIFY(model.setData(model.index(0,1), QString("mister")));
- QCOMPARE(model.data(model.index(0,1)).toString(), QString("Mr"));
- QVERIFY_SQL(model, submitAll());
-
- QCOMPARE(model.data(model.index(0,1)).toString(), QString("Mr"));
- }
-
- // Redo same tests, with a LeftJoin
- {
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest2);
- model.setRelation(1, QSqlRelation(reltest5, "title", "abbrev"));
- model.setEditStrategy(QSqlTableModel::OnManualSubmit);
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(0,1)).toString(), QString("Mr"));
- QVERIFY(model.setData(model.index(0,1), QString("herr")));
- QCOMPARE(model.data(model.index(0,1)).toString(), QString("Hr"));
- QVERIFY_SQL(model, submitAll());
-
- QCOMPARE(model.data(model.index(0,1)).toString(), QString("Hr"));
- }
-
-}
-
-void tst_QSqlRelationalTableModel::multipleRelation()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
- recreateTestTables(db);
-
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- model.setRelation(3, QSqlRelation(reltest4, "id", "name"));
- model.setSort(0, Qt::AscendingOrder);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(2, 0)).toInt(), 3);
-
- 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"));
- QCOMPARE(model.data(model.index(0, 3)).toString(), QString("Trondheim"));
-
- // Redo same test in the LeftJoin mode
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- model.setRelation(3, QSqlRelation(reltest4, "id", "name"));
- model.setSort(0, Qt::AscendingOrder);
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(2, 0)).toInt(), 3);
-
- 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"));
- QCOMPARE(model.data(model.index(0, 3)).toString(), QString("Trondheim"));
-}
-
-void tst_QSqlRelationalTableModel::insertRecord()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- model.setSort(0, Qt::AscendingOrder);
- QVERIFY_SQL(model, select());
-
- QSqlRecord rec;
- QSqlField f1("id", QVariant::Int);
- QSqlField f2("name", QVariant::String);
- QSqlField f3("title_key", QVariant::Int);
- QSqlField f4("another_title_key", QVariant::Int);
-
- f1.setValue(7);
- f2.setValue("test");
- f3.setValue(1);
- f4.setValue(2);
-
- f1.setGenerated(true);
- f2.setGenerated(true);
- f3.setGenerated(true);
- f4.setGenerated(true);
-
- rec.append(f1);
- rec.append(f2);
- rec.append(f3);
- rec.append(f4);
-
- QVERIFY_SQL(model, insertRecord(-1, rec));
-
- QCOMPARE(model.data(model.index(4, 0)).toInt(), 7);
- QCOMPARE(model.data(model.index(4, 1)).toString(), QString("test"));
- QCOMPARE(model.data(model.index(4, 2)).toString(), QString("herr"));
-
- // In LeftJoin mode, two additional rows are fetched
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(6, 0)).toInt(), 7);
- QCOMPARE(model.data(model.index(6, 1)).toString(), QString("test"));
- QCOMPARE(model.data(model.index(6, 2)).toString(), QString("herr"));
-}
-
-void tst_QSqlRelationalTableModel::setRecord()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
- recreateTestTables(db);
-
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- model.setSort(0, Qt::AscendingOrder);
- QVERIFY_SQL(model, select());
-
- QSqlRecord rec;
- QSqlField f1("id", QVariant::Int);
- QSqlField f2("name", QVariant::String);
- QSqlField f3("title_key", QVariant::Int);
- QSqlField f4("another_title_key", QVariant::Int);
-
- f1.setValue(7);
- f2.setValue("tester");
- f3.setValue(1);
- f4.setValue(2);
-
- f1.setGenerated(true);
- f2.setGenerated(true);
- f3.setGenerated(true);
- f4.setGenerated(true);
-
- rec.append(f1);
- rec.append(f2);
- rec.append(f3);
- rec.append(f4);
-
- QCOMPARE(model.data(model.index(1, 0)).toInt(), 2);
- QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond"));
- QCOMPARE(model.data(model.index(1, 2)).toString(), QString("mister"));
-
- QVERIFY_SQL(model, setRecord(1, rec));
-
- QCOMPARE(model.data(model.index(1, 0)).toInt(), 7);
- QCOMPARE(model.data(model.index(1, 1)).toString(), QString("tester"));
- QCOMPARE(model.data(model.index(1, 2)).toString(), QString("herr"));
-
- model.setSort(0, Qt::AscendingOrder);
- QVERIFY_SQL(model, submit());
-
- QCOMPARE(model.data(model.index(3, 0)).toInt(), 7);
- QCOMPARE(model.data(model.index(3, 1)).toString(), QString("tester"));
- QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr"));
-
-}
-
-void tst_QSqlRelationalTableModel::insertWithStrategies()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- model.setSort(0, Qt::AscendingOrder);
-
- if (!db.driverName().startsWith("QTDS"))
- 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"))
- QCOMPARE(model.data(model.index(0,3)).toString(), QString("mister"));
- else
- QCOMPARE(model.data(model.index(0,3)).toInt(), 2);
-
- model.insertRows(0, 1);
- model.setData(model.index(0, 0), 1011);
- model.setData(model.index(0, 1), "test");
- model.setData(model.index(0, 2), 2);
- model.setData(model.index(0, 3), 1);
-
- 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"))
- QCOMPARE(model.data(model.index(0,3)).toString(), QString("herr"));
- else
- QCOMPARE(model.data(model.index(0,3)).toInt(), 1);
-
- 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"))
- QCOMPARE(model.data(model.index(1,3)).toString(), QString("mister"));
- else
- QCOMPARE(model.data(model.index(1,3)).toInt(), 2);
-
-
-
- QVERIFY_SQL(model, submitAll());
-
- model.setEditStrategy(QSqlTableModel::OnManualSubmit);
-
- 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")) {
- 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"));
- } else {
- QCOMPARE(model.data(model.index(0,3)).toInt(), 2);
- model.setData(model.index(0,3),1);
- QCOMPARE(model.data(model.index(0,3)).toInt(), 1);
- }
-
- model.insertRows(0, 2);
- model.setData(model.index(0, 0), 1012);
- model.setData(model.index(0, 1), "george");
- model.setData(model.index(0, 2), 2);
- model.setData(model.index(0, 3), 2);
-
- model.setData(model.index(1, 0), 1013);
- model.setData(model.index(1, 1), "kramer");
- model.setData(model.index(1, 2), 2);
- model.setData(model.index(1, 3), 1);
-
- 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"))
- QCOMPARE(model.data(model.index(0,3)).toString(), QString("mister"));
- else
- QCOMPARE(model.data(model.index(0,3)).toInt(), 2);
-
-
- 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"))
- QCOMPARE(model.data(model.index(1,3)).toString(), QString("herr"));
- else
- QCOMPARE(model.data(model.index(1,3)).toInt(), 1);
-
- 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"))
- QCOMPARE(model.data(model.index(2,3)).toString(), QString("herr"));
- else
- QCOMPARE(model.data(model.index(2,3)).toInt(), 1);
-
- QVERIFY_SQL(model, submitAll());
-}
-
-void tst_QSqlRelationalTableModel::removeColumn()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
- recreateTestTables(db);
-
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- QVERIFY_SQL(model, select());
-
- QVERIFY_SQL(model, removeColumn(3));
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.columnCount(), 3);
-
- 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"));
- QCOMPARE(model.data(model.index(0, 3)), QVariant());
-
- // try removing more than one column
- QVERIFY_SQL(model, removeColumns(1, 2));
- QCOMPARE(model.columnCount(), 1);
- QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
- QCOMPARE(model.data(model.index(0, 1)), QVariant());
-
- // try in LeftJoin mode the same tests
- CHECK_DATABASE(db);
- recreateTestTables(db);
-
- QSqlRelationalTableModel lmodel(0, db);
-
- lmodel.setTable(reltest1);
- lmodel.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- lmodel.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(lmodel, select());
-
- QVERIFY_SQL(lmodel, removeColumn(3));
- QVERIFY_SQL(lmodel, select());
-
- QCOMPARE(lmodel.columnCount(), 3);
-
- QCOMPARE(lmodel.data(lmodel.index(0, 0)).toInt(), 1);
- QCOMPARE(lmodel.data(lmodel.index(0, 1)).toString(), QString("harry"));
- QCOMPARE(lmodel.data(lmodel.index(0, 2)).toString(), QString("herr"));
- QCOMPARE(lmodel.data(lmodel.index(0, 3)), QVariant());
-
- // try removing more than one column
- QVERIFY_SQL(lmodel, removeColumns(1, 2));
- QCOMPARE(lmodel.columnCount(), 1);
- QCOMPARE(lmodel.data(lmodel.index(0, 0)).toInt(), 1);
- QCOMPARE(lmodel.data(lmodel.index(0, 1)), QVariant());
-}
-
-void tst_QSqlRelationalTableModel::filter()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
- recreateTestTables(db);
-
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- model.setFilter("title = 'herr'");
-
- QVERIFY_SQL(model, select());
- QCOMPARE(model.rowCount(), 2);
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
- QCOMPARE(model.data(model.index(1, 2)).toString(), QString("herr"));
-
- // Redo same filter test in LeftJoin mode
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model,select());
-
- QCOMPARE(model.rowCount(), 2);
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
- QCOMPARE(model.data(model.index(1, 2)).toString(), QString("herr"));
-}
-
-void tst_QSqlRelationalTableModel::sort()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- if (!db.driverName().startsWith("QTDS"))
- model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
-
- model.setSort(2, Qt::DescendingOrder);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.rowCount(), 4);
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
- QCOMPARE(model.data(model.index(1, 2)).toString(), QString("mister"));
- QCOMPARE(model.data(model.index(2, 2)).toString(), QString("herr"));
- QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr"));
-
-
- model.setSort(3, Qt::AscendingOrder);
- QVERIFY_SQL(model, select());
-
- if (!db.driverName().startsWith("QTDS")) {
- QCOMPARE(model.rowCount(), 4);
- QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr"));
- QCOMPARE(model.data(model.index(1, 3)).toString(), QString("mister"));
- QCOMPARE(model.data(model.index(2, 3)).toString(), QString("mister"));
- QCOMPARE(model.data(model.index(3, 3)).toString(), QString("mister"));
- } else {
- QCOMPARE(model.data(model.index(0, 3)).toInt(), 1);
- QCOMPARE(model.data(model.index(1, 3)).toInt(), 2);
- QCOMPARE(model.data(model.index(2, 3)).toInt(), 2);
- QCOMPARE(model.data(model.index(3, 3)).toInt(), 2);
- }
-
- // redo same test in LeftJoin mode
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- model.setSort(2, Qt::DescendingOrder);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.rowCount(), 6);
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
- QCOMPARE(model.data(model.index(1, 2)).toString(), QString("mister"));
- QCOMPARE(model.data(model.index(2, 2)).toString(), QString("herr"));
- QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr"));
- QCOMPARE(model.data(model.index(4, 2)).toString(), QString(""));
- QCOMPARE(model.data(model.index(5, 2)).toString(), QString(""));
-
- model.setSort(3, Qt::AscendingOrder);
- QVERIFY_SQL(model, select());
-
- if (!db.driverName().startsWith("QTDS")) {
- QCOMPARE(model.rowCount(), 6);
- QCOMPARE(model.data(model.index(0, 3)).toString(), QString(""));
- QCOMPARE(model.data(model.index(1, 3)).toString(), QString("herr"));
- QCOMPARE(model.data(model.index(2, 3)).toString(), QString("mister"));
- QCOMPARE(model.data(model.index(3, 3)).toString(), QString("mister"));
- QCOMPARE(model.data(model.index(4, 3)).toString(), QString("mister"));
- QCOMPARE(model.data(model.index(5, 3)).toString(), QString("mister"));
- } else {
- QCOMPARE(model.data(model.index(0, 3)).toInt(), 1);
- QCOMPARE(model.data(model.index(1, 3)).toInt(), 2);
- QCOMPARE(model.data(model.index(2, 3)).toInt(), 2);
- QCOMPARE(model.data(model.index(3, 3)).toInt(), 2);
- }
-}
-
-static void testRevert(QSqlRelationalTableModel &model)
-{
- /* revert single row */
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
- QVERIFY(model.setData(model.index(0, 2), 2, Qt::EditRole));
-
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
- model.revertRow(0);
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
-
- /* revert all */
- QVERIFY(model.setData(model.index(0, 2), 2, Qt::EditRole));
-
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
- model.revertAll();
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
-
- // the following only works for OnManualSubmit
- if (model.editStrategy() != QSqlTableModel::OnManualSubmit)
- return;
-
- /* revert inserted rows */
- int initialRowCount = model.rowCount();
- QVERIFY(model.insertRows(4, 4));
- QVERIFY(model.rowCount() == (initialRowCount + 4));
-
- /* make sure the new rows are initialized to nothing */
- QVERIFY(model.data(model.index(4, 2)).toString().isEmpty());
- QVERIFY(model.data(model.index(5, 2)).toString().isEmpty());
- QVERIFY(model.data(model.index(6, 2)).toString().isEmpty());
- QVERIFY(model.data(model.index(7, 2)).toString().isEmpty());
-
- /* Set some values */
- QVERIFY(model.setData(model.index(4, 0), 42, Qt::EditRole));
- QVERIFY(model.setData(model.index(5, 0), 43, Qt::EditRole));
- QVERIFY(model.setData(model.index(6, 0), 44, Qt::EditRole));
- QVERIFY(model.setData(model.index(7, 0), 45, Qt::EditRole));
-
- QVERIFY(model.setData(model.index(4, 2), 2, Qt::EditRole));
- QVERIFY(model.setData(model.index(5, 2), 2, Qt::EditRole));
- QVERIFY(model.setData(model.index(6, 2), 1, Qt::EditRole));
- QVERIFY(model.setData(model.index(7, 2), 2, Qt::EditRole));
-
- /* Now revert the newly inserted rows */
- model.revertAll();
- QVERIFY(model.rowCount() == initialRowCount);
-
- /* Insert rows again */
- QVERIFY(model.insertRows(4, 4));
-
- /* make sure the new rows are initialized to nothing */
- QVERIFY(model.data(model.index(4, 2)).toString().isEmpty());
- QVERIFY(model.data(model.index(5, 2)).toString().isEmpty());
- QVERIFY(model.data(model.index(6, 2)).toString().isEmpty());
- QVERIFY(model.data(model.index(7, 2)).toString().isEmpty());
-}
-
-void tst_QSqlRelationalTableModel::revert()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- model.setRelation(3, QSqlRelation(reltest4, "id", "name"));
-
- model.setSort(0, Qt::AscendingOrder);
-
- QVERIFY_SQL(model, select());
- QCOMPARE(model.data(model.index(0, 0)).toString(), QString("1"));
-
- testRevert(model);
- if (QTest::currentTestFailed())
- return;
-
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model, select());
- testRevert(model);
-
- /* and again with OnManualSubmit */
- model.setJoinMode(QSqlRelationalTableModel::InnerJoin);
- QVERIFY_SQL(model, select());
- model.setEditStrategy(QSqlTableModel::OnManualSubmit);
- testRevert(model);
-
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model, select());
- model.setEditStrategy(QSqlTableModel::OnManualSubmit);
- testRevert(model);
-}
-
-void tst_QSqlRelationalTableModel::clearDisplayValuesCache()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
-
- if (!db.driverName().startsWith("QTDS"))
- model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
- model.setSort(1, Qt::AscendingOrder);
- model.setEditStrategy(QSqlTableModel::OnManualSubmit);
-
- QVERIFY_SQL(model, select());
-
- 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"))
- QCOMPARE(model.data(model.index(3, 3)).toString(), QString("mister"));
- else
- QCOMPARE(model.data(model.index(3, 3)).toInt(), 2 );
-
- model.insertRow(model.rowCount());
- QVERIFY(model.setData(model.index(4, 0), 7, Qt::EditRole));
- QVERIFY(model.setData(model.index(4, 1), "anders", Qt::EditRole));
- QVERIFY(model.setData(model.index(4, 2), 1, Qt::EditRole));
- QVERIFY(model.setData(model.index(4, 3), 1, Qt::EditRole));
- model.submitAll();
-
- 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"))
- QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr"));
- else
- QCOMPARE(model.data(model.index(0, 3)).toInt(), 1);
-
- 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"))
- QCOMPARE(model.data(model.index(4, 3)).toString(), QString("mister"));
- else
- QCOMPARE(model.data(model.index(4, 3)).toInt(), 2);
-}
-
-// For task 140782 and 176374: If the main table and the the related tables uses the same
-// name for a column or display column then insertRecord() would return true though it
-// actually failed.
-void tst_QSqlRelationalTableModel::insertRecordDuplicateFieldNames()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- QSqlRelationalTableModel model(0, db);
- model.setTable(reltest3);
- model.setEditStrategy(QSqlTableModel::OnManualSubmit);
- model.setSort(0, Qt::AscendingOrder);
-
- // Duplication of "name", used in both reltest3 and reltest4.
- model.setRelation(2, QSqlRelation(reltest4, "id", "name"));
- QVERIFY_SQL(model, select());
-
- if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
- QCOMPARE(model.record(1).value((reltest4+QLatin1String("_name_2")).toUpper()).toString(),
- QString("Trondheim"));
- } else {
- QCOMPARE(model.record(1).value((reltest4+QLatin1String("_name_2"))).toString(),
- QString("Trondheim"));
- }
-
- QSqlRecord rec = model.record();
- rec.setValue(0, 3);
- 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")) {
- QCOMPARE(rec.fieldName(0), QLatin1String("ID"));
- QCOMPARE(rec.fieldName(1), QLatin1String("NAME")); // This comes from main table
- } else {
- QCOMPARE(rec.fieldName(0), QLatin1String("id"));
- QCOMPARE(rec.fieldName(1), QLatin1String("name"));
- }
-
- // 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"))
- QCOMPARE(rec.fieldName(2), (reltest4+QLatin1String("_name_2")).toUpper());
- else
- QCOMPARE(rec.fieldName(2), reltest4+QLatin1String("_name_2"));
-
- QVERIFY(model.insertRecord(-1, rec));
- QCOMPARE(model.data(model.index(2, 2)).toString(), QString("Oslo"));
- QVERIFY(model.submitAll());
- QCOMPARE(model.data(model.index(2, 2)).toString(), QString("Oslo"));
-}
-
-void tst_QSqlRelationalTableModel::invalidData()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- QSqlRelationalTableModel model(0, db);
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- QVERIFY_SQL(model, select());
-
- //try set a non-existent relational key
- QVERIFY(model.setData(model.index(0, 2), 3) == false);
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
-
- //try to set data in non valid index
- QVERIFY(model.setData(model.index(0,10),5) == false);
-
- //same test with LeftJoin mode
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model, select());
-
- //try set a non-existent relational key
- QVERIFY(model.setData(model.index(0, 2), 3) == false);
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
-
- //try to set data in non valid index
- QVERIFY(model.setData(model.index(0,10),5) == false);
-}
-
-void tst_QSqlRelationalTableModel::relationModel()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- QSqlRelationalTableModel model(0, db);
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- QVERIFY_SQL(model, select());
-
- QVERIFY(model.relationModel(0) == NULL);
- QVERIFY(model.relationModel(1) == NULL);
- QVERIFY(model.relationModel(2) != NULL);
- QVERIFY(model.relationModel(3) == NULL);
- QVERIFY(model.relationModel(4) == NULL);
-
- model.setRelation(3, QSqlRelation(reltest4, "id", "name"));
- QVERIFY_SQL(model, select());
-
- QVERIFY(model.relationModel(0) == NULL);
- QVERIFY(model.relationModel(1) == NULL);
- QVERIFY(model.relationModel(2) != NULL);
- QVERIFY(model.relationModel(3) != NULL);
- QVERIFY(model.relationModel(4) == NULL);
-
- QSqlTableModel *rel_model = model.relationModel(2);
- QCOMPARE(rel_model->data(rel_model->index(0,1)).toString(), QString("herr"));
-
- //same test in JoinMode
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model, select());
-
- QVERIFY(model.relationModel(0) == NULL);
- QVERIFY(model.relationModel(1) == NULL);
- QVERIFY(model.relationModel(2) != NULL);
- QVERIFY(model.relationModel(3) != NULL);
- QVERIFY(model.relationModel(4) == NULL);
-
- QSqlTableModel *rel_model2 = model.relationModel(2);
- QCOMPARE(rel_model2->data(rel_model->index(0,1)).toString(), QString("herr"));
-}
-
-void tst_QSqlRelationalTableModel::casing()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- if (db.driverName().startsWith("QSQLITE") || db.driverName().startsWith("QIBASE") || tst_Databases::isSqlServer(db))
- QSKIP("The casing test for this database is irrelevant since this database does not treat different cases as separate entities", SkipAll);
-
- QSqlQuery q(db);
- QVERIFY_SQL( q, exec("create table " + qTableName("CASETEST1", db.driver()).toUpper() +
- " (id int not null primary key, name varchar(20), title_key int, another_title_key int)"));
-
- if( !q.exec("create table " + qTableName("casetest1", db.driver()) +
- " (ident int not null primary key, name varchar(20), title_key int)"))
- QSKIP("The casing test for this database is irrelevant since this database does not treat different cases as separate entities", SkipAll);
-
- QVERIFY_SQL( q, exec("insert into " + qTableName("CASETEST1", db.driver()).toUpper() + " values(1, 'harry', 1, 2)"));
- QVERIFY_SQL( q, exec("insert into " + qTableName("CASETEST1", db.driver()).toUpper() + " values(2, 'trond', 2, 1)"));
- QVERIFY_SQL( q, exec("insert into " + qTableName("CASETEST1", db.driver()).toUpper() + " values(3, 'vohi', 1, 2)"));
- QVERIFY_SQL( q, exec("insert into " + qTableName("CASETEST1", db.driver()).toUpper() + " values(4, 'boris', 2, 2)"));
- QVERIFY_SQL( q, exec("insert into " + qTableName("casetest1", db.driver()) + " values(1, 'jerry', 1)"));
- QVERIFY_SQL( q, exec("insert into " + qTableName("casetest1", db.driver()) + " values(2, 'george', 2)"));
- QVERIFY_SQL( q, exec("insert into " + qTableName("casetest1", db.driver()) + " values(4, 'kramer', 2)"));
-
- if (db.driverName().startsWith("QOCI")) {
- //try an owner that doesn't exist
- QSqlRecord rec = db.driver()->record("doug." + qTableName("CASETEST1", db.driver()).toUpper());
- QCOMPARE( rec.count(), 0);
-
- //try an owner that does exist
- rec = db.driver()->record(db.userName() + "." + qTableName("CASETEST1", db.driver()).toUpper());
- QCOMPARE( rec.count(), 4);
- }
- QSqlRecord rec = db.driver()->record(qTableName("CASETEST1", db.driver()).toUpper());
- QCOMPARE( rec.count(), 4);
-
- rec = db.driver()->record(qTableName("casetest1", db.driver()));
- QCOMPARE( rec.count(), 3);
-
- QSqlTableModel upperCaseModel(0, db);
- upperCaseModel.setTable(qTableName("CASETEST1", db.driver()).toUpper());
-
- QCOMPARE(upperCaseModel.tableName(),qTableName("CASETEST1",db.driver()).toUpper());
-
- QVERIFY_SQL(upperCaseModel, select());
-
- QCOMPARE(upperCaseModel.rowCount(), 4);
-
- QSqlTableModel lowerCaseModel(0, db);
- lowerCaseModel.setTable(qTableName("casetest1", db.driver()));
- QCOMPARE(lowerCaseModel.tableName(), qTableName("casetest1",db.driver()));
- QVERIFY_SQL(lowerCaseModel, select());
-
- QCOMPARE(lowerCaseModel.rowCount(), 3);
-
- QSqlRelationalTableModel model(0, db);
- model.setTable(qTableName("CASETEST1", db.driver()).toUpper());
- model.setRelation(2, 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"));
-}
-
-void tst_QSqlRelationalTableModel::escapedRelations()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(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")) {
- model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(reltest2.toUpper(),QSqlDriver::TableName),
- "tid",
- "title"));
- } else {
- model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(reltest2,QSqlDriver::TableName),
- "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"));
-
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- 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"));
-
- //try with index column quoted
- model.setJoinMode(QSqlRelationalTableModel::InnerJoin);
- if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
- model.setRelation(2, QSqlRelation(reltest2,
- db.driver()->escapeIdentifier("tid", QSqlDriver::FieldName).toUpper(),
- "title"));
- } else {
- model.setRelation(2, QSqlRelation(reltest2,
- db.driver()->escapeIdentifier("tid", QSqlDriver::FieldName),
- "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"));
-
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- 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"));
-
- //try with display column quoted
- model.setJoinMode(QSqlRelationalTableModel::InnerJoin);
- if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
-
- model.setRelation(2, QSqlRelation(reltest2,
- "tid",
- db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper()));
- } else {
- model.setRelation(2, QSqlRelation(reltest2,
- "tid",
- db.driver()->escapeIdentifier("title", QSqlDriver::FieldName)));
- }
-
- 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"));
-
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- 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"));
-
- //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")) {
- model.setRelation(2, QSqlRelation(reltest2,
- "tid",
- db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper()));
- } else {
- model.setRelation(2, QSqlRelation(reltest2,
- "tid",
- db.driver()->escapeIdentifier("title", QSqlDriver::FieldName)));
- }
- 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"));
-
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- 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"));
-}
-
-void tst_QSqlRelationalTableModel::escapedTableName()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(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")) {
- model.setTable(db.driver()->escapeIdentifier(reltest1.toUpper(), QSqlDriver::TableName));
- } else {
- model.setTable(db.driver()->escapeIdentifier(reltest1, QSqlDriver::TableName));
- }
- model.setSort(0, Qt::AscendingOrder);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- QVERIFY_SQL(model, select());
-
- QVERIFY(model.setData(model.index(0, 1), QString("harry2")));
- QVERIFY(model.setData(model.index(0, 2), 2));
-
- QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry2"));
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
-
- model.submit();
-
- QVERIFY(model.setData(model.index(3,1), QString("boris2")));
- QVERIFY(model.setData(model.index(3, 2), 1));
-
- QCOMPARE(model.data(model.index(3,1)).toString(), QString("boris2"));
- QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr"));
-
- model.submit();
- }
- { //verify values
- QSqlRelationalTableModel model(0, db);
- model.setTable(reltest1);
- model.setSort(0, Qt::AscendingOrder);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry2"));
- QCOMPARE(model.data(model.index(0, 2)).toInt(), 2);
- QCOMPARE(model.data(model.index(3, 1)).toString(), QString("boris2"));
- QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
-
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- QVERIFY_SQL(model, select());
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
- QCOMPARE(model.data(model.index(3,2)).toString(), QString("herr"));
-
- }
-
- //ok, now do same test with LeftJoin
- {
- QSqlRelationalTableModel model(0, db);
-
- if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
- model.setTable(db.driver()->escapeIdentifier(reltest1.toUpper(), QSqlDriver::TableName));
- } else {
- model.setTable(db.driver()->escapeIdentifier(reltest1, QSqlDriver::TableName));
- }
- model.setSort(0, Qt::AscendingOrder);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model, select());
-
- QVERIFY(model.setData(model.index(0, 1), QString("harry2")));
- QVERIFY(model.setData(model.index(0, 2), 2));
-
- QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry2"));
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
-
- model.submit();
-
- QVERIFY(model.setData(model.index(3,1), QString("boris2")));
- QVERIFY(model.setData(model.index(3, 2), 1));
-
- QCOMPARE(model.data(model.index(3,1)).toString(), QString("boris2"));
- QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr"));
-
- model.submit();
- }
- { //verify values
- QSqlRelationalTableModel model(0, db);
- model.setTable(reltest1);
- model.setSort(0, Qt::AscendingOrder);
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry2"));
- QCOMPARE(model.data(model.index(0, 2)).toInt(), 2);
- QCOMPARE(model.data(model.index(3, 1)).toString(), QString("boris2"));
- QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
-
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- QVERIFY_SQL(model, select());
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
- QCOMPARE(model.data(model.index(3,2)).toString(), QString("herr"));
-
- }
-}
-
-void tst_QSqlRelationalTableModel::whiteSpaceInIdentifiers()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- if (!testWhiteSpaceNames(db.driverName()))
- QSKIP("White space test irrelevant for driver", SkipAll);
- QSqlRelationalTableModel model(0, db);
- model.setTable(db.driver()->escapeIdentifier(qTableName("rel", __FILE__)+" test6", QSqlDriver::TableName));
- model.setSort(0, Qt::DescendingOrder);
- model.setRelation(1, QSqlRelation(db.driver()->escapeIdentifier(qTableName("rel", __FILE__)+" test7", QSqlDriver::TableName),
- db.driver()->escapeIdentifier("city id", QSqlDriver::FieldName),
- db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName)));
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(0,1)).toString(), QString("Washington"));
- QCOMPARE(model.data(model.index(1,1)).toString(), QString("New York"));
-
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.data(model.index(0,1)).toString(), QString("Washington"));
- QCOMPARE(model.data(model.index(1,1)).toString(), QString("New York"));
-
- model.setJoinMode(QSqlRelationalTableModel::InnerJoin);
- QVERIFY_SQL(model, select());
-
- QSqlRecord rec;
- QSqlField f1("id", QVariant::Int);
- QSqlField f2(db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName), QVariant::Int);
- QSqlField f3(db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName), QVariant::Int);
-
- f1.setValue(3);
- f2.setValue(2);
- f3.setValue(7);
-
- f1.setGenerated(true);
- f2.setGenerated(true);
- f3.setGenerated(true);
-
- rec.append(f1);
- rec.append(f2);
- rec.append(f3);
-
- QVERIFY_SQL(model, insertRecord(-1, rec));
- model.submitAll();
-
- QCOMPARE(model.data(model.index(0, 0)).toInt(), 3);
- QCOMPARE(model.data(model.index(0, 1)).toString(), QString("Washington"));
- QCOMPARE(model.data(model.index(0, 2)).toInt(), 7);
-
- //TODO: For some reson setting a record using manual submit fails
- //model.setEditStrategy(QSqlTableModel::OnManualSubmit);
-
- QSqlRecord recNew;
- QSqlField f1New("id", QVariant::Int);
- QSqlField f2New(db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName), QVariant::Int);
- QSqlField f3New(db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName), QVariant::Int);
-
- f1New.setValue(4);
- f2New.setValue(1);
- f3New.setValue(6);
-
- f1New.setGenerated(true);
- f2New.setGenerated(true);
- f3New.setGenerated(true);
-
- recNew.append(f1New);
- recNew.append(f2New);
- recNew.append(f3New);
-
- QVERIFY_SQL(model, setRecord(0, recNew));
-
- QCOMPARE(model.data(model.index(0, 0)).toInt(), 4);
- QCOMPARE(model.data(model.index(0, 1)).toString(), QString("New York"));
- QCOMPARE(model.data(model.index(0, 2)).toInt(), 6);
-
- QVERIFY_SQL(model, submitAll());
- QCOMPARE(model.data(model.index(0, 0)).toInt(), 4);
- QCOMPARE(model.data(model.index(0, 1)).toString(), QString("New York"));
- QCOMPARE(model.data(model.index(0, 2)).toInt(), 6);
-}
-
-void tst_QSqlRelationalTableModel::psqlSchemaTest()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- if(!tst_Databases::isPostgreSQL(db)) {
- QSKIP("Postgresql specific test", SkipSingle);
- return;
- }
- QSqlRelationalTableModel model(0, db);
- QSqlQuery q(db);
- QVERIFY_SQL(q, exec("create schema "+qTableName("QTBUG_5373", __FILE__)));
- QVERIFY_SQL(q, exec("create schema "+qTableName("QTBUG_5373_s2", __FILE__)));
- QVERIFY_SQL(q, exec("create table "+qTableName("QTBUG_5373", __FILE__)+"."+qTableName("document", __FILE__)+"(document_id int primary key, relatingid int, userid int)"));
- QVERIFY_SQL(q, exec("create table "+qTableName("QTBUG_5373_s2", __FILE__)+"."+qTableName("user", __FILE__)+"(userid int primary key, username char(40))"));
- model.setTable(qTableName("QTBUG_5373", __FILE__)+"."+qTableName("document", __FILE__));
- model.setRelation(1, QSqlRelation(qTableName("QTBUG_5373_s2", __FILE__)+"."+qTableName("user", __FILE__), "userid", "username"));
- model.setRelation(2, QSqlRelation(qTableName("QTBUG_5373_s2", __FILE__)+"."+qTableName("user", __FILE__), "userid", "username"));
- QVERIFY_SQL(model, select());
-
- model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(model, select());
-}
-
-void tst_QSqlRelationalTableModel::selectAfterUpdate()
-{
- QFETCH_GLOBAL(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- QSqlRelationalTableModel model(0, db);
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
- QVERIFY_SQL(model, select());
- QVERIFY(model.relationModel(2)->rowCount() == 2);
- {
- QSqlQuery q(db);
- QVERIFY_SQL(q, exec("insert into " + reltest2 + " values(3, 'mrs')"));
- model.relationModel(2)->select();
- }
- QVERIFY(model.relationModel(2)->rowCount() == 3);
- QVERIFY(model.setData(model.index(0,2), 3));
- QVERIFY(model.submitAll());
- QCOMPARE(model.data(model.index(0,2)), QVariant("mrs"));
-}
-
-QTEST_MAIN(tst_QSqlRelationalTableModel)
-#include "tst_qsqlrelationaltablemodel.moc"