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

Reply via email to