{
Q_D(const QSqlQueryModel);
if (item.column() < 0 || item.column() >= d->rec.count()
- || !d->rec.isGenerated(item.column()))
+ || !d->rec.isGenerated(item.column())
+ || item.column() >= d->colOffsets.size())
return QModelIndex();
return createIndex(item.row(), item.column() - d->colOffsets[item.column()],
item.internalPointer());
{
rec = db.record(tableName);
primaryIndex = db.primaryIndex(tableName);
+ initColOffsets(rec.count());
}
void QSqlTableModelPrivate::clear()
clear();
d->tableName = tableName;
d->initRecordAndPrimaryIndex();
- d->initColOffsets(d->rec.count());
if (d->rec.count() == 0)
d->error = QSqlError(QLatin1String("Unable to find table ") + d->tableName, QString(),
void insertBeforeDelete_data() { generic_data(); }
void insertBeforeDelete();
+
+ void invalidFilterAndHeaderData_data() { generic_data(); }
+ void invalidFilterAndHeaderData(); //QTBUG-23879
private:
void generic_data(const QString& engine=QString());
void generic_data_with_strategies(const QString& engine=QString());
QCOMPARE(model.rowCount(), 5);
}
+void tst_QSqlTableModel::invalidFilterAndHeaderData()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlTableModel model(0, db);
+ model.setTable(test);
+ model.setEditStrategy(QSqlTableModel::OnManualSubmit);
+ QVERIFY_SQL(model, select());
+ QVERIFY_SQL(model, setHeaderData(0, Qt::Horizontal, "id"));
+ QVERIFY_SQL(model, setHeaderData(1, Qt::Horizontal, "name"));
+ QVERIFY_SQL(model, setHeaderData(2, Qt::Horizontal, "title"));
+
+ model.setFilter("some nonsense");
+
+ QVariant v = model.headerData(0, Qt::Horizontal, Qt::SizeHintRole);
+ QVERIFY(!v.isValid());
+}
+
QTEST_MAIN(tst_QSqlTableModel)
#include "tst_qsqltablemodel.moc"