Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Steur <tsteur@users.noreply.github.com>2020-12-21 03:04:26 +0300
committerGitHub <noreply@github.com>2020-12-21 03:04:26 +0300
commit8de1465ac92d20eddc7219078c86399d5c8eb634 (patch)
treef91be6e1f9b036c41265485b3affc14e90e75344
parentbd0008ad74d3c9c0e8ff8d3bcf42eef1f0e77fe3 (diff)
fix potential error in reports purge query (#16988)
* fix potential error in reports purge query * add test
-rw-r--r--plugins/PrivacyManager/ReportsPurger.php7
-rw-r--r--plugins/PrivacyManager/tests/System/PurgeDataTest.php26
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();
}
}