diff --git a/resources/sql/autopatches/20160722.pack.01.pubngrams.sql b/resources/sql/autopatches/20160722.pack.01.pubngrams.sql new file mode 100644 --- /dev/null +++ b/resources/sql/autopatches/20160722.pack.01.pubngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_packages.packages_publishername_ngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_object` (objectID), + KEY `key_ngram` (ngram, objectID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160722.pack.02.pkgngrams.sql b/resources/sql/autopatches/20160722.pack.02.pkgngrams.sql new file mode 100644 --- /dev/null +++ b/resources/sql/autopatches/20160722.pack.02.pkgngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_packages.packages_packagename_ngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_object` (objectID), + KEY `key_ngram` (ngram, objectID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160722.pack.03.versionngrams.sql b/resources/sql/autopatches/20160722.pack.03.versionngrams.sql new file mode 100644 --- /dev/null +++ b/resources/sql/autopatches/20160722.pack.03.versionngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_packages.packages_versionname_ngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_object` (objectID), + KEY `key_ngram` (ngram, objectID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2977,6 +2977,7 @@ 'PhabricatorPackagesDAO' => 'applications/packages/storage/PhabricatorPackagesDAO.php', 'PhabricatorPackagesEditEngine' => 'applications/packages/editor/PhabricatorPackagesEditEngine.php', 'PhabricatorPackagesEditor' => 'applications/packages/editor/PhabricatorPackagesEditor.php', + 'PhabricatorPackagesNgrams' => 'applications/packages/storage/PhabricatorPackagesNgrams.php', 'PhabricatorPackagesPackage' => 'applications/packages/storage/PhabricatorPackagesPackage.php', 'PhabricatorPackagesPackageController' => 'applications/packages/controller/PhabricatorPackagesPackageController.php', 'PhabricatorPackagesPackageDatasource' => 'applications/packages/typeahead/PhabricatorPackagesPackageDatasource.php', @@ -2988,6 +2989,7 @@ 'PhabricatorPackagesPackageEditor' => 'applications/packages/editor/PhabricatorPackagesPackageEditor.php', 'PhabricatorPackagesPackageKeyTransaction' => 'applications/packages/xaction/package/PhabricatorPackagesPackageKeyTransaction.php', 'PhabricatorPackagesPackageListController' => 'applications/packages/controller/PhabricatorPackagesPackageListController.php', + 'PhabricatorPackagesPackageNameNgrams' => 'applications/packages/storage/PhabricatorPackagesPackageNameNgrams.php', 'PhabricatorPackagesPackageNameTransaction' => 'applications/packages/xaction/package/PhabricatorPackagesPackageNameTransaction.php', 'PhabricatorPackagesPackagePHIDType' => 'applications/packages/phid/PhabricatorPackagesPackagePHIDType.php', 'PhabricatorPackagesPackagePublisherTransaction' => 'applications/packages/xaction/package/PhabricatorPackagesPackagePublisherTransaction.php', @@ -3008,6 +3010,7 @@ 'PhabricatorPackagesPublisherEditor' => 'applications/packages/editor/PhabricatorPackagesPublisherEditor.php', 'PhabricatorPackagesPublisherKeyTransaction' => 'applications/packages/xaction/publisher/PhabricatorPackagesPublisherKeyTransaction.php', 'PhabricatorPackagesPublisherListController' => 'applications/packages/controller/PhabricatorPackagesPublisherListController.php', + 'PhabricatorPackagesPublisherNameNgrams' => 'applications/packages/storage/PhabricatorPackagesPublisherNameNgrams.php', 'PhabricatorPackagesPublisherNameTransaction' => 'applications/packages/xaction/publisher/PhabricatorPackagesPublisherNameTransaction.php', 'PhabricatorPackagesPublisherPHIDType' => 'applications/packages/phid/PhabricatorPackagesPublisherPHIDType.php', 'PhabricatorPackagesPublisherQuery' => 'applications/packages/query/PhabricatorPackagesPublisherQuery.php', @@ -3027,6 +3030,7 @@ 'PhabricatorPackagesVersionEditEngine' => 'applications/packages/editor/PhabricatorPackagesVersionEditEngine.php', 'PhabricatorPackagesVersionEditor' => 'applications/packages/editor/PhabricatorPackagesVersionEditor.php', 'PhabricatorPackagesVersionListController' => 'applications/packages/controller/PhabricatorPackagesVersionListController.php', + 'PhabricatorPackagesVersionNameNgrams' => 'applications/packages/storage/PhabricatorPackagesVersionNameNgrams.php', 'PhabricatorPackagesVersionNameTransaction' => 'applications/packages/xaction/version/PhabricatorPackagesVersionNameTransaction.php', 'PhabricatorPackagesVersionPHIDType' => 'applications/packages/phid/PhabricatorPackagesVersionPHIDType.php', 'PhabricatorPackagesVersionPackageTransaction' => 'applications/packages/xaction/version/PhabricatorPackagesVersionPackageTransaction.php', @@ -7795,6 +7799,7 @@ 'PhabricatorPackagesDAO' => 'PhabricatorLiskDAO', 'PhabricatorPackagesEditEngine' => 'PhabricatorEditEngine', 'PhabricatorPackagesEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorPackagesNgrams' => 'PhabricatorSearchNgrams', 'PhabricatorPackagesPackage' => array( 'PhabricatorPackagesDAO', 'PhabricatorPolicyInterface', @@ -7803,6 +7808,7 @@ 'PhabricatorSubscribableInterface', 'PhabricatorProjectInterface', 'PhabricatorConduitResultInterface', + 'PhabricatorNgramsInterface', ), 'PhabricatorPackagesPackageController' => 'PhabricatorPackagesController', 'PhabricatorPackagesPackageDatasource' => 'PhabricatorTypeaheadDatasource', @@ -7814,6 +7820,7 @@ 'PhabricatorPackagesPackageEditor' => 'PhabricatorPackagesEditor', 'PhabricatorPackagesPackageKeyTransaction' => 'PhabricatorPackagesPackageTransactionType', 'PhabricatorPackagesPackageListController' => 'PhabricatorPackagesPackageController', + 'PhabricatorPackagesPackageNameNgrams' => 'PhabricatorPackagesNgrams', 'PhabricatorPackagesPackageNameTransaction' => 'PhabricatorPackagesPackageTransactionType', 'PhabricatorPackagesPackagePHIDType' => 'PhabricatorPHIDType', 'PhabricatorPackagesPackagePublisherTransaction' => 'PhabricatorPackagesPackageTransactionType', @@ -7832,6 +7839,7 @@ 'PhabricatorSubscribableInterface', 'PhabricatorProjectInterface', 'PhabricatorConduitResultInterface', + 'PhabricatorNgramsInterface', ), 'PhabricatorPackagesPublisherController' => 'PhabricatorPackagesController', 'PhabricatorPackagesPublisherDatasource' => 'PhabricatorTypeaheadDatasource', @@ -7842,6 +7850,7 @@ 'PhabricatorPackagesPublisherEditor' => 'PhabricatorPackagesEditor', 'PhabricatorPackagesPublisherKeyTransaction' => 'PhabricatorPackagesPublisherTransactionType', 'PhabricatorPackagesPublisherListController' => 'PhabricatorPackagesPublisherController', + 'PhabricatorPackagesPublisherNameNgrams' => 'PhabricatorPackagesNgrams', 'PhabricatorPackagesPublisherNameTransaction' => 'PhabricatorPackagesPublisherTransactionType', 'PhabricatorPackagesPublisherPHIDType' => 'PhabricatorPHIDType', 'PhabricatorPackagesPublisherQuery' => 'PhabricatorPackagesQuery', @@ -7863,6 +7872,7 @@ 'PhabricatorSubscribableInterface', 'PhabricatorProjectInterface', 'PhabricatorConduitResultInterface', + 'PhabricatorNgramsInterface', ), 'PhabricatorPackagesVersionController' => 'PhabricatorPackagesController', 'PhabricatorPackagesVersionEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', @@ -7870,6 +7880,7 @@ 'PhabricatorPackagesVersionEditEngine' => 'PhabricatorPackagesEditEngine', 'PhabricatorPackagesVersionEditor' => 'PhabricatorPackagesEditor', 'PhabricatorPackagesVersionListController' => 'PhabricatorPackagesVersionController', + 'PhabricatorPackagesVersionNameNgrams' => 'PhabricatorPackagesNgrams', 'PhabricatorPackagesVersionNameTransaction' => 'PhabricatorPackagesVersionTransactionType', 'PhabricatorPackagesVersionPHIDType' => 'PhabricatorPHIDType', 'PhabricatorPackagesVersionPackageTransaction' => 'PhabricatorPackagesVersionTransactionType', diff --git a/src/applications/packages/editor/PhabricatorPackagesEditor.php b/src/applications/packages/editor/PhabricatorPackagesEditor.php --- a/src/applications/packages/editor/PhabricatorPackagesEditor.php +++ b/src/applications/packages/editor/PhabricatorPackagesEditor.php @@ -7,4 +7,14 @@ return 'PhabricatorPasteApplication'; } + protected function supportsSearch() { + return true; + } + + protected function shouldPublishFeedStory( + PhabricatorLiskDAO $object, + array $xactions) { + return true; + } + } diff --git a/src/applications/packages/editor/PhabricatorPackagesPackageEditor.php b/src/applications/packages/editor/PhabricatorPackagesPackageEditor.php --- a/src/applications/packages/editor/PhabricatorPackagesPackageEditor.php +++ b/src/applications/packages/editor/PhabricatorPackagesPackageEditor.php @@ -24,12 +24,6 @@ return $types; } - protected function shouldPublishFeedStory( - PhabricatorLiskDAO $object, - array $xactions) { - return true; - } - protected function getMailTo(PhabricatorLiskDAO $object) { return array(); } diff --git a/src/applications/packages/editor/PhabricatorPackagesPublisherEditor.php b/src/applications/packages/editor/PhabricatorPackagesPublisherEditor.php --- a/src/applications/packages/editor/PhabricatorPackagesPublisherEditor.php +++ b/src/applications/packages/editor/PhabricatorPackagesPublisherEditor.php @@ -21,12 +21,6 @@ return $types; } - protected function shouldPublishFeedStory( - PhabricatorLiskDAO $object, - array $xactions) { - return true; - } - protected function getMailTo(PhabricatorLiskDAO $object) { return array(); } diff --git a/src/applications/packages/editor/PhabricatorPackagesVersionEditor.php b/src/applications/packages/editor/PhabricatorPackagesVersionEditor.php --- a/src/applications/packages/editor/PhabricatorPackagesVersionEditor.php +++ b/src/applications/packages/editor/PhabricatorPackagesVersionEditor.php @@ -15,12 +15,6 @@ return pht('%s created %s.', $author, $object); } - protected function shouldPublishFeedStory( - PhabricatorLiskDAO $object, - array $xactions) { - return true; - } - protected function getMailTo(PhabricatorLiskDAO $object) { return array(); } diff --git a/src/applications/packages/query/PhabricatorPackagesPackageQuery.php b/src/applications/packages/query/PhabricatorPackagesPackageQuery.php --- a/src/applications/packages/query/PhabricatorPackagesPackageQuery.php +++ b/src/applications/packages/query/PhabricatorPackagesPackageQuery.php @@ -34,6 +34,12 @@ return $this; } + public function withNameNgrams($ngrams) { + return $this->withNgramsConstraint( + new PhabricatorPackagesPackageNameNgrams(), + $ngrams); + } + public function newResultObject() { return new PhabricatorPackagesPackage(); } @@ -62,7 +68,7 @@ if ($this->publisherPHIDs !== null) { $where[] = qsprintf( $conn, - 'p.phid IN (%Ls)', + 'p.publisherPHID IN (%Ls)', $this->publisherPHIDs); } diff --git a/src/applications/packages/query/PhabricatorPackagesPackageSearchEngine.php b/src/applications/packages/query/PhabricatorPackagesPackageSearchEngine.php --- a/src/applications/packages/query/PhabricatorPackagesPackageSearchEngine.php +++ b/src/applications/packages/query/PhabricatorPackagesPackageSearchEngine.php @@ -18,11 +18,30 @@ protected function buildQueryFromParameters(array $map) { $query = $this->newQuery(); + if ($map['match'] !== null) { + $query->withNameNgrams($map['match']); + } + + if ($map['publisherPHIDs']) { + $query->withPublisherPHIDs($map['publisherPHIDs']); + } + return $query; } protected function buildCustomSearchFields() { - return array(); + return array( + id(new PhabricatorSearchTextField()) + ->setLabel(pht('Name Contains')) + ->setKey('match') + ->setDescription(pht('Search for packages by name substring.')), + id(new PhabricatorSearchDatasourceField()) + ->setLabel(pht('Publishers')) + ->setKey('publisherPHIDs') + ->setAliases(array('publisherPHID', 'publisher', 'publishers')) + ->setDatasource(new PhabricatorPackagesPublisherDatasource()) + ->setDescription(pht('Search for packages by publisher.')), + ); } protected function getURI($path) { diff --git a/src/applications/packages/query/PhabricatorPackagesPublisherQuery.php b/src/applications/packages/query/PhabricatorPackagesPublisherQuery.php --- a/src/applications/packages/query/PhabricatorPackagesPublisherQuery.php +++ b/src/applications/packages/query/PhabricatorPackagesPublisherQuery.php @@ -22,6 +22,12 @@ return $this; } + public function withNameNgrams($ngrams) { + return $this->withNgramsConstraint( + new PhabricatorPackagesPublisherNameNgrams(), + $ngrams); + } + public function newResultObject() { return new PhabricatorPackagesPublisher(); } @@ -36,25 +42,29 @@ if ($this->ids !== null) { $where[] = qsprintf( $conn, - 'id IN (%Ld)', + 'u.id IN (%Ld)', $this->ids); } if ($this->phids !== null) { $where[] = qsprintf( $conn, - 'phid IN (%Ls)', + 'u.phid IN (%Ls)', $this->phids); } if ($this->publisherKeys !== null) { $where[] = qsprintf( $conn, - 'publisherKey IN (%Ls)', + 'u.publisherKey IN (%Ls)', $this->publisherKeys); } return $where; } + protected function getPrimaryTableAlias() { + return 'u'; + } + } diff --git a/src/applications/packages/query/PhabricatorPackagesPublisherSearchEngine.php b/src/applications/packages/query/PhabricatorPackagesPublisherSearchEngine.php --- a/src/applications/packages/query/PhabricatorPackagesPublisherSearchEngine.php +++ b/src/applications/packages/query/PhabricatorPackagesPublisherSearchEngine.php @@ -18,11 +18,20 @@ protected function buildQueryFromParameters(array $map) { $query = $this->newQuery(); + if ($map['match'] !== null) { + $query->withNameNgrams($map['match']); + } + return $query; } protected function buildCustomSearchFields() { - return array(); + return array( + id(new PhabricatorSearchTextField()) + ->setLabel(pht('Name Contains')) + ->setKey('match') + ->setDescription(pht('Search for publishers by name substring.')), + ); } protected function getURI($path) { diff --git a/src/applications/packages/query/PhabricatorPackagesVersionQuery.php b/src/applications/packages/query/PhabricatorPackagesVersionQuery.php --- a/src/applications/packages/query/PhabricatorPackagesVersionQuery.php +++ b/src/applications/packages/query/PhabricatorPackagesVersionQuery.php @@ -34,6 +34,12 @@ return $this; } + public function withNameNgrams($ngrams) { + return $this->withNgramsConstraint( + new PhabricatorPackagesVersionNameNgrams(), + $ngrams); + } + public function newResultObject() { return new PhabricatorPackagesVersion(); } diff --git a/src/applications/packages/query/PhabricatorPackagesVersionSearchEngine.php b/src/applications/packages/query/PhabricatorPackagesVersionSearchEngine.php --- a/src/applications/packages/query/PhabricatorPackagesVersionSearchEngine.php +++ b/src/applications/packages/query/PhabricatorPackagesVersionSearchEngine.php @@ -18,13 +18,31 @@ protected function buildQueryFromParameters(array $map) { $query = $this->newQuery(); + if ($map['match'] !== null) { + $query->withNameNgrams($map['match']); + } + + if ($map['packagePHIDs']) { + $query->withPackagePHIDs($map['packagePHIDs']); + } + return $query; } protected function buildCustomSearchFields() { - return array(); + return array( + id(new PhabricatorSearchTextField()) + ->setLabel(pht('Name Contains')) + ->setKey('match') + ->setDescription(pht('Search for versions by name substring.')), + id(new PhabricatorSearchDatasourceField()) + ->setLabel(pht('Packages')) + ->setKey('packagePHIDs') + ->setAliases(array('packagePHID', 'package', 'packages')) + ->setDatasource(new PhabricatorPackagesPackageDatasource()) + ->setDescription(pht('Search for versions by package.')), + ); } - protected function getURI($path) { return '/packages/version/'.$path; } diff --git a/src/applications/packages/storage/PhabricatorPackagesNgrams.php b/src/applications/packages/storage/PhabricatorPackagesNgrams.php new file mode 100644 --- /dev/null +++ b/src/applications/packages/storage/PhabricatorPackagesNgrams.php @@ -0,0 +1,10 @@ + true, self::CONFIG_COLUMN_SCHEMA => array( - 'name' => 'text64', + 'name' => 'sort64', 'packageKey' => 'sort64', ), self::CONFIG_KEY_SCHEMA => array( @@ -207,6 +208,17 @@ } +/* -( PhabricatorNgramsInterface )----------------------------------------- */ + + + public function newNgrams() { + return array( + id(new PhabricatorPackagesPackageNameNgrams()) + ->setValue($this->getName()), + ); + } + + /* -( PhabricatorConduitResultInterface )---------------------------------- */ diff --git a/src/applications/packages/storage/PhabricatorPackagesPackageNameNgrams.php b/src/applications/packages/storage/PhabricatorPackagesPackageNameNgrams.php new file mode 100644 --- /dev/null +++ b/src/applications/packages/storage/PhabricatorPackagesPackageNameNgrams.php @@ -0,0 +1,14 @@ + true, self::CONFIG_COLUMN_SCHEMA => array( - 'name' => 'text64', + 'name' => 'sort64', 'publisherKey' => 'sort64', ), self::CONFIG_KEY_SCHEMA => array( @@ -183,6 +184,17 @@ } +/* -( PhabricatorNgramsInterface )----------------------------------------- */ + + + public function newNgrams() { + return array( + id(new PhabricatorPackagesPublisherNameNgrams()) + ->setValue($this->getName()), + ); + } + + /* -( PhabricatorConduitResultInterface )---------------------------------- */ diff --git a/src/applications/packages/storage/PhabricatorPackagesPublisherNameNgrams.php b/src/applications/packages/storage/PhabricatorPackagesPublisherNameNgrams.php new file mode 100644 --- /dev/null +++ b/src/applications/packages/storage/PhabricatorPackagesPublisherNameNgrams.php @@ -0,0 +1,14 @@ +setValue($this->getName()), + ); + } + + /* -( PhabricatorConduitResultInterface )---------------------------------- */ diff --git a/src/applications/packages/storage/PhabricatorPackagesVersionNameNgrams.php b/src/applications/packages/storage/PhabricatorPackagesVersionNameNgrams.php new file mode 100644 --- /dev/null +++ b/src/applications/packages/storage/PhabricatorPackagesVersionNameNgrams.php @@ -0,0 +1,14 @@ +