diff options
Diffstat (limited to 'mappingtreemodel.cpp')
-rw-r--r-- | mappingtreemodel.cpp | 16 |
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; |