protected function buildPagingClause(AphrontDatabaseConnection $conn_r) { $default = parent::buildPagingClause($conn_r); $before_id = $this->getBeforeID(); $after_id = $this->getAfterID(); if (!$before_id && !$after_id) { return $default; } $cursor_id = nonempty($before_id, $after_id); $cursor_parts = explode('.', $cursor_id, 2); $task_id = $cursor_parts[0]; $group_id = idx($cursor_parts, 1); $cursor = $this->loadCursorObject($task_id); if (!$cursor) { return null; } $columns = array(); switch ($this->groupBy) { case self::GROUP_NONE: break; case self::GROUP_PRIORITY: $columns[] = array('name' => 'task.priority', 'value' => (int) $group_id, 'type' => 'int'); break; case self::GROUP_OWNER: $columns[] = array('name' => '(task.ownerOrdering IS NULL)', 'value' => (int) (strlen($group_id) ? 0 : 1), 'type' => 'int'); if ($group_id) { $paging_users = id(new PhabricatorPeopleQuery())->setViewer($this->getViewer())->withPHIDs(array($group_id))->execute(); if (!$paging_users) { return null; } $columns[] = array('name' => 'task.ownerOrdering', 'value' => head($paging_users)->getUsername(), 'type' => 'string', 'reverse' => true); } break; case self::GROUP_STATUS: $columns[] = array('name' => 'task.status', 'value' => $group_id, 'type' => 'string'); break; case self::GROUP_PROJECT: $columns[] = array('name' => '(projectGroupName.indexedObjectName IS NULL)', 'value' => (int) (strlen($group_id) ? 0 : 1), 'type' => 'int'); if ($group_id) { $paging_projects = id(new PhabricatorProjectQuery())->setViewer($this->getViewer())->withPHIDs(array($group_id))->execute(); if (!$paging_projects) { return null; } $columns[] = array('name' => 'projectGroupName.indexedObjectName', 'value' => head($paging_projects)->getName(), 'type' => 'string', 'reverse' => true); } break; default: throw new Exception("Unknown group query '{$this->groupBy}'!"); } $app_columns = $this->buildApplicationSearchPagination($conn_r, $cursor); if ($app_columns) { $columns = array_merge($columns, $app_columns); $columns[] = array('name' => 'task.id', 'value' => (int) $cursor->getID(), 'type' => 'int'); } else { switch ($this->orderBy) { case self::ORDER_PRIORITY: if ($this->groupBy != self::GROUP_PRIORITY) { $columns[] = array('name' => 'task.priority', 'value' => (int) $cursor->getPriority(), 'type' => 'int'); } $columns[] = array('name' => 'task.subpriority', 'value' => (int) $cursor->getSubpriority(), 'type' => 'int', 'reverse' => true); $columns[] = array('name' => 'task.dateModified', 'value' => (int) $cursor->getDateModified(), 'type' => 'int'); break; case self::ORDER_CREATED: $columns[] = array('name' => 'task.id', 'value' => (int) $cursor->getID(), 'type' => 'int'); break; case self::ORDER_MODIFIED: $columns[] = array('name' => 'task.dateModified', 'value' => (int) $cursor->getDateModified(), 'type' => 'int'); break; case self::ORDER_TITLE: $columns[] = array('name' => 'task.title', 'value' => $cursor->getTitle(), 'type' => 'string'); $columns[] = array('name' => 'task.id', 'value' => $cursor->getID(), 'type' => 'int'); break; default: throw new Exception("Unknown order query '{$this->orderBy}'!"); } } return $this->buildPagingClauseFromMultipleColumns($conn_r, $columns, array('reversed' => (bool) ($before_id xor $this->getReversePaging()))); }
protected function buildPagingClause(AphrontDatabaseConnection $conn_r) { $default = parent::buildPagingClause($conn_r); $before_id = $this->getBeforeID(); $after_id = $this->getAfterID(); if (!$before_id && !$after_id) { return $default; } if ($before_id) { $cursor = $this->loadCursorObject($before_id); } else { $cursor = $this->loadCursorObject($after_id); } if (!$cursor) { return null; } $columns = array(); switch ($this->order) { case self::ORDER_CREATED: return $default; case self::ORDER_MODIFIED: $columns[] = array('name' => 'r.dateModified', 'value' => $cursor->getDateModified(), 'type' => 'int'); break; case self::ORDER_PATH_MODIFIED: $columns[] = array('name' => 'p.epoch', 'value' => $cursor->getDateCreated(), 'type' => 'int'); break; } $columns[] = array('name' => 'r.id', 'value' => $cursor->getID(), 'type' => 'int'); return $this->buildPagingClauseFromMultipleColumns($conn_r, $columns, array('reversed' => (bool) ($before_id xor $this->getReversePaging()))); }
protected function buildPagingClause(AphrontDatabaseConnection $conn_r) { $default = parent::buildPagingClause($conn_r); $before_id = $this->getBeforeID(); $after_id = $this->getAfterID(); if (!$before_id && !$after_id) { return $default; } $order = $this->order; if ($order == self::ORDER_CREATED) { return $default; } if ($before_id) { $cursor = $this->loadCursorObject($before_id); } else { $cursor = $this->loadCursorObject($after_id); } if (!$cursor) { return null; } $id_column = array('name' => 'r.id', 'type' => 'int', 'value' => $cursor->getID()); $columns = array(); switch ($order) { case self::ORDER_COMMITTED: $commit = $cursor->getMostRecentCommit(); if (!$commit) { return null; } $columns[] = array('name' => 's.epoch', 'type' => 'int', 'value' => $commit->getEpoch()); $columns[] = $id_column; break; case self::ORDER_CALLSIGN: $columns[] = array('name' => 'r.callsign', 'type' => 'string', 'value' => $cursor->getCallsign(), 'reverse' => true); break; case self::ORDER_NAME: $columns[] = array('name' => 'r.name', 'type' => 'string', 'value' => $cursor->getName(), 'reverse' => true); $columns[] = $id_column; break; default: throw new Exception("Unknown order '{$order}'!"); } return $this->buildPagingClauseFromMultipleColumns($conn_r, $columns, array('reversed' => (bool) $before_id)); }