{"record":{"id":"7f3689012bce6593","repo":"theonedev/onedev","slug":"unexpected-operator-operator","errorCode":null,"errorMessage":"Unexpected operator: ${operator}","messagePattern":"Unexpected operator: (.+?)","errorType":"exception","errorClass":"ExplicitException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/search/entity/pack/PackQuery.java","lineNumber":107,"sourceCode":"\t\t\tQueryContext queryContext = parser.query();\n\t\t\tCriteriaContext criteriaContext = queryContext.criteria();\n\t\t\tCriteria<Pack> packCriteria;\n\t\t\tif (criteriaContext != null) {\n\t\t\t\tpackCriteria = new PackQueryBaseVisitor<Criteria<Pack>>() {\n\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic Criteria<Pack> visitFuzzyCriteria(FuzzyCriteriaContext ctx) {\n\t\t\t\t\t\treturn new FuzzyCriteria(getValue(ctx.getText()));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tpublic Criteria<Pack> visitOperatorCriteria(PackQueryParser.OperatorCriteriaContext ctx) {\n\t\t\t\t\t\tswitch (ctx.operator.getType()) {\n\t\t\t\t\t\t\tcase PublishedByMe:\n\t\t\t\t\t\t\t\tif (!withCurrentUserCriteria)\n\t\t\t\t\t\t\t\t\tthrow new ExplicitException(\"Criteria '\" + ctx.operator.getText() + \"' is not supported here\");\n\t\t\t\t\t\t\t\treturn new PublishedByMeCriteria();\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tthrow new ExplicitException(\"Unexpected operator: \" + ctx.operator.getText());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic Criteria<Pack> visitOperatorValueCriteria(PackQueryParser.OperatorValueCriteriaContext ctx) {\n\t\t\t\t\t\tvar criterias = new ArrayList<Criteria<Pack>>();\n\t\t\t\t\t\tfor (var quoted: ctx.criteriaValue.Quoted()) {\n\t\t\t\t\t\t\tString value = getValue(quoted.getText());\n\t\t\t\t\t\t\tif (ctx.PublishedByUser() != null)\n\t\t\t\t\t\t\t\tcriterias.add(new PublishedByUserCriteria(getUser(value)));\n\t\t\t\t\t\t\telse if (ctx.PublishedByBuild() != null)\n\t\t\t\t\t\t\t\tcriterias.add(new PublishedViaBuildCriteria(project, value));\n\t\t\t\t\t\t\telse if (ctx.PublishedByProject() != null)\n\t\t\t\t\t\t\t\tcriterias.add(new PublishedViaProjectCriteria(value));\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tthrow new ExplicitException(\"Unexpected criteria: \" + ctx.operator.getText());\n\t\t\t\t\t\t}\t\n\t\t\t\t\t\treturn Criteria.orCriterias(criterias);","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/search/entity/pack/PackQuery.java#L89-L125","documentation":"PackQuery's visitor for operator criteria only recognizes the PublishedByMe operator; any other operator token reaching this switch hits the default branch and throws ExplicitException(\"Unexpected operator: <operator>\"). It is a grammar-to-criteria mapping guard.","triggerScenarios":"A pack query string containing an operator token that the pack grammar accepts lexically but has no Criteria implementation in visitOperatorCriteria — typically from grammar/parser version drift or malformed input reaching the visitor.","commonSituations":"Older query strings using operators removed/renamed in the pack query grammar; hand-edited saved queries; copy-pasted queries from other entity types (e.g. issue query operators) applied to packs.","solutions":["Use a supported operator ('published by me') or a field/value criterion instead","Check the pack query grammar/docs for the list of valid operators","If migrating from another OneDev version, update legacy operators to current syntax"],"exampleFix":"// before\n\"is:open\" // issue-style operator on packs\n// after\n\"published by me\"","handlingStrategy":"validation","validationCode":"const allowedOperators = ['published by me']; if (operatorToken && !allowedOperators.includes(operatorToken.toLowerCase())) throw new Error('unsupported operator: ' + operatorToken);","typeGuard":"null","tryCatchPattern":"try { PackQuery.parse(project, q); } catch (ExplicitException e) { if (e.getMessage().startsWith('Unexpected operator')) { showError('Operator not supported for packs: ' + e.getMessage()); } else throw e; }","preventionTips":["Only use operators documented for pack queries","Do not copy operators from issue/build queries into pack queries","Re-validate saved queries after upgrades"],"tags":["query","validation","onedev"],"backgroundTag":"invalid-enum-value","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}