summaryrefslogtreecommitdiffstats
path: root/mappingtreemodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mappingtreemodel.cpp')
-rw-r--r--mappingtreemodel.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/mappingtreemodel.cpp b/mappingtreemodel.cpp
index 1babac1..eed686b 100644
--- a/mappingtreemodel.cpp
+++ b/mappingtreemodel.cpp
@@ -38,7 +38,7 @@ MappingTreeModel::MappingTreeModel(QStringList &headers, QObject *parent) : SmTr
mSelectChildQ = new QSqlQuery(mDb);
mSelectChildQ->prepare("SELECT imapping_id, tmapping_name, tscreated FROM mappings WHERE tmapping_name = :name AND imapping_type = :type");
mAddParentQ = new QSqlQuery(mDb);
- mAddParentQ->prepare("INSERT INTO mappings_parents (imapping_id, iparent_id) VALUES(:id, :parentid)");
+ mAddParentQ->prepare("INSERT INTO mappings_parents2 (imapping_id, iparent_id) VALUES(:id, :parentid)");
mDeleteChildQ = new QSqlQuery(mDb);
mDeleteChildQ->prepare("DELETE FROM mappings WHERE imapping_id = :id");
mUpdateParentQ = new QSqlQuery(mDb);
@@ -301,18 +301,30 @@ bool MappingTreeModel::addChild(const QVariant &name, const QModelIndex &parent)
id = addChild(name.toString(), mType);
}
//now check if we already have a mapping with the same parent
+ mDb.transaction();
mAddParentQ->bindValue(":id", id);
- mAddParentQ->bindValue(":parentid", parent.data(IdRole));
+ // seems we're a child of root
+ QVariant ppId = parent.data(IdRole).isValid() ? parent.data(IdRole) : -1;
+ mAddParentQ->bindValue(":parentid", ppId);
if(!mAddParentQ->exec()){
+ mLastError = mAddParentQ->lastError();
+ mDb.rollback();
return false;
}
//we're good now... db makes sure we're unique
SmTreeItem *pItem = itemAt(parent);
int where = lowerBound(pItem, name, Name);
if(insertRows(where, 1, parent)){
+ QSqlQuery pIdQuery = QSqlQuery("SELECT currval('mappings_parents_id__seq')", mDb);
+ int parentId = -1;
+ while(pIdQuery.next()){
+ parentId = pIdQuery.value(0).toInt();
+ }
QModelIndex newIdx = index(where, 0, parent);
setData(newIdx, name, NameRole);
setData(newIdx, id, IdRole);
+ setData(newIdx, parentId, MapParentIdRole);
+ mDb.commit();
return true;
}
return false;