[ 
https://issues.apache.org/jira/browse/JDO-751?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15314463#comment-15314463
 ] 

Tilmann Zäschke edited comment on JDO-751 at 6/4/16 12:38 PM:
--------------------------------------------------------------

While writing the unit test, I came up with the following test cases for 
{{orElse}}:
{code:title=SupportedOptionalMethods.java|borderStyle=solid}
    public void testOrElse() {
        OptionalSample otherPC = new OptionalSample();
                otherPC.setId(33);
           
        String paramDecl = OptionalSample.class.getName() + " otherPcParam";
        Object[] params = new Object[]{otherPC}; 
        //equivalent to "(optionalPC != null ? optionalPC : otherPcParam) == 
null" 
        checkQuery("this.optionalPC.orElse(otherPcParam) == null", paramDecl, 
params, 
                        new Object[]{});
        //equivalent to "(optionalPC != null ? optionalPC : otherPcParam) != 
otherPcParam" 
        checkQuery("this.optionalPC.orElse(otherPcParam) != otherPcParam", 
paramDecl, params, 
                        new Object[]{oidPC});

        paramDecl = "Date myDateParam, Date otherDateParam";
        checkQuery("this.optionalDate.orElse(otherDateParam) == myDateParam", 
paramDecl, 
                        new Object[]{DATE, DATE2}, 
                        new Object[]{oidPC});
        paramDecl = "Date otherDateParam";
        checkQuery("this.optionalString.orElse(otherDateParam) == otherDate", 
paramDecl, 
                        new Object[]{oidNull, oidEmpty, oidReferencedPC1});

        checkQuery("this.optionalString.orElse(12345) == " + INTEGER, 
                        new Object[]{oidPC});
        checkQuery("this.optionalString.orElse(12345) == 12345", 
                        new Object[]{oidNull, oidEmpty, oidReferencedPC1});

        paramDecl = String.class.getName() + " myString";
        checkQuery("this.optionalString.orElse(`xyz`) == otherString", 
paramDecl,  
                        new Object[]{STRING}, 
                        new Object[]{oidPC});
        checkQuery("this.optionalString.orElse(`xyz`) == `xyz`", 
                        new Object[]{oidNull, oidEmpty, oidReferencedPC1});
    }
{code}

The main problem is that all of these tests seem somewhat artificial. Can 
anyone suggest some real-world cases for using {{orElse}} in queries? Otherwise 
it may make sense to drop support support for {{orElse}} for now, until we see 
a need.


was (Author: tilmann):
While writing the unit test, I came up with the following test cases for 
{{orElse}}:
{code:title=SupportedOptionalMethods.java|borderStyle=solid}
    public void testOrElse() {
                OptionalSample otherPC = new OptionalSample();
                otherPC.setId(33);
           
        String paramDecl = OptionalSample.class.getName() + " otherPCparam";
        Object[] params = new Object[]{otherPC}; 
        checkQuery("this.optionalPC.orElse(otherPCparam) == null", paramDecl, 
params, 
                        new Object[]{});
        checkQuery("this.optionalPC.orElse(otherPCparam) != otherPCparam", 
paramDecl, params, 
                        new Object[]{oidPC});

        paramDecl = "Date myDate, Date otherDate";
        checkQuery("this.optionalDate.orElse(otherDate) == myDate", paramDecl, 
                        new Object[]{DATE, DATE2}, 
                        new Object[]{oidPC});
        paramDecl = "Date otherDate";
        checkQuery("this.optionalString.orElse(otherDate) == otherDate", 
paramDecl, 
                        new Object[]{oidNull, oidEmpty, oidDummyPC});

        checkQuery("this.optionalString.orElse(12345) == " + INTEGER, 
                        new Object[]{oidPC});
        checkQuery("this.optionalString.orElse(12345) == 12345", 
                        new Object[]{oidNull, oidEmpty, oidDummyPC});

        paramDecl = String.class.getName() + " myString";
        checkQuery("this.optionalString.orElse(`xyz`) == otherString", 
paramDecl,  
                        new Object[]{STRING}, 
                        new Object[]{oidPC});
        checkQuery("this.optionalString.orElse(`xyz`) == `xyz`", 
                        new Object[]{oidNull, oidEmpty, oidDummyPC});
    }
{code}

The main problem is that all of these tests seem somewhat artificial. Can 
anyone suggest some real-world cases for using {{orElse}} in queries? Otherwise 
it may make sense to drop support support for {{orElse}} for now, until we see 
a need.

> Support for Java8 Optional
> --------------------------
>
>                 Key: JDO-751
>                 URL: https://issues.apache.org/jira/browse/JDO-751
>             Project: JDO
>          Issue Type: New Feature
>          Components: specification, tck
>            Reporter: Andy Jefferson
>             Fix For: JDO 3.2
>
>         Attachments: JDO-751-tck-patch-v2.txt
>
>
> java.util.Optional provides a feature that is available in other languages. 
> Since JDO 3.2 will be for Java8+ then it makes sense to add support for this 
> as a "supported persistable type"



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to