コード例 #1
0
ファイル: Dimension.php プロジェクト: vkoptev/olap
 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);
     }
 }
コード例 #2
0
ファイル: Timezone.php プロジェクト: vkoptev/olap
 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);
     }
 }
コード例 #3
0
ファイル: Fact.php プロジェクト: vkoptev/olap
 /**
  * @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";
         }
     }
 }