{"record":{"id":"d541524896660d89","repo":"quarkusio/quarkus","slug":"limiting-to-0-values-is-not-supported","errorCode":null,"errorMessage":"Limiting to 0 values is not supported","messagePattern":"Limiting to 0 values is not supported","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/data/hibernate/runtime/src/main/java/io/quarkus/data/hibernate/runtime/hr/PanacheManagedReactiveQueryImpl.java","lineNumber":42,"sourceCode":"    final Limits<ReactiveDataQuery<Entity>> limitingDelegate = new Limits<ReactiveDataQuery<Entity>>() {\n        @Override\n        public Limit limit() {\n            io.quarkus.panache.common.Range range = delegate.range();\n            // convert 0-based range to 1-based Jakarta Data Limit\n            return Limit.range(range.getStartIndex() + 1, range.getLastIndex() + 1);\n        }\n\n        @Override\n        public ReactiveDataQuery<Entity> limit(Limit limit) {\n            // startAt is 1-based in Jakarta Data, convert to 0-based; end is inclusive, hence -1 on size\n            delegate.range((int) (limit.startAt() - 1), (int) (limit.startAt() + limit.maxResults() - 2));\n            return PanacheManagedReactiveQueryImpl.this;\n        }\n\n        @Override\n        public ReactiveDataQuery<Entity> limit(int max) {\n            if (max == 0) {\n                throw new IllegalArgumentException(\"Limiting to 0 values is not supported\");\n            }\n            // end is inclusive, hence -1 on size\n            delegate.range(0, max - 1);\n            return PanacheManagedReactiveQueryImpl.this;\n        }\n\n        @Override\n        public ReactiveDataQuery<Entity> limit(long start, int max) {\n            // end is inclusive, hence -1 on size\n            delegate.range((int) start, (int) (start + max - 1));\n            return PanacheManagedReactiveQueryImpl.this;\n        }\n\n        @Override\n        public ReactiveDataQuery<Entity> limitFrom(long start) {\n            // end is inclusive, hence -1 on size\n            // default page size of Jakarta Data is 10 (see PageRequest)\n            delegate.range((int) start, (int) (start + 10 - 1));","sourceCodeStart":24,"sourceCodeEnd":60,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/data/hibernate/runtime/src/main/java/io/quarkus/data/hibernate/runtime/hr/PanacheManagedReactiveQueryImpl.java#L24-L60","documentation":"PanacheManagedReactiveQueryImpl.limit(max) rejects max == 0 because Hibernate Reactive range queries cannot express 'return zero rows' via the range(0, max-1) mapping (max-1 would be -1). The limit of 0 is treated as an invalid argument, throwing IllegalArgumentException eagerly when the query is built.","triggerScenarios":"Calling limit(0) on a reactive Panache query to attempt 'fetch nothing' behavior.","commonSituations":"Dynamically computed page sizes where a zero size slips through (e.g. pageSize = list.size() on an empty list); UI paging components that pass 0 for 'no results'.","solutions":["Guard before calling: skip the query entirely when max <= 0","Clamp the limit to a minimum of 1","Return an empty result list directly instead of executing the query"],"exampleFix":"// before\nquery.limit(requestedSize).list();\n// after\nif (requestedSize <= 0) { return Uni.createFrom().item(Collections.emptyList()); }\nquery.limit(requestedSize).list();","handlingStrategy":"validation","validationCode":"if (max <= 0) { return Uni.createFrom().item(Collections.emptyList()); }","typeGuard":"int requirePositiveLimit(int max) { if (max <= 0) throw new IllegalArgumentException(\"limit must be >= 1, got \" + max); return max; }","tryCatchPattern":"try { q.limit(max); } catch (IllegalArgumentException e) { return Uni.createFrom().item(List.of()); }","preventionTips":["Validate page-size inputs before building queries","Never use limit(0) as a no-op — skip the query instead","Clamp configured page sizes to a positive minimum"],"tags":["panache","pagination","illegal-argument","hibernate-reactive"],"backgroundTag":"invalid-pagination-limit","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}