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:
Diffstat (limited to 'core/DataAccess/RawLogDao.php')
-rw-r--r--core/DataAccess/RawLogDao.php65
1 files changed, 39 insertions, 26 deletions
diff --git a/core/DataAccess/RawLogDao.php b/core/DataAccess/RawLogDao.php
index c933d17f63..27bb33563b 100644
--- a/core/DataAccess/RawLogDao.php
+++ b/core/DataAccess/RawLogDao.php
@@ -12,6 +12,7 @@ use Piwik\Common;
use Piwik\Container\StaticContainer;
use Piwik\Db;
use Piwik\Plugin\Dimension\DimensionMetadataProvider;
+use Piwik\Plugin\LogTablesProvider;
/**
* DAO that queries log tables.
@@ -25,9 +26,15 @@ class RawLogDao
*/
private $dimensionMetadataProvider;
- public function __construct(DimensionMetadataProvider $provider = null)
+ /**
+ * @var LogTablesProvider
+ */
+ private $logTablesProvider;
+
+ public function __construct(DimensionMetadataProvider $provider = null, LogTablesProvider $logTablesProvider = null)
{
$this->dimensionMetadataProvider = $provider ?: StaticContainer::get('Piwik\Plugin\Dimension\DimensionMetadataProvider');
+ $this->logTablesProvider = $logTablesProvider ?: StaticContainer::get('Piwik\Plugin\LogTablesProvider');
}
/**
@@ -226,22 +233,15 @@ class RawLogDao
return Db::query($sql, array_merge(array_values($values), array($idVisit)));
}
- private function getIdFieldForLogTable($logTable)
+ protected function getIdFieldForLogTable($logTable)
{
- switch ($logTable) {
- case 'log_visit':
- return 'idvisit';
- case 'log_link_visit_action':
- return 'idlink_va';
- case 'log_conversion':
- return 'idvisit';
- case 'log_conversion_item':
- return 'idvisit';
- case 'log_action':
- return 'idaction';
- default:
- throw new \InvalidArgumentException("Unknown log table '$logTable'.");
+ $idColumns = $this->getTableIdColumns();
+
+ if (isset($idColumns[$logTable])) {
+ return $idColumns[$logTable];
}
+
+ throw new \InvalidArgumentException("Unknown log table '$logTable'.");
}
// TODO: instead of creating a log query like this, we should re-use segments. to do this, however, there must be a 1-1
@@ -291,11 +291,10 @@ class RawLogDao
return $sql;
}
-
- private function getMaxIdsInLogTables()
+ protected function getMaxIdsInLogTables()
{
- $tables = array('log_conversion', 'log_link_visit_action', 'log_visit', 'log_conversion_item');
$idColumns = $this->getTableIdColumns();
+ $tables = array_keys($idColumns);
$result = array();
foreach ($tables as $table) {
@@ -349,8 +348,17 @@ class RawLogDao
private function lockLogTables()
{
+ $tables = $this->getTableIdColumns();
+ unset($tables['log_action']); // we write lock it
+ $tableNames = array_keys($tables);
+
+ $readLocks = array();
+ foreach ($tableNames as $tableName) {
+ $readLocks[] = Common::prefixTable($tableName);
+ }
+
Db::lockTables(
- $readLocks = Common::prefixTables('log_conversion', 'log_link_visit_action', 'log_visit', 'log_conversion_item'),
+ $readLocks,
$writeLocks = Common::prefixTables('log_action')
);
}
@@ -367,13 +375,18 @@ class RawLogDao
Db::query($deleteSql);
}
- private function getTableIdColumns()
+ protected function getTableIdColumns()
{
- return array(
- 'log_link_visit_action' => 'idlink_va',
- 'log_conversion' => 'idvisit',
- 'log_visit' => 'idvisit',
- 'log_conversion_item' => 'idvisit'
- );
+ $columns = array();
+
+ foreach ($this->logTablesProvider->getAllLogTables() as $logTable) {
+ $idColumn = $logTable->getIdColumn();
+
+ if (!empty($idColumn)) {
+ $columns[$logTable->getName()] = $idColumn;
+ }
+ }
+
+ return $columns;
}
}