The test mostly passes now. There are some issues, we should probably discuss them on Friday:

a)
SELECT FROM org.apache.jdo.tck.pc.query.OptionalSample WHERE !(optionalPC != null)
fails with
java.sql.SQLSyntaxErrorException: Syntax error: Encountered "NOT" at line 1, column 185

-> I think double negation is legal, would you agree?


b)
    query #1=  "optionalPC.id == " + DUMMY_ID
    query #2=  "optionalPC.get().id == " + DUMMY_ID
-> I think both queries should return the same result, but instead the second query returns the object with 'id=DUMMY_ID', not the one that refrerences the object with id=DUMMY_ID.

c) Optional.orElse is currently not supported. I think the proposal was to support this, but we discuss this on Friday: "org.datanucleus.exceptions.NucleusUserException: Invocation of method "orElse" on "java.util.Optional" is not supported"


d) query: "optionalPC == null"
From this comment (https://issues.apache.org/jira/browse/JDO-751?focusedCommentId=15154475&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15154475) by Craig (Feb 19, 16:44) my understanding was that this should only return objects with 'optionalPC==null', but _not_ objects with 'optionalPC.isEmpty()'.
However we can discuss this on Friday.

A related problem occurs with the query "!(optionalPC == null)"
This returns only objects where 'optionalPC.get() != null'.
My understanding was that it should also return with 'optionalPC.isEmpty()', because the reference is not actually null.

From the post, my understanding was that we always assume optional-shortcut form when comparing to an actual instance, but allow comparison with the 'reference to Optional' when copmparing to 'null'.

Again, we can discuss this.

I'll upload a patch with the latest version.

Best,
Tilmann


On 31-May-16 20:33, Craig Russell wrote:
On May 31, 2016, at 3:08 AM, Tilmann Zäschke <[email protected]> wrote:

Hi,

More likely the problem is down to having a field as Optional<Object>
The test doesn't actually have Optional<Object>, but it does have:

Optional<?> optionalAny;
Optional optionalNoGenerics;

I suppose these would not be allowed either (because they are mostly equivalent to 
Optional<Object>)?
Yes. Optional<?> and Optional are not of much interest (to me at least).

I agree with Andy that supporting Object in an object model should be sufficiently 
flexible. Optional<Object> does not add any value to the model.

In plain English, "Object can be any object. Optional<Object> can be anything but 
with some special behavior about nullability"???

Craig
Regards,
Tilmann

On 31-May-16 11:53, Andy Jefferson wrote:
Hi,
thanks. Indeed it seems that the error is triggered by declaring a field
as 'Optional'.
That I doubt, due to established tests
https://github.com/datanucleus/tests/blob/master/jdo/general/src/test/org/datanucleus/tests/types/OptionalTest.java


More likely the problem is down to having a field as Optional<Object>, which is 
a minority interest use-case IMHO (which can often be symptomatic of a problem in a 
model, with lack of use of inheritance etc). Perhaps try nightly builds of jars if 
having problems.

Next step is likely to update the implementation.
DataNucleus has supported Optional since 5.0.0-m1, and tested on Optional<{basic}>, 
Optional<PC> (see link). It hasn't been tested on Optional<Object> where Object 
refers to potentially multiple types of PC.



Regards

Craig L Russell
Architect
[email protected]
P.S. A good JDO? O, Gasp!






Reply via email to