Issue Details (XML | Word | Printable)

Key: NUCMONGODB-100
Type: Improvement Improvement
Status: Closed Closed
Resolution: Fixed
Priority: Minor Minor
Assignee: Unassigned
Reporter: Julian Graham
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
DataNucleus Store MongoDB

Support use of Java enum value as query parameter evaluating in datastore

Created: 27/Jul/12 01:50 AM   Updated: 09/Aug/12 03:33 PM   Resolved: 07/Aug/12 10:15 AM
Component/s: Query
Affects Version/s: None
Fix Version/s: 3.1.1

File Attachments: 1. Zip Archive enumparameter.zip (3 kB)


Datastore: MongoDB
Severity: Development


 Description  « Hide
It doesn't seem like there's a way to use a Java enumeration value as a query parameter in a JPQL query against MongoDB. For a query like:

  em.createQuery("SELECT o FROM myObject o WHERE o.enumVal = :0").setParameter(0, MyEnum.VALUE_1).getResultList();

...you get the message:

  Jul 26, 2012 7:48:31 PM org.datanucleus.store.mongodb.query.QueryToMongoDBMapper processParameterExpression
  INFO: Dont currently support parameter values of type org.datanucleus.test.MyEnum

...and an empty result set is returned. If you use the enum's ordinal value as the parameter instead, you get the following:

Parameter "0" was specified as java.lang.Integer but should have been org.datanucleus.test.MyEnum
org.datanucleus.exceptions.NucleusUserException: Parameter "0" was specified as java.lang.Integer but should have been org.datanucleus.test.MyEnum
at org.datanucleus.store.query.Query.checkParameterTypesAgainstCompilation(Query.java:2305)
at org.datanucleus.store.query.AbstractJPQLQuery.compileInternal(AbstractJPQLQuery.java:313)
at org.datanucleus.store.mongodb.query.JPQLQuery.compileInternal(JPQLQuery.java:160)
at org.datanucleus.store.query.Query.setImplicitParameter(Query.java:824)
at org.datanucleus.api.jpa.JPAQuery.setParameter(JPAQuery.java:457)
at org.datanucleus.api.jpa.JPAQuery.setParameter(JPAQuery.java:56)
at org.datanucleus.test.Main.main(Main.java:41)


Sort Order: Ascending order - Click to sort in descending order
Andy Jefferson added a comment - 07/Aug/12 09:39 AM
I get no such exception running that query, but I simply get the info message in the log. Consequently this is allowing that query to be evaluated in the datastore.

08:31:47,642 (org.datanucleus.test.Main.main()) INFO [DataNucleus.Query] - Dont currently support parameter values of type org.datanucleus.test.MyEnum
08:31:47,642 (org.datanucleus.test.Main.main()) DEBUG [DataNucleus.Query] - Compilation of filter to be evaluated completely in-datastore was impossible : Parameter expression is not supported by this mapper
...
08:31:47,650 (org.datanucleus.test.Main.main()) DEBUG [DataNucleus.Datastore.Retrieve] - Fetching instances of collection my_object fields={ "enum_val" : 1 , "_id" : 1} with filter={ }
...
08:31:47,672 (org.datanucleus.test.Main.main()) DEBUG [DataNucleus.Query] - JPQL Query : Processing the "filter" clause using in-memory evaluation (clause = "DyadicExpression{PrimaryExpression{o.enumVal} = ParameterExpression{0}}")