]> granicus.if.org Git - icinga2/blobdiff - lib/db_ido/servicegroupdbobject.cpp
Fix: Changing a group's attributes causes duplicate rows in the icinga_*group_members...
[icinga2] / lib / db_ido / servicegroupdbobject.cpp
index b0fbefee62665eaa4921738b8ba464124d9a736c..3d5f92baa18c3f532ca809ddd750d5b338ddf82a 100644 (file)
@@ -54,15 +54,24 @@ void ServiceGroupDbObject::OnConfigUpdate(void)
 {
        ServiceGroup::Ptr group = static_pointer_cast<ServiceGroup>(GetObject());
 
+       DbQuery query1;
+       query1.Table = DbType::GetByName("ServiceGroup")->GetTable() + "_members";
+       query1.Type = DbQueryDelete;
+       query1.Category = DbCatConfig;
+       query1.WhereCriteria = new Dictionary();
+       query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
+       query1.WhereCriteria->Set("servicegroup_id", DbValue::FromObjectInsertID(group));
+       OnQuery(query1);
+
        BOOST_FOREACH(const Service::Ptr& service, group->GetMembers()) {
-               DbQuery query1;
-               query1.Table = DbType::GetByName("ServiceGroup")->GetTable() + "_members";
-               query1.Type = DbQueryInsert;
-               query1.Category = DbCatConfig;
-               query1.Fields = new Dictionary();
-               query1.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
-               query1.Fields->Set("servicegroup_id", DbValue::FromObjectInsertID(group));
-               query1.Fields->Set("service_object_id", service);
-               OnQuery(query1);
+               DbQuery query2;
+               query2.Table = DbType::GetByName("ServiceGroup")->GetTable() + "_members";
+               query2.Type = DbQueryInsert;
+               query2.Category = DbCatConfig;
+               query2.Fields = new Dictionary();
+               query2.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
+               query2.Fields->Set("servicegroup_id", DbValue::FromObjectInsertID(group));
+               query2.Fields->Set("service_object_id", service);
+               OnQuery(query2);
        }
 }