void ServicesDb::insertRelationMembers(long mapId, long relationId, ElementType type, long elementId, QString role, int sequenceId) { _checkLastMapId(mapId); if (_insertRelationMembers == 0) { _insertRelationMembers.reset(new QSqlQuery(_db)); _insertRelationMembers->prepare( "INSERT INTO " + _getRelationMembersTableName(mapId) + " (relation_id, member_type, member_id, member_role, sequence_id) " "VALUES (:relation_id, :member_type, :member_id, :member_role, :sequence_id)"); } _insertRelationMembers->bindValue(":relation_id", (qlonglong)relationId); _insertRelationMembers->bindValue(":member_type", type.toString().toLower()); _insertRelationMembers->bindValue(":member_id", (qlonglong)elementId); _insertRelationMembers->bindValue(":member_role", role); _insertRelationMembers->bindValue(":sequence_id", sequenceId); if (!_insertRelationMembers->exec()) { throw HootException("Error inserting relation memeber: " + _insertRelationMembers->lastError().text()); } }
void ServicesDb::deleteMap(long mapId) { _dropTable(_getRelationMembersTableName(mapId)); _dropTable(_getRelationsTableName(mapId)); _dropTable(_getWayNodesTableName(mapId)); _dropTable(_getWaysTableName(mapId)); _dropTable(_getNodesTableName(mapId)); _dropTable(_getChangesetsTableName(mapId)); _execNoPrepare("DROP SEQUENCE IF EXISTS " + _getNodeSequenceName(mapId) + " CASCADE"); _execNoPrepare("DROP SEQUENCE IF EXISTS " + _getWaySequenceName(mapId) + " CASCADE"); _execNoPrepare("DROP SEQUENCE IF EXISTS " + _getRelationSequenceName(mapId) + " CASCADE"); _exec("DELETE FROM maps WHERE id=:id", (qlonglong)mapId); }
vector<RelationData::Entry> OsmApiDb::selectMembersForRelation(long relationId) { vector<RelationData::Entry> result; if (!_selectMembersForRelation) { _selectMembersForRelation.reset(new QSqlQuery(_db)); _selectMembersForRelation->setForwardOnly(true); _selectMembersForRelation->prepare( "SELECT member_type, member_id, member_role FROM " + _getRelationMembersTableName() + " WHERE relation_id = :relationId ORDER BY sequence_id"); } _selectMembersForRelation->bindValue(":relationId", (qlonglong)relationId); if (_selectMembersForRelation->exec() == false) { throw HootException("Error selecting members for relation with ID: " + QString::number(relationId) + " Error: " + _selectMembersForRelation->lastError().text()); } while (_selectMembersForRelation->next()) { const QString memberType = _selectMembersForRelation->value(0).toString(); if (ElementType::isValidTypeString(memberType)) { result.push_back( RelationData::Entry( _selectMembersForRelation->value(2).toString(), ElementId(ElementType::fromString(memberType), _selectMembersForRelation->value(1).toLongLong()))); } else { LOG_WARN("Invalid relation member type: " + memberType + ". Skipping relation member."); } } return result; }