Use ApplicationSearch in Diviner
Summary: Ref T988. Ref T2625. Rough cut of ApplicationSearch in Diviner, for detailed Atom queries. This isn't useful yet, and isn't linked in the UI.
Test Plan: {F44836}
Reviewers: btrahan, chad
Reviewed By: btrahan
CC: aran
Maniphest Tasks: T988, T2625
Differential Revision: https://secure.phabricator.com/D6094
This commit is contained in:
81
src/applications/diviner/query/DivinerAtomQuery.php
Normal file
81
src/applications/diviner/query/DivinerAtomQuery.php
Normal file
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
final class DivinerAtomQuery
|
||||
extends PhabricatorCursorPagedPolicyAwareQuery {
|
||||
|
||||
private $ids;
|
||||
private $phids;
|
||||
|
||||
public function withIDs(array $ids) {
|
||||
$this->ids = $ids;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function withPHIDs(array $phids) {
|
||||
$this->phids = $phids;
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function loadPage() {
|
||||
$table = new DivinerLiveSymbol();
|
||||
$conn_r = $table->establishConnection('r');
|
||||
|
||||
$data = queryfx_all(
|
||||
$conn_r,
|
||||
'SELECT * FROM %T %Q %Q %Q',
|
||||
$table->getTableName(),
|
||||
$this->buildWhereClause($conn_r),
|
||||
$this->buildOrderClause($conn_r),
|
||||
$this->buildLimitClause($conn_r));
|
||||
|
||||
return $table->loadAllFromArray($data);
|
||||
}
|
||||
|
||||
protected function willFilterPage(array $atoms) {
|
||||
if (!$atoms) {
|
||||
return $atoms;
|
||||
}
|
||||
|
||||
$books = array_unique(mpull($atoms, 'getBookPHID'));
|
||||
|
||||
$books = id(new DivinerBookQuery())
|
||||
->setViewer($this->getViewer())
|
||||
->withPHIDs($books)
|
||||
->execute();
|
||||
$books = mpull($books, null, 'getPHID');
|
||||
|
||||
foreach ($atoms as $key => $atom) {
|
||||
$book = idx($books, $atom->getBookPHID());
|
||||
if (!$book) {
|
||||
unset($atoms[$key]);
|
||||
continue;
|
||||
}
|
||||
$atom->attachBook($book);
|
||||
}
|
||||
|
||||
return $atoms;
|
||||
}
|
||||
|
||||
private function buildWhereClause(AphrontDatabaseConnection $conn_r) {
|
||||
$where = array();
|
||||
|
||||
if ($this->ids) {
|
||||
$where[] = qsprintf(
|
||||
$conn_r,
|
||||
'id IN (%Ld)',
|
||||
$this->ids);
|
||||
}
|
||||
|
||||
if ($this->phids) {
|
||||
$where[] = qsprintf(
|
||||
$conn_r,
|
||||
'phid IN (%Ls)',
|
||||
$this->phids);
|
||||
}
|
||||
|
||||
$where[] = $this->buildPagingClause($conn_r);
|
||||
|
||||
return $this->formatWhereClause($where);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user