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 2005/03/16 21:31:01 UTC

cvs commit: db-ojb/src/java/org/apache/ojb/broker/accesslayer ReportQueryRsIterator.java

brj         2005/03/16 12:31:01

  Modified:    src/java/org/apache/ojb/broker/accesslayer
                        ReportQueryRsIterator.java
  Log:
  fix for OJB 309: works only for simple attributes of the searchClass
  
  Revision  Changes    Path
  1.14      +37 -8     db-ojb/src/java/org/apache/ojb/broker/accesslayer/ReportQueryRsIterator.java
  
  Index: ReportQueryRsIterator.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/ReportQueryRsIterator.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- ReportQueryRsIterator.java	4 Apr 2004 23:53:31 -0000	1.13
  +++ ReportQueryRsIterator.java	16 Mar 2005 20:31:01 -0000	1.14
  @@ -15,11 +15,14 @@
    * limitations under the License.
    */
   
  +import java.sql.ResultSet;
   import java.sql.ResultSetMetaData;
   import java.sql.SQLException;
   
   import org.apache.ojb.broker.PersistenceBrokerException;
   import org.apache.ojb.broker.core.PersistenceBrokerImpl;
  +import org.apache.ojb.broker.metadata.ClassDescriptor;
  +import org.apache.ojb.broker.metadata.FieldDescriptor;
   import org.apache.ojb.broker.query.ReportQuery;
   import org.apache.ojb.broker.util.JdbcTypesHelper;
   
  @@ -31,9 +34,10 @@
    */
   public class ReportQueryRsIterator extends RsIterator
   {
  -
  +    private String[] m_attributes;
       private int m_attributeCount;
       private int[] m_jdbcTypes;
  +    private FieldDescriptor[] m_fieldDescriptors;
       
       /**
        * Constructor for ReportQueryRsIterator.
  @@ -46,9 +50,11 @@
               // BRJ: use only explicit attributes (columns) ! 
               // ignore those automatically added for ordering or grouping 
               ReportQuery q = (ReportQuery)queryObject.getQuery();
  +            m_attributes = q.getAttributes();
               m_attributeCount = q.getAttributes().length;
               
               init_jdbcTypes();
  +            init_fieldDescriptors();
           }
           catch (SQLException e)
           {
  @@ -58,6 +64,23 @@
       }
   
       /**
  +     * Initialize the FieldDescriptors for the attributes.
  +     * TODO: currently works for simple attributes only. No FieldDescriptor 
  +     * will be found for attributes like 'address.city' when the search class is 'Person'
  +     */
  +    private void init_fieldDescriptors()
  +    {
  +        ClassDescriptor cld = getQueryObject().getClassDescriptor();
  +
  +        m_fieldDescriptors = new FieldDescriptor[m_attributeCount];
  +        
  +        for (int i = 0; i < m_attributeCount; i++)
  +        {
  +            m_fieldDescriptors[i] = cld.getFieldDescriptorByName(m_attributes[i]);
  +        }
  +    }
  +    
  +    /**
        * get the jdbcTypes from the Query or the ResultSet if not available from the Query
        * @throws SQLException
        */
  @@ -82,22 +105,30 @@
           }
       }
       
  -    
       /**
        * returns an Object[] representing the columns of the current ResultSet
        * row. There is no OJB object materialization, Proxy generation etc.
  -     * involved to maximize performance.
  +     * involved to maximize performance. 
  +     * If a FieldDescriptor is available for the attribute, the retrieved value
  +     * is passed to it's FieldConversion. 
        */
       protected Object getObjectFromResultSet() throws PersistenceBrokerException
       {
           Object[] result = new Object[m_attributeCount];
  -
  +        ResultSet rs = getRsAndStmt().m_rs;
  +        
           for (int i = 0; i < m_attributeCount; i++)
           {
               try
               {
                   int jdbcType = m_jdbcTypes[i];
  -                result[i] = JdbcTypesHelper.getObjectFromColumn(getRsAndStmt().m_rs, new Integer(jdbcType), i + 1);
  +                Object value = JdbcTypesHelper.getObjectFromColumn(rs, new Integer(jdbcType), i + 1);
  +                FieldDescriptor fd = m_fieldDescriptors[i];
  +                if (fd != null)
  +                {
  +                    value = fd.getFieldConversion().sqlToJava(value);
  +                }
  +                result[i] = value;
               }
               catch (SQLException e)
               {
  @@ -106,6 +137,4 @@
           }
           return result;
       }
  - 
  -
   }
  
  
  

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