{"record":{"id":"eaed8b665b3ddd88","repo":"quarkusio/quarkus","slug":"limiting-to-0-values-is-not-supported-eaed8b","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/PanacheStatelessReactiveQueryImpl.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 PanacheStatelessReactiveQueryImpl.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 PanacheStatelessReactiveQueryImpl.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 PanacheStatelessReactiveQueryImpl.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/PanacheStatelessReactiveQueryImpl.java#L24-L60","documentation":"PanacheStatelessReactiveQueryImpl.limit(max) throws IllegalArgumentException when max == 0, because the underlying range(0, max-1) delegation cannot represent an empty limit. Zero is therefore an invalid argument at query construction time.","triggerScenarios":"Calling limit(0) on a stateless reactive Panache query.","commonSituations":"Zero page size computed from empty collections or configuration defaults; code reusing limit(0) as a count-only trick, which is not supported.","solutions":["Short-circuit and return an empty list when the requested limit is 0","Enforce a minimum limit of 1 (clamp)","Validate page-size configuration so 0 never reaches the query"],"exampleFix":"// before\nstatelessQuery.limit(cfg.pageSize).list();\n// after\nint size = Math.max(1, cfg.pageSize);\nstatelessQuery.limit(size).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":["Clamp limits to >= 1 in shared query builders","Treat limit 0 as 'return empty result', not 'call limit(0)'","Validate page size from config/requests at the boundary"],"tags":["panache","pagination","illegal-argument","stateless"],"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"}