public function execute() { $table = new PhabricatorRepositoryAuditRequest(); $conn_r = $table->establishConnection('r'); $joins = $this->buildJoinClause($conn_r); $where = $this->buildWhereClause($conn_r); $order = $this->buildOrderClause($conn_r); $limit = $this->buildLimitClause($conn_r); $data = queryfx_all($conn_r, 'SELECT req.* FROM %T req %Q %Q %Q %Q', $table->getTableName(), $joins, $where, $order, $limit); $audits = $table->loadAllFromArray($data); if ($this->needCommits || $this->needCommitData) { $phids = mpull($audits, 'getCommitPHID', 'getCommitPHID'); if ($phids) { $cquery = new PhabricatorAuditCommitQuery(); $cquery->needCommitData($this->needCommitData); $cquery->withCommitPHIDs(array_keys($phids)); $commits = $cquery->execute(); } else { $commits = array(); } $this->commits = $commits; } return $audits; }
protected function buildJoinClause(AphrontDatabaseConnection $conn_r) { $joins = array(); $audit_request = new PhabricatorRepositoryAuditRequest(); if ($this->shouldJoinAudits()) { $joins[] = qsprintf($conn_r, '%Q %T audit ON commit.phid = audit.commitPHID', $this->rowsMustHaveAudits() ? 'JOIN' : 'LEFT JOIN', $audit_request->getTableName()); } if ($this->auditAwaitingUser) { // Join the request table on the awaiting user's requests, so we can // filter out package and project requests which the user has resigned // from. $joins[] = qsprintf($conn_r, 'LEFT JOIN %T awaiting ON audit.commitPHID = awaiting.commitPHID AND awaiting.auditorPHID = %s', $audit_request->getTableName(), $this->auditAwaitingUser->getPHID()); } if ($joins) { return implode(' ', $joins); } else { return ''; } }
protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) { $join = parent::buildJoinClauseParts($conn); $audit_request = new PhabricatorRepositoryAuditRequest(); if ($this->shouldJoinStatus()) { $join[] = qsprintf($conn, 'LEFT JOIN %T status ON commit.phid = status.commitPHID', $audit_request->getTableName()); } if ($this->shouldJoinAudits()) { $join[] = qsprintf($conn, 'JOIN %T audit ON commit.phid = audit.commitPHID', $audit_request->getTableName()); } if ($this->shouldJoinNeeds()) { $join[] = qsprintf($conn, 'JOIN %T needs ON commit.phid = needs.commitPHID AND needs.auditStatus IN (%Ls)', $audit_request->getTableName(), array(PhabricatorAuditStatusConstants::AUDIT_REQUESTED, PhabricatorAuditStatusConstants::AUDIT_REQUIRED)); } return $join; }