Permalink
Browse files

Fixed the validation of relationships. Now fk relationships are deleted

when the fk no longer exists on table.
  • Loading branch information...
rkhaotix committed Dec 17, 2012
1 parent 179cc72 commit a39cccbd5b917d4b39ad1213a82a38a3adb4fda4
Showing with 22 additions and 2 deletions.
  1. +22 −2 libpgmodeler/src/modelobd.cpp
@@ -920,8 +920,8 @@ void ModeloBD::atualizarRelFkTabela(Tabela *tabela)
rel=dynamic_cast<BaseRelationship *>(*itr1);
//Caso a visão seja um dos elementos do relacionamento
- if(rel->getTable(BaseRelationship::SRC_TABLE)==tabela &&
- rel->getTable(BaseRelationship::DST_TABLE)->getObjectType()==OBJ_TABLE)
+ if(rel->getRelationshipType()==BaseRelationship::RELATIONSHIP_FK &&
+ rel->getTable(BaseRelationship::SRC_TABLE)==tabela)
{
ref_tab=dynamic_cast<Tabela *>(rel->getTable(BaseRelationship::DST_TABLE));
@@ -1309,6 +1309,26 @@ void ModeloBD::validarRelacionamentos(void)
método de recriação dos objetos especiais */
xml_objs_especiais.clear();
+ /* Revalida os relacionamentos gerados por chave estrangeira em caso de erro,
+ pois se uma chave estrangeira que referenciava uma coluna que deixou de existir
+ o relacionamento que a representa também deve ser removido */
+ itr=relac_genericos.begin();
+ itr_end=relac_genericos.end();
+
+ while(itr!=itr_end)
+ {
+ //Obtém um relacionamento generico
+ rel_base=dynamic_cast<BaseRelationship *>(*itr);
+
+ if(rel_base->getRelationshipType()==BaseRelationship::RELATIONSHIP_FK)
+ this->atualizarRelFkTabela(dynamic_cast<Tabela *>(rel_base->getTable(BaseRelationship::SRC_TABLE)));
+
+ itr++;
+ }
+
+ //Define os objetos como modificados para forçar seu redesenho
+ this->definirObjetosModificados();
+
throw Exception(ERR_INVALIDATED_OBJECTS,__PRETTY_FUNCTION__,__FILE__,__LINE__,vet_erros);
}
}

0 comments on commit a39cccb

Please sign in to comment.