Files
phabricator/src/infrastructure/query/PhabricatorQuery.php
epriestley 98690ee326 Update many Phabricator queries for new %Q query semantics
Summary: Depends on D19785. Ref T13217. This converts many of the most common clause construction pathways to the new %Q / %LQ / %LO / %LA / %LJ semantics.

Test Plan: Browsed around a bunch, saw fewer warnings and no obvious behavioral errors. The transformations here are generally mechanical (although I did them by hand).

Reviewers: amckinley

Reviewed By: amckinley

Subscribers: hach-que

Maniphest Tasks: T13217

Differential Revision: https://secure.phabricator.com/D19789
2018-11-15 03:48:10 -08:00

98 lines
1.8 KiB
PHP

<?php
/**
* @task format Formatting Query Clauses
*/
abstract class PhabricatorQuery extends Phobject {
abstract public function execute();
/* -( Formatting Query Clauses )------------------------------------------- */
/**
* @task format
*/
protected function formatWhereClause(
AphrontDatabaseConnection $conn,
array $parts) {
$parts = $this->flattenSubclause($parts);
if (!$parts) {
return qsprintf($conn, '');
}
return qsprintf($conn, 'WHERE %LA', $parts);
}
/**
* @task format
*/
protected function formatSelectClause(
AphrontDatabaseConnection $conn,
array $parts) {
$parts = $this->flattenSubclause($parts);
if (!$parts) {
throw new Exception(pht('Can not build empty SELECT clause!'));
}
return qsprintf($conn, 'SELECT %LQ', $parts);
}
/**
* @task format
*/
protected function formatJoinClause(
AphrontDatabaseConnection $conn,
array $parts) {
$parts = $this->flattenSubclause($parts);
if (!$parts) {
return qsprintf($conn, '');
}
return qsprintf($conn, '%LJ', $parts);
}
/**
* @task format
*/
protected function formatHavingClause(
AphrontDatabaseConnection $conn,
array $parts) {
$parts = $this->flattenSubclause($parts);
if (!$parts) {
return qsprintf($conn, '');
}
return qsprintf($conn, 'HAVING %LA', $parts);
}
/**
* @task format
*/
private function flattenSubclause(array $parts) {
$result = array();
foreach ($parts as $part) {
if (is_array($part)) {
foreach ($this->flattenSubclause($part) as $subpart) {
$result[] = $subpart;
}
} else if (strlen($part)) {
$result[] = $part;
}
}
return $result;
}
}