openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Catalina Wei (JIRA)" <j...@apache.org>
Subject [jira] Updated: (OPENJPA-1828) Query with expression IN (collection_valued_input_parameter) should report syntax error, correct usange is IN collection_valued_input_parameter
Date Mon, 18 Oct 2010 18:01:33 GMT

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


Mime
View raw message