tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
changeset 19 fcece45ef507
parent 18 2f34d5167611
equal deleted inserted replaced
18:2f34d5167611 19:fcece45ef507
    43 #include <QtTest/QtTest>
    43 #include <QtTest/QtTest>
    44 #include <QtSql/QtSql>
    44 #include <QtSql/QtSql>
    45 
    45 
    46 #include "../qsqldatabase/tst_databases.h"
    46 #include "../qsqldatabase/tst_databases.h"
    47 
    47 
       
    48 const QString reltest1(qTableName("reltest1", __FILE__)),
       
    49         reltest2(qTableName("reltest2", __FILE__)),
       
    50         reltest3(qTableName("reltest3", __FILE__)),
       
    51         reltest4(qTableName("reltest4", __FILE__)),
       
    52         reltest5(qTableName("reltest5", __FILE__));
    48 
    53 
    49 
    54 
    50 //TESTED_CLASS=
    55 //TESTED_CLASS=
    51 //TESTED_FILES=
    56 //TESTED_FILES=
    52 
    57 
   105 void tst_QSqlRelationalTableModel::recreateTestTables(QSqlDatabase db)
   110 void tst_QSqlRelationalTableModel::recreateTestTables(QSqlDatabase db)
   106 {
   111 {
   107     dropTestTables(db);
   112     dropTestTables(db);
   108 
   113 
   109     QSqlQuery q(db);
   114     QSqlQuery q(db);
   110     QVERIFY_SQL( q, exec("create table " + qTableName("reltest1") +
   115     QVERIFY_SQL( q, exec("create table " + reltest1 +
   111             " (id int not null primary key, name varchar(20), title_key int, another_title_key int)"));
   116             " (id int not null primary key, name varchar(20), title_key int, another_title_key int)"));
   112     QVERIFY_SQL( q, exec("insert into " + qTableName("reltest1") + " values(1, 'harry', 1, 2)"));
   117     QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(1, 'harry', 1, 2)"));
   113     QVERIFY_SQL( q, exec("insert into " + qTableName("reltest1") + " values(2, 'trond', 2, 1)"));
   118     QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(2, 'trond', 2, 1)"));
   114     QVERIFY_SQL( q, exec("insert into " + qTableName("reltest1") + " values(3, 'vohi', 1, 2)"));
   119     QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(3, 'vohi', 1, 2)"));
   115     QVERIFY_SQL( q, exec("insert into " + qTableName("reltest1") + " values(4, 'boris', 2, 2)"));
   120     QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(4, 'boris', 2, 2)"));
   116 
   121 
   117     QVERIFY_SQL( q, exec("create table " + qTableName("reltest2") + " (tid int not null primary key, title varchar(20))"));
   122     QVERIFY_SQL( q, exec("create table " + reltest2 + " (tid int not null primary key, title varchar(20))"));
   118     QVERIFY_SQL( q, exec("insert into " + qTableName("reltest2") + " values(1, 'herr')"));
   123     QVERIFY_SQL( q, exec("insert into " + reltest2 + " values(1, 'herr')"));
   119     QVERIFY_SQL( q, exec("insert into " + qTableName("reltest2") + " values(2, 'mister')"));
   124     QVERIFY_SQL( q, exec("insert into " + reltest2 + " values(2, 'mister')"));
   120 
   125 
   121     QVERIFY_SQL( q, exec("create table " + qTableName("reltest3") + " (id int not null primary key, name varchar(20), city_key int)"));
   126     QVERIFY_SQL( q, exec("create table " + reltest3 + " (id int not null primary key, name varchar(20), city_key int)"));
   122     QVERIFY_SQL( q, exec("insert into " + qTableName("reltest3") + " values(1, 'Gustav', 1)"));
   127     QVERIFY_SQL( q, exec("insert into " + reltest3 + " values(1, 'Gustav', 1)"));
   123     QVERIFY_SQL( q, exec("insert into " + qTableName("reltest3") + " values(2, 'Heidi', 2)"));
   128     QVERIFY_SQL( q, exec("insert into " + reltest3 + " values(2, 'Heidi', 2)"));
   124 
   129 
   125     QVERIFY_SQL( q, exec("create table " + qTableName("reltest4") + " (id int not null primary key, name varchar(20))"));
   130     QVERIFY_SQL( q, exec("create table " + reltest4 + " (id int not null primary key, name varchar(20))"));
   126     QVERIFY_SQL( q, exec("insert into " + qTableName("reltest4") + " values(1, 'Oslo')"));
   131     QVERIFY_SQL( q, exec("insert into " + reltest4 + " values(1, 'Oslo')"));
   127     QVERIFY_SQL( q, exec("insert into " + qTableName("reltest4") + " values(2, 'Trondheim')"));
   132     QVERIFY_SQL( q, exec("insert into " + reltest4 + " values(2, 'Trondheim')"));
   128 
   133 
   129     QVERIFY_SQL( q, exec("create table " + qTableName("reltest5") + " (title varchar(20) not null primary key, abbrev varchar(20))"));
   134     QVERIFY_SQL( q, exec("create table " + reltest5 + " (title varchar(20) not null primary key, abbrev varchar(20))"));
   130     QVERIFY_SQL( q, exec("insert into " + qTableName("reltest5") + " values('herr', 'Hr')"));
   135     QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('herr', 'Hr')"));
   131     QVERIFY_SQL( q, exec("insert into " + qTableName("reltest5") + " values('mister', 'Mr')"));
   136     QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('mister', 'Mr')"));
   132 
   137 
   133     if (testWhiteSpaceNames(db.driverName())) {
   138     if (testWhiteSpaceNames(db.driverName())) {
   134         QString reltest6 = db.driver()->escapeIdentifier(qTableName("rel test6"), QSqlDriver::TableName);
   139         QString reltest6 = db.driver()->escapeIdentifier(qTableName("rel", __FILE__)+" test6", QSqlDriver::TableName);
   135         QVERIFY_SQL( q, exec("create table " + reltest6 + " (id int not null primary key, " + db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName) +
   140         QVERIFY_SQL( q, exec("create table " + reltest6 + " (id int not null primary key, " + db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName) +
   136                     " int, " + db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName) + " int)"));
   141                     " int, " + db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName) + " int)"));
   137         QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(1, 1,9)"));
   142         QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(1, 1,9)"));
   138         QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(2, 2,8)"));
   143         QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(2, 2,8)"));
   139 
   144 
   140         QString reltest7 = db.driver()->escapeIdentifier(qTableName("rel test7"), QSqlDriver::TableName);
   145         QString reltest7 = db.driver()->escapeIdentifier(qTableName("rel", __FILE__)+" test7", QSqlDriver::TableName);
   141         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))"));
   146         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))"));
   142         QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(1, 'New York')"));
   147         QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(1, 'New York')"));
   143         QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(2, 'Washington')"));
   148         QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(2, 'Washington')"));
   144     }
   149     }
   145 }
   150 }
   171 }
   176 }
   172 
   177 
   173 void tst_QSqlRelationalTableModel::dropTestTables( QSqlDatabase db )
   178 void tst_QSqlRelationalTableModel::dropTestTables( QSqlDatabase db )
   174 {
   179 {
   175     QStringList tableNames;
   180     QStringList tableNames;
   176     tableNames << qTableName( "reltest1" )
   181     tableNames << reltest1
   177             << qTableName( "reltest2" )
   182             << reltest2
   178             << qTableName( "reltest3" )
   183             << reltest3
   179             << qTableName( "reltest4" )
   184             << reltest4
   180             << qTableName( "reltest5" )
   185             << reltest5
   181             << qTableName( "rel test6" )
   186             << (qTableName( "rel", __FILE__)+" test6")
   182             << qTableName( "rel test7" )
   187             << (qTableName( "rel", __FILE__)+" test7")
   183             << qTableName("CASETEST1" )
   188             << qTableName("CASETEST1", db.driver() )
   184             << qTableName("casetest1" );
   189             << qTableName("casetest1", db.driver() );
   185     tst_Databases::safeDropTables( db, tableNames );
   190     tst_Databases::safeDropTables( db, tableNames );
   186 
   191 
   187     db.exec("DROP SCHEMA "+qTableName("QTBUG_5373")+" CASCADE");
   192     db.exec("DROP SCHEMA "+qTableName("QTBUG_5373", __FILE__)+" CASCADE");
   188     db.exec("DROP SCHEMA "+qTableName("QTBUG_5373_s2")+" CASCADE");
   193     db.exec("DROP SCHEMA "+qTableName("QTBUG_5373_s2", __FILE__)+" CASCADE");
   189 }
   194 }
   190 
   195 
   191 void tst_QSqlRelationalTableModel::init()
   196 void tst_QSqlRelationalTableModel::init()
   192 {
   197 {
   193 }
   198 }
   202     QSqlDatabase db = QSqlDatabase::database(dbName);
   207     QSqlDatabase db = QSqlDatabase::database(dbName);
   203     CHECK_DATABASE(db);
   208     CHECK_DATABASE(db);
   204 
   209 
   205     QSqlRelationalTableModel model(0, db);
   210     QSqlRelationalTableModel model(0, db);
   206 
   211 
   207     model.setTable(qTableName("reltest1"));
   212     model.setTable(reltest1);
   208     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   213     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   209     QVERIFY_SQL(model, select());
   214     QVERIFY_SQL(model, select());
   210 
   215 
   211     QCOMPARE(model.columnCount(), 4);
   216     QCOMPARE(model.columnCount(), 4);
   212     QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
   217     QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
   213     QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
   218     QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
   217     QVERIFY2(model.data(model.index(0,4)).isValid() == false,"Invalid index returned valid QVariant");
   222     QVERIFY2(model.data(model.index(0,4)).isValid() == false,"Invalid index returned valid QVariant");
   218 
   223 
   219     //check data retrieval when relational key is a non-integer type
   224     //check data retrieval when relational key is a non-integer type
   220     //in this case a string
   225     //in this case a string
   221     QSqlRelationalTableModel model2(0,db);
   226     QSqlRelationalTableModel model2(0,db);
   222     model2.setTable(qTableName("reltest2"));
   227     model2.setTable(reltest2);
   223     model2.setRelation(1, QSqlRelation(qTableName("reltest5"),"title","abbrev"));
   228     model2.setRelation(1, QSqlRelation(reltest5,"title","abbrev"));
   224     QVERIFY_SQL(model2, select());
   229     QVERIFY_SQL(model2, select());
   225 
   230 
   226     QCOMPARE(model2.data(model2.index(0, 1)).toString(), QString("Hr"));
   231     QCOMPARE(model2.data(model2.index(0, 1)).toString(), QString("Hr"));
   227     QCOMPARE(model2.data(model2.index(1, 1)).toString(), QString("Mr"));
   232     QCOMPARE(model2.data(model2.index(1, 1)).toString(), QString("Mr"));
   228 }
   233 }
   235 
   240 
   236     // set the values using OnRowChange Strategy
   241     // set the values using OnRowChange Strategy
   237     {
   242     {
   238         QSqlRelationalTableModel model(0, db);
   243         QSqlRelationalTableModel model(0, db);
   239 
   244 
   240         model.setTable(qTableName("reltest1"));
   245         model.setTable(reltest1);
   241         model.setSort(0, Qt::AscendingOrder);
   246         model.setSort(0, Qt::AscendingOrder);
   242         model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   247         model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   243         QVERIFY_SQL(model, select());
   248         QVERIFY_SQL(model, select());
   244 
   249 
   245         QVERIFY(model.setData(model.index(0, 1), QString("harry2")));
   250         QVERIFY(model.setData(model.index(0, 1), QString("harry2")));
   246         QVERIFY(model.setData(model.index(0, 2), 2));
   251         QVERIFY(model.setData(model.index(0, 2), 2));
   247 
   252 
   258 
   263 
   259         model.submit();
   264         model.submit();
   260     }
   265     }
   261     { //verify values
   266     { //verify values
   262         QSqlRelationalTableModel model(0, db);
   267         QSqlRelationalTableModel model(0, db);
   263         model.setTable(qTableName("reltest1"));
   268         model.setTable(reltest1);
   264         model.setSort(0, Qt::AscendingOrder);
   269         model.setSort(0, Qt::AscendingOrder);
   265         QVERIFY_SQL(model, select());
   270         QVERIFY_SQL(model, select());
   266 
   271 
   267         QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry2"));
   272         QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry2"));
   268         QCOMPARE(model.data(model.index(0, 2)).toInt(), 2);
   273         QCOMPARE(model.data(model.index(0, 2)).toInt(), 2);
   269         QCOMPARE(model.data(model.index(3, 1)).toString(), QString("boris2"));
   274         QCOMPARE(model.data(model.index(3, 1)).toString(), QString("boris2"));
   270         QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
   275         QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
   271 
   276 
   272         model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   277         model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   273         QVERIFY_SQL(model, select());
   278         QVERIFY_SQL(model, select());
   274         QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
   279         QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
   275         QCOMPARE(model.data(model.index(3,2)).toString(), QString("herr"));
   280         QCOMPARE(model.data(model.index(3,2)).toString(), QString("herr"));
   276 
   281 
   277     }
   282     }
   278 
   283 
   279     //set the values using OnFieldChange strategy
   284     //set the values using OnFieldChange strategy
   280     {
   285     {
   281         QSqlRelationalTableModel model(0, db);
   286         QSqlRelationalTableModel model(0, db);
   282         model.setTable(qTableName("reltest1"));
   287         model.setTable(reltest1);
   283         model.setEditStrategy(QSqlTableModel::OnFieldChange);
   288         model.setEditStrategy(QSqlTableModel::OnFieldChange);
   284         model.setSort(0, Qt::AscendingOrder);
   289         model.setSort(0, Qt::AscendingOrder);
   285         model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   290         model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   286         QVERIFY_SQL(model, select());
   291         QVERIFY_SQL(model, select());
   287 
   292 
   288         QVERIFY(model.setData(model.index(1,1), QString("trond2")));
   293         QVERIFY(model.setData(model.index(1,1), QString("trond2")));
   289         QVERIFY(model.setData(model.index(2,2), 2));
   294         QVERIFY(model.setData(model.index(2,2), 2));
   290 
   295 
   291         QCOMPARE(model.data(model.index(1,1)).toString(), QString("trond2"));
   296         QCOMPARE(model.data(model.index(1,1)).toString(), QString("trond2"));
   292         QCOMPARE(model.data(model.index(2,2)).toString(), QString("mister"));
   297         QCOMPARE(model.data(model.index(2,2)).toString(), QString("mister"));
   293     }
   298     }
   294     { //verify values
   299     { //verify values
   295         QSqlRelationalTableModel model(0, db);
   300         QSqlRelationalTableModel model(0, db);
   296         model.setTable(qTableName("reltest1"));
   301         model.setTable(reltest1);
   297         model.setSort(0, Qt::AscendingOrder);
   302         model.setSort(0, Qt::AscendingOrder);
   298         QVERIFY_SQL(model, select());
   303         QVERIFY_SQL(model, select());
   299 
   304 
   300         QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond2"));
   305         QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond2"));
   301         QCOMPARE(model.data(model.index(2, 2)).toInt(), 2);
   306         QCOMPARE(model.data(model.index(2, 2)).toInt(), 2);
   302 
   307 
   303         model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   308         model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   304         QVERIFY_SQL(model, select());
   309         QVERIFY_SQL(model, select());
   305         QCOMPARE(model.data(model.index(2, 2)).toString(), QString("mister"));
   310         QCOMPARE(model.data(model.index(2, 2)).toString(), QString("mister"));
   306     }
   311     }
   307 
   312 
   308     //set values using OnManualSubmit strategy
   313     //set values using OnManualSubmit strategy
   309     {
   314     {
   310         QSqlRelationalTableModel model(0, db);
   315         QSqlRelationalTableModel model(0, db);
   311 
   316 
   312         model.setTable(qTableName("reltest1"));
   317         model.setTable(reltest1);
   313         model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   318         model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   314 
   319 
   315         //sybase doesn't allow tables with the same alias used twice as col names
   320         //sybase doesn't allow tables with the same alias used twice as col names
   316         //so don't set up an identical relation when using the tds driver
   321         //so don't set up an identical relation when using the tds driver
   317         if (!db.driverName().startsWith("QTDS"))
   322         if (!db.driverName().startsWith("QTDS"))
   318             model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   323             model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
   319 
   324 
   320         model.setEditStrategy(QSqlTableModel::OnManualSubmit);
   325         model.setEditStrategy(QSqlTableModel::OnManualSubmit);
   321         model.setSort(0, Qt::AscendingOrder);
   326         model.setSort(0, Qt::AscendingOrder);
   322         QVERIFY_SQL(model, select());
   327         QVERIFY_SQL(model, select());
   323 
   328 
   334 
   339 
   335         QVERIFY_SQL(model, submitAll());
   340         QVERIFY_SQL(model, submitAll());
   336     }
   341     }
   337     { //verify values
   342     { //verify values
   338         QSqlRelationalTableModel model(0, db);
   343         QSqlRelationalTableModel model(0, db);
   339         model.setTable(qTableName("reltest1"));
   344         model.setTable(reltest1);
   340         model.setSort(0, Qt::AscendingOrder);
   345         model.setSort(0, Qt::AscendingOrder);
   341         QVERIFY_SQL(model, select());
   346         QVERIFY_SQL(model, select());
   342 
   347 
   343         QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi2"));
   348         QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi2"));
   344         QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
   349         QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
   345         QCOMPARE(model.data(model.index(0, 3)).toInt(), 1);
   350         QCOMPARE(model.data(model.index(0, 3)).toInt(), 1);
   346 
   351 
   347         model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   352         model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   348         if (!db.driverName().startsWith("QTDS"))
   353         if (!db.driverName().startsWith("QTDS"))
   349             model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   354             model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
   350         QVERIFY_SQL(model, select());
   355         QVERIFY_SQL(model, select());
   351         QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr"));
   356         QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr"));
   352 
   357 
   353         if (!db.driverName().startsWith("QTDS"))
   358         if (!db.driverName().startsWith("QTDS"))
   354             QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr"));
   359             QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr"));
   359     //check setting of data when the relational key is a non-integer type
   364     //check setting of data when the relational key is a non-integer type
   360     //in this case a string.
   365     //in this case a string.
   361     {
   366     {
   362         QSqlRelationalTableModel model(0, db);
   367         QSqlRelationalTableModel model(0, db);
   363 
   368 
   364         model.setTable(qTableName("reltest2"));
   369         model.setTable(reltest2);
   365         model.setRelation(1, QSqlRelation(qTableName("reltest5"), "title", "abbrev"));
   370         model.setRelation(1, QSqlRelation(reltest5, "title", "abbrev"));
   366         model.setEditStrategy(QSqlTableModel::OnManualSubmit);
   371         model.setEditStrategy(QSqlTableModel::OnManualSubmit);
   367         QVERIFY_SQL(model, select());
   372         QVERIFY_SQL(model, select());
   368 
   373 
   369         QCOMPARE(model.data(model.index(0,1)).toString(), QString("Hr"));
   374         QCOMPARE(model.data(model.index(0,1)).toString(), QString("Hr"));
   370         QVERIFY(model.setData(model.index(0,1), QString("mister")));
   375         QVERIFY(model.setData(model.index(0,1), QString("mister")));
   383     CHECK_DATABASE(db);
   388     CHECK_DATABASE(db);
   384     recreateTestTables(db);
   389     recreateTestTables(db);
   385 
   390 
   386     QSqlRelationalTableModel model(0, db);
   391     QSqlRelationalTableModel model(0, db);
   387 
   392 
   388     model.setTable(qTableName("reltest1"));
   393     model.setTable(reltest1);
   389     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   394     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   390     model.setRelation(3, QSqlRelation(qTableName("reltest4"), "id", "name"));
   395     model.setRelation(3, QSqlRelation(reltest4, "id", "name"));
   391     model.setSort(0, Qt::AscendingOrder);
   396     model.setSort(0, Qt::AscendingOrder);
   392     QVERIFY_SQL(model, select());
   397     QVERIFY_SQL(model, select());
   393 
   398 
   394     QCOMPARE(model.data(model.index(2, 0)).toInt(), 3);
   399     QCOMPARE(model.data(model.index(2, 0)).toInt(), 3);
   395 
   400 
   405     QSqlDatabase db = QSqlDatabase::database(dbName);
   410     QSqlDatabase db = QSqlDatabase::database(dbName);
   406     CHECK_DATABASE(db);
   411     CHECK_DATABASE(db);
   407 
   412 
   408     QSqlRelationalTableModel model(0, db);
   413     QSqlRelationalTableModel model(0, db);
   409 
   414 
   410     model.setTable(qTableName("reltest1"));
   415     model.setTable(reltest1);
   411     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   416     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   412     model.setSort(0, Qt::AscendingOrder);
   417     model.setSort(0, Qt::AscendingOrder);
   413     QVERIFY_SQL(model, select());
   418     QVERIFY_SQL(model, select());
   414 
   419 
   415     QSqlRecord rec;
   420     QSqlRecord rec;
   416     QSqlField f1("id", QVariant::Int);
   421     QSqlField f1("id", QVariant::Int);
   447     CHECK_DATABASE(db);
   452     CHECK_DATABASE(db);
   448     recreateTestTables(db);
   453     recreateTestTables(db);
   449 
   454 
   450     QSqlRelationalTableModel model(0, db);
   455     QSqlRelationalTableModel model(0, db);
   451 
   456 
   452     model.setTable(qTableName("reltest1"));
   457     model.setTable(reltest1);
   453     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   458     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   454     model.setSort(0, Qt::AscendingOrder);
   459     model.setSort(0, Qt::AscendingOrder);
   455     QVERIFY_SQL(model, select());
   460     QVERIFY_SQL(model, select());
   456 
   461 
   457     QSqlRecord rec;
   462     QSqlRecord rec;
   458     QSqlField f1("id", QVariant::Int);
   463     QSqlField f1("id", QVariant::Int);
   500     QSqlDatabase db = QSqlDatabase::database(dbName);
   505     QSqlDatabase db = QSqlDatabase::database(dbName);
   501     CHECK_DATABASE(db);
   506     CHECK_DATABASE(db);
   502 
   507 
   503     QSqlRelationalTableModel model(0, db);
   508     QSqlRelationalTableModel model(0, db);
   504 
   509 
   505     model.setTable(qTableName("reltest1"));
   510     model.setTable(reltest1);
   506     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   511     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   507     model.setSort(0, Qt::AscendingOrder);
   512     model.setSort(0, Qt::AscendingOrder);
   508 
   513 
   509     if (!db.driverName().startsWith("QTDS"))
   514     if (!db.driverName().startsWith("QTDS"))
   510         model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   515         model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
   511     QVERIFY_SQL(model, select());
   516     QVERIFY_SQL(model, select());
   512 
   517 
   513     QCOMPARE(model.data(model.index(0,0)).toInt(), 1);
   518     QCOMPARE(model.data(model.index(0,0)).toInt(), 1);
   514     QCOMPARE(model.data(model.index(0,1)).toString(), QString("harry"));
   519     QCOMPARE(model.data(model.index(0,1)).toString(), QString("harry"));
   515     QCOMPARE(model.data(model.index(0,2)).toString(), QString("herr"));
   520     QCOMPARE(model.data(model.index(0,2)).toString(), QString("herr"));
   606     CHECK_DATABASE(db);
   611     CHECK_DATABASE(db);
   607     recreateTestTables(db);
   612     recreateTestTables(db);
   608 
   613 
   609     QSqlRelationalTableModel model(0, db);
   614     QSqlRelationalTableModel model(0, db);
   610 
   615 
   611     model.setTable(qTableName("reltest1"));
   616     model.setTable(reltest1);
   612     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   617     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   613     QVERIFY_SQL(model, select());
   618     QVERIFY_SQL(model, select());
   614 
   619 
   615     QVERIFY_SQL(model, removeColumn(3));
   620     QVERIFY_SQL(model, removeColumn(3));
   616     QVERIFY_SQL(model, select());
   621     QVERIFY_SQL(model, select());
   617 
   622 
   637     CHECK_DATABASE(db);
   642     CHECK_DATABASE(db);
   638     recreateTestTables(db);
   643     recreateTestTables(db);
   639 
   644 
   640     QSqlRelationalTableModel model(0, db);
   645     QSqlRelationalTableModel model(0, db);
   641 
   646 
   642     model.setTable(qTableName("reltest1"));
   647     model.setTable(reltest1);
   643     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   648     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   644     model.setFilter("title = 'herr'");
   649     model.setFilter("title = 'herr'");
   645 
   650 
   646     QVERIFY_SQL(model, select());
   651     QVERIFY_SQL(model, select());
   647     QCOMPARE(model.rowCount(), 2);
   652     QCOMPARE(model.rowCount(), 2);
   648     QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
   653     QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
   655     QSqlDatabase db = QSqlDatabase::database(dbName);
   660     QSqlDatabase db = QSqlDatabase::database(dbName);
   656     CHECK_DATABASE(db);
   661     CHECK_DATABASE(db);
   657 
   662 
   658     QSqlRelationalTableModel model(0, db);
   663     QSqlRelationalTableModel model(0, db);
   659 
   664 
   660     model.setTable(qTableName("reltest1"));
   665     model.setTable(reltest1);
   661     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   666     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   662     if (!db.driverName().startsWith("QTDS"))
   667     if (!db.driverName().startsWith("QTDS"))
   663         model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   668         model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
   664 
   669 
   665     model.setSort(2, Qt::DescendingOrder);
   670     model.setSort(2, Qt::DescendingOrder);
   666     QVERIFY_SQL(model, select());
   671     QVERIFY_SQL(model, select());
   667 
   672 
   668     QCOMPARE(model.rowCount(), 4);
   673     QCOMPARE(model.rowCount(), 4);
   753     QSqlDatabase db = QSqlDatabase::database(dbName);
   758     QSqlDatabase db = QSqlDatabase::database(dbName);
   754     CHECK_DATABASE(db);
   759     CHECK_DATABASE(db);
   755 
   760 
   756     QSqlRelationalTableModel model(0, db);
   761     QSqlRelationalTableModel model(0, db);
   757 
   762 
   758     model.setTable(qTableName("reltest1"));
   763     model.setTable(reltest1);
   759     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   764     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   760     model.setRelation(3, QSqlRelation(qTableName("reltest4"), "id", "name"));
   765     model.setRelation(3, QSqlRelation(reltest4, "id", "name"));
   761 
   766 
   762     model.setSort(0, Qt::AscendingOrder);
   767     model.setSort(0, Qt::AscendingOrder);
   763 
   768 
   764     QVERIFY_SQL(model, select());
   769     QVERIFY_SQL(model, select());
   765     QCOMPARE(model.data(model.index(0, 0)).toString(), QString("1"));
   770     QCOMPARE(model.data(model.index(0, 0)).toString(), QString("1"));
   779     QSqlDatabase db = QSqlDatabase::database(dbName);
   784     QSqlDatabase db = QSqlDatabase::database(dbName);
   780     CHECK_DATABASE(db);
   785     CHECK_DATABASE(db);
   781 
   786 
   782     QSqlRelationalTableModel model(0, db);
   787     QSqlRelationalTableModel model(0, db);
   783 
   788 
   784     model.setTable(qTableName("reltest1"));
   789     model.setTable(reltest1);
   785     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   790     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   786 
   791 
   787     if (!db.driverName().startsWith("QTDS"))
   792     if (!db.driverName().startsWith("QTDS"))
   788         model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   793         model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
   789     model.setSort(1, Qt::AscendingOrder);
   794     model.setSort(1, Qt::AscendingOrder);
   790     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
   795     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
   791 
   796 
   792     QVERIFY_SQL(model, select());
   797     QVERIFY_SQL(model, select());
   793 
   798 
   831     QFETCH_GLOBAL(QString, dbName);
   836     QFETCH_GLOBAL(QString, dbName);
   832     QSqlDatabase db = QSqlDatabase::database(dbName);
   837     QSqlDatabase db = QSqlDatabase::database(dbName);
   833     CHECK_DATABASE(db);
   838     CHECK_DATABASE(db);
   834 
   839 
   835     QSqlRelationalTableModel model(0, db);
   840     QSqlRelationalTableModel model(0, db);
   836     model.setTable(qTableName("reltest3"));
   841     model.setTable(reltest3);
   837     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
   842     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
   838     model.setSort(0, Qt::AscendingOrder);
   843     model.setSort(0, Qt::AscendingOrder);
   839 
   844 
   840     // Duplication of "name", used in both reltest3 and reltest4.
   845     // Duplication of "name", used in both reltest3 and reltest4.
   841     model.setRelation(2, QSqlRelation(qTableName("reltest4"), "id", "name"));
   846     model.setRelation(2, QSqlRelation(reltest4, "id", "name"));
   842     QVERIFY_SQL(model, select());
   847     QVERIFY_SQL(model, select());
   843 
   848 
   844     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
   849     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
   845         QCOMPARE(model.record(1).value(qTableName("reltest4").append(QLatin1String("_name_2")).toUpper()).toString(),
   850         QCOMPARE(model.record(1).value((reltest4+QLatin1String("_name_2")).toUpper()).toString(),
   846             QString("Trondheim"));
   851             QString("Trondheim"));
   847     } else {
   852     } else {
   848         QCOMPARE(model.record(1).value(qTableName("reltest4").append(QLatin1String("_name_2"))).toString(),
   853         QCOMPARE(model.record(1).value((reltest4+QLatin1String("_name_2"))).toString(),
   849             QString("Trondheim"));
   854             QString("Trondheim"));
   850     }
   855     }
   851 
   856 
   852     QSqlRecord rec = model.record();
   857     QSqlRecord rec = model.record();
   853     rec.setValue(0, 3);
   858     rec.setValue(0, 3);
   862         QCOMPARE(rec.fieldName(1), QLatin1String("name"));
   867         QCOMPARE(rec.fieldName(1), QLatin1String("name"));
   863     }
   868     }
   864 
   869 
   865     // The duplicate field names is aliased because it's comes from the relation's display column.
   870     // The duplicate field names is aliased because it's comes from the relation's display column.
   866     if(db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2"))
   871     if(db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2"))
   867         QCOMPARE(rec.fieldName(2), (qTableName("reltest4").append(QLatin1String("_name_2"))).toUpper());
   872         QCOMPARE(rec.fieldName(2), (reltest4+QLatin1String("_name_2")).toUpper());
   868     else
   873     else
   869         QCOMPARE(rec.fieldName(2), qTableName("reltest4").append(QLatin1String("_name_2")));
   874         QCOMPARE(rec.fieldName(2), reltest4+QLatin1String("_name_2"));
   870 
   875 
   871     QVERIFY(model.insertRecord(-1, rec));
   876     QVERIFY(model.insertRecord(-1, rec));
   872     QCOMPARE(model.data(model.index(2, 2)).toString(), QString("Oslo"));
   877     QCOMPARE(model.data(model.index(2, 2)).toString(), QString("Oslo"));
   873     QVERIFY(model.submitAll());
   878     QVERIFY(model.submitAll());
   874     QCOMPARE(model.data(model.index(2, 2)).toString(), QString("Oslo"));
   879     QCOMPARE(model.data(model.index(2, 2)).toString(), QString("Oslo"));
   879     QFETCH_GLOBAL(QString, dbName);
   884     QFETCH_GLOBAL(QString, dbName);
   880     QSqlDatabase db = QSqlDatabase::database(dbName);
   885     QSqlDatabase db = QSqlDatabase::database(dbName);
   881     CHECK_DATABASE(db);
   886     CHECK_DATABASE(db);
   882 
   887 
   883     QSqlRelationalTableModel model(0, db);
   888     QSqlRelationalTableModel model(0, db);
   884     model.setTable(qTableName("reltest1"));
   889     model.setTable(reltest1);
   885     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   890     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   886     QVERIFY_SQL(model, select());
   891     QVERIFY_SQL(model, select());
   887 
   892 
   888     //try set a non-existent relational key
   893     //try set a non-existent relational key
   889     QVERIFY(model.setData(model.index(0, 2), 3) == false);
   894     QVERIFY(model.setData(model.index(0, 2), 3) == false);
   890     QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
   895     QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
   898     QFETCH_GLOBAL(QString, dbName);
   903     QFETCH_GLOBAL(QString, dbName);
   899     QSqlDatabase db = QSqlDatabase::database(dbName);
   904     QSqlDatabase db = QSqlDatabase::database(dbName);
   900     CHECK_DATABASE(db);
   905     CHECK_DATABASE(db);
   901 
   906 
   902     QSqlRelationalTableModel model(0, db);
   907     QSqlRelationalTableModel model(0, db);
   903     model.setTable(qTableName("reltest1"));
   908     model.setTable(reltest1);
   904     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   909     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   905     QVERIFY_SQL(model, select());
   910     QVERIFY_SQL(model, select());
   906 
   911 
   907     QVERIFY(model.relationModel(0) == NULL);
   912     QVERIFY(model.relationModel(0) == NULL);
   908     QVERIFY(model.relationModel(1) == NULL);
   913     QVERIFY(model.relationModel(1) == NULL);
   909     QVERIFY(model.relationModel(2) != NULL);
   914     QVERIFY(model.relationModel(2) != NULL);
   910     QVERIFY(model.relationModel(3) == NULL);
   915     QVERIFY(model.relationModel(3) == NULL);
   911     QVERIFY(model.relationModel(4) == NULL);
   916     QVERIFY(model.relationModel(4) == NULL);
   912 
   917 
   913     model.setRelation(3, QSqlRelation(qTableName("reltest4"), "id", "name"));
   918     model.setRelation(3, QSqlRelation(reltest4, "id", "name"));
   914     QVERIFY_SQL(model, select());
   919     QVERIFY_SQL(model, select());
   915 
   920 
   916     QVERIFY(model.relationModel(0) == NULL);
   921     QVERIFY(model.relationModel(0) == NULL);
   917     QVERIFY(model.relationModel(1) == NULL);
   922     QVERIFY(model.relationModel(1) == NULL);
   918     QVERIFY(model.relationModel(2) != NULL);
   923     QVERIFY(model.relationModel(2) != NULL);
   979 
   984 
   980     QCOMPARE(lowerCaseModel.rowCount(), 3);
   985     QCOMPARE(lowerCaseModel.rowCount(), 3);
   981 
   986 
   982     QSqlRelationalTableModel model(0, db);
   987     QSqlRelationalTableModel model(0, db);
   983     model.setTable(qTableName("CASETEST1", db.driver()).toUpper());
   988     model.setTable(qTableName("CASETEST1", db.driver()).toUpper());
   984     model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
   989     model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
   985     QVERIFY_SQL(model, select());
   990     QVERIFY_SQL(model, select());
   986 
   991 
   987     QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
   992     QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
   988     QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
   993     QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
   989     QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
   994     QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
   995     QSqlDatabase db = QSqlDatabase::database(dbName);
  1000     QSqlDatabase db = QSqlDatabase::database(dbName);
   996     CHECK_DATABASE(db);
  1001     CHECK_DATABASE(db);
   997     recreateTestTables(db);
  1002     recreateTestTables(db);
   998 
  1003 
   999     QSqlRelationalTableModel model(0, db);
  1004     QSqlRelationalTableModel model(0, db);
  1000     model.setTable(qTableName("reltest1"));
  1005     model.setTable(reltest1);
  1001 
  1006 
  1002     //try with relation table name quoted
  1007     //try with relation table name quoted
  1003     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
  1008     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
  1004         model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(qTableName("reltest2").toUpper(),QSqlDriver::TableName),
  1009         model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(reltest2.toUpper(),QSqlDriver::TableName),
  1005                             "tid",
  1010                             "tid",
  1006                             "title"));
  1011                             "title"));
  1007     } else {
  1012     } else {
  1008         model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(qTableName("reltest2"),QSqlDriver::TableName),
  1013         model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(reltest2,QSqlDriver::TableName),
  1009                             "tid",
  1014                             "tid",
  1010                             "title"));
  1015                             "title"));
  1011 
  1016 
  1012     }
  1017     }
  1013     QVERIFY_SQL(model, select());
  1018     QVERIFY_SQL(model, select());
  1016     QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
  1021     QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
  1017     QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
  1022     QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
  1018 
  1023 
  1019     //try with index column quoted
  1024     //try with index column quoted
  1020     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
  1025     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
  1021         model.setRelation(2, QSqlRelation(qTableName("reltest2"),
  1026         model.setRelation(2, QSqlRelation(reltest2,
  1022                             db.driver()->escapeIdentifier("tid", QSqlDriver::FieldName).toUpper(),
  1027                             db.driver()->escapeIdentifier("tid", QSqlDriver::FieldName).toUpper(),
  1023                             "title"));
  1028                             "title"));
  1024     } else {
  1029     } else {
  1025         model.setRelation(2, QSqlRelation(qTableName("reltest2"),
  1030         model.setRelation(2, QSqlRelation(reltest2,
  1026                             db.driver()->escapeIdentifier("tid", QSqlDriver::FieldName),
  1031                             db.driver()->escapeIdentifier("tid", QSqlDriver::FieldName),
  1027                             "title"));
  1032                             "title"));
  1028     }
  1033     }
  1029     QVERIFY_SQL(model, select());
  1034     QVERIFY_SQL(model, select());
  1030 
  1035 
  1034 
  1039 
  1035     //try with display column quoted
  1040     //try with display column quoted
  1036 
  1041 
  1037     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
  1042     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
  1038 
  1043 
  1039         model.setRelation(2, QSqlRelation(qTableName("reltest2"),
  1044         model.setRelation(2, QSqlRelation(reltest2,
  1040                             "tid",
  1045                             "tid",
  1041                             db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper()));
  1046                             db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper()));
  1042     } else {
  1047     } else {
  1043         model.setRelation(2, QSqlRelation(qTableName("reltest2"),
  1048         model.setRelation(2, QSqlRelation(reltest2,
  1044                             "tid",
  1049                             "tid",
  1045                             db.driver()->escapeIdentifier("title", QSqlDriver::FieldName)));
  1050                             db.driver()->escapeIdentifier("title", QSqlDriver::FieldName)));
  1046     }
  1051     }
  1047 
  1052 
  1048     QVERIFY_SQL(model, select());
  1053     QVERIFY_SQL(model, select());
  1052     QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
  1057     QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
  1053 
  1058 
  1054     //try with tablename and index and display columns quoted in the relation
  1059     //try with tablename and index and display columns quoted in the relation
  1055 
  1060 
  1056     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
  1061     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
  1057         model.setRelation(2, QSqlRelation(qTableName("reltest2"),
  1062         model.setRelation(2, QSqlRelation(reltest2,
  1058                             "tid",
  1063                             "tid",
  1059                             db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper()));
  1064                             db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper()));
  1060     } else {
  1065     } else {
  1061         model.setRelation(2, QSqlRelation(qTableName("reltest2"),
  1066         model.setRelation(2, QSqlRelation(reltest2,
  1062                             "tid",
  1067                             "tid",
  1063                             db.driver()->escapeIdentifier("title", QSqlDriver::FieldName)));
  1068                             db.driver()->escapeIdentifier("title", QSqlDriver::FieldName)));
  1064     }
  1069     }
  1065     QVERIFY_SQL(model, select());
  1070     QVERIFY_SQL(model, select());
  1066 
  1071 
  1078     // set the values using OnRowChange Strategy with an escaped tablename
  1083     // set the values using OnRowChange Strategy with an escaped tablename
  1079     {
  1084     {
  1080         QSqlRelationalTableModel model(0, db);
  1085         QSqlRelationalTableModel model(0, db);
  1081 
  1086 
  1082         if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
  1087         if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
  1083             model.setTable(db.driver()->escapeIdentifier(qTableName("reltest1").toUpper(), QSqlDriver::TableName));
  1088             model.setTable(db.driver()->escapeIdentifier(reltest1.toUpper(), QSqlDriver::TableName));
  1084         } else {
  1089         } else {
  1085             model.setTable(db.driver()->escapeIdentifier(qTableName("reltest1"), QSqlDriver::TableName));
  1090             model.setTable(db.driver()->escapeIdentifier(reltest1, QSqlDriver::TableName));
  1086         }
  1091         }
  1087         model.setSort(0, Qt::AscendingOrder);
  1092         model.setSort(0, Qt::AscendingOrder);
  1088         model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
  1093         model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
  1089         QVERIFY_SQL(model, select());
  1094         QVERIFY_SQL(model, select());
  1090 
  1095 
  1091         QVERIFY(model.setData(model.index(0, 1), QString("harry2")));
  1096         QVERIFY(model.setData(model.index(0, 1), QString("harry2")));
  1092         QVERIFY(model.setData(model.index(0, 2), 2));
  1097         QVERIFY(model.setData(model.index(0, 2), 2));
  1093 
  1098 
  1104 
  1109 
  1105         model.submit();
  1110         model.submit();
  1106     }
  1111     }
  1107     { //verify values
  1112     { //verify values
  1108         QSqlRelationalTableModel model(0, db);
  1113         QSqlRelationalTableModel model(0, db);
  1109         model.setTable(qTableName("reltest1"));
  1114         model.setTable(reltest1);
  1110         model.setSort(0, Qt::AscendingOrder);
  1115         model.setSort(0, Qt::AscendingOrder);
  1111         QVERIFY_SQL(model, select());
  1116         QVERIFY_SQL(model, select());
  1112 
  1117 
  1113         QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry2"));
  1118         QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry2"));
  1114         QCOMPARE(model.data(model.index(0, 2)).toInt(), 2);
  1119         QCOMPARE(model.data(model.index(0, 2)).toInt(), 2);
  1115         QCOMPARE(model.data(model.index(3, 1)).toString(), QString("boris2"));
  1120         QCOMPARE(model.data(model.index(3, 1)).toString(), QString("boris2"));
  1116         QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
  1121         QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
  1117 
  1122 
  1118         model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
  1123         model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
  1119         QVERIFY_SQL(model, select());
  1124         QVERIFY_SQL(model, select());
  1120         QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
  1125         QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
  1121         QCOMPARE(model.data(model.index(3,2)).toString(), QString("herr"));
  1126         QCOMPARE(model.data(model.index(3,2)).toString(), QString("herr"));
  1122 
  1127 
  1123     }
  1128     }
  1130     CHECK_DATABASE(db);
  1135     CHECK_DATABASE(db);
  1131 
  1136 
  1132     if (!testWhiteSpaceNames(db.driverName()))
  1137     if (!testWhiteSpaceNames(db.driverName()))
  1133         QSKIP("White space test irrelevant for driver", SkipAll);
  1138         QSKIP("White space test irrelevant for driver", SkipAll);
  1134     QSqlRelationalTableModel model(0, db);
  1139     QSqlRelationalTableModel model(0, db);
  1135     model.setTable(db.driver()->escapeIdentifier(qTableName("rel test6"), QSqlDriver::TableName));
  1140     model.setTable(db.driver()->escapeIdentifier(qTableName("rel", __FILE__)+" test6", QSqlDriver::TableName));
  1136     model.setSort(0, Qt::DescendingOrder);
  1141     model.setSort(0, Qt::DescendingOrder);
  1137     model.setRelation(1, QSqlRelation(db.driver()->escapeIdentifier(qTableName("rel test7"), QSqlDriver::TableName),
  1142     model.setRelation(1, QSqlRelation(db.driver()->escapeIdentifier(qTableName("rel", __FILE__)+" test7", QSqlDriver::TableName),
  1138                         db.driver()->escapeIdentifier("city id", QSqlDriver::FieldName),
  1143                         db.driver()->escapeIdentifier("city id", QSqlDriver::FieldName),
  1139                         db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName)));
  1144                         db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName)));
  1140     QVERIFY_SQL(model, select());
  1145     QVERIFY_SQL(model, select());
  1141 
  1146 
  1142     QCOMPARE(model.data(model.index(0,1)).toString(), QString("Washington"));
  1147     QCOMPARE(model.data(model.index(0,1)).toString(), QString("Washington"));
  1208         QSKIP("Postgresql specific test", SkipSingle);
  1213         QSKIP("Postgresql specific test", SkipSingle);
  1209         return;
  1214         return;
  1210     }
  1215     }
  1211     QSqlRelationalTableModel model(0, db);
  1216     QSqlRelationalTableModel model(0, db);
  1212     QSqlQuery q(db);
  1217     QSqlQuery q(db);
  1213     QVERIFY_SQL(q, exec("create schema "+qTableName("QTBUG_5373")));
  1218     QVERIFY_SQL(q, exec("create schema "+qTableName("QTBUG_5373", __FILE__)));
  1214     QVERIFY_SQL(q, exec("create schema "+qTableName("QTBUG_5373_s2")));
  1219     QVERIFY_SQL(q, exec("create schema "+qTableName("QTBUG_5373_s2", __FILE__)));
  1215     QVERIFY_SQL(q, exec("create table "+qTableName("QTBUG_5373")+"."+qTableName("document")+"(document_id int primary key, relatingid int, userid int)"));
  1220     QVERIFY_SQL(q, exec("create table "+qTableName("QTBUG_5373", __FILE__)+"."+qTableName("document", __FILE__)+"(document_id int primary key, relatingid int, userid int)"));
  1216     QVERIFY_SQL(q, exec("create table "+qTableName("QTBUG_5373_s2")+"."+qTableName("user")+"(userid int primary key, username char(40))"));
  1221     QVERIFY_SQL(q, exec("create table "+qTableName("QTBUG_5373_s2", __FILE__)+"."+qTableName("user", __FILE__)+"(userid int primary key, username char(40))"));
  1217     model.setTable(qTableName("QTBUG_5373")+"."+qTableName("document"));
  1222     model.setTable(qTableName("QTBUG_5373", __FILE__)+"."+qTableName("document", __FILE__));
  1218     model.setRelation(1, QSqlRelation(qTableName("QTBUG_5373_s2")+"."+qTableName("user"), "userid", "username"));
  1223     model.setRelation(1, QSqlRelation(qTableName("QTBUG_5373_s2", __FILE__)+"."+qTableName("user", __FILE__), "userid", "username"));
  1219     model.setRelation(2, QSqlRelation(qTableName("QTBUG_5373_s2")+"."+qTableName("user"), "userid", "username"));
  1224     model.setRelation(2, QSqlRelation(qTableName("QTBUG_5373_s2", __FILE__)+"."+qTableName("user", __FILE__), "userid", "username"));
  1220     QVERIFY_SQL(model, select());
  1225     QVERIFY_SQL(model, select());
  1221 }
  1226 }
  1222 
  1227 
  1223 QTEST_MAIN(tst_QSqlRelationalTableModel)
  1228 QTEST_MAIN(tst_QSqlRelationalTableModel)
  1224 #include "tst_qsqlrelationaltablemodel.moc"
  1229 #include "tst_qsqlrelationaltablemodel.moc"