sort_field ) { return $this->priority_order(); } return $this->column_of( $query->sort_field ) . ' ' . strtoupper( $query->sort_direction->value ) . self::TIE_BREAKER; } private function priority_order(): string { $group_ranks = ''; foreach ( LinkStatusFilter::PROBLEM_VERDICTS as $rank => $verdict ) { $group_ranks .= $this->query_runner->prepare( ' WHEN %s THEN %d', $verdict->value, $rank ); } $last_rank = count( LinkStatusFilter::PROBLEM_VERDICTS ); return 'CASE links.verdict' . $group_ranks . ' ELSE ' . $last_rank . ' END, ' . self::USES_COLUMN . ' DESC' . self::TIE_BREAKER; } private function column_of( LinkSortField $sort_field ): string { if ( LinkSortField::Uses === $sort_field ) { return self::USES_COLUMN; } if ( LinkSortField::CheckedAt === $sort_field ) { return self::CHECKED_AT_COLUMN; } return self::URL_COLUMN; } }