brj         2005/12/03 11:49:18

  Modified:    src/java/org/apache/ojb/broker/accesslayer/sql Tag:
                        OJB_1_0_RELEASE SqlQueryStatement.java
  Log:
  fix problem with pathclass hints
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.75.2.19 +31 -22    
db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlQueryStatement.java
  
  Index: SqlQueryStatement.java
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlQueryStatement.java,v
  retrieving revision 1.75.2.18
  retrieving revision 1.75.2.19
  diff -u -r1.75.2.18 -r1.75.2.19
  --- SqlQueryStatement.java    1 Dec 2005 21:30:29 -0000       1.75.2.18
  +++ SqlQueryStatement.java    3 Dec 2005 19:49:18 -0000       1.75.2.19
  @@ -1071,6 +1071,12 @@
                                attrPath = attrPath + "." + attr;
                        }
   
  +            // use clas hints for path
  +            if (pathClasses != null)
  +            {
  +                hintClasses = (List) pathClasses.get(attrPath);     
  +            }    
  +
                        // look for outer join hint
                        outer = outer || getQuery().isPathOuterJoin(attrPath);
   
  @@ -1078,7 +1084,7 @@
                        if (ord instanceof CollectionDescriptor)
                        {
                                cod = (CollectionDescriptor) ord;
  -                             cld = getItemClassDescriptor(cod, attrPath, 
pathClasses);
  +                             cld = getItemClassDescriptor(cod, hintClasses);
   
                                if (!cod.isMtoNRelation())
                                {
  @@ -1109,7 +1115,7 @@
                        else
                        {
                                // must be n:1 or 1:1
  -                             cld = getItemClassDescriptor(ord, attrPath, 
pathClasses);
  +                             cld = getItemClassDescriptor(ord, hintClasses);
   
                            // BRJ : if ord is taken from 'super' we have to 
change prev accordingly
                                if (!prev.cld.equals(ord.getClassDescriptor()))
  @@ -1431,27 +1437,30 @@
         * answer the ClassDescriptor for itemClass for an 
ObjectReferenceDescriptor
         * check optional hint;
         */
  -     private ClassDescriptor 
getItemClassDescriptor(ObjectReferenceDescriptor ord, String attr, Map 
pathClasses)
  -     {   
  -             List itemClasses = (List)pathClasses.get(attr);
  -
  -             if (itemClasses == null)
  -             {
  -                     itemClasses = new ArrayList();
  -                     itemClasses.add(ord.getItemClass());
  -             }
  -
  -             List classDescriptors = new ArrayList(itemClasses.size());
  -             DescriptorRepository repo = 
ord.getClassDescriptor().getRepository();
  +    private ClassDescriptor getItemClassDescriptor(ObjectReferenceDescriptor 
ord, List hintClasses)
  +    {   
  +        DescriptorRepository repo = ord.getClassDescriptor().getRepository();
   
  -             for (Iterator iter = itemClasses.iterator(); iter.hasNext();)
  -             {
  -                     Class clazz = (Class) iter.next();
  -                     classDescriptors.add(repo.getDescriptorFor(clazz));
  -             }
  +        if (hintClasses == null || hintClasses.isEmpty())
  +        {
  +            return repo.getDescriptorFor(ord.getItemClass()); 
  +        }
  +        
  +        Class resultClass = (Class) hintClasses.get(0);
  +        
  +        for (Iterator iter = hintClasses.iterator(); iter.hasNext();)
  +        {
  +            Class clazz = (Class) iter.next();
  +            Class superClazz = clazz.getSuperclass();
  +            
  +            if (hintClasses.contains(superClazz))
  +            {
  +                resultClass = superClazz;   // use superclass if it's in the 
hints
  +            }
  +        }
   
  -             return (ClassDescriptor) classDescriptors.get(0);
  -     }
  +        return repo.getDescriptorFor(resultClass);
  +    }
   
        /**
        * Appends the ORDER BY clause for the Query.
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to