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 2004/08/27 21:55:43 UTC

cvs commit: db-ojb/src/java/org/apache/ojb/broker/query QueryByExample.java QueryByCriteria.java QueryFactory.java AbstractQueryImpl.java

brj         2004/08/27 12:55:43

  Modified:    src/java/org/apache/ojb/broker/core
                        PersistenceBrokerImpl.java
               src/java/org/apache/ojb/broker/query QueryByCriteria.java
                        QueryFactory.java AbstractQueryImpl.java
  Added:       src/java/org/apache/ojb/broker/query QueryByExample.java
  Log:
  better handling for QueryByExample. criteria is built during runtime.
  constructor QueryByCriteria(Object anExampleObject) removed !
  
  Revision  Changes    Path
  1.90      +7 -1      db-ojb/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java
  
  Index: PersistenceBrokerImpl.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java,v
  retrieving revision 1.89
  retrieving revision 1.90
  diff -u -r1.89 -r1.90
  --- PersistenceBrokerImpl.java	15 Aug 2004 12:42:27 -0000	1.89
  +++ PersistenceBrokerImpl.java	27 Aug 2004 19:55:42 -0000	1.90
  @@ -58,6 +58,7 @@
   import org.apache.ojb.broker.metadata.fieldaccess.PersistentField;
   import org.apache.ojb.broker.query.Query;
   import org.apache.ojb.broker.query.QueryByCriteria;
  +import org.apache.ojb.broker.query.QueryByExample;
   import org.apache.ojb.broker.query.QueryByIdentity;
   import org.apache.ojb.broker.query.QueryBySQL;
   import org.apache.ojb.broker.util.BrokerHelper;
  @@ -1810,6 +1811,11 @@
           {
               if(logger.isDebugEnabled()) logger.debug("Creating SQL-RsIterator for class ["+cld.getClassNameOfObject()+"]");
               return factory.createRsIterator((QueryBySQL) query, cld, this);
  +        }
  +
  +        if (query instanceof QueryByExample)
  +        {
  +            ((QueryByExample) query).buildCriteria(this);
           }
   
           if (!cld.isExtent() || !query.getWithExtents())
  
  
  
  1.29      +10 -64    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.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- QueryByCriteria.java	13 Jul 2004 11:37:57 -0000	1.28
  +++ QueryByCriteria.java	27 Aug 2004 19:55:43 -0000	1.29
  @@ -22,12 +22,9 @@
   import java.util.Map;
   
   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.ObjectReferenceDescriptor;
  -import org.apache.ojb.broker.metadata.fieldaccess.PersistentField;
  -import org.apache.ojb.broker.util.logging.LoggerFactory;
   
   /**
    * represents a search by criteria.
  @@ -51,18 +48,18 @@
   {
       private Criteria m_criteria;
       private boolean m_distinct = false;
  -    private Map m_pathClasses;
  +    private Map m_pathClasses = new HashMap();
       private Criteria m_havingCriteria;
       private String m_objectProjectionAttribute;
   
       // holding FieldHelper for orderBy and groupBy
  -    private List m_orderby = null;
  -    private List m_groupby = null;
  +    private List m_orderby = new ArrayList();
  +    private List m_groupby = new ArrayList();
   
       // list of names of prefetchable relationships
  -    private List m_prefetchedRelationships = null;
  +    private List m_prefetchedRelationships = new ArrayList();
   
  -    private Map m_pathOuterJoin;
  +    private Map m_pathOuterJoin = new HashMap();
   
       /**
        * handy criteria that can be used to select all instances of
  @@ -70,6 +67,10 @@
        */
       public static final Criteria CRITERIA_SELECT_ALL = null;
   
  +    protected QueryByCriteria()
  +    {
  +    }
  +    
       /**
        * Build a Query for class targetClass with criteria.
        * Criteriy may be null (will result in a query returning ALL objects from a table)
  @@ -82,11 +83,6 @@
           setHavingCriteria(havingCriteria);
   
           m_distinct = distinct;
  -        m_pathClasses = new HashMap();
  -        m_groupby = new ArrayList();
  -        m_orderby = new ArrayList();
  -        m_prefetchedRelationships = new ArrayList();
  -        m_pathOuterJoin = new HashMap();
       }
   
       /**
  @@ -118,24 +114,6 @@
       }
   
       /**
  -     * Build a Query based on anObject <br>
  -     * all non null values are used as EqualToCriteria
  -     */
  -    public QueryByCriteria(Object anObject, boolean distinct)
  -    {
  -        this(anObject.getClass(), buildCriteria(anObject), distinct);
  -    }
  -
  -    /**
  -     * Build a Query based on anObject <br>
  -     * all non null values are used as EqualToCriteria
  -     */
  -    public QueryByCriteria(Object anObject)
  -    {
  -        this(anObject.getClass(), buildCriteria(anObject));
  -    }
  -
  -    /**
        * Build a Query based on a Class Object. This
        * Query will return all instances of the given class.
        * @param aClassToSearchFrom the class to search from
  @@ -182,38 +160,6 @@
           m_pathClasses = aQuery.m_pathClasses;
           m_pathOuterJoin = aQuery.m_pathOuterJoin;
           m_prefetchedRelationships = aQuery.m_prefetchedRelationships;
  -    }
  -
  -    /**
  -     * Build Criteria based on example object<br>
  -     * all non null values are used as EqualToCriteria
  -     */
  -    private static Criteria buildCriteria(Object anExample)
  -    {
  -        Criteria criteria = new Criteria();
  -        ClassDescriptor cld = MetadataManager.getInstance().getRepository().getDescriptorFor(anExample.getClass());
  -        FieldDescriptor[] fds = cld.getFieldDescriptions();
  -        PersistentField f;
  -        Object value;
  -
  -        for (int i = 0; i < fds.length; i++)
  -        {
  -            try
  -            {
  -                f = fds[i].getPersistentField();
  -                value = f.get(anExample);
  -                if (value != null)
  -                {
  -                    criteria.addEqualTo(f.getName(), value);
  -                }
  -            }
  -            catch (Throwable ex)
  -            {
  -                LoggerFactory.getDefaultLogger().error(ex);
  -            }
  -        }
  -
  -        return criteria;
       }
   
       /**
  
  
  
  1.19      +11 -4     db-ojb/src/java/org/apache/ojb/broker/query/QueryFactory.java
  
  Index: QueryFactory.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/QueryFactory.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- QueryFactory.java	13 Jul 2004 11:37:57 -0000	1.18
  +++ QueryFactory.java	27 Aug 2004 19:55:43 -0000	1.19
  @@ -86,6 +86,8 @@
        * Return a QueryByIdentity for example_or_identity
        * @param example_or_identity
        * @return QueryByIdentity
  +     * 
  +     * @deprecated use newQueryByIdentity()
        */
       public static QueryByIdentity newQuery(Object example_or_identity)
       {
  @@ -106,11 +108,11 @@
        * Return a QueryByCriteria for example
        * <br>Use with care because building of Query is not foolproof !!!
        * @param example
  -     * @return QueryByCriteria
  +     * @return QueryByExample
        */
  -    public static QueryByCriteria newQueryByExample(Object example)
  +    public static QueryByExample newQueryByExample(Object example)
       {
  -        return new QueryByCriteria(example);
  +        return new QueryByExample(example);
       }
   
       /**
  @@ -164,6 +166,11 @@
           if (aQuery instanceof ReportQueryByCriteria)
           {
               return new ReportQueryByCriteria((ReportQueryByCriteria)aQuery);
  +        }
  +
  +        if (aQuery instanceof QueryByExample)
  +        {
  +            return new QueryByExample((QueryByExample)aQuery);
           }
   
           if (aQuery instanceof QueryByMtoNCriteria)
  
  
  
  1.15      +16 -1     db-ojb/src/java/org/apache/ojb/broker/query/AbstractQueryImpl.java
  
  Index: AbstractQueryImpl.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/AbstractQueryImpl.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- AbstractQueryImpl.java	4 Apr 2004 23:53:36 -0000	1.14
  +++ AbstractQueryImpl.java	27 Aug 2004 19:55:43 -0000	1.15
  @@ -163,4 +163,19 @@
               || getStartAtIndex() > NO_START_AT_INDEX;
       }
       
  +    /**
  +     * @param baseClass The baseClass to set.
  +     */
  +    protected void setBaseClass(Class baseClass)
  +    {
  +        m_baseClass = baseClass;
  +    }
  +    
  +    /**
  +     * @param searchClass The searchClass to set.
  +     */
  +    protected void setSearchClass(Class searchClass)
  +    {
  +        m_searchClass = searchClass;
  +    }
   }
  
  
  
  1.4       +139 -135  db-ojb/src/java/org/apache/ojb/broker/query/QueryByExample.java
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org