tableName = $tableName; } abstract protected function generateTableName() ; public function setTimestamp( $timestamp ) { $this->timestamp = $timestamp; $this->generatedTableName = null; $this->getTableName(); } public function setIdSite($idSite) { $this->idSite = $idSite; } 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, $this->idSite); } if(!in_array($this->generatedTableName, self::$tablesAlreadyInstalled)) { $db = Zend_Registry::get('db'); $sql = Piwik::getTableCreateSql($this->tableName); $config = Zend_Registry::get('config'); $prefixTables = $config->database->tables_prefix; $sql = str_replace( $prefixTables . $this->tableName, $this->generatedTableName, $sql); $sql = "/* SHARDING_ID_SITE = ".$this->idSite." */ ".$sql; $db->query( $sql ); self::$tablesAlreadyInstalled[] = $this->generatedTableName; } } public function __toString() { return $this->getTableName(); } } /** * * @package Piwik * @subpackage Piwik_TablePartitioning */ class Piwik_TablePartitioning_Monthly extends Piwik_TablePartitioning { public function __construct( $tableName ) { parent::__construct($tableName); } protected function generateTableName() { $config = Zend_Registry::get('config'); return $config->database->tables_prefix . $this->tableName . "_" . date("Y_m", $this->timestamp); } } /** * * @package Piwik * @subpackage Piwik_TablePartitioning */ class Piwik_TablePartitioning_Daily extends Piwik_TablePartitioning { public function __construct( $tableName ) { parent::__construct($tableName); } protected function generateTableName() { $config = Zend_Registry::get('config'); return $config->database->tables_prefix . $this->tableName . "_" . date("Y_m_d", $this->timestamp); } }