@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
3/**
4 * @task format Formatting Query Clauses
5 */
6abstract class PhabricatorQuery extends Phobject {
7
8
9 abstract public function execute();
10
11
12/* -( Formatting Query Clauses )------------------------------------------- */
13
14
15 /**
16 * @task format
17 */
18 protected function formatWhereClause(
19 AphrontDatabaseConnection $conn,
20 array $parts) {
21
22 $parts = $this->flattenSubclause($parts);
23 if (!$parts) {
24 return qsprintf($conn, '');
25 }
26
27 return qsprintf($conn, 'WHERE %LA', $parts);
28 }
29
30
31
32 /**
33 * @task format
34 */
35 protected function formatSelectClause(
36 AphrontDatabaseConnection $conn,
37 array $parts) {
38
39 $parts = $this->flattenSubclause($parts);
40 if (!$parts) {
41 throw new Exception(pht('Can not build empty SELECT clause!'));
42 }
43
44 return qsprintf($conn, 'SELECT %LQ', $parts);
45 }
46
47
48 /**
49 * @task format
50 */
51 protected function formatJoinClause(
52 AphrontDatabaseConnection $conn,
53 array $parts) {
54
55 $parts = $this->flattenSubclause($parts);
56 if (!$parts) {
57 return qsprintf($conn, '');
58 }
59
60 return qsprintf($conn, '%LJ', $parts);
61 }
62
63
64 /**
65 * @task format
66 */
67 protected function formatHavingClause(
68 AphrontDatabaseConnection $conn,
69 array $parts) {
70
71 $parts = $this->flattenSubclause($parts);
72 if (!$parts) {
73 return qsprintf($conn, '');
74 }
75
76 return qsprintf($conn, 'HAVING %LA', $parts);
77 }
78
79
80 /**
81 * @task format
82 */
83 private function flattenSubclause(array $parts) {
84 $result = array();
85 foreach ($parts as $part) {
86 if (is_array($part)) {
87 foreach ($this->flattenSubclause($part) as $subpart) {
88 $result[] = $subpart;
89 }
90 } else if (($part !== null) && strlen($part)) {
91 $result[] = $part;
92 }
93 }
94 return $result;
95 }
96
97}