jirutka / rsql-parser

Parser for RSQL / FIQL – query language for RESTful APIs
731 stars 156 forks source link

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

Closed johnchiang closed 8 years ago

johnchiang commented 8 years ago

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

jirutka commented 8 years ago

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.