User: dsundstrom
Date: 02/01/15 14:40:37
Modified: src/main/org/jboss/ejb/plugins/cmp/jdbc/ejbql SQLTarget.java
Log:
Added support for read ahead on find.
Converted from field arrays to field lists.
Revision Changes Path
1.11 +44 -22
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/ejbql/SQLTarget.java
Index: SQLTarget.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/ejbql/SQLTarget.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- SQLTarget.java 2001/11/29 20:40:05 1.10
+++ SQLTarget.java 2002/01/15 22:40:36 1.11
@@ -27,9 +27,11 @@
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge;
+import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCEntityMetaData;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCFunctionMappingMetaData;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCTypeMappingMetaData;
+import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCReadAheadMetaData;
public class SQLTarget implements DeepCloneable {
private final Method method;
@@ -38,6 +40,7 @@
private final Application application;
private final Map managerByAbstractSchemaName = new Hashtable();
private final List inputParameters = new ArrayList();
+ private final JDBCReadAheadMetaData readAhead;
private boolean isSelectDistinct;
private String selectPath;
@@ -53,11 +56,13 @@
*/
public SQLTarget(Method method,
JDBCTypeFactory typeFactory,
- Application application) {
+ Application application,
+ JDBCReadAheadMetaData readAhead) {
this.method = method;
this.typeFactory = typeFactory;
this.application = application;
+ this.readAhead = readAhead;
if(method.getReturnType().equals(Set.class)) {
isSelectDistinct = true;
@@ -90,6 +95,7 @@
method = target.method;
typeFactory = target.typeFactory;
application = target.application;
+ readAhead = target.readAhead;
idManager = new IdentifierManager(target.idManager);
managerByAbstractSchemaName.putAll(target.managerByAbstractSchemaName);
inputParameters.addAll(target.inputParameters);
@@ -464,10 +470,16 @@
return null;
}
+ inputParameters.addAll(QueryParameter.createParameters(
+ compareToParameter.getNumber() - 1,
+ entity));
+/*
// create the parameter objects
- JDBCCMPFieldBridge[] pkFields = entity.getJDBCPrimaryKeyFields();
- for(int i=0; i<pkFields.length; i++) {
- JDBCType type = pkFields[i].getJDBCType();
+ List pkFields = entity.getPrimaryKeyFields();
+ for(Iterator iter = pkFields.iterator(); iter.hasNext();) {
+ JDBCFieldBridge pkField = (JDBCFieldBridge)iter.next();
+
+ JDBCType type = pkField.getJDBCType();
if(type instanceof JDBCTypeComplex) {
JDBCTypeComplexProperty[] props =
((JDBCTypeComplex)type).getProperties();
@@ -475,7 +487,7 @@
QueryParameter param = new QueryParameter(
compareToParameter.getNumber() - 1,
false, // isPrimaryKeyParameter
- pkFields[i],
+ pkField,
props[j],
props[j].getJDBCType());
inputParameters.add(param);
@@ -484,13 +496,13 @@
QueryParameter param = new QueryParameter(
compareToParameter.getNumber() - 1,
false, // isPrimaryKeyParameter
- pkFields[i],
+ pkField,
null,
type.getJDBCTypes()[0]);
inputParameters.add(param);
}
}
-
+*/
// generate the sql
StringBuffer buf = new StringBuffer();
buf.append("(");
@@ -498,7 +510,8 @@
buf.append("NOT(");
}
- buf.append(SQLUtil.getWhereClause(pkFields, identifier));
+ buf.append(SQLUtil.getWhereClause(
+ entity.getPrimaryKeyFields(), identifier));
if(compareSymbol.equals("<>")) {
buf.append(")");
@@ -528,7 +541,7 @@
}
buf.append(SQLUtil.getSelfCompareWhereClause(
- fromEntity.getJDBCPrimaryKeyFields(),
+ fromEntity.getPrimaryKeyFields(),
fromIdentifier,
toIdentifier));
@@ -557,6 +570,10 @@
return null;
}
+ inputParameters.addAll(QueryParameter.createParameters(
+ compareToParameter.getNumber() - 1,
+ cmpFieldBridge));
+/*
// create the parameter objects
JDBCType type = cmpFieldBridge.getJDBCType();
if(type instanceof JDBCTypeComplex) {
@@ -580,7 +597,7 @@
type.getJDBCTypes()[0]);
inputParameters.add(param);
}
-
+*/
// generate the sql
StringBuffer buf = new StringBuffer();
buf.append("(");
@@ -643,7 +660,7 @@
buf.append("NOT EXISTS (");
buf.append("SELECT ");
buf.append(SQLUtil.getColumnNamesClause(
- entity.getJDBCPrimaryKeyFields(), tableAlias));
+ entity.getPrimaryKeyFields(), tableAlias));
buf.append(" FROM ");
buf.append(entity.getMetaData().getTableName());
buf.append(" ");
@@ -658,16 +675,15 @@
public String getNullComparison(String path, boolean not) {
PathElement pathElement = idManager.getExistingPathElement(path);
- JDBCCMPFieldBridge[] fields;
+ List fields;
String identifier;
if(pathElement instanceof CMPField) {
CMPField cmpField = (CMPField)pathElement;
- fields = new JDBCCMPFieldBridge[1];
- fields[0] = cmpField.getCMPFieldBridge();
+ fields = Collections.singletonList(cmpField.getCMPFieldBridge());
identifier = idManager.getTableAlias(cmpField.getParent());
} else {
EntityPathElement entityPathElement = (EntityPathElement)pathElement;
- fields = entityPathElement.getEntityBridge().getJDBCPrimaryKeyFields();
+ fields = entityPathElement.getEntityBridge().getPrimaryKeyFields();
identifier = idManager.getTableAlias(entityPathElement);
}
@@ -677,19 +693,21 @@
buf.append(" NOT(");
}
- for(int i=0; i<fields.length; i++) {
- if(i > 0) {
- buf.append(" AND ");
- }
- JDBCType type = fields[i].getJDBCType();
+ for(Iterator iter = fields.iterator(); iter.hasNext();) {
+ JDBCFieldBridge field = (JDBCFieldBridge)iter.next();
+
+ JDBCType type = field.getJDBCType();
String[] columnNames = type.getColumnNames();
for(int j=0; j<columnNames.length; j++) {
if(j > 0) {
buf.append(" AND ");
}
- buf.append(identifier).append(".").append(columnNames[i]);
+ buf.append(identifier).append(".").append(columnNames[j]);
buf.append(" IS NULL");
}
+ if(iter.hasNext()) {
+ buf.append(" AND ");
+ }
}
if(not) {
@@ -747,7 +765,11 @@
public String toSQL() {
if(sql == null) {
SQLGenerator sqlGen = new SQLGenerator(idManager);
- sql = sqlGen.getSQL(isSelectDistinct, selectPath, whereClause);
+ sql = sqlGen.getSQL(
+ isSelectDistinct,
+ selectPath,
+ whereClause,
+ readAhead);
}
return sql;
}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development