User: dsundstrom
  Date: 01/08/18 09:16:52

  Added:       src/main/org/jboss/ejb/plugins/cmp/jdbc
                        JDBCEJBQLFinderCommand.java
  Log:
  This command handles EJB-QL queries.
  
  Revision  Changes    Path
  1.1                  
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLFinderCommand.java
  
  Index: JDBCEJBQLFinderCommand.java
  ===================================================================
  /*
   * JBoss, the OpenSource J2EE webOS
   *
   * Distributable under LGPL license.
   * See terms of license at gnu.org.
   */
  
  package org.jboss.ejb.plugins.cmp.jdbc;
  
  import java.sql.PreparedStatement;
  import java.util.ArrayList;
  import java.util.List;
  import org.jboss.deployment.DeploymentException;
  import org.jboss.ejb.plugins.cmp.ejbql.Assembly;
  import org.jboss.ejb.plugins.cmp.ejbql.Parser;
  import org.jboss.ejb.plugins.cmp.jdbc.ejbql.EJBQLParser;
  import org.jboss.ejb.plugins.cmp.jdbc.ejbql.SQLTarget;
  import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCQueryMetaData;
  import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCQlQueryMetaData;
  
  /**
   * JDBCDefinedFinderCommand finds entities based on an xml sql specification.
   * This class needs more work and I will clean it up in CMP 2.x phase 3.
   * The only thing to to note is the seperation of query into a from and where
   * clause. This code has been cleaned up to improve readability.
   *
   * @author <a href="mailto:[EMAIL PROTECTED]";>Dain Sundstrom</a>
   * @version $Revision: 1.1 $
   */
  public class JDBCEJBQLFinderCommand extends JDBCFinderCommand
  {
     // Attributes ----------------------------------------------------
     
     private int[] parameterArray;
  
     // Constructors --------------------------------------------------
  
     public JDBCEJBQLFinderCommand(JDBCStoreManager manager, JDBCQueryMetaData q) 
throws DeploymentException {
        super(manager, q);
  
                JDBCQlQueryMetaData metadata = (JDBCQlQueryMetaData)q;
                log.debug("EQL-QL: "+metadata.getEjbQl());
                Parser ejbql = new EJBQLParser().ejbqlQuery();
                Assembly a = new Assembly(metadata.getEjbQl());
                a.setTarget(new SQLTarget(manager.getContainer().getApplication()));
                a = ejbql.soleMatch(a);
                log.debug("Assembly: "+a);
                SQLTarget target = (SQLTarget)a.getTarget();
                setSQL(target.toSQL());
                
                List l  = target.getInputParameters();
                parameterArray = new int[l.size()];
                for(int i=0; i<l.size(); i++) {
                        // convert to 0 based parameter index
                        parameterArray[i] = ((Integer)l.get(i)).intValue()-1;
                }
        }
   
     // JDBCFinderCommand overrides ------------------------------------
  
        protected void setParameters(PreparedStatement ps, Object argOrArgs) throws 
Exception {
                Object[] args = (Object[])argOrArgs;
        
                for(int i = 0; i < parameterArray.length; i++) {
                        Object arg = args[parameterArray[i]];
                        int jdbcType = 
manager.getJDBCTypeFactory().getJDBCTypeForJavaType(arg.getClass());
                        JDBCUtil.setParameter(log, ps, i+1, jdbcType, arg);
                }
        }       
  }
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to