You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Catalina Wei (JIRA)" <ji...@apache.org> on 2010/10/18 20:01:33 UTC

[jira] Updated: (OPENJPA-1828) Query with expression IN (collection_valued_input_parameter) should report syntax error, correct usange is IN collection_valued_input_parameter

     [ https://issues.apache.org/jira/browse/OPENJPA-1828?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Catalina Wei updated OPENJPA-1828:
----------------------------------

    Fix Version/s: 2.1.0
          Summary: Query with expression IN (collection_valued_input_parameter) should report syntax error, correct usange is  IN collection_valued_input_parameter  (was: Query with expression IN (collection_valued_input_parameter) gives wrong result when executed the second time)

1. JPA2 Spec defines the collectioin_valued_paramater usage in IN expression is:
        in_expression ::=
            {state_field_path_expression | type_discriminator} [NOT] IN
                { ( in_item {, in_item}* ) | (subquery) | collection_valued_input_parameter }

Notice that the collection_valued_input_parameter is not enclosed in parentheses.

If the input parameter is changed from "(:p)" to ":p" in the query string as below, then the correct output is produced :

        "select v.id from Category v where v.id in :p order by v.id asc"

2. Single_valued_input_parameter vs. Collection_valued_input_parameter validation was missing, which caused incorrect result
 when the second time the same query is executed.
 The fix is to validate it at runtime.
 The committed code will report ArgumentException if a single_valued_parameter is specified, but user is passing a collection value.

> Query with expression IN (collection_valued_input_parameter) should report syntax error, correct usange is  IN collection_valued_input_parameter
> ------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-1828
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1828
>             Project: OpenJPA
>          Issue Type: Bug
>    Affects Versions: 2.1.0
>         Environment: openjpa-2.1.0-20101001.064809-70
>            Reporter: Azuo Lee
>            Assignee: Catalina Wei
>             Fix For: 2.1.0
>
>
> for (int i = 0; i < 2; i ++) {
>     List categories = new LinkedList();
>     categories.add("01");
>     categories.add("02");
>     categories.add("03");
>     Query q = entityManager.createQuery("select v.id from Category v where v.id in (:p) order by v.id asc");
>     q.setParameter("p", categories);
>     List results = q.getResultList();
>     for (Iterator it = results.iterator(); it.hasNext(); )
>          System.out.print(it.next() + ", ");
>     System.out.println();
> }
> The above code will produce the following output:
> 01, 02, 03,
> 02, 03,
> "01" is missing when the second time the same query is executed.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.