You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2010/12/07 23:42:16 UTC
svn commit: r1043221 -
/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryImpl.java
Author: ppoddar
Date: Tue Dec 7 22:42:16 2010
New Revision: 1043221
URL: http://svn.apache.org/viewvc?rev=1043221&view=rev
Log:
OPENJPA-1903: Parameter substitution for complex identity
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryImpl.java
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryImpl.java?rev=1043221&r1=1043220&r2=1043221&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryImpl.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryImpl.java Tue Dec 7 22:42:16 2010
@@ -19,6 +19,7 @@
package org.apache.openjpa.jdbc.kernel;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -79,7 +80,7 @@ public class PreparedQueryImpl implement
private Class<?>[] _projTypes;
// Position of the user defined parameters in the _params list
- private Map<Object, int[]> _userParamPositions;
+ private Map<Object, Integer[]> _userParamPositions;
private Map<Integer, Object> _template;
private SelectImpl select;
@@ -326,7 +327,7 @@ public class PreparedQueryImpl implement
Set<Map.Entry<Object,Object>> userSet = user.entrySet();
for (Map.Entry<Object,Object> userEntry : userSet) {
Object key = userEntry.getKey();
- int[] indices = _userParamPositions.get(key);
+ Integer[] indices = _userParamPositions.get(key);
if (indices == null || indices.length == 0)
throw new UserException(_loc.get("uparam-no-pos", key, this));
Object val = userEntry.getValue();
@@ -361,7 +362,7 @@ public class PreparedQueryImpl implement
* @param broker used to obtain the primary key values
*/
private void setPersistenceCapableParameter(Map<Integer,Object> result,
- Object pc, int[] indices, Broker broker) {
+ Object pc, Integer[] indices, Broker broker) {
JDBCStore store = (JDBCStore)broker.getStoreManager()
.getInnermostDelegate();
MappingRepository repos = store.getConfiguration()
@@ -389,7 +390,7 @@ public class PreparedQueryImpl implement
}
private void setCollectionValuedParameter(Map<Integer,Object> result,
- Collection values, int[] indices, Object param, Broker broker) {
+ Collection values, Integer[] indices, Object param, Broker broker) {
int n = values.size();
Object[] array = values.toArray();
if (n > indices.length || indices.length%n != 0) {
@@ -415,20 +416,17 @@ public class PreparedQueryImpl implement
* key. A user parameter key may appear more than once.
*/
void setUserParameterPositions(List list) {
- _userParamPositions = new HashMap<Object, int[]>();
+ _userParamPositions = new HashMap<Object, Integer[]>();
+ List<Integer> positions = new ArrayList<Integer>();
for (int i = 1; list != null && i < list.size(); i += 2) {
Object key = ((Parameter)list.get(i)).getParameterKey();
- int p = (Integer)list.get(i-1);
- int[] positions = _userParamPositions.get(key);
- if (positions == null) {
- positions = new int[]{p};
- } else {
- int[] temp = new int[positions.length+1];
- System.arraycopy(positions, 0, temp, 0, positions.length);
- temp[positions.length] = p;
- positions = temp;
+ positions.clear();
+ for (int j = 1; j < list.size(); j += 2) {
+ Object other = ((Parameter)list.get(j)).getParameterKey();
+ if (key.equals(other))
+ positions.add((Integer)list.get(j-1));
}
- _userParamPositions.put(key, positions);
+ _userParamPositions.put(key, positions.toArray(new Integer[positions.size()]));
}
}