std::vector<DbQuery> queries;
- /* Ensure to delete all comments and then insert any or none.
- * We must purge obsolete comments in the database at all cost. */
-
- DbQuery query1;
- query1.Table = "comments";
- query1.Type = DbQueryDelete;
- query1.Category = DbCatComment;
- query1.WhereCriteria = new Dictionary();
- query1.WhereCriteria->Set("object_id", checkable);
- queries.push_back(query1);
-
BOOST_FOREACH(const Comment::Ptr& comment, comments) {
AddCommentInternal(queries, comment, false);
}
void DbEvents::AddComment(const Comment::Ptr& comment)
{
std::vector<DbQuery> queries;
- RemoveCommentInternal(queries, comment);
AddCommentInternal(queries, comment, false);
DbObject::OnMultipleQueries(queries);
}
DbQuery query1;
if (!historical) {
query1.Table = "comments";
+ query1.Type = DbQueryInsert | DbQueryUpdate;
+
+ fields1->Set("session_token", 0); /* DbConnection class fills in real ID */
+
+ query1.WhereCriteria = new Dictionary();
+ query1.WhereCriteria->Set("internal_comment_id", comment->GetLegacyId());
+ query1.WhereCriteria->Set("object_id", checkable);
+ query1.WhereCriteria->Set("comment_time", DbValue::FromTimestamp(entry_time));
+ query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
} else {
query1.Table = "commenthistory";
+ query1.Type = DbQueryInsert;
}
- query1.Type = DbQueryInsert;
query1.Category = DbCatComment;
query1.Fields = fields1;
DbQuery query1;
- if (!historical)
+ if (!historical) {
query1.Table = "scheduleddowntime";
- else
+ query1.Type = DbQueryInsert | DbQueryUpdate;
+
+ fields1->Set("session_token", 0); /* DbConnection class fills in real ID */
+
+ query1.WhereCriteria = new Dictionary();
+ 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 */
+ } else {
query1.Table = "downtimehistory";
+ query1.Type = DbQueryInsert;
+ }
- query1.Type = DbQueryInsert;
query1.Category = DbCatDowntime;
query1.Fields = fields1;
ClearTableBySession("hostgroup_members");
ClearTableBySession("servicegroup_members");
ClearTableBySession("contactgroup_members");
+ ClearTableBySession("comments");
+ ClearTableBySession("scheduleddowntime");
}
void IdoMysqlConnection::ClearTableBySession(const String& table)
expires smallint default 0,
expiration_time timestamp default '0000-00-00 00:00:00',
name TEXT character set latin1 default NULL,
+ session_token int default NULL,
PRIMARY KEY (comment_id),
UNIQUE KEY instance_id (instance_id,object_id,comment_time,internal_comment_id)
) ENGINE=InnoDB COMMENT='Usercomments on Icinga objects';
CREATE INDEX idx_cv_session_del ON icinga_customvariables (instance_id, session_token);
CREATE INDEX idx_cvs_session_del ON icinga_customvariablestatus (instance_id, session_token);
+CREATE INDEX idx_comments_session_del ON icinga_comments (instance_id, session_token);
+
-- #12107
CREATE INDEX idx_statehistory_cleanup on icinga_statehistory(instance_id, state_time);
CREATE INDEX idx_cv_session_del ON icinga_customvariables (instance_id, session_token);
CREATE INDEX idx_cvs_session_del ON icinga_customvariablestatus (instance_id, session_token);
+-- -----------------------------------------
+-- #12258
+-- -----------------------------------------
+ALTER TABLE icinga_comments ADD COLUMN session_token INTEGER default NULL;
+ALTER TABLE icinga_scheduleddowntime ADD COLUMN session_token INTEGER default NULL;
+
+CREATE INDEX idx_comments_session_del ON icinga_comments (instance_id, session_token);
+CREATE INDEX idx_downtimes_session_del ON icinga_scheduleddowntime (instance_id, session_token);
+
-- -----------------------------------------
-- set dbversion
-- -----------------------------------------
ClearTableBySession("hostgroup_members");
ClearTableBySession("servicegroup_members");
ClearTableBySession("contactgroup_members");
+ ClearTableBySession("comments");
+ ClearTableBySession("scheduleddowntime");
}
void IdoPgsqlConnection::ClearTableBySession(const String& table)
expires INTEGER default 0,
expiration_time timestamp with time zone default '1970-01-01 00:00:00+00',
name TEXT default NULL,
+ session_token INTEGER default NULL,
CONSTRAINT PK_comment_id PRIMARY KEY (comment_id) ,
CONSTRAINT UQ_comments UNIQUE (instance_id,object_id,comment_time,internal_comment_id)
) ;
is_in_effect INTEGER default 0,
trigger_time timestamp with time zone default '1970-01-01 00:00:00+00',
name TEXT default NULL,
+ session_token INTEGER default NULL,
CONSTRAINT PK_scheduleddowntime_id PRIMARY KEY (scheduleddowntime_id) ,
CONSTRAINT UQ_scheduleddowntime UNIQUE (instance_id,object_id,entry_time,internal_downtime_id)
) ;
CREATE INDEX idx_sg_session_del ON icinga_servicegroup_members (instance_id, session_token);
CREATE INDEX idx_cg_session_del ON icinga_contactgroup_members (instance_id, session_token);
+CREATE INDEX idx_comments_session_del ON icinga_comments (instance_id, session_token);
+CREATE INDEX idx_downtimes_session_del ON icinga_scheduleddowntime (instance_id, session_token);
+
CREATE INDEX idx_cv_session_del ON icinga_customvariables (instance_id, session_token);
CREATE INDEX idx_cvs_session_del ON icinga_customvariablestatus (instance_id, session_token);
CREATE INDEX idx_cv_session_del ON icinga_customvariables (instance_id, session_token);
CREATE INDEX idx_cvs_session_del ON icinga_customvariablestatus (instance_id, session_token);
+-- -----------------------------------------
+-- #12258
+-- -----------------------------------------
+ALTER TABLE icinga_comments ADD COLUMN session_token INTEGER default NULL;
+ALTER TABLE icinga_scheduleddowntime ADD COLUMN session_token INTEGER default NULL;
+
+CREATE INDEX idx_comments_session_del ON icinga_comments (instance_id, session_token);
+CREATE INDEX idx_downtimes_session_del ON icinga_scheduleddowntime (instance_id, session_token);
+
-- -----------------------------------------
-- #12107
-- -----------------------------------------