diff options
author | Thomas Steur <tsteur@users.noreply.github.com> | 2020-12-21 03:04:26 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-21 03:04:26 +0300 |
commit | 8de1465ac92d20eddc7219078c86399d5c8eb634 (patch) | |
tree | f91be6e1f9b036c41265485b3affc14e90e75344 | |
parent | bd0008ad74d3c9c0e8ff8d3bcf42eef1f0e77fe3 (diff) |
fix potential error in reports purge query (#16988)
* fix potential error in reports purge query
* add test
-rw-r--r-- | plugins/PrivacyManager/ReportsPurger.php | 7 | ||||
-rw-r--r-- | plugins/PrivacyManager/tests/System/PurgeDataTest.php | 26 |
2 files changed, 30 insertions, 3 deletions
diff --git a/plugins/PrivacyManager/ReportsPurger.php b/plugins/PrivacyManager/ReportsPurger.php index a3f875f391..68d1546038 100644 --- a/plugins/PrivacyManager/ReportsPurger.php +++ b/plugins/PrivacyManager/ReportsPurger.php @@ -274,8 +274,13 @@ class ReportsPurger { $maxIdArchive = Db::fetchOne("SELECT MAX(idarchive) FROM $table"); + $blobTableWhere = $this->getBlobTableWhereExpr($oldNumericTables, $table); + if (empty($blobTableWhere)) { + return 0; + } + $sql = "SELECT COUNT(*) FROM $table - WHERE " . $this->getBlobTableWhereExpr($oldNumericTables, $table) . " + WHERE " . $blobTableWhere . " AND idarchive >= ? AND idarchive < ?"; diff --git a/plugins/PrivacyManager/tests/System/PurgeDataTest.php b/plugins/PrivacyManager/tests/System/PurgeDataTest.php index 22710ed7e4..e6aaeee430 100644 --- a/plugins/PrivacyManager/tests/System/PurgeDataTest.php +++ b/plugins/PrivacyManager/tests/System/PurgeDataTest.php @@ -141,6 +141,28 @@ class PurgeDataTest extends SystemTestCase $this->assertHasNoDownload('year'); } + public function test_purgeData_shouldPurgeEverything_IfNoPeriodToKeepIsGivenAndBasicMetricsNotKeptSegmentsKept() + { + $this->assertHasOneDownload('day'); + $this->assertHasOneDownload('week'); + $this->assertHasOneDownload('month'); + $this->assertHasOneDownload('year'); + + $deleteReportsOlderThan = 1; + $keepBasicMetrics = false; + $reportPeriodsToKeep = array(); + $this->purgeData($deleteReportsOlderThan, $reportPeriodsToKeep, $keepBasicMetrics, true); + + $this->assertNumVisits(0, 'day'); + $this->assertNumVisits(0, 'week'); + $this->assertNumVisits(0, 'month'); + $this->assertNumVisits(0, 'year'); + $this->assertHasNoDownload('day'); + $this->assertHasNoDownload('week'); + $this->assertHasNoDownload('month'); + $this->assertHasNoDownload('year'); + } + private function assertNumVisits($expectedNumVisits, $period) { $url = 'method=VisitsSummary.getVisits' @@ -176,14 +198,14 @@ class PurgeDataTest extends SystemTestCase . '&format=original'; } - private function purgeData($deleteReportsOlderThan, $reportPeriodsToKeep, $keepBasicMetrics) + private function purgeData($deleteReportsOlderThan, $reportPeriodsToKeep, $keepBasicMetrics, $keepSegmentReports = false) { $metricsToKeep = PrivacyManager::getAllMetricsToKeep(); $maxRowsToDeletePerQuery = 100000; - $keepSegmentReports = false; $purger = new ReportsPurger($deleteReportsOlderThan, $keepBasicMetrics, $reportPeriodsToKeep, $keepSegmentReports, $metricsToKeep, $maxRowsToDeletePerQuery); + $purger->getPurgeEstimate(); $purger->purgeData(); } } |