@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<?php
2
3final class PhabricatorSearchManagementQueryWorkflow
4 extends PhabricatorSearchManagementWorkflow {
5
6 protected function didConstruct() {
7 $this
8 ->setName('query')
9 ->setSynopsis(
10 pht('Run a search query. Intended for debugging and development.'))
11 ->setArguments(
12 array(
13 array(
14 'name' => 'query',
15 'param' => 'query',
16 'help' => pht('Raw query to execute.'),
17 ),
18 ));
19 }
20
21 public function execute(PhutilArgumentParser $args) {
22 $viewer = $this->getViewer();
23 $raw_query = $args->getArg('query');
24 if (!phutil_nonempty_string($raw_query)) {
25 throw new PhutilArgumentUsageException(
26 pht('Specify a query with --query.'));
27 }
28
29 $engine = id(new PhabricatorSearchApplicationSearchEngine())
30 ->setViewer($viewer);
31
32 $saved = $engine->newSavedQuery();
33 $saved->setParameter('query', $raw_query);
34
35 $query = $engine->buildQueryFromSavedQuery($saved);
36 $pager = $engine->newPagerForSavedQuery($saved);
37
38 $results = $engine->executeQuery($query, $pager);
39 if ($results) {
40 foreach ($results as $result) {
41 echo tsprintf(
42 "%s\t%s\n",
43 $result->getPHID(),
44 $result->getName());
45 }
46 } else {
47 echo tsprintf(
48 "%s\n",
49 pht('No results.'));
50 }
51
52 return 0;
53 }
54
55}