Changeset View
Changeset View
Standalone View
Standalone View
src/applications/fact/storage/PhabricatorFactDimension.php
<?php | <?php | ||||
abstract class PhabricatorFactDimension extends PhabricatorFactDAO { | abstract class PhabricatorFactDimension extends PhabricatorFactDAO { | ||||
abstract protected function getDimensionColumnName(); | abstract protected function getDimensionColumnName(); | ||||
final public function newDimensionID($key) { | final public function newDimensionID($key) { | ||||
$map = $this->newDimensionMap(array($key)); | $map = $this->newDimensionMap(array($key)); | ||||
return $map[$key]; | return idx($map, $key); | ||||
} | } | ||||
final public function newDimensionMap(array $keys) { | final public function newDimensionMap(array $keys, $create = false) { | ||||
if (!$keys) { | if (!$keys) { | ||||
return array(); | return array(); | ||||
} | } | ||||
$conn = $this->establishConnection('r'); | $conn = $this->establishConnection('r'); | ||||
$column = $this->getDimensionColumnName(); | $column = $this->getDimensionColumnName(); | ||||
$rows = queryfx_all( | $rows = queryfx_all( | ||||
Show All 14 Lines | foreach ($keys as $key) { | ||||
$need[] = $key; | $need[] = $key; | ||||
} | } | ||||
} | } | ||||
if (!$need) { | if (!$need) { | ||||
return $map; | return $map; | ||||
} | } | ||||
if (!$create) { | |||||
return $map; | |||||
} | |||||
$sql = array(); | $sql = array(); | ||||
foreach ($need as $key) { | foreach ($need as $key) { | ||||
$sql[] = qsprintf( | $sql[] = qsprintf( | ||||
$conn, | $conn, | ||||
'(%s)', | '(%s)', | ||||
$key); | $key); | ||||
} | } | ||||
Show All 10 Lines | $rows = queryfx_all( | ||||
$conn, | $conn, | ||||
'SELECT id, %C FROM %T WHERE %C IN (%Ls)', | 'SELECT id, %C FROM %T WHERE %C IN (%Ls)', | ||||
$column, | $column, | ||||
$this->getTableName(), | $this->getTableName(), | ||||
$column, | $column, | ||||
$need); | $need); | ||||
$rows = ipull($rows, 'id', $column); | $rows = ipull($rows, 'id', $column); | ||||
foreach ($keys as $key) { | foreach ($need as $key) { | ||||
if (isset($rows[$key])) { | if (isset($rows[$key])) { | ||||
$map[$key] = (int)$rows[$key]; | $map[$key] = (int)$rows[$key]; | ||||
} else { | } else { | ||||
throw new Exception( | throw new Exception( | ||||
pht( | pht( | ||||
'Failed to load or generate dimension ID ("%s") for dimension '. | 'Failed to load or generate dimension ID ("%s") for dimension '. | ||||
'key "%s".', | 'key "%s".', | ||||
get_class($this), | get_class($this), | ||||
$key)); | $key)); | ||||
} | } | ||||
} | } | ||||
return $map; | return $map; | ||||
} | } | ||||
} | } |