tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp
changeset 19 fcece45ef507
parent 18 2f34d5167611
child 14 c0432d11811c
equal deleted inserted replaced
18:2f34d5167611 19:fcece45ef507
    41 
    41 
    42 
    42 
    43 #include <QtTest/QtTest>
    43 #include <QtTest/QtTest>
    44 #include "../qsqldatabase/tst_databases.h"
    44 #include "../qsqldatabase/tst_databases.h"
    45 #include <QtSql>
    45 #include <QtSql>
       
    46 
       
    47 const QString test(qTableName("test", __FILE__)),
       
    48                    test2(qTableName("test2", __FILE__)),
       
    49                    test3(qTableName("test3", __FILE__));
    46 
    50 
    47 //TESTED_CLASS=
    51 //TESTED_CLASS=
    48 //TESTED_FILES=
    52 //TESTED_FILES=
    49 
    53 
    50 Q_DECLARE_METATYPE(QModelIndex)
    54 Q_DECLARE_METATYPE(QModelIndex)
   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);