Differential D18687 Diff 44868 src/applications/search/garbagecollector/PhabricatorSearchFerretNgramGarbageCollector.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/search/garbagecollector/PhabricatorSearchFerretNgramGarbageCollector.php
- This file was added.
| <?php | |||||
| final class PhabricatorSearchFerretNgramGarbageCollector | |||||
| extends PhabricatorGarbageCollector { | |||||
| const COLLECTORCONST = 'search.ferret.ngram'; | |||||
| public function getCollectorName() { | |||||
| return pht('Ferret Engine Ngrams'); | |||||
| } | |||||
| public function hasAutomaticPolicy() { | |||||
| return true; | |||||
| } | |||||
| protected function collectGarbage() { | |||||
| $all_objects = id(new PhutilClassMapQuery()) | |||||
| ->setAncestorClass('PhabricatorFerretInterface') | |||||
| ->execute(); | |||||
| $did_collect = false; | |||||
| foreach ($all_objects as $object) { | |||||
| $engine = $object->newFerretEngine(); | |||||
| $conn = $object->establishConnection('w'); | |||||
| $ngram_row = queryfx_one( | |||||
| $conn, | |||||
| 'SELECT ngram FROM %T WHERE needsCollection = 1 LIMIT 1', | |||||
| $engine->getCommonNgramsTableName()); | |||||
| if (!$ngram_row) { | |||||
| continue; | |||||
| } | |||||
| $ngram = $ngram_row['ngram']; | |||||
| queryfx( | |||||
| $conn, | |||||
| 'DELETE FROM %T WHERE ngram = %s', | |||||
| $engine->getNgramsTableName(), | |||||
| $ngram); | |||||
| queryfx( | |||||
| $conn, | |||||
| 'UPDATE %T SET needsCollection = 0 WHERE ngram = %s', | |||||
| $engine->getCommonNgramsTableName(), | |||||
| $ngram); | |||||
| $did_collect = true; | |||||
| break; | |||||
| } | |||||
| return $did_collect; | |||||
| } | |||||
| } | |||||