jirutka/rsql-parser

Not able to run RSQL with criteria "less than or equal" to date

johnchiang opened this issue · 1 comments

We're currently use RSQL in our REST API project. However, we get following exception when we execute a query like following:

query=createdInstant<=2016-05-20T21:16:50.265Z (createdInstant is a Instant object)
query=schedule<=31-08-1982 10:20:56 (schedule is a Date object)

Exception:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
at com.github.tennaito.rsql.jpa.PredicateBuilder.createPredicate(PredicateBuilder.java:242) ~[rsql-jpa-2.0.0.jar!/:na]
at com.github.tennaito.rsql.jpa.PredicateBuilder.createPredicate(PredicateBuilder.java:181) ~[rsql-jpa-2.0.0.jar!/:na]
at com.github.tennaito.rsql.jpa.PredicateBuilder.createPredicate(PredicateBuilder.java:94) ~[rsql-jpa-2.0.0.jar!/:na]
at com.github.tennaito.rsql.jpa.PredicateBuilder.createPredicate(PredicateBuilder.java:119) ~[rsql-jpa-2.0.0.jar!/:na]
at com.github.tennaito.rsql.jpa.JpaPredicateVisitor.visit(JpaPredicateVisitor.java:83) ~[rsql-jpa-2.0.0.jar!/:na]
at com.github.tennaito.rsql.jpa.JpaCriteriaQueryVisitor.visit(JpaCriteriaQueryVisitor.java:81) ~[rsql-jpa-2.0.0.jar!/:na]
at com.github.tennaito.rsql.jpa.JpaCriteriaQueryVisitor.visit(JpaCriteriaQueryVisitor.java:47) ~[rsql-jpa-2.0.0.jar!/:na]
at cz.jirutka.rsql.parser.ast.AndNode.accept(AndNode.java:42) ~[rsql-parser-2.0.0.jar!/:2.0.0]

By looking at code (PredicateBuilder.java, line 242), it fails when casting argument to Number. Does this mean we can only apply less then equal to number only? Can you provide a patch where we can use Date, Time....... in comparsion? Thanks

This has nothing to do with rsql-parser, but rsql-jpa, as you can clearly see from your stack trace. Parser is not (and cannot be) responsible for converting arguments to the target type, this is responsibility of a converter.