protected function deleteDocumentsByHash(array $hashes)
 {
     $atom_table = new DivinerLiveAtom();
     $symbol_table = new DivinerLiveSymbol();
     $conn_w = $symbol_table->establishConnection('w');
     $strings = array();
     foreach ($hashes as $hash) {
         $strings[] = qsprintf($conn_w, '%s', $hash);
     }
     foreach (PhabricatorLiskDAO::chunkSQL($strings, ', ') as $chunk) {
         queryfx($conn_w, 'UPDATE %T SET graphHash = NULL, nodeHash = NULL
       WHERE graphHash IN (%Q)', $symbol_table->getTableName(), $chunk);
     }
     queryfx($conn_w, 'DELETE a FROM %T a LEFT JOIN %T s
     ON a.symbolPHID = s.phid
     WHERE s.graphHash IS NULL', $atom_table->getTableName(), $symbol_table->getTableName());
 }
 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);
 }