public function truncate() { parent::truncate(); if (!$this->getParent()) { // add timezones $params = array_keys($this->nativeTZList()); $sql = "INSERT INTO {$this->getTableName()} ({$this->sender()->valueField()}) VALUES(" . implode('),(', array_fill(0, count($params), '?')) . ")"; $this->db()->fetchAll($sql, $params); } }
protected function addDimension(\OLAP\DB\Dimension $dimension, &$i, &$params, &$declare, &$fields, &$setVars, $key = true) { $i++; $params[] = $dimension->getType()->getTableName(); if ($key) { $declare[] = "DECLARE {$dimension->getTableName()}_id_var integer; "; $fields["{$dimension->getTableName()}_id"] = "{$dimension->getTableName()}_id_var"; $parentParams = []; for ($j = 0; $j < $dimension->getSetterParamsCount(); $j++) { $parentParams[] = '$' . ($j + $i); } $parentParams = implode(', ', $parentParams); if ($this->getParent()->getDimension($dimension->getTableName())) { $setVars[] = "SELECT * INTO {$dimension->getTableName()}_id_var FROM get_{$dimension->getTableName()}_id({$parentParams}); "; } } if (($parent = $dimension->getParent()) && $dimension->getTableName() != $this->getDimension('dimension_day')->getTableName()) { $this->addDimension($parent, $i, $params, $declare, $fields, $setVars, false); } }
/** * @param Dimension $parent * @param Dimension[] $dimensions * @param array $used * @param array $joins * @param array $where * @param array $params */ protected function fillParentKeysByDimension($parent, $dimensions, &$used, &$joins, &$where, &$params) { $keys = $this->getKeys(); foreach ($dimensions as $dimensionName => $dimension) { if ($dimension->object()->getParent() === $parent->getTableName()) { if (empty($used[$dimensionName])) { $used[$dimensionName] = true; if (isset($keys[$dimensionName])) { $joins[$dimensionName] = "INNER JOIN {$dimensionName} ON {$dimensionName}.id = {$this->getTableName()}.{$dimensionName}_id"; } else { $this->fillParentKeysByDimension($dimension, $dimensions, $used, $joins, $where, $params); } } $joins[$parent->getTableName()] = "INNER JOIN {$parent->getTableName()} ON {$parent->getTableName()}.id={$dimensionName}.{$parent->getTableName()}_id"; } } }