Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/conpherence/query/ConpherenceFulltextQuery.php
12256 views
1
<?php
2
3
final class ConpherenceFulltextQuery
4
extends PhabricatorOffsetPagedQuery {
5
6
private $threadPHIDs;
7
private $previousTransactionPHIDs;
8
private $fulltext;
9
10
public function withThreadPHIDs(array $phids) {
11
$this->threadPHIDs = $phids;
12
return $this;
13
}
14
15
public function withPreviousTransactionPHIDs(array $phids) {
16
$this->previousTransactionPHIDs = $phids;
17
return $this;
18
}
19
20
public function withFulltext($fulltext) {
21
$this->fulltext = $fulltext;
22
return $this;
23
}
24
25
public function execute() {
26
$table = new ConpherenceIndex();
27
$conn_r = $table->establishConnection('r');
28
29
$rows = queryfx_all(
30
$conn_r,
31
'SELECT threadPHID, transactionPHID, previousTransactionPHID
32
FROM %T i %Q %Q %Q',
33
$table->getTableName(),
34
$this->buildWhereClause($conn_r),
35
$this->buildOrderByClause($conn_r),
36
$this->buildLimitClause($conn_r));
37
38
return $rows;
39
}
40
41
protected function buildWhereClause(AphrontDatabaseConnection $conn) {
42
$where = array();
43
44
if ($this->threadPHIDs !== null) {
45
$where[] = qsprintf(
46
$conn,
47
'i.threadPHID IN (%Ls)',
48
$this->threadPHIDs);
49
}
50
51
if ($this->previousTransactionPHIDs !== null) {
52
$where[] = qsprintf(
53
$conn,
54
'i.previousTransactionPHID IN (%Ls)',
55
$this->previousTransactionPHIDs);
56
}
57
58
if (strlen($this->fulltext)) {
59
$compiler = PhabricatorSearchDocument::newQueryCompiler();
60
$tokens = $compiler->newTokens($this->fulltext);
61
$compiled_query = $compiler->compileQuery($tokens);
62
63
$where[] = qsprintf(
64
$conn,
65
'MATCH(i.corpus) AGAINST (%s IN BOOLEAN MODE)',
66
$compiled_query);
67
}
68
69
return $this->formatWhereClause($conn, $where);
70
}
71
72
private function buildOrderByClause(AphrontDatabaseConnection $conn_r) {
73
if (strlen($this->fulltext)) {
74
return qsprintf(
75
$conn_r,
76
'ORDER BY MATCH(i.corpus) AGAINST (%s IN BOOLEAN MODE) DESC',
77
$this->fulltext);
78
} else {
79
return qsprintf(
80
$conn_r,
81
'ORDER BY id DESC');
82
}
83
}
84
85
}
86
87