You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by br...@apache.org on 2003/03/15 17:22:11 UTC

cvs commit: db-ojb/src/java/org/apache/ojb/broker/query QueryByCriteria.java Criteria.java

brj         2003/03/15 08:22:11

  Modified:    src/java/org/apache/ojb/broker/query QueryByCriteria.java
                        Criteria.java
  Log:
  Query refactoring
  
  Revision  Changes    Path
  1.10      +145 -24   db-ojb/src/java/org/apache/ojb/broker/query/QueryByCriteria.java
  
  Index: QueryByCriteria.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/QueryByCriteria.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- QueryByCriteria.java	15 Mar 2003 15:42:26 -0000	1.9
  +++ QueryByCriteria.java	15 Mar 2003 16:22:11 -0000	1.10
  @@ -54,15 +54,17 @@
    * <http://www.apache.org/>.
    */
   
  +import java.util.ArrayList;
  +import java.util.HashMap;
  +import java.util.List;
  +
   import org.apache.ojb.broker.metadata.ClassDescriptor;
   import org.apache.ojb.broker.metadata.FieldDescriptor;
  +import org.apache.ojb.broker.metadata.FieldHelper;
   import org.apache.ojb.broker.metadata.MetadataManager;
   import org.apache.ojb.broker.metadata.fieldaccess.PersistentField;
   import org.apache.ojb.broker.util.logging.LoggerFactory;
   
  -import java.util.HashMap;
  -import java.util.List;
  -
   /**
    * represents a search by criteria.
    * "find all articles where article.price > 100"
  @@ -88,6 +90,13 @@
       private HashMap m_pathClasses;
       private Criteria m_havingCriteria;
   
  +    // holding FieldHelper for orderBy and groupBy
  +    private List m_orderby = null;
  +    private List m_groupby = null;
  +    
  +    // list of names of prefetchable relationships
  +    private List m_prefetchedRelationships = null;
  +
       /**
        * Build a Query for class targetClass with criteria.
        * Criteriy may be null (will result in a query returning ALL objects from a table)
  @@ -96,10 +105,13 @@
       {
           super (targetClass);
           
  -        this.m_criteria = whereCriteria;
  -        this.m_havingCriteria = havingCriteria;
  -        this.m_distinct = distinct;
  -        this.m_pathClasses = new HashMap();
  +        m_criteria = whereCriteria;
  +        m_havingCriteria = havingCriteria;
  +        m_distinct = distinct;
  +        m_pathClasses = new HashMap();
  +        m_groupby = new ArrayList();
  +        m_orderby = new ArrayList();
  +        m_prefetchedRelationships = new ArrayList();
       }
   
       /**
  @@ -285,49 +297,158 @@
   		m_havingCriteria = havingCriteria;
   	}
   
  +    /**
  +     * Adds a groupby fieldName for ReportQueries.
  +     * @param fieldName The groupby to set
  +     */
  +    public void addGroupBy(String fieldName)
  +    {
  +        if (fieldName != null)
  +        {
  +            m_groupby.add(new FieldHelper(fieldName, false));
  +        }
  +    }
  +
  +    /**
  +     * Adds a field for groupby
  +     * @param aField
  +     */
  +    public void addGroupBy(FieldHelper aField)
  +    {
  +        if (aField != null)
  +        {
  +            m_groupby.add(aField);
  +        }
  +    }
  +
  +    /**
  +     * Adds an array of groupby fieldNames for ReportQueries.
  +     * @param fieldNames The groupby to set
  +     */
  +    public void addGroupBy(String[] fieldNames)
  +    {
  +        for (int i = 0; i < fieldNames.length; i++)
  +        {
  +            addGroupBy(fieldNames[i]);
  +        }
  +    }
  +
   	/* (non-Javadoc)
   	 * @see org.apache.ojb.broker.query.Query#getGroupBy()
   	 */
   	public List getGroupBy()
   	{
  +        // BRJ: 
  +        // combine data from query and criteria
  +        // TODO: to be removed when Criteria#addGroupBy is removed 
  +        ArrayList temp = new ArrayList();     
  +        temp.addAll(m_groupby);
  +        
           if (getCriteria() != null)
           {
  -            return getCriteria().getGroupby();
  +            temp.addAll(getCriteria().getGroupby());
  +        }    
  +
  +        return temp;
  +	}
  +
  +    /**
  +     * Adds a field for orderBy
  +     * @param  fieldName    The field name to be used
  +     * @param  sortAscending    true for ASCENDING, false for DESCENDING
  +     */
  +    public void addOrderBy(String fieldName, boolean sortAscending)
  +    {
  +        if (fieldName != null)
  +        {
  +            m_orderby.add(new FieldHelper(fieldName, sortAscending));
           }
  -        else
  +    }
  +
  +    /**
  +     * Adds a field for orderBy, order is ASCENDING
  +     * @param  fieldName    The field name to be used
  +     * @deprecated use #addOrderByAscending(String fieldName)
  +     */
  +    public void addOrderBy(String fieldName)
  +    {
  +        addOrderBy(fieldName, true);
  +    }
  +
  +    /**
  +     * Adds a field for orderBy
  +     * @param aField
  +     */
  +    public void addOrderBy(FieldHelper aField)
  +    {
  +        if (aField != null)
           {
  -            return null;
  +            m_orderby.add(aField);
           }
  -	}
  +    }
  +
  +    /**
  +     * Adds a field for orderBy ASCENDING
  +     * @param  fieldName    The field name to be used
  +     */
  +    public void addOrderByAscending(String fieldName)
  +    {
  +        addOrderBy(fieldName, true);
  +    }
  +
  +    /**
  +     * Adds a field for orderBy DESCENDING
  +     * @param  fieldName    The field name to be used
  +     */
  +    public void addOrderByDescending(String fieldName)
  +    {
  +        addOrderBy(fieldName, false);
  +    }
   
   	/* (non-Javadoc)
   	 * @see org.apache.ojb.broker.query.Query#getOrderBy()
   	 */
   	public List getOrderBy()
   	{
  +        // BRJ: 
  +        // combine data from query and criteria
  +        // TODO: to be removed when Criteria#addOrderBy is removed 
  +        ArrayList temp = new ArrayList();     
  +        temp.addAll(m_orderby);
  +        
           if (getCriteria() != null)
           {
  -            return getCriteria().getOrderby();
  -        }
  -        else
  -        {
  -            return null;
  -        }
  +            temp.addAll(getCriteria().getOrderby());
  +        }    
  +        
  +        return temp;
   	}
   
  +    /**
  +     * add the name of aRelationship for prefetched read
  +     */
  +    public void addPrefetchedRelationship(String aName)
  +    {
  +        m_prefetchedRelationships.add(aName);
  +    }
  +
   	/* (non-Javadoc)
   	 * @see org.apache.ojb.broker.query.Query#getPrefetchedRelationships()
   	 */
   	public List getPrefetchedRelationships()
   	{
  +        // BRJ: 
  +        // combine data from query and criteria
  +        // TODO: to be removed when Criteria#addPrefetchedRelationship is removed 
  +        ArrayList temp = new ArrayList();     
  +        temp.addAll(m_prefetchedRelationships);
  +        
           if (getCriteria() != null)
           {
  -            return getCriteria().getPrefetchedRelationships();
  -        }
  -        else
  -        {
  -            return null;
  -        }
  +            temp.addAll(getCriteria().getPrefetchedRelationships());
  +        }    
  +        
  +        return temp;
   	}
   
   }
  
  
  
  1.25      +8 -1      db-ojb/src/java/org/apache/ojb/broker/query/Criteria.java
  
  Index: Criteria.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/Criteria.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- Criteria.java	15 Mar 2003 15:42:26 -0000	1.24
  +++ Criteria.java	15 Mar 2003 16:22:11 -0000	1.25
  @@ -545,6 +545,7 @@
   	/**
   	 * Adds a field for orderBy
   	 * @param aField
  +     * @deprecated use Query#addOrderBy
   	 */
   	public void addOrderBy(FieldHelper aField)
   	{
  @@ -557,6 +558,7 @@
   	/**
   	 * Adds a field for orderBy ASCENDING
   	 * @param  fieldName	The field name to be used
  +     * @deprecated use Query#addOrderByAscending
   	 */
   	public void addOrderByAscending(String fieldName)
   	{
  @@ -566,6 +568,7 @@
   	/**
   	 * Adds a field for orderBy DESCENDING
   	 * @param  fieldName	The field name to be used
  +     * @deprecated use Query#addOrderByDescending
   	 */
   	public void addOrderByDescending(String fieldName)
   	{
  @@ -852,6 +855,7 @@
   	/**
   	 * Adds a groupby fieldName for ReportQueries.
   	 * @param fieldName The groupby to set
  +     * @deprecated use Query#addGroupBy
   	 */
   	public void addGroupBy(String fieldName)
   	{
  @@ -864,6 +868,7 @@
   	/**
   	 * Adds a field for groupby
   	 * @param aField
  +     * @deprecated use Query#addGroupBy
   	 */
   	public void addGroupBy(FieldHelper aField)
   	{
  @@ -876,6 +881,7 @@
   	/**
   	 * Adds an array of groupby fieldNames for ReportQueries.
   	 * @param fieldNames The groupby to set
  +     * @deprecated use Query#addGroupBy
   	 */
   	public void addGroupBy(String[] fieldNames)
   	{
  @@ -896,6 +902,7 @@
   
   	/**
   	 * add the name of aRelationship for prefetch read
  +     * @deprecated use Query#addPrefetchedRelationship
   	 */
   	public void addPrefetchedRelationship(String aName)
   	{