41 lines
1.2 KiB
Ruby
41 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class AddUpdateVulnerabilityReadsLocationTrigger < Gitlab::Database::Migration[1.0]
|
|
include Gitlab::Database::SchemaHelpers
|
|
|
|
TRIGGER_NAME = 'trigger_update_location_on_vulnerability_occurrences_update'
|
|
FUNCTION_NAME = 'update_location_from_vulnerability_occurrences'
|
|
|
|
def up
|
|
create_trigger_function(FUNCTION_NAME, replace: true) do
|
|
<<~SQL
|
|
UPDATE
|
|
vulnerability_reads
|
|
SET
|
|
location_image = NEW.location->>'image',
|
|
cluster_agent_id = NEW.location->'kubernetes_resource'->>'agent_id'
|
|
WHERE
|
|
vulnerability_id = NEW.vulnerability_id;
|
|
RETURN NULL;
|
|
SQL
|
|
end
|
|
|
|
execute(<<~SQL)
|
|
CREATE TRIGGER #{TRIGGER_NAME}
|
|
AFTER UPDATE ON vulnerability_occurrences
|
|
FOR EACH ROW
|
|
WHEN (
|
|
NEW.report_type IN (2, 7) AND (
|
|
OLD.location->>'image' IS DISTINCT FROM NEW.location->>'image' OR
|
|
OLD.location->'kubernetes_resource'->>'agent_id' IS DISTINCT FROM NEW.location->'kubernetes_resource'->>'agent_id'
|
|
)
|
|
)
|
|
EXECUTE PROCEDURE #{FUNCTION_NAME}();
|
|
SQL
|
|
end
|
|
|
|
def down
|
|
drop_trigger(:vulnerability_occurrences, TRIGGER_NAME)
|
|
drop_function(FUNCTION_NAME)
|
|
end
|
|
end
|