{"record":{"id":"fa7c17bdce2f5d0d","repo":"flowable/flowable-engine","slug":"empty-casedefinitionids","errorCode":null,"errorMessage":"Empty caseDefinitionIds","messagePattern":"Empty caseDefinitionIds","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/repository/CaseDefinitionQueryImpl.java","lineNumber":87,"sourceCode":"        super(commandContext);\n    }\n\n    public CaseDefinitionQueryImpl(CommandExecutor commandExecutor) {\n        super(commandExecutor);\n    }\n\n    @Override\n    public CaseDefinitionQueryImpl caseDefinitionId(String caseDefinitionId) {\n        this.id = caseDefinitionId;\n        return this;\n    }\n\n    @Override\n    public CaseDefinitionQuery caseDefinitionIds(Set<String> caseDefinitionIds) {\n        if (caseDefinitionIds == null) {\n            throw new FlowableIllegalArgumentException(\"caseDefinitionIds is null\");\n        } else if (caseDefinitionIds.isEmpty()) {\n            throw new FlowableIllegalArgumentException(\"Empty caseDefinitionIds\");\n        }\n        this.ids = caseDefinitionIds;\n        return this;\n    }\n\n    @Override\n    public CaseDefinitionQueryImpl caseDefinitionCategory(String category) {\n        if (category == null) {\n            throw new FlowableIllegalArgumentException(\"category is null\");\n        }\n        this.category = category;\n        return this;\n    }\n\n    @Override\n    public CaseDefinitionQueryImpl caseDefinitionCategoryLike(String categoryLike) {\n        if (categoryLike == null) {\n            throw new FlowableIllegalArgumentException(\"categoryLike is null\");","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/repository/CaseDefinitionQueryImpl.java#L69-L105","documentation":"Query-builder validation in CaseDefinitionQueryImpl.caseDefinitionIds: the supplied id Set is non-null but empty, which would generate a nonsensical 'IN ()' SQL clause; the builder rejects it so callers fix their collection rather than get silently wrong results.","triggerScenarios":"Calling caseDefinitionQuery.caseDefinitionIds(new HashSet<>()) or passing a set that ended up empty after filtering.","commonSituations":"Building allowed-ids filters from tenant/permission logic that produced no matches; copy/paste where an unfiltered query was intended.","solutions":["Check the set has elements before calling caseDefinitionIds; if empty, either skip the method call (no filter) or return an empty result deliberately","Fix the upstream filtering logic so the allowed-ids set is populated"],"exampleFix":"// before\nquery.caseDefinitionIds(allowedIds); // allowedIds may be empty\n// after\nif (allowedIds != null && !allowedIds.isEmpty()) {\n    query.caseDefinitionIds(allowedIds);\n}","handlingStrategy":"validation","validationCode":"if (ids != null && ids.isEmpty()) {\n    // decide: skip filter, or return empty result early\n}","typeGuard":"boolean hasElements = ids != null && !ids.isEmpty();","tryCatchPattern":"try {\n    query.caseDefinitionIds(ids);\n} catch (FlowableIllegalArgumentException e) {\n    // empty set: either skip filter or return empty result\n}","preventionTips":["Check isEmpty() on id sets collected from permissions/tenant logic","Decide explicit semantics for empty filters in your query builder","Log when a filter is dropped due to being empty"],"tags":["cmmn","query","empty-collection"],"backgroundTag":"empty-required-field","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}