From aa34669b7d23fa693cfde157f8da635e009e0ae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matth=C3=A4us=20Wander?= Date: Mon, 6 Mar 2023 14:16:38 +0100 Subject: [PATCH] deduplicate over (domain, org, id), not just over id WARNING: This change requires to alter your database index. Mysql: ALTER TABLE report DROP INDEX domain, ADD UNIQUE KEY domain (domain, org, reportid); --- dbx_Pg.pl | 2 +- dbx_mysql.pl | 2 +- dmarcts-report-parser.pl | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dbx_Pg.pl b/dbx_Pg.pl index b7ca176..e3a4239 100644 --- a/dbx_Pg.pl +++ b/dbx_Pg.pl @@ -29,7 +29,7 @@ additional_definitions => "PRIMARY KEY (serial)", table_options => "", indexes => [ - "CREATE UNIQUE INDEX report_uidx_domain ON report (domain, reportid);" + "CREATE UNIQUE INDEX report_uidx_domain ON report (domain, org, reportid);" ], }, "rptrecord" => { diff --git a/dbx_mysql.pl b/dbx_mysql.pl index 3c72750..b4d2be1 100644 --- a/dbx_mysql.pl +++ b/dbx_mysql.pl @@ -26,7 +26,7 @@ "policy_pct" , "tinyint" , "unsigned", "raw_xml" , "mediumtext" , "", ], - additional_definitions => "PRIMARY KEY (serial), UNIQUE KEY domain (domain, reportid)", + additional_definitions => "PRIMARY KEY (serial), UNIQUE KEY domain (domain, org, reportid)", table_options => "ROW_FORMAT=COMPRESSED", indexes => [], }, diff --git a/dmarcts-report-parser.pl b/dmarcts-report-parser.pl index 5873256..2ef8f14 100755 --- a/dmarcts-report-parser.pl +++ b/dmarcts-report-parser.pl @@ -813,8 +813,8 @@ sub storeXMLInDatabase { } # see if already stored - my $sth = $dbh->prepare(qq{SELECT org, serial FROM report WHERE reportid=?}); - $sth->execute($id); + my $sth = $dbh->prepare(qq{SELECT org, serial FROM report WHERE reportid=? AND org=? AND domain=?}); + $sth->execute($id, $org, $domain); while ( my ($xorg,$sid) = $sth->fetchrow_array() ) { if ($reports_replace) {