Fix where clauses for downtime/comment DB IDO queries using a non-matching legacy id before

fixes #5458 #5492
This commit is contained in:
Jean Flach 2017-09-19 13:14:57 +02:00 committed by Michael Friedrich
parent 4df1125114
commit 1b54772b85
1 changed files with 19 additions and 15 deletions

View File

@ -374,10 +374,10 @@ void DbEvents::AddCommentInternal(std::vector<DbQuery>& queries, const Comment::
fields1->Set("session_token", 0); /* DbConnection class fills in real ID */ fields1->Set("session_token", 0); /* DbConnection class fills in real ID */
query1.WhereCriteria = new Dictionary(); query1.WhereCriteria = new Dictionary();
query1.WhereCriteria->Set("internal_comment_id", comment->GetLegacyId());
query1.WhereCriteria->Set("object_id", checkable); query1.WhereCriteria->Set("object_id", checkable);
query1.WhereCriteria->Set("comment_time", DbValue::FromTimestamp(entry_time)); query1.WhereCriteria->Set("comment_time", DbValue::FromTimestamp(entry_time));
query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */ query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
query1.WhereCriteria->Set("name", comment->GetName());
} else { } else {
query1.Table = "commenthistory"; query1.Table = "commenthistory";
query1.Type = DbQueryInsert; query1.Type = DbQueryInsert;
@ -407,10 +407,10 @@ void DbEvents::RemoveCommentInternal(std::vector<DbQuery>& queries, const Commen
query1.Type = DbQueryDelete; query1.Type = DbQueryDelete;
query1.Category = DbCatComment; query1.Category = DbCatComment;
query1.WhereCriteria = new Dictionary(); query1.WhereCriteria = new Dictionary();
query1.WhereCriteria->Set("internal_comment_id", comment->GetLegacyId());
query1.WhereCriteria->Set("object_id", checkable); query1.WhereCriteria->Set("object_id", checkable);
query1.WhereCriteria->Set("comment_time", DbValue::FromTimestamp(entry_time)); query1.WhereCriteria->Set("comment_time", DbValue::FromTimestamp(entry_time));
query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */ query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
query1.WhereCriteria->Set("name", comment->GetName());
queries.push_back(query1); queries.push_back(query1);
/* History - update deletion time for service/host */ /* History - update deletion time for service/host */
@ -428,10 +428,10 @@ void DbEvents::RemoveCommentInternal(std::vector<DbQuery>& queries, const Commen
query2.Fields = fields2; query2.Fields = fields2;
query2.WhereCriteria = new Dictionary(); query2.WhereCriteria = new Dictionary();
query2.WhereCriteria->Set("internal_comment_id", comment->GetLegacyId());
query2.WhereCriteria->Set("object_id", checkable); query2.WhereCriteria->Set("object_id", checkable);
query2.WhereCriteria->Set("comment_time", DbValue::FromTimestamp(entry_time)); query2.WhereCriteria->Set("comment_time", DbValue::FromTimestamp(entry_time));
query2.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */ query2.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
query2.WhereCriteria->Set("name", comment->GetName());
queries.push_back(query2); queries.push_back(query2);
} }
@ -483,7 +483,6 @@ void DbEvents::AddDowntimeInternal(std::vector<DbQuery>& queries, const Downtime
return; return;
} }
fields1->Set("name", downtime->GetName());
fields1->Set("author_name", downtime->GetAuthor()); fields1->Set("author_name", downtime->GetAuthor());
fields1->Set("comment_data", downtime->GetComment()); fields1->Set("comment_data", downtime->GetComment());
fields1->Set("triggered_by_id", Downtime::GetByName(downtime->GetTriggeredBy())); fields1->Set("triggered_by_id", Downtime::GetByName(downtime->GetTriggeredBy()));
@ -491,6 +490,7 @@ void DbEvents::AddDowntimeInternal(std::vector<DbQuery>& queries, const Downtime
fields1->Set("duration", downtime->GetDuration()); fields1->Set("duration", downtime->GetDuration());
fields1->Set("scheduled_start_time", DbValue::FromTimestamp(downtime->GetStartTime())); fields1->Set("scheduled_start_time", DbValue::FromTimestamp(downtime->GetStartTime()));
fields1->Set("scheduled_end_time", DbValue::FromTimestamp(downtime->GetEndTime())); fields1->Set("scheduled_end_time", DbValue::FromTimestamp(downtime->GetEndTime()));
fields1->Set("name", downtime->GetName());
/* flexible downtimes are started at trigger time */ /* flexible downtimes are started at trigger time */
if (downtime->GetFixed()) { if (downtime->GetFixed()) {
@ -520,9 +520,11 @@ void DbEvents::AddDowntimeInternal(std::vector<DbQuery>& queries, const Downtime
query1.WhereCriteria = new Dictionary(); query1.WhereCriteria = new Dictionary();
query1.WhereCriteria->Set("object_id", checkable); query1.WhereCriteria->Set("object_id", checkable);
query1.WhereCriteria->Set("internal_downtime_id", downtime->GetLegacyId());
query1.WhereCriteria->Set("entry_time", DbValue::FromTimestamp(downtime->GetEntryTime())); query1.WhereCriteria->Set("entry_time", DbValue::FromTimestamp(downtime->GetEntryTime()));
query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */ query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
query1.WhereCriteria->Set("scheduled_start_time", DbValue::FromTimestamp(downtime->GetStartTime()));
query1.WhereCriteria->Set("scheduled_end_time", DbValue::FromTimestamp(downtime->GetEndTime()));
query1.WhereCriteria->Set("name", downtime->GetName());
} else { } else {
query1.Table = "downtimehistory"; query1.Table = "downtimehistory";
query1.Type = DbQueryInsert; query1.Type = DbQueryInsert;
@ -585,9 +587,11 @@ void DbEvents::RemoveDowntimeInternal(std::vector<DbQuery>& queries, const Downt
query1.Category = DbCatDowntime; query1.Category = DbCatDowntime;
query1.WhereCriteria = new Dictionary(); query1.WhereCriteria = new Dictionary();
query1.WhereCriteria->Set("object_id", checkable); query1.WhereCriteria->Set("object_id", checkable);
query1.WhereCriteria->Set("internal_downtime_id", downtime->GetLegacyId());
query1.WhereCriteria->Set("entry_time", DbValue::FromTimestamp(downtime->GetEntryTime())); query1.WhereCriteria->Set("entry_time", DbValue::FromTimestamp(downtime->GetEntryTime()));
query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */ query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
query1.WhereCriteria->Set("scheduled_start_time", DbValue::FromTimestamp(downtime->GetStartTime()));
query1.WhereCriteria->Set("scheduled_end_time", DbValue::FromTimestamp(downtime->GetEndTime()));
query1.WhereCriteria->Set("name", downtime->GetName());
queries.push_back(query1); queries.push_back(query1);
/* History - update actual_end_time, was_cancelled for service (and host in case) */ /* History - update actual_end_time, was_cancelled for service (and host in case) */
@ -612,9 +616,11 @@ void DbEvents::RemoveDowntimeInternal(std::vector<DbQuery>& queries, const Downt
query3.WhereCriteria = new Dictionary(); query3.WhereCriteria = new Dictionary();
query3.WhereCriteria->Set("object_id", checkable); query3.WhereCriteria->Set("object_id", checkable);
query3.WhereCriteria->Set("internal_downtime_id", downtime->GetLegacyId());
query3.WhereCriteria->Set("entry_time", DbValue::FromTimestamp(downtime->GetEntryTime())); query3.WhereCriteria->Set("entry_time", DbValue::FromTimestamp(downtime->GetEntryTime()));
query3.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */ query3.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
query3.WhereCriteria->Set("scheduled_start_time", DbValue::FromTimestamp(downtime->GetStartTime()));
query3.WhereCriteria->Set("scheduled_end_time", DbValue::FromTimestamp(downtime->GetEndTime()));
query3.WhereCriteria->Set("name", downtime->GetName());
queries.push_back(query3); queries.push_back(query3);
@ -673,7 +679,11 @@ void DbEvents::TriggerDowntime(const Downtime::Ptr& downtime)
query1.WhereCriteria = new Dictionary(); query1.WhereCriteria = new Dictionary();
query1.WhereCriteria->Set("object_id", checkable); query1.WhereCriteria->Set("object_id", checkable);
query1.WhereCriteria->Set("internal_downtime_id", downtime->GetLegacyId()); query1.WhereCriteria->Set("entry_time", DbValue::FromTimestamp(downtime->GetEntryTime()));
query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
query1.WhereCriteria->Set("scheduled_start_time", DbValue::FromTimestamp(downtime->GetStartTime()));
query1.WhereCriteria->Set("scheduled_end_time", DbValue::FromTimestamp(downtime->GetEndTime()));
query1.WhereCriteria->Set("name", downtime->GetName());
query1.Fields = fields1; query1.Fields = fields1;
DbObject::OnQuery(query1); DbObject::OnQuery(query1);
@ -692,13 +702,7 @@ void DbEvents::TriggerDowntime(const Downtime::Ptr& downtime)
fields3->Set("trigger_time", DbValue::FromTimestamp(downtime->GetTriggerTime())); fields3->Set("trigger_time", DbValue::FromTimestamp(downtime->GetTriggerTime()));
query3.Fields = fields3; query3.Fields = fields3;
query3.WhereCriteria = new Dictionary(); query3.WhereCriteria = query1.WhereCriteria;
query3.WhereCriteria->Set("object_id", checkable);
query3.WhereCriteria->Set("internal_downtime_id", downtime->GetLegacyId());
query3.WhereCriteria->Set("entry_time", DbValue::FromTimestamp(downtime->GetEntryTime()));
query3.WhereCriteria->Set("scheduled_start_time", DbValue::FromTimestamp(downtime->GetStartTime()));
query3.WhereCriteria->Set("scheduled_end_time", DbValue::FromTimestamp(downtime->GetEndTime()));
query3.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
DbObject::OnQuery(query3); DbObject::OnQuery(query3);