Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-3442

Query API DSL returns bad result on calling negated between() with includeUpper/Lower(false)

    Details

      Description

      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.

        Gliffy Diagrams

          Attachments

            Activity

              People

              • Assignee:
                jholusa Jiří Holuša
                Reporter:
                jholusa Jiří Holuša
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: