@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add Ferret support to Paste

Summary:
Ref PHI1292. Enable fulltext searchs in paste. Maybe this should only index a snippet instead of the entire content?

Also updates table names in `PhabricatorPasteQuery`.

Test Plan: Created some pastes, indexed them, searched for them.

Reviewers: amckinley

Subscribers: codeblock, Korvin, PHID-OPKG-gm6ozazyms6q6i22gyam

Differential Revision: https://secure.phabricator.com/D20650

authored by

Austin McKinley and committed by
epriestley
ef1340bd 2748f83e

+124 -9
+9
resources/sql/autopatches/20200416.paste.01.ferret.doc.sql
··· 1 + CREATE TABLE {$NAMESPACE}_paste.paste_paste_fdocument ( 2 + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 + objectPHID VARBINARY(64) NOT NULL, 4 + isClosed BOOL NOT NULL, 5 + authorPHID VARBINARY(64), 6 + ownerPHID VARBINARY(64), 7 + epochCreated INT UNSIGNED NOT NULL, 8 + epochModified INT UNSIGNED NOT NULL 9 + ) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+8
resources/sql/autopatches/20200416.paste.02.ferret.field.sql
··· 1 + CREATE TABLE {$NAMESPACE}_paste.paste_paste_ffield ( 2 + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 + documentID INT UNSIGNED NOT NULL, 4 + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, 5 + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, 6 + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, 7 + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} 8 + ) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+5
resources/sql/autopatches/20200416.paste.03.ferret.ngrams.sql
··· 1 + CREATE TABLE {$NAMESPACE}_paste.paste_paste_fngrams ( 2 + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 + documentID INT UNSIGNED NOT NULL, 4 + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} 5 + ) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+7
resources/sql/autopatches/20200416.paste.04.ferret.cngrams.sql
··· 1 + CREATE TABLE {$NAMESPACE}_paste.paste_paste_fngrams_common ( 2 + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, 4 + needsCollection BOOL NOT NULL, 5 + UNIQUE KEY `key_ngram` (ngram), 6 + KEY `key_collect` (needsCollection) 7 + ) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+6
src/__phutil_library_map__.php
··· 4072 4072 'PhabricatorPasteEditController' => 'applications/paste/controller/PhabricatorPasteEditController.php', 4073 4073 'PhabricatorPasteEditEngine' => 'applications/paste/editor/PhabricatorPasteEditEngine.php', 4074 4074 'PhabricatorPasteEditor' => 'applications/paste/editor/PhabricatorPasteEditor.php', 4075 + 'PhabricatorPasteFerretEngine' => 'applications/paste/engine/PhabricatorPasteFerretEngine.php', 4075 4076 'PhabricatorPasteFilenameContextFreeGrammar' => 'applications/paste/lipsum/PhabricatorPasteFilenameContextFreeGrammar.php', 4077 + 'PhabricatorPasteFulltextEngine' => 'applications/paste/engine/PhabricatorPasteFulltextEngine.php', 4076 4078 'PhabricatorPasteLanguageTransaction' => 'applications/paste/xaction/PhabricatorPasteLanguageTransaction.php', 4077 4079 'PhabricatorPasteListController' => 'applications/paste/controller/PhabricatorPasteListController.php', 4078 4080 'PhabricatorPastePastePHIDType' => 'applications/paste/phid/PhabricatorPastePastePHIDType.php', ··· 10652 10654 'PhabricatorApplicationTransactionInterface', 10653 10655 'PhabricatorSpacesInterface', 10654 10656 'PhabricatorConduitResultInterface', 10657 + 'PhabricatorFerretInterface', 10658 + 'PhabricatorFulltextInterface', 10655 10659 ), 10656 10660 'PhabricatorPasteApplication' => 'PhabricatorApplication', 10657 10661 'PhabricatorPasteArchiveController' => 'PhabricatorPasteController', ··· 10662 10666 'PhabricatorPasteEditController' => 'PhabricatorPasteController', 10663 10667 'PhabricatorPasteEditEngine' => 'PhabricatorEditEngine', 10664 10668 'PhabricatorPasteEditor' => 'PhabricatorApplicationTransactionEditor', 10669 + 'PhabricatorPasteFerretEngine' => 'PhabricatorFerretEngine', 10665 10670 'PhabricatorPasteFilenameContextFreeGrammar' => 'PhutilContextFreeGrammar', 10671 + 'PhabricatorPasteFulltextEngine' => 'PhabricatorFulltextEngine', 10666 10672 'PhabricatorPasteLanguageTransaction' => 'PhabricatorPasteTransactionType', 10667 10673 'PhabricatorPasteListController' => 'PhabricatorPasteController', 10668 10674 'PhabricatorPastePastePHIDType' => 'PhabricatorPHIDType',
+4
src/applications/paste/editor/PhabricatorPasteEditor.php
··· 94 94 return true; 95 95 } 96 96 97 + protected function supportsSearch() { 98 + return true; 99 + } 100 + 97 101 }
+18
src/applications/paste/engine/PhabricatorPasteFerretEngine.php
··· 1 + <?php 2 + 3 + final class PhabricatorPasteFerretEngine 4 + extends PhabricatorFerretEngine { 5 + 6 + public function getApplicationName() { 7 + return 'paste'; 8 + } 9 + 10 + public function getScopeName() { 11 + return 'paste'; 12 + } 13 + 14 + public function newSearchEngine() { 15 + return new PhabricatorPasteSearchEngine(); 16 + } 17 + 18 + }
+37
src/applications/paste/engine/PhabricatorPasteFulltextEngine.php
··· 1 + <?php 2 + 3 + final class PhabricatorPasteFulltextEngine 4 + extends PhabricatorFulltextEngine { 5 + 6 + protected function buildAbstractDocument( 7 + PhabricatorSearchAbstractDocument $document, 8 + $object) { 9 + 10 + $paste = id(new PhabricatorPasteQuery()) 11 + ->setViewer($this->getViewer()) 12 + ->withPHIDs(array($object->getPHID())) 13 + ->needContent(true) 14 + ->executeOne(); 15 + 16 + $document->setDocumentTitle($paste->getTitle()); 17 + 18 + $document->addRelationship( 19 + $paste->isArchived() 20 + ? PhabricatorSearchRelationship::RELATIONSHIP_CLOSED 21 + : PhabricatorSearchRelationship::RELATIONSHIP_OPEN, 22 + $paste->getPHID(), 23 + PhabricatorPastePastePHIDType::TYPECONST, 24 + PhabricatorTime::getNow()); 25 + 26 + $document->addField( 27 + PhabricatorSearchDocumentFieldType::FIELD_BODY, 28 + $paste->getContent()); 29 + 30 + $document->addRelationship( 31 + PhabricatorSearchRelationship::RELATIONSHIP_AUTHOR, 32 + $paste->getAuthorPHID(), 33 + PhabricatorPeopleUserPHIDType::TYPECONST, 34 + $paste->getDateCreated()); 35 + } 36 + 37 + }
+12 -8
src/applications/paste/query/PhabricatorPasteQuery.php
··· 110 110 if ($this->ids !== null) { 111 111 $where[] = qsprintf( 112 112 $conn, 113 - 'id IN (%Ld)', 113 + 'paste.id IN (%Ld)', 114 114 $this->ids); 115 115 } 116 116 117 117 if ($this->phids !== null) { 118 118 $where[] = qsprintf( 119 119 $conn, 120 - 'phid IN (%Ls)', 120 + 'paste.phid IN (%Ls)', 121 121 $this->phids); 122 122 } 123 123 124 124 if ($this->authorPHIDs !== null) { 125 125 $where[] = qsprintf( 126 126 $conn, 127 - 'authorPHID IN (%Ls)', 127 + 'paste.authorPHID IN (%Ls)', 128 128 $this->authorPHIDs); 129 129 } 130 130 131 131 if ($this->parentPHIDs !== null) { 132 132 $where[] = qsprintf( 133 133 $conn, 134 - 'parentPHID IN (%Ls)', 134 + 'paste.parentPHID IN (%Ls)', 135 135 $this->parentPHIDs); 136 136 } 137 137 138 138 if ($this->languages !== null) { 139 139 $where[] = qsprintf( 140 140 $conn, 141 - 'language IN (%Ls)', 141 + 'paste.language IN (%Ls)', 142 142 $this->languages); 143 143 } 144 144 145 145 if ($this->dateCreatedAfter !== null) { 146 146 $where[] = qsprintf( 147 147 $conn, 148 - 'dateCreated >= %d', 148 + 'paste.dateCreated >= %d', 149 149 $this->dateCreatedAfter); 150 150 } 151 151 152 152 if ($this->dateCreatedBefore !== null) { 153 153 $where[] = qsprintf( 154 154 $conn, 155 - 'dateCreated <= %d', 155 + 'paste.dateCreated <= %d', 156 156 $this->dateCreatedBefore); 157 157 } 158 158 159 159 if ($this->statuses !== null) { 160 160 $where[] = qsprintf( 161 161 $conn, 162 - 'status IN (%Ls)', 162 + 'paste.status IN (%Ls)', 163 163 $this->statuses); 164 164 } 165 165 166 166 return $where; 167 + } 168 + 169 + protected function getPrimaryTableAlias() { 170 + return 'paste'; 167 171 } 168 172 169 173 private function getContentCacheKey(PhabricatorPaste $paste) {
+18 -1
src/applications/paste/storage/PhabricatorPaste.php
··· 11 11 PhabricatorDestructibleInterface, 12 12 PhabricatorApplicationTransactionInterface, 13 13 PhabricatorSpacesInterface, 14 - PhabricatorConduitResultInterface { 14 + PhabricatorConduitResultInterface, 15 + PhabricatorFerretInterface, 16 + PhabricatorFulltextInterface { 15 17 16 18 protected $title; 17 19 protected $authorPHID; ··· 275 277 id(new PhabricatorPasteContentSearchEngineAttachment()) 276 278 ->setAttachmentKey('content'), 277 279 ); 280 + } 281 + 282 + 283 + /* -( PhabricatorFerretInterface )----------------------------------------- */ 284 + 285 + 286 + public function newFerretEngine() { 287 + return new PhabricatorPasteFerretEngine(); 288 + } 289 + 290 + 291 + /* -( PhabricatorFulltextInterface )--------------------------------------- */ 292 + 293 + public function newFulltextEngine() { 294 + return new PhabricatorPasteFulltextEngine(); 278 295 } 279 296 280 297 }