3 final class PhabricatorFactChartFunction
4 extends PhabricatorChartFunction
{
6 const FUNCTIONKEY
= 'fact';
12 protected function newArguments() {
13 $key_argument = $this->newArgument()
15 ->setType('fact-key');
17 $parser = $this->getArgumentParser();
18 $parser->parseArgument($key_argument);
20 $fact = $this->getArgument('fact-key');
23 return $fact->getFunctionArguments();
26 public function loadData() {
29 $key_id = id(new PhabricatorFactKeyDimension())
30 ->newDimensionID($fact->getKey());
36 $table = $fact->newDatapoint();
37 $conn = $table->establishConnection('r');
38 $table_name = $table->getTableName();
47 $parser = $this->getArgumentParser();
49 $parts = $fact->buildWhereClauseParts($conn, $parser);
50 foreach ($parts as $part) {
56 'SELECT id, value, epoch FROM %T WHERE %LA ORDER BY epoch ASC',
63 foreach ($data as $row) {
64 $ref = (string)$row['id'];
65 $value = (int)$row['value'];
66 $epoch = (int)$row['epoch'];
68 if (!isset($map[$epoch])) {
72 $map[$epoch] +
= $value;
74 if (!isset($refs[$epoch])) {
75 $refs[$epoch] = array();
78 $refs[$epoch][] = $ref;
86 public function getDomain() {
87 $min = head_key($this->map
);
88 $max = last_key($this->map
);
90 return new PhabricatorChartInterval($min, $max);
93 public function newInputValues(PhabricatorChartDataQuery
$query) {
94 return array_keys($this->map
);
97 public function evaluateFunction(array $xv) {
102 foreach ($xv as $x) {
103 if (isset($map[$x])) {
113 public function getDataRefs(array $xv) {
114 return array_select_keys($this->refs
, $xv);
117 public function loadRefs(array $refs) {
120 $datapoint_table = $fact->newDatapoint();
121 $conn = $datapoint_table->establishConnection('r');
123 $dimension_table = new PhabricatorFactObjectDimension();
138 od.objectPHID objectPHID,
139 dd.objectPHID dimensionPHID
141 LEFT JOIN %R od ON od.id = p.objectID
142 LEFT JOIN %R dd ON dd.id = p.dimensionID
148 $rows = ipull($rows, null, 'id');
152 foreach ($refs as $ref) {
153 if (!isset($rows[$ref])) {
159 $results[$ref] = array(
160 'objectPHID' => $row['objectPHID'],
161 'dimensionPHID' => $row['dimensionPHID'],
162 'value' => (float)$row['value'],