refactor QSqlTableModel::setData()

-move logic out of switch statement
-clear cache more clearly for OnFieldChange
-call setValue() in one place instead of two
-eliminate extra return path

Existing idiosyncracies have been kept for the time
being.

Change-Id: Ia4c5a5fd3e374b53e3c4d870f2ee9d37b5090917
Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
This commit is contained in:
Mark Brand 2011-07-07 11:52:11 +02:00 committed by Qt by Nokia
parent 11bd543d90
commit f6e3f24683

View File

@ -475,51 +475,33 @@ bool QSqlTableModel::setData(const QModelIndex &index, const QVariant &value, in
if (!index.isValid() || index.column() >= d->rec.count() || index.row() >= rowCount())
return false;
bool isOk = true;
switch (d->strategy) {
case OnFieldChange: {
QSqlTableModelPrivate::ModifiedRow &row = d->cache[index.row()];
if (row.op == QSqlTableModelPrivate::Insert) {
row.setValue(index.column(), value);
return true;
}
if (d->strategy == OnFieldChange && d->cache.value(index.row()).op != QSqlTableModelPrivate::Insert) {
d->cache.clear();
} else if (d->strategy == OnRowChange && !d->cache.isEmpty() && !d->cache.contains(index.row())) {
submit();
d->cache.clear();
}
QSqlTableModelPrivate::ModifiedRow &row = d->cache[index.row()];
if (row.op == QSqlTableModelPrivate::None) {
row = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Update,
d->rec,
d->primaryValues(indexInQuery(index).row()));
row.setValue(index.column(), value);
}
row.setValue(index.column(), value);
bool isOk = true;
if (d->strategy == OnFieldChange && row.op != QSqlTableModelPrivate::Insert) {
isOk = updateRowInTable(index.row(), row.rec);
if (isOk)
select();
emit dataChanged(index, index);
break; }
case OnRowChange: {
if (!d->cache.isEmpty() && !d->cache.contains(index.row())) {
submit();
d->cache.clear();
}
QSqlTableModelPrivate::ModifiedRow &row = d->cache[index.row()];
if (row.op == QSqlTableModelPrivate::Insert) {
row.setValue(index.column(), value);
return true;
} else if (row.op == QSqlTableModelPrivate::None) {
row = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Update,
d->rec,
d->primaryValues(indexInQuery(index).row()));
}
row.setValue(index.column(), value);
emit dataChanged(index, index);
break; }
case OnManualSubmit: {
QSqlTableModelPrivate::ModifiedRow &row = d->cache[index.row()];
if (row.op == QSqlTableModelPrivate::None) {
row = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Update,
d->rec,
d->primaryValues(indexInQuery(index).row()));
}
row.setValue(index.column(), value);
emit dataChanged(index, index);
break; }
}
if (d->strategy == OnManualSubmit || row.op != QSqlTableModelPrivate::Insert)
emit dataChanged(index, index);
return isOk;
}