[
https://issues.apache.org/jira/browse/JDO-652?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16609833#comment-16609833
]
Michael Bouschen commented on JDO-652:
--------------------------------------
IfElseExpression<Double>I think we have two separate issues here:
(1) Builder method taking 1 or 3 arguments
(2) Type of the IfThenElse expression: extending DoubleExpression?
I think we can resolve (1) later, because issue (2) is much more important.
Maybe my comment from above was misleading. I tried to build a JDOQLTypedQuery
for "this.salary > (IF (this.department.name == 'Development') 15000.0 ELSE
25000.0)". I came up with the following code:
{code:java}
JDOQLTypedQuery<Employee> query = getPM().newJDOQLTypedQuery(Employee.class);
QEmployee cand = QEmployee.candidate();
IfElseExpression<Double> ifExpr = query.ifElseExpression(Double.class);
ifExpr.ifThen(cand.department.name.eq("Development"),15000.0).elseEnd(25000.0);
query.filter(cand.salary.gt(ifExpr));{code}
For me this looks ok (not looking at issue (1)), but it does not compile. So I
played around with the generics in the interface IfThenElse, but I could not
find a working solution. So I'm not proposing that "IfThenElse" should extend
DoubleExpression. I was using the following interface definition:
{code:java}
interface IfThenElse<T> extends ComparableExpression<T>{code}
This supports IfTheElse<String> and IfTheElse<Date>, too. But with Strings and
Dates we do not have the above issues.
cand.salary is of type NumericExpression<Double>. Maybe the issue is the
definition of NumericExpression:
{code:java}
interface NumericExpression<T> extends ComparableExpression<Number>. {code}
So method gt in cand.salary.gt(ifExpr) expects an argument of type
ComparableExpression<Number> which is not compatiple with
IfElseExpression<Double>.
Andy, can you please try to compile the above query in your environment, just
to see whether you run into a similar issue? If so, do you have an idea how to
change the query API to make this working?
> Provision of a typesafe refactor-friendly query capability for JDOQL
> --------------------------------------------------------------------
>
> Key: JDO-652
> URL: https://issues.apache.org/jira/browse/JDO-652
> Project: JDO
> Issue Type: New Feature
> Components: api, specification, tck
> Reporter: Andy Jefferson
> Assignee: Michael Bouschen
> Priority: Major
> Fix For: JDO 3.2
>
> Attachments: JDO-652-api-patch-Andy.txt, JDO-652-patch3.txt,
> typesafe.patch, typesafe_manifest.patch
>
>
> There are various querying capabilities of this type around. JPA2 has its
> Criteria query API. Third party solutions like QueryDSL also exist, in its
> case providing a JDOQL implementation (as well as JPQL, and HQL). We should
> seriously consider introducing something along these lines in the JDO2.4
> timeframe.
> There is a comparison of JPA Criteria with QueryDSL over at
> http://source.mysema.com/forum/mvnforum/viewthread_thread,49
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)