-
Bug
-
Resolution: Done
-
Major
-
6.0.0.Final
-
None
Assuming existing of three users with IDs 1,2 and 3.
Then this code's result is incorrect.
Query q = queryFactory.from(User.class) .not().having("id").between(1, 2).includeLower(false) .toBuilder().build();
It returns no user whereas it should return two users with IDs 1 and 3. I debugged the org.infinispan.query.dsl.impl.JPAQueryGeneratorVisitor and found the problem in visit(BetweenOperator operator).
The code correctly changes the </<= and >/>= operators if between operator is negated, but forgets to change "AND" to "OR".
Thus the generated string query ends up like "id <= 1 AND id > 2" which is of course always empty result.
The pull request contains fix to this bug and also extended tests for Query API DSL to increase code coverage.