[ 
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.

Reply via email to