145 QSqlQuery q(db); |
149 QSqlQuery q(db); |
146 if(tst_Databases::isPostgreSQL(db)) |
150 if(tst_Databases::isPostgreSQL(db)) |
147 QVERIFY_SQL( q, exec("set client_min_messages='warning'")); |
151 QVERIFY_SQL( q, exec("set client_min_messages='warning'")); |
148 |
152 |
149 QStringList tableNames; |
153 QStringList tableNames; |
150 tableNames << qTableName("test") |
154 tableNames << test |
151 << qTableName("test2") |
155 << test2 |
152 << qTableName("test3") |
156 << test3 |
153 << qTableName("test4") |
157 << qTableName("test4", __FILE__) |
154 << qTableName("emptytable") |
158 << qTableName("emptytable", __FILE__) |
155 << qTableName("bigtable") |
159 << qTableName("bigtable", __FILE__) |
156 << qTableName("foo"); |
160 << qTableName("foo", __FILE__); |
157 if (testWhiteSpaceNames(db.driverName())) |
161 if (testWhiteSpaceNames(db.driverName())) |
158 tableNames << qTableName("qtestw hitespace", db.driver()); |
162 tableNames << qTableName("qtestw hitespace", db.driver()); |
159 |
163 |
160 tst_Databases::safeDropTables(db, tableNames); |
164 tst_Databases::safeDropTables(db, tableNames); |
161 |
165 |
162 if (db.driverName().startsWith("QPSQL")) { |
166 if (db.driverName().startsWith("QPSQL")) { |
163 q.exec("DROP SCHEMA " + qTableName("testschema") + " CASCADE"); |
167 q.exec("DROP SCHEMA " + qTableName("testschema", __FILE__) + " CASCADE"); |
164 } |
168 } |
165 } |
169 } |
166 } |
170 } |
167 |
171 |
168 void tst_QSqlTableModel::createTestTables() |
172 void tst_QSqlTableModel::createTestTables() |
169 { |
173 { |
170 for (int i = 0; i < dbs.dbNames.count(); ++i) { |
174 for (int i = 0; i < dbs.dbNames.count(); ++i) { |
171 QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i)); |
175 QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i)); |
172 QSqlQuery q(db); |
176 QSqlQuery q(db); |
173 |
177 |
174 QVERIFY_SQL( q, exec("create table " + qTableName("test") + "(id int, name varchar(20), title int)")); |
178 QVERIFY_SQL( q, exec("create table " + test + "(id int, name varchar(20), title int)")); |
175 |
179 |
176 QVERIFY_SQL( q, exec("create table " + qTableName("test2") + "(id int, title varchar(20))")); |
180 QVERIFY_SQL( q, exec("create table " + test2 + "(id int, title varchar(20))")); |
177 |
181 |
178 QVERIFY_SQL( q, exec("create table " + qTableName("test3") + "(id int, random varchar(20), randomtwo varchar(20))")); |
182 QVERIFY_SQL( q, exec("create table " + test3 + "(id int, random varchar(20), randomtwo varchar(20))")); |
179 |
183 |
180 QVERIFY_SQL( q, exec("create table " + qTableName("test4") + "(column1 varchar(50), column2 varchar(50), column3 varchar(50))")); |
184 QVERIFY_SQL( q, exec("create table " + qTableName("test4", __FILE__) + "(column1 varchar(50), column2 varchar(50), column3 varchar(50))")); |
181 |
185 |
182 QVERIFY_SQL( q, exec("create table " + qTableName("emptytable") + "(id int)")); |
186 QVERIFY_SQL( q, exec("create table " + qTableName("emptytable", __FILE__) + "(id int)")); |
183 |
187 |
184 if (testWhiteSpaceNames(db.driverName())) { |
188 if (testWhiteSpaceNames(db.driverName())) { |
185 QString qry = "create table " + qTableName("qtestw hitespace", db.driver()) + " ("+ db.driver()->escapeIdentifier("a field", QSqlDriver::FieldName) + " int)"; |
189 QString qry = "create table " + qTableName("qtestw hitespace", db.driver()) + " ("+ db.driver()->escapeIdentifier("a field", QSqlDriver::FieldName) + " int)"; |
186 QVERIFY_SQL( q, exec(qry)); |
190 QVERIFY_SQL( q, exec(qry)); |
187 } |
191 } |
192 { |
196 { |
193 for (int i = 0; i < dbs.dbNames.count(); ++i) { |
197 for (int i = 0; i < dbs.dbNames.count(); ++i) { |
194 QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i)); |
198 QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i)); |
195 QSqlQuery q(db); |
199 QSqlQuery q(db); |
196 |
200 |
197 q.exec("delete from " + qTableName("test")); |
201 q.exec("delete from " + test); |
198 QVERIFY_SQL( q, exec("insert into " + qTableName("test") + " values(1, 'harry', 1)")); |
202 QVERIFY_SQL( q, exec("insert into " + test + " values(1, 'harry', 1)")); |
199 QVERIFY_SQL( q, exec("insert into " + qTableName("test") + " values(2, 'trond', 2)")); |
203 QVERIFY_SQL( q, exec("insert into " + test + " values(2, 'trond', 2)")); |
200 QVERIFY_SQL( q, exec("insert into " + qTableName("test") + " values(3, 'vohi', 3)")); |
204 QVERIFY_SQL( q, exec("insert into " + test + " values(3, 'vohi', 3)")); |
201 |
205 |
202 q.exec("delete from " + qTableName("test2")); |
206 q.exec("delete from " + test2); |
203 QVERIFY_SQL( q, exec("insert into " + qTableName("test2") + " values(1, 'herr')")); |
207 QVERIFY_SQL( q, exec("insert into " + test2 + " values(1, 'herr')")); |
204 QVERIFY_SQL( q, exec("insert into " + qTableName("test2") + " values(2, 'mister')")); |
208 QVERIFY_SQL( q, exec("insert into " + test2 + " values(2, 'mister')")); |
205 |
209 |
206 q.exec("delete from " + qTableName("test3")); |
210 q.exec("delete from " + test3); |
207 QVERIFY_SQL( q, exec("insert into " + qTableName("test3") + " values(1, 'foo', 'bar')")); |
211 QVERIFY_SQL( q, exec("insert into " + test3 + " values(1, 'foo', 'bar')")); |
208 QVERIFY_SQL( q, exec("insert into " + qTableName("test3") + " values(2, 'baz', 'joe')")); |
212 QVERIFY_SQL( q, exec("insert into " + test3 + " values(2, 'baz', 'joe')")); |
209 } |
213 } |
210 } |
214 } |
211 |
215 |
212 void tst_QSqlTableModel::recreateTestTables() |
216 void tst_QSqlTableModel::recreateTestTables() |
213 { |
217 { |
251 QFETCH(QString, dbName); |
255 QFETCH(QString, dbName); |
252 QSqlDatabase db = QSqlDatabase::database(dbName); |
256 QSqlDatabase db = QSqlDatabase::database(dbName); |
253 CHECK_DATABASE(db); |
257 CHECK_DATABASE(db); |
254 |
258 |
255 QSqlTableModel model(0, db); |
259 QSqlTableModel model(0, db); |
256 model.setTable(qTableName("test")); |
260 model.setTable(test); |
257 model.setSort(0, Qt::AscendingOrder); |
261 model.setSort(0, Qt::AscendingOrder); |
258 QVERIFY_SQL(model, select()); |
262 QVERIFY_SQL(model, select()); |
259 |
263 |
260 QCOMPARE(model.rowCount(), 3); |
264 QCOMPARE(model.rowCount(), 3); |
261 QCOMPARE(model.columnCount(), 3); |
265 QCOMPARE(model.columnCount(), 3); |
292 QString Xsuffix; |
296 QString Xsuffix; |
293 foreach( QSqlTableModel::EditStrategy submitpolicy, policies) { |
297 foreach( QSqlTableModel::EditStrategy submitpolicy, policies) { |
294 |
298 |
295 QSqlTableModel model(0, db); |
299 QSqlTableModel model(0, db); |
296 model.setEditStrategy((QSqlTableModel::EditStrategy)submitpolicy); |
300 model.setEditStrategy((QSqlTableModel::EditStrategy)submitpolicy); |
297 model.setTable(qTableName("test3")); |
301 model.setTable(test3); |
298 model.setSort(0, Qt::AscendingOrder); |
302 model.setSort(0, Qt::AscendingOrder); |
299 QVERIFY_SQL(model, select()); |
303 QVERIFY_SQL(model, select()); |
300 |
304 |
301 for (int i = 0; i < model.rowCount(); ++i) { |
305 for (int i = 0; i < model.rowCount(); ++i) { |
302 QSignalSpy spy(&model, SIGNAL(dataChanged(QModelIndex,QModelIndex))); |
306 QSignalSpy spy(&model, SIGNAL(dataChanged(QModelIndex,QModelIndex))); |
334 QSqlDatabase db = QSqlDatabase::database(dbName); |
338 QSqlDatabase db = QSqlDatabase::database(dbName); |
335 CHECK_DATABASE(db); |
339 CHECK_DATABASE(db); |
336 |
340 |
337 QSqlTableModel model(0, db); |
341 QSqlTableModel model(0, db); |
338 model.setEditStrategy(QSqlTableModel::OnRowChange); |
342 model.setEditStrategy(QSqlTableModel::OnRowChange); |
339 model.setTable(qTableName("test")); |
343 model.setTable(test); |
340 model.setSort(0, Qt::AscendingOrder); |
344 model.setSort(0, Qt::AscendingOrder); |
341 QVERIFY_SQL(model, select()); |
345 QVERIFY_SQL(model, select()); |
342 |
346 |
343 QVERIFY(model.insertRow(2)); |
347 QVERIFY(model.insertRow(2)); |
344 QSqlRecord rec = model.record(1); |
348 QSqlRecord rec = model.record(1); |
359 QSqlDatabase db = QSqlDatabase::database(dbName); |
363 QSqlDatabase db = QSqlDatabase::database(dbName); |
360 CHECK_DATABASE(db); |
364 CHECK_DATABASE(db); |
361 |
365 |
362 QSqlTableModel model(0, db); |
366 QSqlTableModel model(0, db); |
363 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
367 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
364 model.setTable(qTableName("test")); |
368 model.setTable(test); |
365 model.setSort(0, Qt::AscendingOrder); |
369 model.setSort(0, Qt::AscendingOrder); |
366 QVERIFY_SQL(model, select()); |
370 QVERIFY_SQL(model, select()); |
367 |
371 |
368 QSqlRecord rec = model.record(); |
372 QSqlRecord rec = model.record(); |
369 rec.setValue(0, 42); |
373 rec.setValue(0, 42); |
392 QSqlDatabase db = QSqlDatabase::database(dbName); |
396 QSqlDatabase db = QSqlDatabase::database(dbName); |
393 CHECK_DATABASE(db); |
397 CHECK_DATABASE(db); |
394 |
398 |
395 QSqlTableModel model(0, db); |
399 QSqlTableModel model(0, db); |
396 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
400 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
397 model.setTable(qTableName("test")); |
401 model.setTable(test); |
398 model.setSort(0, Qt::AscendingOrder); |
402 model.setSort(0, Qt::AscendingOrder); |
399 QVERIFY_SQL(model, select()); |
403 QVERIFY_SQL(model, select()); |
400 |
404 |
401 QCOMPARE(model.rowCount(), 3); |
405 QCOMPARE(model.rowCount(), 3); |
402 |
406 |
419 QVERIFY(model.setData(model.index(4, 1), QVariant(QLatin1String("gunnar")))); |
423 QVERIFY(model.setData(model.index(4, 1), QVariant(QLatin1String("gunnar")))); |
420 QVERIFY(model.setData(model.index(4, 2), QVariant(1))); |
424 QVERIFY(model.setData(model.index(4, 2), QVariant(1))); |
421 |
425 |
422 QVERIFY(model.submitAll()); |
426 QVERIFY(model.submitAll()); |
423 model.clear(); |
427 model.clear(); |
424 model.setTable(qTableName("test")); |
428 model.setTable(test); |
425 model.setSort(0, Qt::AscendingOrder); |
429 model.setSort(0, Qt::AscendingOrder); |
426 QVERIFY_SQL(model, select()); |
430 QVERIFY_SQL(model, select()); |
427 |
431 |
428 QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); |
432 QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); |
429 QCOMPARE(model.data(model.index(1, 0)).toInt(), 2); |
433 QCOMPARE(model.data(model.index(1, 0)).toInt(), 2); |
440 QFETCH(QString, dbName); |
444 QFETCH(QString, dbName); |
441 QSqlDatabase db = QSqlDatabase::database(dbName); |
445 QSqlDatabase db = QSqlDatabase::database(dbName); |
442 CHECK_DATABASE(db); |
446 CHECK_DATABASE(db); |
443 |
447 |
444 QSqlTableModel model(0, db); |
448 QSqlTableModel model(0, db); |
445 model.setTable(qTableName("test")); |
449 model.setTable(test); |
446 model.setSort(0, Qt::AscendingOrder); |
450 model.setSort(0, Qt::AscendingOrder); |
447 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
451 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
448 QVERIFY_SQL(model, select()); |
452 QVERIFY_SQL(model, select()); |
449 |
453 |
450 QVERIFY(model.setData(model.index(0, 1), "harry2", Qt::EditRole)); |
454 QVERIFY(model.setData(model.index(0, 1), "harry2", Qt::EditRole)); |
475 QFETCH(QString, dbName); |
479 QFETCH(QString, dbName); |
476 QSqlDatabase db = QSqlDatabase::database(dbName); |
480 QSqlDatabase db = QSqlDatabase::database(dbName); |
477 CHECK_DATABASE(db); |
481 CHECK_DATABASE(db); |
478 |
482 |
479 QSqlTableModel model(0, db); |
483 QSqlTableModel model(0, db); |
480 model.setTable(qTableName("test")); |
484 model.setTable(test); |
481 model.setSort(0, Qt::AscendingOrder); |
485 model.setSort(0, Qt::AscendingOrder); |
482 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
486 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
483 QVERIFY_SQL(model, select()); |
487 QVERIFY_SQL(model, select()); |
484 QCOMPARE(model.rowCount(), 3); |
488 QCOMPARE(model.rowCount(), 3); |
485 |
489 |
500 QCOMPARE(model.data(model.index(1, 0)).toInt(), 3); |
504 QCOMPARE(model.data(model.index(1, 0)).toInt(), 3); |
501 model.clear(); |
505 model.clear(); |
502 |
506 |
503 recreateTestTables(); |
507 recreateTestTables(); |
504 |
508 |
505 model.setTable(qTableName("test")); |
509 model.setTable(test); |
506 model.setEditStrategy(QSqlTableModel::OnRowChange); |
510 model.setEditStrategy(QSqlTableModel::OnRowChange); |
507 QVERIFY_SQL(model, select()); |
511 QVERIFY_SQL(model, select()); |
508 QCOMPARE(model.rowCount(), 3); |
512 QCOMPARE(model.rowCount(), 3); |
509 |
513 |
510 headerDataChangedSpy.clear(); |
514 headerDataChangedSpy.clear(); |
521 QFETCH(QString, dbName); |
525 QFETCH(QString, dbName); |
522 QSqlDatabase db = QSqlDatabase::database(dbName); |
526 QSqlDatabase db = QSqlDatabase::database(dbName); |
523 CHECK_DATABASE(db); |
527 CHECK_DATABASE(db); |
524 |
528 |
525 QSqlTableModel model(0, db); |
529 QSqlTableModel model(0, db); |
526 model.setTable(qTableName("test")); |
530 model.setTable(test); |
527 model.setSort(0, Qt::AscendingOrder); |
531 model.setSort(0, Qt::AscendingOrder); |
528 model.setEditStrategy(QSqlTableModel::OnFieldChange); |
532 model.setEditStrategy(QSqlTableModel::OnFieldChange); |
529 QVERIFY_SQL(model, select()); |
533 QVERIFY_SQL(model, select()); |
530 QCOMPARE(model.rowCount(), 3); |
534 QCOMPARE(model.rowCount(), 3); |
531 |
535 |
537 QCOMPARE(model.rowCount(), 1); |
541 QCOMPARE(model.rowCount(), 1); |
538 QCOMPARE(model.data(model.index(0, 1)).toString(), QString("vohi")); |
542 QCOMPARE(model.data(model.index(0, 1)).toString(), QString("vohi")); |
539 model.clear(); |
543 model.clear(); |
540 |
544 |
541 recreateTestTables(); |
545 recreateTestTables(); |
542 model.setTable(qTableName("test")); |
546 model.setTable(test); |
543 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
547 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
544 QVERIFY_SQL(model, select()); |
548 QVERIFY_SQL(model, select()); |
545 QCOMPARE(model.rowCount(), 3); |
549 QCOMPARE(model.rowCount(), 3); |
546 beforeDeleteSpy.clear(); |
550 beforeDeleteSpy.clear(); |
547 |
551 |
572 CHECK_DATABASE(db); |
576 CHECK_DATABASE(db); |
573 |
577 |
574 for (int i = 0; i <= 1; ++i) { |
578 for (int i = 0; i <= 1; ++i) { |
575 |
579 |
576 QSqlTableModel model(0, db); |
580 QSqlTableModel model(0, db); |
577 model.setTable(qTableName("test")); |
581 model.setTable(test); |
578 model.setSort(0, Qt::AscendingOrder); |
582 model.setSort(0, Qt::AscendingOrder); |
579 |
583 |
580 model.setEditStrategy(i == 0 |
584 model.setEditStrategy(i == 0 |
581 ? QSqlTableModel::OnRowChange : QSqlTableModel::OnManualSubmit); |
585 ? QSqlTableModel::OnRowChange : QSqlTableModel::OnManualSubmit); |
582 QVERIFY_SQL(model, select()); |
586 QVERIFY_SQL(model, select()); |
605 |
609 |
606 QSqlTableModel model(0, db); |
610 QSqlTableModel model(0, db); |
607 QCOMPARE(model.rowCount(), 0); |
611 QCOMPARE(model.rowCount(), 0); |
608 QCOMPARE(model.columnCount(), 0); |
612 QCOMPARE(model.columnCount(), 0); |
609 |
613 |
610 model.setTable(qTableName("emptytable")); |
614 model.setTable(qTableName("emptytable", __FILE__)); |
611 QCOMPARE(model.rowCount(), 0); |
615 QCOMPARE(model.rowCount(), 0); |
612 QCOMPARE(model.columnCount(), 1); |
616 QCOMPARE(model.columnCount(), 1); |
613 |
617 |
614 QVERIFY_SQL(model, select()); |
618 QVERIFY_SQL(model, select()); |
615 QCOMPARE(model.rowCount(), 0); |
619 QCOMPARE(model.rowCount(), 0); |
621 QFETCH(QString, dbName); |
625 QFETCH(QString, dbName); |
622 QSqlDatabase db = QSqlDatabase::database(dbName); |
626 QSqlDatabase db = QSqlDatabase::database(dbName); |
623 CHECK_DATABASE(db); |
627 CHECK_DATABASE(db); |
624 |
628 |
625 QSqlQuery q(db); |
629 QSqlQuery q(db); |
626 q.exec("DROP SCHEMA " + qTableName("testschema") + " CASCADE"); |
630 q.exec("DROP SCHEMA " + qTableName("testschema", __FILE__) + " CASCADE"); |
627 QVERIFY_SQL( q, exec("create schema " + qTableName("testschema"))); |
631 QVERIFY_SQL( q, exec("create schema " + qTableName("testschema", __FILE__))); |
628 QString tableName = qTableName("testschema") + '.' + qTableName("testtable"); |
632 QString tableName = qTableName("testschema", __FILE__) + '.' + qTableName("testtable", __FILE__); |
629 QVERIFY_SQL( q, exec("create table " + tableName + "(id int)")); |
633 QVERIFY_SQL( q, exec("create table " + tableName + "(id int)")); |
630 QVERIFY_SQL( q, exec("insert into " + tableName + " values(1)")); |
634 QVERIFY_SQL( q, exec("insert into " + tableName + " values(1)")); |
631 QVERIFY_SQL( q, exec("insert into " + tableName + " values(2)")); |
635 QVERIFY_SQL( q, exec("insert into " + tableName + " values(2)")); |
632 |
636 |
633 QSqlTableModel model(0, db); |
637 QSqlTableModel model(0, db); |
662 QSqlQuery q(db); |
666 QSqlQuery q(db); |
663 |
667 |
664 if(tst_Databases::isPostgreSQL(db)) |
668 if(tst_Databases::isPostgreSQL(db)) |
665 QVERIFY_SQL( q, exec("set client_min_messages='warning'")); |
669 QVERIFY_SQL( q, exec("set client_min_messages='warning'")); |
666 |
670 |
667 QVERIFY_SQL( q, exec("create table "+qTableName("foo")+"(a varchar(20), id int not null primary key, b varchar(20))")); |
671 QVERIFY_SQL( q, exec("create table "+qTableName("foo", __FILE__)+"(a varchar(20), id int not null primary key, b varchar(20))")); |
668 |
672 |
669 QSqlTableModel model(0, db); |
673 QSqlTableModel model(0, db); |
670 model.setTable(qTableName("foo")); |
674 model.setTable(qTableName("foo", __FILE__)); |
671 |
675 |
672 QSqlIndex pk = model.primaryKey(); |
676 QSqlIndex pk = model.primaryKey(); |
673 QCOMPARE(pk.count(), 1); |
677 QCOMPARE(pk.count(), 1); |
674 QCOMPARE(pk.fieldName(0), QLatin1String("id")); |
678 QCOMPARE(pk.fieldName(0), QLatin1String("id")); |
675 |
679 |
691 QSqlDatabase db = QSqlDatabase::database(dbName); |
695 QSqlDatabase db = QSqlDatabase::database(dbName); |
692 CHECK_DATABASE(db); |
696 CHECK_DATABASE(db); |
693 |
697 |
694 // set an invalid filter, make sure it fails |
698 // set an invalid filter, make sure it fails |
695 QSqlTableModel model(0, db); |
699 QSqlTableModel model(0, db); |
696 model.setTable(qTableName("test")); |
700 model.setTable(test); |
697 model.setFilter("blahfahsel"); |
701 model.setFilter("blahfahsel"); |
698 |
702 |
699 QCOMPARE(model.filter(), QString("blahfahsel")); |
703 QCOMPARE(model.filter(), QString("blahfahsel")); |
700 QVERIFY(!model.select()); |
704 QVERIFY(!model.select()); |
701 |
705 |
709 QFETCH(QString, dbName); |
713 QFETCH(QString, dbName); |
710 QSqlDatabase db = QSqlDatabase::database(dbName); |
714 QSqlDatabase db = QSqlDatabase::database(dbName); |
711 CHECK_DATABASE(db); |
715 CHECK_DATABASE(db); |
712 |
716 |
713 QSqlTableModel model(0, db); |
717 QSqlTableModel model(0, db); |
714 model.setTable(qTableName("test")); |
718 model.setTable(test); |
715 model.setFilter("id = 1"); |
719 model.setFilter("id = 1"); |
716 QCOMPARE(model.filter(), QString("id = 1")); |
720 QCOMPARE(model.filter(), QString("id = 1")); |
717 QVERIFY_SQL(model, select()); |
721 QVERIFY_SQL(model, select()); |
718 |
722 |
719 QCOMPARE(model.rowCount(), 1); |
723 QCOMPARE(model.rowCount(), 1); |
760 void tst_QSqlTableModel::sqlite_bigTable() |
764 void tst_QSqlTableModel::sqlite_bigTable() |
761 { |
765 { |
762 QFETCH(QString, dbName); |
766 QFETCH(QString, dbName); |
763 QSqlDatabase db = QSqlDatabase::database(dbName); |
767 QSqlDatabase db = QSqlDatabase::database(dbName); |
764 CHECK_DATABASE(db); |
768 CHECK_DATABASE(db); |
|
769 const QString bigtable(qTableName("bigtable", __FILE__)); |
765 |
770 |
766 bool hasTransactions = db.driver()->hasFeature(QSqlDriver::Transactions); |
771 bool hasTransactions = db.driver()->hasFeature(QSqlDriver::Transactions); |
767 if (hasTransactions) QVERIFY(db.transaction()); |
772 if (hasTransactions) QVERIFY(db.transaction()); |
768 QSqlQuery q(db); |
773 QSqlQuery q(db); |
769 QVERIFY_SQL( q, exec("create table "+qTableName("bigtable")+"(id int primary key, name varchar)")); |
774 QVERIFY_SQL( q, exec("create table "+bigtable+"(id int primary key, name varchar)")); |
770 QVERIFY_SQL( q, prepare("insert into "+qTableName("bigtable")+"(id, name) values (?, ?)")); |
775 QVERIFY_SQL( q, prepare("insert into "+bigtable+"(id, name) values (?, ?)")); |
771 QTime startTime; |
776 QTime startTime; |
772 startTime.start(); |
777 startTime.start(); |
773 for (int i = 0; i < 10000; ++i) { |
778 for (int i = 0; i < 10000; ++i) { |
774 q.addBindValue(i); |
779 q.addBindValue(i); |
775 q.addBindValue(QString::number(i)); |
780 q.addBindValue(QString::number(i)); |
779 } |
784 } |
780 q.clear(); |
785 q.clear(); |
781 if (hasTransactions) QVERIFY(db.commit()); |
786 if (hasTransactions) QVERIFY(db.commit()); |
782 |
787 |
783 QSqlTableModel model(0, db); |
788 QSqlTableModel model(0, db); |
784 model.setTable(qTableName("bigtable")); |
789 model.setTable(bigtable); |
785 QVERIFY_SQL(model, select()); |
790 QVERIFY_SQL(model, select()); |
786 |
791 |
787 QSqlRecord rec = model.record(); |
792 QSqlRecord rec = model.record(); |
788 rec.setValue("id", 424242); |
793 rec.setValue("id", 424242); |
789 rec.setValue("name", "Guillaume"); |
794 rec.setValue("name", "Guillaume"); |
799 QFETCH(QString, dbName); |
804 QFETCH(QString, dbName); |
800 QSqlDatabase db = QSqlDatabase::database(dbName); |
805 QSqlDatabase db = QSqlDatabase::database(dbName); |
801 CHECK_DATABASE(db); |
806 CHECK_DATABASE(db); |
802 |
807 |
803 QSqlTableModel model(0, db); |
808 QSqlTableModel model(0, db); |
804 model.setTable(qTableName("test")); |
809 model.setTable(test); |
805 QCOMPARE(model.lastError().type(), QSqlError::NoError); |
810 QCOMPARE(model.lastError().type(), QSqlError::NoError); |
806 |
811 |
807 QSqlRecord buffer = model.record(); |
812 QSqlRecord buffer = model.record(); |
808 buffer.setValue("id", 13); |
813 buffer.setValue("id", 13); |
809 buffer.setValue("name", QString("The Lion King")); |
814 buffer.setValue("name", QString("The Lion King")); |
818 int rowCount = model.rowCount(); |
823 int rowCount = model.rowCount(); |
819 model.clear(); |
824 model.clear(); |
820 QCOMPARE(model.rowCount(), 0); |
825 QCOMPARE(model.rowCount(), 0); |
821 |
826 |
822 QSqlTableModel model2(0, db); |
827 QSqlTableModel model2(0, db); |
823 model2.setTable(qTableName("test")); |
828 model2.setTable(test); |
824 QVERIFY_SQL(model2, select()); |
829 QVERIFY_SQL(model2, select()); |
825 QCOMPARE(model2.rowCount(), rowCount); |
830 QCOMPARE(model2.rowCount(), rowCount); |
826 } |
831 } |
827 |
832 |
828 // For task 118547: set errors if table doesn't exist and if records |
833 // For task 118547: set errors if table doesn't exist and if records |
836 QSqlTableModel model(0, db); |
841 QSqlTableModel model(0, db); |
837 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
842 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
838 |
843 |
839 // setTable returns a void, so the error can only be caught by |
844 // setTable returns a void, so the error can only be caught by |
840 // manually checking lastError(). ### Qt5: This should be changed! |
845 // manually checking lastError(). ### Qt5: This should be changed! |
841 model.setTable(qTableName("invalidTable")); |
846 model.setTable(qTableName("invalidTable", __FILE__)); |
842 QCOMPARE(model.lastError().type(), QSqlError::StatementError); |
847 QCOMPARE(model.lastError().type(), QSqlError::StatementError); |
843 |
848 |
844 // This will give us an empty record which is expected behavior |
849 // This will give us an empty record which is expected behavior |
845 QSqlRecord buffer = model.record(); |
850 QSqlRecord buffer = model.record(); |
846 buffer.setValue("bogus", 1000); |
851 buffer.setValue("bogus", 1000); |
864 QFETCH(QString, dbName); |
869 QFETCH(QString, dbName); |
865 QSqlDatabase db = QSqlDatabase::database(dbName); |
870 QSqlDatabase db = QSqlDatabase::database(dbName); |
866 CHECK_DATABASE(db); |
871 CHECK_DATABASE(db); |
867 |
872 |
868 QSqlTableModel model(0, db); |
873 QSqlTableModel model(0, db); |
869 model.setTable(qTableName("test")); |
874 model.setTable(test); |
870 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
875 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
871 model.select(); |
876 model.select(); |
872 |
877 |
873 QSqlRecord record = model.record(); |
878 QSqlRecord record = model.record(); |
874 record.setValue(0, 10); |
879 record.setValue(0, 10); |
950 QFETCH(QString, dbName); |
955 QFETCH(QString, dbName); |
951 QSqlDatabase db = QSqlDatabase::database(dbName); |
956 QSqlDatabase db = QSqlDatabase::database(dbName); |
952 CHECK_DATABASE(db); |
957 CHECK_DATABASE(db); |
953 |
958 |
954 QSqlTableModel model(0, db); |
959 QSqlTableModel model(0, db); |
955 model.setTable(qTableName("test4")); |
960 model.setTable(qTableName("test4", __FILE__)); |
956 model.select(); |
961 model.select(); |
957 |
962 |
958 //generate a time stamp for the test. Add one second to the current time to make sure |
963 //generate a time stamp for the test. Add one second to the current time to make sure |
959 //it is different than the QSqlQuery test. |
964 //it is different than the QSqlQuery test. |
960 QString timeString=QDateTime::currentDateTime().addSecs(1).toString(Qt::ISODate); |
965 QString timeString=QDateTime::currentDateTime().addSecs(1).toString(Qt::ISODate); |
1006 QFETCH(QString, dbName); |
1011 QFETCH(QString, dbName); |
1007 QSqlDatabase db = QSqlDatabase::database(dbName); |
1012 QSqlDatabase db = QSqlDatabase::database(dbName); |
1008 CHECK_DATABASE(db); |
1013 CHECK_DATABASE(db); |
1009 |
1014 |
1010 QSqlTableModel model(0, db); |
1015 QSqlTableModel model(0, db); |
1011 model.setTable(qTableName("test")); |
1016 model.setTable(test); |
1012 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
1017 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
1013 QVERIFY_SQL(model, select()); |
1018 QVERIFY_SQL(model, select()); |
1014 QCOMPARE(model.rowCount(), 3); |
1019 QCOMPARE(model.rowCount(), 3); |
1015 QCOMPARE(model.columnCount(), 3); |
1020 QCOMPARE(model.columnCount(), 3); |
1016 |
1021 |
1021 QCOMPARE(model.columnCount(), 2); |
1026 QCOMPARE(model.columnCount(), 2); |
1022 |
1027 |
1023 // check with another table because the model has been modified |
1028 // check with another table because the model has been modified |
1024 // but not the sql table |
1029 // but not the sql table |
1025 QSqlTableModel model2(0, db); |
1030 QSqlTableModel model2(0, db); |
1026 model2.setTable(qTableName("test")); |
1031 model2.setTable(test); |
1027 QVERIFY_SQL(model2, select()); |
1032 QVERIFY_SQL(model2, select()); |
1028 QCOMPARE(model2.rowCount(), 2); |
1033 QCOMPARE(model2.rowCount(), 2); |
1029 QCOMPARE(model2.columnCount(), 3); |
1034 QCOMPARE(model2.columnCount(), 3); |
1030 } |
1035 } |
1031 |
1036 |
1034 QFETCH(QString, dbName); |
1039 QFETCH(QString, dbName); |
1035 QSqlDatabase db = QSqlDatabase::database(dbName); |
1040 QSqlDatabase db = QSqlDatabase::database(dbName); |
1036 CHECK_DATABASE(db); |
1041 CHECK_DATABASE(db); |
1037 |
1042 |
1038 QSqlQuery q(db); |
1043 QSqlQuery q(db); |
1039 QVERIFY_SQL( q, exec("insert into " + qTableName("test") + " values(9, 'andrew', 9)")); |
1044 QVERIFY_SQL( q, exec("insert into " + test + " values(9, 'andrew', 9)")); |
1040 QVERIFY_SQL( q, exec("insert into " + qTableName("test") + " values(10, 'justin', 10)")); |
1045 QVERIFY_SQL( q, exec("insert into " + test + " values(10, 'justin', 10)")); |
1041 |
1046 |
1042 QSqlTableModel model(0, db); |
1047 QSqlTableModel model(0, db); |
1043 model.setTable(qTableName("test")); |
1048 model.setTable(test); |
1044 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
1049 model.setEditStrategy(QSqlTableModel::OnManualSubmit); |
1045 QVERIFY_SQL(model, select()); |
1050 QVERIFY_SQL(model, select()); |
1046 |
1051 |
1047 QSqlRecord rec = model.record(); |
1052 QSqlRecord rec = model.record(); |
1048 rec.setValue(0, 4); |
1053 rec.setValue(0, 4); |