diff --git a/internal/database/mariadb/migration.go b/internal/database/mariadb/migration.go index bf3cf062..6aec42e2 100644 --- a/internal/database/mariadb/migration.go +++ b/internal/database/mariadb/migration.go @@ -73,7 +73,8 @@ func (s *SqlDatabase) openMigration() (*migrate.Migrate, error) { m, err := migrate.NewWithInstance( "iofs", d, - "mysql", driver) + "mysql", driver, + ) if err != nil { return nil, err } @@ -403,7 +404,7 @@ func (s *SqlDatabase) proceduresExist(procedures []string) (bool, error) { func (s *SqlDatabase) runPostMigrationProcessInBackground(procs []string) { s.runPostMigrationProceduresInBackground(procs) - s.runPostMigrationCleanupRoutineInBackground(procs) + s.runPostMigrationCleanupRoutineInBackground() } func (s *SqlDatabase) runPostMigrationProceduresInBackground(procs []string) { @@ -416,7 +417,7 @@ func (s *SqlDatabase) runPostMigrationProceduresInBackground(procs []string) { } } -func (s *SqlDatabase) runPostMigrationCleanupRoutineInBackground(procs []string) { +func (s *SqlDatabase) runPostMigrationCleanupRoutineInBackground() { go func() { if err := s.WaitPostMigrations(); err != nil { logrus.WithError(err).Error(err) diff --git a/internal/database/mariadb/migrations/20260504154924_change_join_kind.down.sql b/internal/database/mariadb/migrations/20260504154924_change_join_kind.down.sql new file mode 100644 index 00000000..f9434554 --- /dev/null +++ b/internal/database/mariadb/migrations/20260504154924_change_join_kind.down.sql @@ -0,0 +1,62 @@ +-- SPDX-FileCopyrightText: 2026 SAP SE or an SAP affiliate company and Greenhouse contributors +-- SPDX-License-Identifier: Apache-2.0 + +DROP PROCEDURE IF EXISTS refresh_mvCountIssueRatingsServiceId_proc; + +CREATE PROCEDURE refresh_mvCountIssueRatingsServiceId_proc() +BEGIN + UPDATE mvCountIssueRatingsServiceId + SET is_active = 0 + WHERE is_active = 1; + + INSERT INTO mvCountIssueRatingsServiceId ( + service_id, + service_ccrn, + critical_count, + high_count, + medium_count, + low_count, + none_count, + is_active + ) + SELECT + CI.componentinstance_service_id, + S.service_ccrn, + COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'Critical' + THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END), + COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'High' + THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END), + COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'Medium' + THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END), + COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'Low' + THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END), + COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'None' + THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END), + 1 + FROM Issue I + LEFT JOIN IssueVariant IV ON IV.issuevariant_issue_id = I.issue_id + LEFT JOIN IssueMatch IM ON I.issue_id = IM.issuematch_issue_id + LEFT JOIN ComponentInstance CI + ON CI.componentinstance_id = IM.issuematch_component_instance_id + AND CI.componentinstance_deleted_at IS NULL + LEFT JOIN Service S ON S.service_id = CI.componentinstance_service_id + LEFT JOIN Remediation R + ON CI.componentinstance_service_id = R.remediation_service_id + AND I.issue_id = R.remediation_issue_id + AND R.remediation_deleted_at IS NULL + WHERE I.issue_deleted_at IS NULL + AND IM.issuematch_id IS NOT NULL + AND (R.remediation_id IS NULL OR R.remediation_expiration_date < CURDATE()) + GROUP BY CI.componentinstance_service_id + ON DUPLICATE KEY UPDATE + service_ccrn = VALUES(service_ccrn), + critical_count = VALUES(critical_count), + high_count = VALUES(high_count), + medium_count = VALUES(medium_count), + low_count = VALUES(low_count), + none_count = VALUES(none_count), + is_active = 1; + + DELETE FROM mvCountIssueRatingsServiceId + WHERE is_active = 0; +END; \ No newline at end of file diff --git a/internal/database/mariadb/migrations/20260504154924_change_join_kind.up.sql b/internal/database/mariadb/migrations/20260504154924_change_join_kind.up.sql new file mode 100644 index 00000000..7853125b --- /dev/null +++ b/internal/database/mariadb/migrations/20260504154924_change_join_kind.up.sql @@ -0,0 +1,62 @@ +-- SPDX-FileCopyrightText: 2026 SAP SE or an SAP affiliate company and Greenhouse contributors +-- SPDX-License-Identifier: Apache-2.0 + +DROP PROCEDURE IF EXISTS refresh_mvCountIssueRatingsServiceId_proc; + +CREATE PROCEDURE refresh_mvCountIssueRatingsServiceId_proc() +BEGIN + UPDATE mvCountIssueRatingsServiceId + SET is_active = 0 + WHERE is_active = 1; + + INSERT INTO mvCountIssueRatingsServiceId ( + service_id, + service_ccrn, + critical_count, + high_count, + medium_count, + low_count, + none_count, + is_active + ) + SELECT + CI.componentinstance_service_id, + S.service_ccrn, + COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'Critical' + THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END), + COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'High' + THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END), + COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'Medium' + THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END), + COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'Low' + THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END), + COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'None' + THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END), + 1 + FROM Issue I + LEFT JOIN IssueVariant IV ON IV.issuevariant_issue_id = I.issue_id + LEFT JOIN IssueMatch IM ON I.issue_id = IM.issuematch_issue_id + LEFT JOIN ComponentInstance CI + ON CI.componentinstance_id = IM.issuematch_component_instance_id + AND CI.componentinstance_deleted_at IS NULL + JOIN Service S ON S.service_id = CI.componentinstance_service_id + LEFT JOIN Remediation R + ON CI.componentinstance_service_id = R.remediation_service_id + AND I.issue_id = R.remediation_issue_id + AND R.remediation_deleted_at IS NULL + WHERE I.issue_deleted_at IS NULL + AND IM.issuematch_id IS NOT NULL + AND (R.remediation_id IS NULL OR R.remediation_expiration_date < CURDATE()) + GROUP BY CI.componentinstance_service_id + ON DUPLICATE KEY UPDATE + service_ccrn = VALUES(service_ccrn), + critical_count = VALUES(critical_count), + high_count = VALUES(high_count), + medium_count = VALUES(medium_count), + low_count = VALUES(low_count), + none_count = VALUES(none_count), + is_active = 1; + + DELETE FROM mvCountIssueRatingsServiceId + WHERE is_active = 0; +END; \ No newline at end of file