theonedev/onedev · error · ExplicitException

"Cannot order by field: " + fieldName

Error message

"Cannot order by field: " + fieldName

What it means

When parsing the 'order by' clause, PullRequestQuery looks the field name up in PullRequest.SORT_FIELDS; any field not registered as sortable for pull requests throws this ExplicitException. Only whitelisted sortable fields (e.g. number, title, submit date, last activity, close date) may be used in order by.

Source

Thrown at server-core/src/main/java/io/onedev/server/search/entity/pullrequest/PullRequestQuery.java:454

						return new AndCriteria<>(childCriterias);
					}

					@Override
					public Criteria<PullRequest> visitNotCriteria(NotCriteriaContext ctx) {
						return new NotCriteria<>(visit(ctx.criteria()));
					}

				}.visit(criteriaContext);
			} else {
				requestCriteria = null;
			}

			List<EntitySort> requestSorts = new ArrayList<>();
			for (OrderContext order : queryContext.order()) {
				String fieldName = getValue(order.Quoted().getText());
				var sortField = SORT_FIELDS.get(fieldName);
				if (sortField == null)
					throw new ExplicitException("Cannot order by field: " + fieldName);

				EntitySort requestSort = new EntitySort();
				requestSort.setField(fieldName);
				if (order.direction != null) {
					if (order.direction.getText().equals("desc"))
						requestSort.setDirection(DESCENDING);
					else
						requestSort.setDirection(ASCENDING);
				} else {
					requestSort.setDirection(sortField.getDefaultDirection());
				}
				requestSorts.add(requestSort);
			}

			return new PullRequestQuery(requestCriteria, requestSorts);
		} else {
			return new PullRequestQuery();
		}

View on GitHub (pinned to d44925c47c)

Solutions

  1. Use one of the supported sort fields (check SORT_FIELDS: e.g. number, title, submitDate, lastActivity, closeDate).
  2. Correct the field spelling to the exact name defined in PullRequest.SORT_FIELDS.
  3. Remove the order by clause to use default ordering.
  4. If you need sorting by a non-sortable field, filter client-side or request the field be added upstream.

Example fix

// before
PullRequestQuery.parse("order by \"submitter\""); // not sortable
// after
PullRequestQuery.parse("order by \"submit date\" desc");
Defensive patterns

Strategy: validation

Validate before calling

Set<String> SORTABLE = Set.of("number","title","submit date","last activity","close date");
if (!SORTABLE.contains(orderField))
    throw new IllegalArgumentException("Cannot order by field: " + orderField);

Type guard

boolean isSortablePrField(String f) { return SORTABLE.contains(f); }

Try / catch

try {
    PullRequestQuery.parse(query);
} catch (ExplicitException e) {
    if (e.getMessage().startsWith("Cannot order by field"))
        query = stripOrderBy(query); // drop invalid order clause
    throw e;
}

Prevention

When it happens

Trigger: A query containing 'order by <field>' where <field> is misspelled or is a queryable criteria field but not a sortable field (not present in SORT_FIELDS map).

Common situations: Ordering by a criteria-only field like 'submitter' or 'assignees'; typos like 'submitted date' instead of the exact sort field name; copying sort fields from other entities (issue/build queries).

Understand the failure class

Background: "Invalid query parameter" / "Failed to parse value of ...": fixing bad query string parameters across APIs — this error's family across 36 libraries.

Related errors


AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06). Data as JSON: /api/errors/c3a2384f12c2bf1f. Report an issue: GitHub.