[jboss-cvs] JBossAS SVN: r61737 - in branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp: jdbc and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Mar 27 10:16:36 EDT 2007
Author: alex.loubyansky at jboss.com
Date: 2007-03-27 10:16:36 -0400 (Tue, 27 Mar 2007)
New Revision: 61737
Modified:
branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp/bridge/CMPFieldBridge.java
branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/EJBQLToSQL92Compiler.java
branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp/jdbc2/bridge/JDBCCMPFieldBridge2.java
Log:
JBAS-3975
Modified: branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp/bridge/CMPFieldBridge.java
===================================================================
--- branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp/bridge/CMPFieldBridge.java 2007-03-27 14:07:55 UTC (rev 61736)
+++ branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp/bridge/CMPFieldBridge.java 2007-03-27 14:16:36 UTC (rev 61737)
@@ -21,6 +21,8 @@
*/
package org.jboss.ejb.plugins.cmp.bridge;
-public interface CMPFieldBridge extends FieldBridge {
+import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCFieldBridge;
+
+public interface CMPFieldBridge extends JDBCFieldBridge {
public Class getFieldType();
}
Modified: branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/EJBQLToSQL92Compiler.java
===================================================================
--- branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/EJBQLToSQL92Compiler.java 2007-03-27 14:07:55 UTC (rev 61736)
+++ branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/EJBQLToSQL92Compiler.java 2007-03-27 14:16:36 UTC (rev 61737)
@@ -34,11 +34,13 @@
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractEntityBridge;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractCMRFieldBridge;
+import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCReadAheadMetaData;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCTypeMappingMetaData;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCRelationMetaData;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCFunctionMappingMetaData;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCQueryMetaData;
+import org.jboss.ejb.plugins.cmp.bridge.CMPFieldBridge;
import org.jboss.ejb.EntityPersistenceStore;
import org.jboss.logging.Logger;
@@ -903,7 +905,61 @@
public Object visit(ASTValueClassComparison node, Object data)
{
- throw new IllegalStateException("Value class comparison is not yet supported.");
+ StringBuffer buf = (StringBuffer) data;
+
+ boolean not = (node.opp.equals(SQLUtil.NOT_EQUAL));
+ String comparison = node.opp;
+ buf.append('(');
+ if(not)
+ {
+ buf.append(SQLUtil.NOT).append('(');
+ comparison = "=";
+ }
+
+ // setup the from path
+ ASTPath fromPath = (ASTPath) node.jjtGetChild(0);
+ addInnerJoinPath(fromPath);
+ String fromAlias = aliasManager.getAlias(fromPath.getPath(fromPath.size() - 2));
+ CMPFieldBridge fromCMPField = (CMPFieldBridge) fromPath.getCMPField();
+
+ Node toNode = node.jjtGetChild(1);
+ if(toNode instanceof ASTParameter)
+ {
+ ASTParameter toParam = (ASTParameter) toNode;
+
+ // can only compare like kind entities
+ Class parameterType = getParameterType(toParam.number);
+ if(!(fromCMPField.getFieldType().equals(parameterType)))
+ {
+ throw new IllegalStateException("Only like types can be " +
+ "compared: from CMP field=" +
+ fromCMPField.getFieldType() +
+ " to parameter=" + parameterType);
+ }
+
+ inputParameters.addAll(QueryParameter.createParameters(toParam.number - 1, fromCMPField));
+ SQLUtil.getWhereClause(fromCMPField.getJDBCType(), fromAlias, comparison, buf);
+ }
+ else
+ {
+ ASTPath toPath = (ASTPath) toNode;
+ addInnerJoinPath(toPath);
+ String toAlias = aliasManager.getAlias(toPath.getPath(toPath.size() - 2));
+ JDBCCMPFieldBridge toCMPField = (JDBCCMPFieldBridge) toPath.getCMPField();
+
+ // can only compare like kind entities
+ if(!(fromCMPField.getFieldType().equals(toCMPField.getFieldType())))
+ {
+ throw new IllegalStateException("Only like types can be " +
+ "compared: from CMP field=" +
+ fromCMPField.getFieldType() +
+ " to CMP field=" + toCMPField.getFieldType());
+ }
+
+ SQLUtil.getSelfCompareWhereClause(fromCMPField, toCMPField, fromAlias, toAlias, comparison, buf);
+ }
+
+ return (not ? buf.append(')') : buf).append(')');
}
public Object visit(ASTEntityComparison node, Object data)
@@ -1171,18 +1227,24 @@
+ "Should have been handled at a higher level.");
}
+ JDBCFieldBridge cmpField = (JDBCFieldBridge) node.getCMPField();
+
// make sure this is mapped to a single column
switch(node.type)
{
case EJBQLTypes.ENTITY_TYPE:
case EJBQLTypes.VALUE_CLASS_TYPE:
+ if(cmpField.getJDBCType().hasMapper() ||
+ cmpField.getJDBCType().getParameterSetter() != null)
+ {
+ break;
+ }
case EJBQLTypes.UNKNOWN_TYPE:
throw new IllegalStateException("Can not visit multi-column path " +
"node. Should have been handled at a higher level.");
}
addLeftJoinPath(node);
- JDBCFieldBridge cmpField = (JDBCFieldBridge) node.getCMPField();
String alias = aliasManager.getAlias(node.getPath(node.size() - 2));
SQLUtil.getColumnNamesClause(cmpField, alias, buf);
return data;
Modified: branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp/jdbc2/bridge/JDBCCMPFieldBridge2.java
===================================================================
--- branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp/jdbc2/bridge/JDBCCMPFieldBridge2.java 2007-03-27 14:07:55 UTC (rev 61736)
+++ branches/Branch_4_2/server/src/main/org/jboss/ejb/plugins/cmp/jdbc2/bridge/JDBCCMPFieldBridge2.java 2007-03-27 14:16:36 UTC (rev 61737)
@@ -28,7 +28,6 @@
import org.jboss.ejb.plugins.cmp.jdbc.JDBCType;
import org.jboss.ejb.plugins.cmp.jdbc.JDBCEntityPersistenceStore;
import org.jboss.ejb.plugins.cmp.jdbc.JDBCResultSetReader;
-import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCFieldBridge;
import org.jboss.ejb.EntityEnterpriseContext;
import org.jboss.deployment.DeploymentException;
import org.jboss.logging.Logger;
@@ -44,7 +43,7 @@
* @version <tt>$Revision$</tt>
*/
public class JDBCCMPFieldBridge2
- implements CMPFieldBridge, JDBCFieldBridge
+ implements CMPFieldBridge
{
private final JDBCEntityBridge2 entity;
private final int rowIndex;
More information about the jboss-cvs-commits
mailing list