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 2011/12/29 17:54:11 UTC

svn commit: r1225592 - /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java

Author: ppoddar
Date: Thu Dec 29 16:54:10 2011
New Revision: 1225592

URL: http://svn.apache.org/viewvc?rev=1225592&view=rev
Log:
OPENJPA:2099: Separate bind parameter and select construction logic

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java?rev=1225592&r1=1225591&r2=1225592&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java Thu Dec 29 16:54:10 2011
@@ -1356,11 +1356,8 @@ public class SelectImpl
             return;
         }
 
-        Column[] fromCols = fk.getColumns();
-        Column[] toCols = fk.getPrimaryKeyColumns();
-        Column[] constCols = fk.getConstantColumns();
-        Object[] consts = fk.getConstants();
-        where(oid, mapping, toCols, fromCols, consts, constCols,
+        where(oid, mapping, fk.getPrimaryKeyColumns(), fk.getColumns(), 
+        		fk.getConstants(), fk.getConstantColumns(),
             getJoins(joins, true), store);
     }
 
@@ -1378,16 +1375,38 @@ public class SelectImpl
             return;
         }
 
-        // only bother to pack pk values into array if app id
+
+        SQLBuffer buf = new SQLBuffer(_dict);
+        Object[] params = getBindParameter(oid, mapping, toCols, fromCols, pj, store);
+        bindParameter(buf, params, fromCols, pj);
+        
+        if (constCols != null && constCols.length > 0) {
+            bindParameter(buf, vals, constCols, pj);
+        }
+
+        where(buf, pj);
+    }
+    
+    /**
+     * Gets the binding parameter values to join the given object identifier.
+     * @param oid the object identifier
+     * @param mapping the class mapping of the identifier
+     * @param toCols the target column(s)
+     * @param fromCols the source column(s)
+     * @param pj joins
+     * @param store data store
+     * @return
+     */
+    Object[] getBindParameter(Object oid, ClassMapping mapping, Column[] toCols,
+            Column[] fromCols, PathJoins pj, JDBCStore store) {
         Object[] pks = null;
         boolean relationId = RelationStrategies.isRelationId(fromCols); 
         if (!relationId && mapping.getIdentityType() == ClassMapping.ID_APPLICATION)
             pks = ApplicationIds.toPKValues(oid, mapping);
-
-        SQLBuffer buf = new SQLBuffer(_dict);
-        Joinable join;
         Object val;
         int count = 0;
+        Joinable join;
+        Object[] result = new Object[toCols.length];
         for (int i = 0; i < toCols.length; i++, count++) {
             if (pks == null) {
                 val = (oid == null) ? null : relationId ? oid : ((Id) oid).getId();
@@ -1397,32 +1416,26 @@ public class SelectImpl
                 val = pks[mapping.getField(join.getFieldIndex()).getPrimaryKeyIndex()];
                 val = join.getJoinValue(val, toCols[i], store);
             }
-
-            if (count > 0)
-                buf.append(" AND ");
-            buf.append(getColumnAlias(fromCols[i], pj));
-            if (val == null)
-                buf.append(" IS ");
-            else
-                buf.append(" = ");
-            buf.appendValue(val, fromCols[i]);
+            result[i] = val;
         }
-
-        if (constCols != null && constCols.length > 0) {
-            for (int i = 0; i < constCols.length; i++, count++) {
-                if (count > 0)
-                    buf.append(" AND ");
-                buf.append(getColumnAlias(constCols[i], pj));
-
-                if (vals[i] == null)
-                    buf.append(" IS ");
-                else
-                    buf.append(" = ");
-                buf.appendValue(vals[i], constCols[i]);
-            }
-        }
-
-        where(buf, pj);
+        return result;
+    }
+    
+    /**
+     * Binds the parameters to the given SQL buffer.
+     * @param buf
+     * @param params
+     * @param fromCols
+     * @param pj
+     */
+    void bindParameter(SQLBuffer buf, Object[] params, Column[] fromCols, PathJoins pj) {
+    	for (int i = 0; i < params.length; i++) {
+          if (i > 0)
+              buf.append(" AND ");
+          buf.append(getColumnAlias(fromCols[i], pj));
+	      buf.append(params[i] == null ? " IS " : " = ");
+	      buf.appendValue(params[i], fromCols[i]);
+    	}
     }
 
     /**