User: dsundstrom Date: 02/04/14 11:59:30 Modified: src/main/org/jboss/ejb/plugins/cmp/jdbc JDBCEJBQLCompiler.java SQLUtil.java Log: Added support for comparisons of dependent value classes to JBossQL. Revision Changes Path 1.6 +66 -4 jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java Index: JDBCEJBQLCompiler.java =================================================================== RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- JDBCEJBQLCompiler.java 14 Apr 2002 17:28:56 -0000 1.5 +++ JDBCEJBQLCompiler.java 14 Apr 2002 18:59:30 -0000 1.6 @@ -62,6 +62,7 @@ import org.jboss.ejb.plugins.cmp.ejbql.ASTStringParenthetical; import org.jboss.ejb.plugins.cmp.ejbql.ASTSubstring; import org.jboss.ejb.plugins.cmp.ejbql.ASTUCase; +import org.jboss.ejb.plugins.cmp.ejbql.ASTValueClassComparison; import org.jboss.ejb.plugins.cmp.ejbql.ASTWhere; import org.jboss.ejb.plugins.cmp.ejbql.SimpleNode; @@ -86,7 +87,7 @@ * Compiles EJB-QL and JBossQL into SQL. * * @author <a href="mailto:[EMAIL PROTECTED]">Dain Sundstrom</a> - * @version $Revision: 1.5 $ + * @version $Revision: 1.6 $ */ public class JDBCEJBQLCompiler extends BasicVisitor { @@ -305,7 +306,7 @@ } // verify that parameter is the same type as the entity - private void verrifyParameterEntityType( + private void verifyParameterEntityType( int number, JDBCEntityBridge entity) { @@ -345,7 +346,7 @@ ASTParameter toParam = (ASTParameter)toNode; // can only compare like kind entities - verrifyParameterEntityType(toParam.number, fromEntity); + verifyParameterEntityType(toParam.number, fromEntity); inputParameters.addAll(QueryParameter.createParameters( toParam.number - 1, @@ -869,7 +870,7 @@ ASTParameter fromParam = (ASTParameter)node.jjtGetChild(0); // can only compare like kind entities - verrifyParameterEntityType(fromParam.number, toChildEntity); + verifyParameterEntityType(fromParam.number, toChildEntity); fromParamNumber = fromParam.number; } else { @@ -983,6 +984,67 @@ buf.append(")"); + return buf; + } + + public Object visit(ASTValueClassComparison node, Object data) { + BlockStringBuffer buf = (BlockStringBuffer)data; + + boolean not = (node.opp == "<>"); + buf.append("("); + if(not) { + buf.append("NOT("); + } + + // setup the from path + ASTPath fromPath = (ASTPath)node.jjtGetChild(0); + joinPaths.add(fromPath); + String fromAlias = getAlias((String)fromPath.getPath(fromPath.size()-2)); + JDBCCMPFieldBridge fromCMPField = + (JDBCCMPFieldBridge)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)); + + buf.append(SQLUtil.getWhereClause(fromCMPField, fromAlias)); + } else { + ASTPath toPath = (ASTPath)toNode; + joinPaths.add(toPath); + String toAlias = getAlias((String)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()); + } + + buf.append(SQLUtil.getSelfCompareWhereClause( + fromCMPField, + fromAlias, + toAlias)); + } + + if(not) { + buf.append(")"); + } + buf.append(")"); + return buf; } 1.12 +8 -1 jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java Index: SQLUtil.java =================================================================== RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- SQLUtil.java 13 Apr 2002 01:26:58 -0000 1.11 +++ SQLUtil.java 14 Apr 2002 18:59:30 -0000 1.12 @@ -27,7 +27,7 @@ * SQLUtil helps with building sql statements. * * @author <a href="mailto:[EMAIL PROTECTED]">Dain Sundstrom</a> - * @version $Revision: 1.11 $ + * @version $Revision: 1.12 $ */ public class SQLUtil { public static String fixTableName(String tableName, DataSource dataSource) @@ -594,6 +594,13 @@ // [AND fromIdentifier.pkColumnName1=toIdentifier.fkColumnName1 // [AND fromIdentifier.pkColumnName2=toIdentifier.fkColumnName2 [...]]] // ======================================================================= + + public static String getSelfCompareWhereClause( + JDBCFieldBridge field, String fromIdentifier, String toIdentifier) { + + return getSelfCompareWhereClause( + field.getJDBCType(), fromIdentifier, toIdentifier); + } public static String getSelfCompareWhereClause( List fields, String fromIdentifier, String toIdentifier) {
_______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-development