public function setData(array &$data) { $currentTZ = date_default_timezone_get(); date_default_timezone_set("UTC"); $setter = $this->sender()->getPushData($data); $values = [$setter->getQuery()]; $params = $setter->getParams(); foreach ($this->getStrictDimensions() as $dimension) { while ($dimension) { $key = ":{$dimension->getTableName()}_value"; $params[$key] = $dimension->mapValue($data); $values[] = $key; if ($dimension->getTableName() === $this->getDimension('dimension_day')->getTableName()) { $dimension = null; } else { $dimension = $dimension->getParent(); } } } $values = implode(', ', $values); // $data["{$this->getTableName()}_id"] = $this->db()->fetchColumn("SELECT * FROM {$this->setterFunctionName()}($values)", $params); $data["__sql"][] = "SELECT * FROM {$this->setterFunctionName()}({$values}); "; $data["__params"] = array_merge(empty($data['__params']) ? [] : $data['__params'], $params); Event\Ruler::getInstance()->trigger(Event\Type::EVENT_SET_DATA, $this->getTableName(), ['data' => $data]); date_default_timezone_set($currentTZ); }
public static function testMultiThreadAggregation(\OLAP\Server $server, $cmd, $dates) { if ($dates) { echo "start " . $dates . "\n"; $dates = json_decode($dates, true); if ($dates) { Event\Ruler::getInstance()->trigger(Event\Type::EVENT_SET_ALL_DATA, null, ['date' => $dates]); } } else { $n = 10; $start = strtotime("2014-12-31 21:00:00"); $end = strtotime(date("2015-02-13 23:00:00", strtotime('+1day'))); $step = floor(($end - $start) / $n); $workers = []; for ($i = $start; $i < $end; $i += $step) { $worker = (object) ['cmd' => str_replace('%thread%', '"' . addslashes(json_encode(['from' => date('Y-m-d H:i:s', $i), 'to' => date('Y-m-d H:i:s', $i + $step)])) . '"', $cmd), 'descriptorspec' => [0 => ["pipe", "r"], 1 => ["pipe", "w"], 2 => ["file", "/dev/null", "w"]], 'pipe' => [], 'resource' => null]; $worker->resource = proc_open($worker->cmd, $worker->descriptorspec, $worker->pipe); if (is_resource($worker->resource)) { $workers[] = $worker; } } while ($workers) { foreach ($workers as $i => $worker) { stream_set_blocking($worker->pipe[1], 0); echo stream_get_contents($worker->pipe[1]); flush(); $status = proc_get_status($worker->resource); if (!$status['running']) { fclose($worker->pipe[0]); fclose($worker->pipe[1]); proc_close($worker->resource); unset($workers[$i]); } } sleep(5); } } }
public function setData(array &$data) { $setter = $this->sender()->getPushData($data); $values = [$setter->getQuery()]; $params = $setter->getParams(); if ($parent = $this->getParent()) { // $values[] = ":{$parent->getTableName()}_id"; // $params[":{$parent->getTableName()}_id"] = $data["{$parent->getTableName()}_id"]; $values[] = $data["{$parent->getTableName()}_id"]; } foreach ($this->getStrictDimensions() as $dimension) { while ($dimension) { $key = ":{$dimension->getTableName()}_value"; $params[$key] = $dimension->mapValue($data); $values[] = $key; $dimension = $dimension->getParent(); } } $setValues = implode(', ', $values); $values[0] = 'null'; $idValues = implode(', ', $values); $data["{$this->getTableName()}_id"] = "{$this->setterFunctionName()}({$idValues})"; $data["__sql"][] = "SELECT * FROM {$this->setterFunctionName()}({$setValues}); "; $data["__params"] = array_merge(empty($data['__params']) ? [] : $data['__params'], $params); // $data["{$this->getTableName()}_id"] = $this->db()->fetchColumn("SELECT * FROM {$this->setterFunctionName()}($values)", $params); Event\Ruler::getInstance()->trigger(Event\Type::EVENT_SET_DATA, $this->getTableName(), ['data' => &$data]); }