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 } |
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 } |
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")); |
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")); |
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")); |
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")); |
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 |
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" |