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
path: root/core
diff options
context:
space:
mode:
authormattab <matthieu.aubry@gmail.com>2013-06-18 09:24:06 +0400
committermattab <matthieu.aubry@gmail.com>2013-06-18 09:24:06 +0400
commite61b8958733ede26a524bc228b85a07bacec21c0 (patch)
tree60bf26d17b8f5a2c93ff2f9adc5350bb62634f55 /core
parent5a59fd9f50c3abeb7c67acf3745a1f0549a82878 (diff)
Removing TablePartitioning from codebase, since it was rather ugly. Introducing ArchiveTableCreator
Diffstat (limited to 'core')
-rw-r--r--core/DataAccess/ArchiveTableCreator.php50
-rw-r--r--core/DataTable/Manager.php2
-rw-r--r--core/Db/Schema/Myisam.php3
-rw-r--r--core/TablePartitioning.php135
4 files changed, 48 insertions, 142 deletions
diff --git a/core/DataAccess/ArchiveTableCreator.php b/core/DataAccess/ArchiveTableCreator.php
index f5f1c44287..c932639fdb 100644
--- a/core/DataAccess/ArchiveTableCreator.php
+++ b/core/DataAccess/ArchiveTableCreator.php
@@ -11,20 +11,62 @@
class Piwik_DataAccess_ArchiveTableCreator
{
+ const NUMERIC_TABLE = "numeric";
+
+ const BLOB_TABLE = "blob";
+
+ static public $tablesAlreadyInstalled = null;
+
static public function getNumericTable(Piwik_Date $date)
{
- return self::getTable($date, "numeric");
+ return self::getTable($date, self::NUMERIC_TABLE);
}
static public function getBlobTable(Piwik_Date $date)
{
- return self::getTable($date, "blob");
+ return self::getTable($date, self::BLOB_TABLE);
}
static protected function getTable(Piwik_Date $date, $type)
{
- Piwik_TablePartitioning_Monthly::createArchiveTablesIfAbsent($date);
+ $tableNamePrefix = "archive_" . $type;
+ $tableName = $tableNamePrefix . "_" . $date->toString('Y_m');
+ $tableName = Piwik_Common::prefixTable($tableName);
+ self::createArchiveTablesIfAbsent($tableName, $tableNamePrefix);
+ return $tableName;
+ }
+
+ static protected function createArchiveTablesIfAbsent($tableName, $tableNamePrefix)
+ {
+ if (is_null(self::$tablesAlreadyInstalled)) {
+ self::refreshTableList();
+ }
- return Piwik_Common::prefixTable("archive_" . $type . "_" . $date->toString('Y_m'));
+ if (!in_array($tableName, self::$tablesAlreadyInstalled)) {
+ $db = Zend_Registry::get('db');
+ $sql = Piwik::getTableCreateSql($tableNamePrefix);
+
+ // replace table name template by real name
+ $tableNamePrefix = Piwik_Common::prefixTable($tableNamePrefix);
+ $sql = str_replace($tableNamePrefix, $tableName, $sql);
+ try {
+ $db->query($sql);
+ } catch (Exception $e) {
+ // accept mysql error 1050: table already exists, throw otherwise
+ if (!$db->isErrNo($e, '1050')) {
+ throw $e;
+ }
+ }
+ self::$tablesAlreadyInstalled[] = $tableName;
+ }
+ }
+
+ static public function clear()
+ {
+ self::$tablesAlreadyInstalled = null;
+ }
+ static public function refreshTableList($forceReload = false)
+ {
+ self::$tablesAlreadyInstalled = Piwik::getTablesInstalled($forceReload);
}
} \ No newline at end of file
diff --git a/core/DataTable/Manager.php b/core/DataTable/Manager.php
index b091ec6466..eab94df8f8 100644
--- a/core/DataTable/Manager.php
+++ b/core/DataTable/Manager.php
@@ -136,7 +136,7 @@ class Piwik_DataTable_Manager
foreach ($this->tables as $id => $table) {
if (!($table instanceof Piwik_DataTable)) {
echo "Error table $id is not instance of datatable<br />";
- var_dump($table);
+ var_export($table);
} else {
echo "<hr />";
echo "Table (index=$id) TableId = " . $table->getId() . "<br />";
diff --git a/core/Db/Schema/Myisam.php b/core/Db/Schema/Myisam.php
index 959ea056d8..55cd20e715 100644
--- a/core/Db/Schema/Myisam.php
+++ b/core/Db/Schema/Myisam.php
@@ -458,8 +458,7 @@ class Piwik_Db_Schema_Myisam implements Piwik_Db_Schema_Interface
// we get the intersection between all the tables in the DB and the tables to be installed
$tablesInstalled = array_intersect($allMyTables, $allTables);
- // at this point we have only the piwik tables which is good
- // but we still miss the piwik generated tables (using the class Piwik_TablePartitioning)
+ // at this point we have the static list of core tables, but let's add the monthly archive tables
$allArchiveNumeric = $db->fetchCol("SHOW TABLES LIKE '" . $prefixTables . "archive_numeric%'");
$allArchiveBlob = $db->fetchCol("SHOW TABLES LIKE '" . $prefixTables . "archive_blob%'");
diff --git a/core/TablePartitioning.php b/core/TablePartitioning.php
deleted file mode 100644
index 330c9f168a..0000000000
--- a/core/TablePartitioning.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-/**
- * Piwik - Open source web analytics
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
- * @category Piwik
- * @package Piwik
- */
-
-/**
- * FIXMEA: simplify/delete this code
- *
- * @package Piwik
- * @subpackage Piwik_TablePartitioning
- */
-abstract class Piwik_TablePartitioning
-{
- protected $tableName = null;
- protected $generatedTableName = null;
- protected $timestamp = null;
-
- static public $tablesAlreadyInstalled = null;
-
- public function __construct($tableName)
- {
- $this->tableName = $tableName;
- }
-
- abstract protected function generateTableName();
-
- public function setTimestamp($timestamp)
- {
- $this->timestamp = $timestamp;
- $this->generatedTableName = null;
- $this->getTableName();
- }
-
- public function getTableName()
- {
- // table name already processed
- if (!is_null($this->generatedTableName)) {
- return $this->generatedTableName;
- }
-
- if (is_null($this->timestamp)) {
- throw new Exception("You have to specify a timestamp for a Table Partitioning by date.");
- }
-
- // generate table name
- $this->generatedTableName = $this->generateTableName();
-
- // we make sure the table already exists
- $this->checkTableExists();
- }
-
- protected function checkTableExists()
- {
- if (is_null(self::$tablesAlreadyInstalled)) {
- self::$tablesAlreadyInstalled = Piwik::getTablesInstalled($forceReload = false);
- }
-
- if (!in_array($this->generatedTableName, self::$tablesAlreadyInstalled)) {
- $db = Zend_Registry::get('db');
- $sql = Piwik::getTableCreateSql($this->tableName);
-
- $config = Piwik_Config::getInstance();
- $prefixTables = $config->database['tables_prefix'];
- $sql = str_replace($prefixTables . $this->tableName, $this->generatedTableName, $sql);
- try {
- $db->query($sql);
- } catch (Exception $e) {
- // mysql error 1050: table already exists
- if (!$db->isErrNo($e, '1050')) {
- // failed for some other reason
- throw $e;
- }
- }
-
- self::$tablesAlreadyInstalled[] = $this->generatedTableName;
- }
- }
-
- public function __toString()
- {
- return $this->getTableName();
- }
-}
-
-/**
- *
- * @package Piwik
- * @subpackage Piwik_TablePartitioning
- */
-class Piwik_TablePartitioning_Monthly extends Piwik_TablePartitioning
-{
- private static $blobArchiveTable = null;
- private static $numericArchiveTable = null;
-
- public function __construct($tableName)
- {
- parent::__construct($tableName);
- }
-
- protected function generateTableName()
- {
- $config = Piwik_Config::getInstance();
- return $config->database['tables_prefix'] . $this->tableName . "_" . date("Y_m", $this->timestamp);
- }
-
- /**
- * Creates archive_blob & archive_numeric tables for a period if they don't already exist.
- *
- * @param Piwik_Date
- */
- public static function createArchiveTablesIfAbsent(Piwik_Date $dateInMonth)
- {
- $timestamp = $dateInMonth->getTimestamp();
-
- self::$blobArchiveTable->setTimestamp($timestamp);
- self::$blobArchiveTable->getTableName();
-
- self::$numericArchiveTable->setTimestamp($timestamp);
- self::$numericArchiveTable->getTableName();
- }
-
- public static function init()
- {
- self::$blobArchiveTable = new Piwik_TablePartitioning_Monthly('archive_blob');
- self::$numericArchiveTable = new Piwik_TablePartitioning_Monthly('archive_numeric');
- }
-}
-
-Piwik_TablePartitioning_Monthly::init();