You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Azuo Lee (JIRA)" <ji...@apache.org> on 2010/10/07 20:27:32 UTC
[jira] Created: (OPENJPA-1828) Query with expression IN
(collection_valued_input_parameter) gives wrong result when executed the
second time
Query with expression IN (collection_valued_input_parameter) gives wrong result when executed the second time
-------------------------------------------------------------------------------------------------------------
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
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.
[jira] Updated: (OPENJPA-1828) Query with expression IN
(collection_valued_input_parameter) should report syntax error, correct
usange is IN collection_valued_input_parameter
Posted by "Catalina Wei (JIRA)" <ji...@apache.org>.
[ 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.
[jira] Updated: (OPENJPA-1828) Query with expression IN
(collection_valued_input_parameter) gives wrong result when executed the
second time
Posted by "Azuo Lee (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1828?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Azuo Lee updated OPENJPA-1828:
------------------------------
Description:
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.
was:
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.
> Query with expression IN (collection_valued_input_parameter) gives wrong result when executed the second time
> -------------------------------------------------------------------------------------------------------------
>
> 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
>
> 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.
[jira] Resolved: (OPENJPA-1828) Query with expression IN
(collection_valued_input_parameter) should report syntax error, correct
usange is IN collection_valued_input_parameter
Posted by "Azuo Lee (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1828?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Azuo Lee resolved OPENJPA-1828.
-------------------------------
Resolution: Fixed
Thanks, eliminating the enclosing parentheses solves the problem.
> 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.
[jira] Assigned: (OPENJPA-1828) Query with expression IN
(collection_valued_input_parameter) gives wrong result when executed the
second time
Posted by "Catalina Wei (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-1828?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Catalina Wei reassigned OPENJPA-1828:
-------------------------------------
Assignee: Catalina Wei
> Query with expression IN (collection_valued_input_parameter) gives wrong result when executed the second time
> -------------------------------------------------------------------------------------------------------------
>
> 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
>
> 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.