improvements to ModifiedRow

-remove unnecessary explicit copy constructor
-explicitly inline constructor
-more convenient initialization

Change-Id: I78b275ef9d5413f95278a044345e42303dc35624
Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
bb10
Mark Brand 2011-07-06 10:58:56 +02:00 committed by Qt by Nokia
parent 7785227214
commit 2eaccc08d3
2 changed files with 19 additions and 16 deletions

View File

@ -574,12 +574,11 @@ bool QSqlTableModel::setData(const QModelIndex &index, const QVariant &value, in
case OnManualSubmit: {
QSqlTableModelPrivate::ModifiedRow &row = d->cache[index.row()];
if (row.op == QSqlTableModelPrivate::None) {
row.op = QSqlTableModelPrivate::Update;
row.rec = d->rec;
QSqlTableModelPrivate::clearGenerated(row.rec);
row.primaryValues = d->primaryValues(indexInQuery(index).row());
row = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Update,
d->rec,
d->primaryValues(indexInQuery(index).row()));
}
QSqlTableModelPrivate::setGeneratedValue(row.rec, index.column(), value);
row.setValue(index.column(), value);
emit dataChanged(index, index);
break; }
}
@ -1120,8 +1119,9 @@ bool QSqlTableModel::removeRows(int row, int count, const QModelIndex &parent)
// so fake this by adjusting row
--row;
} else {
d->cache[idx].op = QSqlTableModelPrivate::Delete;
d->cache[idx].primaryValues = d->primaryValues(indexInQuery(createIndex(idx, 0)).row());
d->cache[idx] = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Delete,
QSqlRecord(),
d->primaryValues(indexInQuery(createIndex(idx, 0)).row()));
emit headerDataChanged(Qt::Vertical, idx, idx);
}
}
@ -1338,18 +1338,16 @@ bool QSqlTableModel::setRecord(int row, const QSqlRecord &record)
return d->setRecord(row, record);
case OnManualSubmit: {
QSqlTableModelPrivate::ModifiedRow &mrow = d->cache[row];
if (mrow.op == QSqlTableModelPrivate::None) {
mrow.op = QSqlTableModelPrivate::Update;
mrow.rec = d->rec;
QSqlTableModelPrivate::clearGenerated(mrow.rec);
mrow.primaryValues = d->primaryValues(indexInQuery(createIndex(row, 0)).row());
}
if (mrow.op == QSqlTableModelPrivate::None)
mrow = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Update,
d->rec,
d->primaryValues(indexInQuery(createIndex(row, 0)).row()));
for (int i = 0; i < record.count(); ++i) {
int idx = d->nameToIndex(record.fieldName(i));
if (idx == -1) {
isOk = false;
} else {
QSqlTableModelPrivate::setGeneratedValue(mrow.rec, idx, record.value(i));
mrow.setValue(idx, record.value(i));
}
}

View File

@ -102,8 +102,13 @@ public:
struct ModifiedRow
{
ModifiedRow(Op o = None, const QSqlRecord &r = QSqlRecord()): op(o), rec(r) { clearGenerated(rec);}
ModifiedRow(const ModifiedRow &other): op(other.op), rec(other.rec), primaryValues(other.primaryValues) {}
inline ModifiedRow(Op o = None, const QSqlRecord &r = QSqlRecord(), const QSqlRecord &pVals = QSqlRecord())
: op(o), rec(r), primaryValues(pVals) { clearGenerated(rec); }
inline void setValue(int c, const QVariant &v)
{
rec.setValue(c, v);
rec.setGenerated(c, true);
}
Op op;
QSqlRecord rec;
QSqlRecord primaryValues;