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/09/13 16:33:58 UTC

cvs commit: db-ojb/src/jdori/org/apache/ojb/tutorial5 Application.java

brj         2003/09/13 07:33:58

  Modified:    src/java/org/apache/ojb/broker/query SqlCriteria.java
                        BetweenCriteria.java ExistsCriteria.java
                        NullCriteria.java InCriteria.java Criteria.java
                        SelectionCriteria.java FieldCriteria.java
                        ValueCriteria.java
               src/java/org/apache/ojb/broker/accesslayer/sql
                        SqlGeneratorDefaultImpl.java SqlQueryStatement.java
               src/test/org/apache/ojb repository_database.xml
               .        build.properties
               profile  sapdb.profile mysql.profile
               src/test/org/apache/ojb/broker QueryTest.java
               src/java/org/apache/ojb/broker/accesslayer
                        StatementManager.java
               src/test/org/apache/ojb/odmg
                        ContractVersionEffectivenessOQLTest.java
               src/jdori/org/apache/ojb/tutorial5 Application.java
  Removed:     src/java/org/apache/ojb/broker/query
                        EqualToFieldCriteria.java GreaterThanCriteria.java
                        GreaterThanFieldCriteria.java LessThanCriteria.java
                        LikeCriteria.java EqualToCriteria.java
                        LessThanFieldCriteria.java
  Log:
  enhanced support for subqueries. 
  subqueries can be used like attributes
  ie. select count(*) from tab where x like 'bla%' > 20
  
  Revision  Changes    Path
  1.5       +3 -3      db-ojb/src/java/org/apache/ojb/broker/query/SqlCriteria.java
  
  Index: SqlCriteria.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/SqlCriteria.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SqlCriteria.java	1 Mar 2003 20:19:13 -0000	1.4
  +++ SqlCriteria.java	13 Sep 2003 14:33:57 -0000	1.5
  @@ -69,7 +69,7 @@
        */
       SqlCriteria(String anSqlStatement)
       {
  -        super(anSqlStatement, null, false, null);
  +        super(anSqlStatement, null, null);
       }
   
       /*
  @@ -77,7 +77,7 @@
   	 */
       public String getClause()
       {
  -        return getAttribute();
  +        return (String)getAttribute();
       }
   
   	/**
  
  
  
  1.6       +4 -40     db-ojb/src/java/org/apache/ojb/broker/query/BetweenCriteria.java
  
  Index: BetweenCriteria.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/BetweenCriteria.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- BetweenCriteria.java	1 Mar 2003 20:19:13 -0000	1.5
  +++ BetweenCriteria.java	13 Sep 2003 14:33:57 -0000	1.6
  @@ -65,30 +65,10 @@
   {
       private Object value2;
   
  -    /**
  -     * Constructor for BetweenCriteria.
  -     * @param fieldName the name of the field
  -     * @param anArg1 lower boundary
  -     * @param anArg2 upper boundary
  -     * @param negative  use negative form
  -     * @param alias  use alias to link anAttribute to
  -     */
  -    BetweenCriteria(String fieldName, Object anArg1, Object anArg2, boolean negative, String alias)
  +    BetweenCriteria(Object anAttribute, Object aValue1, Object aValue2, String aClause, String anAlias)
       {
  -        super(fieldName, anArg1, negative, alias);
  -        setValue2(anArg2);
  -    }
  -
  -    /**
  -     * Constructor for BetweenCriteria.
  -     * @param fieldName the name of the field
  -     * @param anArg1 lower boundary
  -     * @param anArg2 upper boundary
  -     * @param alias  use alias to link anAttribute to
  -     */
  -    BetweenCriteria(String fieldName, Object anArg1, Object anArg2, String alias)
  -    {
  -        this (fieldName, anArg1, anArg2, false, alias);
  +        super(anAttribute, aValue1, aClause, anAlias);
  +        setValue2(aValue2);
       }
   
       /**
  @@ -107,22 +87,6 @@
       		setValue2(newValue);
       		setBound(true); 		
       	}
  -    }
  -
  -
  -    /*
  -	 * @see SelectionCriteria#getClause()
  -	 */
  -    public String getClause()
  -    {
  -        if (isNegative())
  -        {
  -            return " NOT BETWEEN ";
  -        }    
  -        else
  -        {
  -            return " BETWEEN ";
  -        }    
       }
   
   
  
  
  
  1.4       +5 -3      db-ojb/src/java/org/apache/ojb/broker/query/ExistsCriteria.java
  
  Index: ExistsCriteria.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/ExistsCriteria.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ExistsCriteria.java	1 Mar 2003 20:19:13 -0000	1.3
  +++ ExistsCriteria.java	13 Sep 2003 14:33:57 -0000	1.4
  @@ -62,6 +62,7 @@
    */
   public class ExistsCriteria extends SelectionCriteria
   {
  +    private boolean m_negative = false;
       /**
        * Constructor for ExistsCriteria.
        * @param subQuery
  @@ -69,7 +70,8 @@
        */
       ExistsCriteria(Query subQuery, boolean negative)
       {
  -        super("", subQuery, negative, null);
  +        super("", subQuery, null);
  +        m_negative = negative;
       }
   
       /*
  @@ -77,7 +79,7 @@
   	 */
       public String getClause()
       {
  -        if (isNegative())
  +        if (m_negative)
           {
               return " NOT EXISTS";
           }    
  
  
  
  1.6       +5 -27     db-ojb/src/java/org/apache/ojb/broker/query/NullCriteria.java
  
  Index: NullCriteria.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/NullCriteria.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- NullCriteria.java	20 Mar 2003 20:48:20 -0000	1.5
  +++ NullCriteria.java	13 Sep 2003 14:33:57 -0000	1.6
  @@ -62,36 +62,14 @@
    */
   public class NullCriteria extends ValueCriteria
   {
  -    /**
  -     * Constructor declaration
  -     *
  -     * @param anAttribute  column- or fieldName
  -     * @param negative  criteria is negated (ie NOT LIKE instead of LIKE)
  -     * @param alias  use alias to link anAttribute to
  -     */
  -	NullCriteria(String anAttribute, boolean negative, String alias)
  -	{
  -		super(anAttribute, null, negative, alias);
  -	}
  -
  -    public String toString()
  +    NullCriteria(String anAttribute, String aClause, String anAlias)
       {
  -        return getAttribute() + getClause();
  +        super(anAttribute, null, aClause, anAlias);
       }
   
  -    /*
  -     * @see SelectionCriteria#getClause()
  -     */
  -    public String getClause()
  +    public String toString()
       {
  -        if (isNegative())
  -        {
  -            return " IS NOT NULL ";
  -        }
  -        else
  -        {
  -            return " IS NULL ";
  -        }
  +        return getAttribute() + getClause();
       }
   
       /*
  
  
  
  1.8       +4 -27     db-ojb/src/java/org/apache/ojb/broker/query/InCriteria.java
  
  Index: InCriteria.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/InCriteria.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- InCriteria.java	1 Mar 2003 20:19:13 -0000	1.7
  +++ InCriteria.java	13 Sep 2003 14:33:57 -0000	1.8
  @@ -64,34 +64,11 @@
    */
   public class InCriteria extends ValueCriteria
   {
  -    /**
  -     * Constructor declaration
  -     *
  -     * @param anAttribute  column- or fieldName
  -     * @param aValue  the value to compare with
  -     * @param negative  criteria is negated (ie NOT LIKE instead of LIKE)
  -     * @param alias  use alias to link anAttribute to
  -     */
  -	InCriteria(String anAttribute, Object aValue, boolean negative, String alias)
  -	{
  -		super(anAttribute, aValue, negative, alias);
  -	}
  -
  -    /*
  -	 * @see SelectionCriteria#getClause()
  -	 */
  -    public String getClause()
  +    InCriteria(Object anAttribute, Object aValue, String aClause, String anAlias)
       {
  -        if (isNegative())
  -        {
  -            return " NOT IN ";
  -        }    
  -        else
  -        {
  -            return " IN ";
  -        }    
  +        super(anAttribute, aValue, aClause, anAlias);
       }
  -
  + 
   	/**
   	 * @see org.apache.ojb.broker.query.SelectionCriteria#isBindable()
   	 * BRJ: empty Collection is bindable
  
  
  
  1.32      +51 -37    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.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- Criteria.java	22 May 2003 18:50:23 -0000	1.31
  +++ Criteria.java	13 Sep 2003 14:33:57 -0000	1.32
  @@ -190,7 +190,7 @@
   	 * @param inLimit the maximum number of values for IN (-1 for no limit)
   	 * @return
   	 */
  -	protected List splitInCriteria(String attribute, Collection values, boolean negative, int inLimit)
  +	protected List splitInCriteria(Object attribute, Collection values, boolean negative, int inLimit)
   	{
   		List result = new ArrayList();
   		Collection inCollection = new ArrayList();
  @@ -198,7 +198,7 @@
   		if (values == null || values.isEmpty())
   		{
   			// OQL creates empty Criteria for late binding
  -			result.add(new InCriteria(attribute, values, negative, getAlias()));
  +			result.add(buildInCriteria(attribute, negative, values));
   		}
   		else
   		{
  @@ -209,7 +209,7 @@
   				inCollection.add(iter.next());
   				if (inCollection.size() == inLimit || !iter.hasNext())
   				{
  -					result.add(new InCriteria(attribute, inCollection, negative, getAlias()));
  +					result.add(buildInCriteria(attribute, negative, inCollection));
   					inCollection = new ArrayList();
   				}
   			}
  @@ -217,6 +217,19 @@
   		return result;
   	}
   
  +
  +    private InCriteria buildInCriteria(Object attribute, boolean negative, Collection values)
  +    {
  +        if (negative)
  +        {
  +            return ValueCriteria.buildNotInCriteria(attribute, values, getAlias());
  +        }
  +        else
  +        {
  +            return ValueCriteria.buildInCriteria(attribute, values, getAlias());           
  +        }    
  +    }
  +
   	/**
   	 * Get an Enumeration with all sub criteria
   	 * @return Enumaration
  @@ -280,7 +293,8 @@
   	 */
   	public void addEqualTo(String attribute, Object value)
   	{
  -		addSelectionCriteria(new EqualToCriteria(attribute, value, false, getAlias()));
  +//		addSelectionCriteria(new EqualToCriteria(attribute, value, false, getAlias()));
  +        addSelectionCriteria(ValueCriteria.buildEqualToCriteria(attribute, value, getAlias()));
   	}
   
       /**
  @@ -293,7 +307,7 @@
        */
       public void addColumnEqualTo(String column, Object value)
       {
  -        SelectionCriteria c = new EqualToCriteria(column, value, false, getAlias());
  +        SelectionCriteria c = ValueCriteria.buildEqualToCriteria(column, value, getAlias());
           c.setTranslateAttribute(false);
           addSelectionCriteria(c);
       }
  @@ -308,7 +322,7 @@
        */
       public void addColumnEqualToField(String column, Object fieldName)
       {
  -        SelectionCriteria c = new EqualToFieldCriteria(column, fieldName, false, getAlias());
  +        SelectionCriteria c = FieldCriteria.buildEqualToCriteria(column, fieldName, getAlias());
           c.setTranslateAttribute(false);
           addSelectionCriteria(c);
       }
  @@ -367,7 +381,7 @@
   	 */
   	public void addEqualToField(String attribute, String fieldName)
   	{
  -		SelectionCriteria c = new EqualToFieldCriteria(attribute, fieldName, false, getAlias());
  +        FieldCriteria c = FieldCriteria.buildEqualToCriteria(attribute, fieldName, getAlias());
   		addSelectionCriteria(c);
   	}
   
  @@ -382,7 +396,7 @@
   	 */
   	public void addNotEqualToField(String attribute, String fieldName)
   	{
  -		SelectionCriteria c = new EqualToFieldCriteria(attribute, fieldName, true, getAlias());
  +		SelectionCriteria c = FieldCriteria.buildNotEqualToCriteria(attribute, fieldName, getAlias());
   		addSelectionCriteria(c);
   	}
   
  @@ -397,7 +411,7 @@
   	 */
   	public void addNotEqualToColumn(String attribute, String colName)
   	{
  -        FieldCriteria c = new EqualToFieldCriteria(attribute, colName, true, getAlias());
  +        FieldCriteria c = FieldCriteria.buildNotEqualToCriteria(attribute, colName, getAlias());
           c.setTranslateField(false);
   		addSelectionCriteria(c);
   	}
  @@ -413,7 +427,7 @@
   	 */
   	public void addEqualToColumn(String attribute, String colName)
   	{
  -		FieldCriteria c = new EqualToFieldCriteria(attribute, colName, false, getAlias());
  +		FieldCriteria c = FieldCriteria.buildEqualToCriteria(attribute, colName, getAlias());
           c.setTranslateField(false);
   		addSelectionCriteria(c);
   	}
  @@ -425,9 +439,9 @@
   	 * @param  attribute   The field name to be used
   	 * @param  value       An object representing the value of the field
   	 */
  -	public void addGreaterOrEqualThan(String attribute, Object value)
  +	public void addGreaterOrEqualThan(Object attribute, Object value)
   	{
  -		addSelectionCriteria(new LessThanCriteria(attribute, value, true, getAlias()));
  +		addSelectionCriteria(ValueCriteria.buildNotLessCriteria(attribute, value, getAlias()));
   	}
   
   	/**
  @@ -439,7 +453,7 @@
   	 */
   	public void addGreaterOrEqualThanField(String attribute, Object value)
   	{
  -		addSelectionCriteria(new LessThanFieldCriteria(attribute, value, true, getAlias()));
  +		addSelectionCriteria(FieldCriteria.buildLessCriteria(attribute, value, getAlias()));
   	}
   
   	/**
  @@ -449,9 +463,9 @@
   	 * @param  attribute   The field name to be used
   	 * @param  value       An object representing the value of the field
   	 */
  -	public void addLessOrEqualThan(String attribute, Object value)
  +	public void addLessOrEqualThan(Object attribute, Object value)
   	{
  -		addSelectionCriteria(new GreaterThanCriteria(attribute, value, true, getAlias()));
  +		addSelectionCriteria(ValueCriteria.buildNotGreaterCriteria(attribute, value, getAlias()));
   	}
   
   	/**
  @@ -463,7 +477,7 @@
   	 */
   	public void addLessOrEqualThanField(String attribute, Object value)
   	{
  -		addSelectionCriteria(new GreaterThanFieldCriteria(attribute, value, true, getAlias()));
  +		addSelectionCriteria(FieldCriteria.buildNotGreaterCriteria(attribute, value, getAlias()));
   	}
   
   	/**
  @@ -483,7 +497,7 @@
   	 * @param  attribute   The field name to be used
   	 * @param  value       An object representing the value of the field
   	 */
  -	public void addLike(String attribute, Object value)
  +	public void addLike(Object attribute, Object value)
   	{
   		String pattern;
   
  @@ -497,7 +511,7 @@
   			pattern = null;
   		}
   
  -		addSelectionCriteria(new LikeCriteria(attribute, pattern, false, getAlias()));
  +		addSelectionCriteria(ValueCriteria.buildLikeCriteria(attribute, pattern, getAlias()));
   	}
   
   	/**
  @@ -521,7 +535,7 @@
   			pattern = null;
   		}
   
  -		addSelectionCriteria(new LikeCriteria(attribute, pattern, true, getAlias()));
  +        addSelectionCriteria(ValueCriteria.buildNotLikeCriteria(attribute, pattern, getAlias()));
   	}
   
   	/**
  @@ -531,9 +545,9 @@
   	 * @param  attribute   The field name to be used
   	 * @param  value       An object representing the value of the field
   	 */
  -	public void addNotEqualTo(String attribute, Object value)
  +	public void addNotEqualTo(Object attribute, Object value)
   	{
  -		addSelectionCriteria(new EqualToCriteria(attribute, value, true, getAlias()));
  +        addSelectionCriteria(ValueCriteria.buildNotEqualToCriteria(attribute, value, getAlias()));
   	}
   
   	/**
  @@ -543,9 +557,9 @@
   	 * @param  attribute   The field name to be used
   	 * @param  value       An object representing the value of the field
   	 */
  -	public void addGreaterThan(String attribute, Object value)
  +	public void addGreaterThan(Object attribute, Object value)
   	{
  -		addSelectionCriteria(new GreaterThanCriteria(attribute, value, false, getAlias()));
  +        addSelectionCriteria(ValueCriteria.buildGreaterCriteria(attribute, value, getAlias()));
   	}
   
   	/**
  @@ -557,7 +571,7 @@
   	 */
   	public void addGreaterThanField(String attribute, Object value)
   	{
  -		addSelectionCriteria(new GreaterThanFieldCriteria(attribute, value, false, getAlias()));
  +		addSelectionCriteria(FieldCriteria.buildGreaterCriteria(attribute, value, getAlias()));
   	}
   
   	/**
  @@ -567,9 +581,9 @@
   	 * @param  attribute   The field name to be used
   	 * @param  value       An object representing the value of the field
   	 */
  -	public void addLessThan(String attribute, Object value)
  +	public void addLessThan(Object attribute, Object value)
   	{
  -		addSelectionCriteria(new LessThanCriteria(attribute, value, false, getAlias()));
  +		addSelectionCriteria(ValueCriteria.buildLessCriteria(attribute, value, getAlias()));
   	}
   
   	/**
  @@ -581,7 +595,7 @@
   	 */
   	public void addLessThanField(String attribute, Object value)
   	{
  -		addSelectionCriteria(new LessThanFieldCriteria(attribute, value, false, getAlias()));
  +		addSelectionCriteria(FieldCriteria.buildLessCriteria(attribute, value, getAlias()));
   	}
   
   	/**
  @@ -707,7 +721,7 @@
   	 */
   	public void addIsNull(String attribute)
   	{
  -		addSelectionCriteria(new NullCriteria(attribute, false, getAlias()));
  +        addSelectionCriteria(ValueCriteria.buildNullCriteria(attribute, getAlias()));
   	}
   
   	/**
  @@ -718,7 +732,7 @@
   	 */
   	public void addNotNull(String attribute)
   	{
  -		addSelectionCriteria(new NullCriteria(attribute, true, getAlias()));
  +		addSelectionCriteria(ValueCriteria.buildNotNullCriteria(attribute, getAlias()));
   	}
   
   	/**
  @@ -729,9 +743,9 @@
   	 * @param  value1   The lower boundary
   	 * @param  value2   The upper boundary
   	 */
  -	public void addBetween(String attribute, Object value1, Object value2)
  +	public void addBetween(Object attribute, Object value1, Object value2)
   	{
  -		addSelectionCriteria(new BetweenCriteria(attribute, value1, value2, false, getAlias()));
  +		addSelectionCriteria(ValueCriteria.buildBeweenCriteria(attribute, value1, value2, getAlias()));
   	}
   
   	/**
  @@ -742,9 +756,9 @@
   	 * @param  value1   The lower boundary
   	 * @param  value2   The upper boundary
   	 */
  -	public void addNotBetween(String attribute, Object value1, Object value2)
  +	public void addNotBetween(Object attribute, Object value1, Object value2)
   	{
  -		addSelectionCriteria(new BetweenCriteria(attribute, value1, value2, true, getAlias()));
  +        addSelectionCriteria(ValueCriteria.buildNotBeweenCriteria(attribute, value1, value2, getAlias()));
   	}
   
   	/**
  @@ -802,9 +816,9 @@
   	 * @param attribute
   	 * @param subQuery
   	 */
  -	public void addIn(String attribute, Query subQuery)
  +	public void addIn(Object attribute, Query subQuery)
   	{
  -		addSelectionCriteria(new InCriteria(attribute, subQuery, false, getAlias()));
  +		addSelectionCriteria(ValueCriteria.buildInCriteria(attribute, subQuery, getAlias()));
   	}
   
   	/**
  @@ -814,7 +828,7 @@
   	 */
   	public void addNotIn(String attribute, Query subQuery)
   	{
  -		addSelectionCriteria(new InCriteria(attribute, subQuery, true, getAlias()));
  +        addSelectionCriteria(ValueCriteria.buildNotInCriteria(attribute, subQuery, getAlias()));
   	}
   
   	/**
  
  
  
  1.12      +26 -17    db-ojb/src/java/org/apache/ojb/broker/query/SelectionCriteria.java
  
  Index: SelectionCriteria.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/SelectionCriteria.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- SelectionCriteria.java	24 Mar 2003 20:11:55 -0000	1.11
  +++ SelectionCriteria.java	13 Sep 2003 14:33:57 -0000	1.12
  @@ -69,11 +69,24 @@
    */
   public abstract class SelectionCriteria implements java.io.Serializable
   {
  -	private String m_attribute;
  +    protected static final String EQUAL = " = ";
  +    protected static final String NOT_EQUAL = " <> ";
  +    protected static final String GREATER = " > ";
  +    protected static final String NOT_GREATER = " <= ";
  +    protected static final String LESS = " < ";
  +    protected static final String NOT_LESS = " >= ";
  +    protected static final String LIKE = " LIKE ";
  +    protected static final String NOT_LIKE = " NOT LIKE ";
  +    protected static final String IS_NULL = " IS NULL ";
  +    protected static final String NOT_IS_NULL = " IS NOT NULL ";
  +    protected static final String BETWEEN = " BETWEEN ";
  +    protected static final String NOT_BETWEEN = " NOT BETWEEN ";
  +    protected static final String IN = " IN ";
  +    protected static final String NOT_IN = " NOT IN ";
  +
  +	private Object m_attribute;
   	private Object m_value;
   
  -	//  true if criterion is negated
  -	private boolean m_negative = false;
   
   	// BRJ: true if criterion is bound
   	private boolean m_bound = false;
  @@ -91,16 +104,20 @@
   	/**
   	 * Constructor declaration
   	 *
  -	 * @param anAttribute  column- or fieldName
  +	 * @param anAttribute  column- or fieldName or a Query
   	 * @param aValue  the value to compare with
   	 * @param negative  criteria is negated (ie NOT LIKE instead of LIKE)
   	 * @param alias  use alias to link anAttribute to
   	 */
  -	SelectionCriteria(String anAttribute, Object aValue, boolean negative, String alias)
  +	SelectionCriteria(Object anAttribute, Object aValue, String alias)
   	{
  +        if (!(anAttribute instanceof String || anAttribute instanceof Query))
  +        {
  +            throw new IllegalArgumentException("An attribute must be a String or a Query !");
  +        }    
  +            
   		m_attribute = anAttribute;
   		m_value = aValue;
  -		this.m_negative = negative;
   		this.m_bound = !isBindable();
   		this.m_alias = alias;
   	}
  @@ -130,7 +147,7 @@
   	/**
   	 * Answer the attribute
   	 */
  -	public String getAttribute()
  +	public Object getAttribute()
   	{
   		return m_attribute;
   	}
  @@ -144,15 +161,6 @@
   	}
   
   	/**
  -	 * Gets the negative.
  -	 * @return Returns a boolean
  -	 */
  -	public boolean isNegative()
  -	{
  -		return m_negative;
  -	}
  -
  -	/**
   	 * BRJ : Used by the ODMG OQLQuery.bind() operation
   	 * @return Returns a boolean indicator
   	 */
  @@ -265,4 +273,5 @@
               return null;
           }
       }
  +
   }
  
  
  
  1.6       +51 -4     db-ojb/src/java/org/apache/ojb/broker/query/FieldCriteria.java
  
  Index: FieldCriteria.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/FieldCriteria.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- FieldCriteria.java	20 Mar 2003 20:52:09 -0000	1.5
  +++ FieldCriteria.java	13 Sep 2003 14:33:57 -0000	1.6
  @@ -60,10 +60,41 @@
    * @author <a href="mailto:jbraeuchi@hotmail.com">Jakob Braeuchi</a>
    * @version $Id$
    */
  -public abstract class FieldCriteria extends SelectionCriteria
  +public class FieldCriteria extends SelectionCriteria
   {
  +    static FieldCriteria buildEqualToCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new FieldCriteria(anAttribute, aValue, EQUAL, anAlias);
  +    }
  +
  +    static FieldCriteria buildNotEqualToCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new FieldCriteria(anAttribute, aValue, NOT_EQUAL, anAlias);
  +    }
  +
  +    static FieldCriteria buildGreaterCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new FieldCriteria(anAttribute, aValue,GREATER, anAlias);
  +    }
  +
  +    static FieldCriteria buildNotGreaterCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new FieldCriteria(anAttribute, aValue, NOT_GREATER, anAlias);
  +    }
  +
  +    static FieldCriteria buildLessCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new FieldCriteria(anAttribute, aValue, LESS, anAlias);
  +    }
  +
  +    static FieldCriteria buildNotLessCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new FieldCriteria(anAttribute, aValue, NOT_LESS, anAlias);
  +    }
  +
   	// BRJ: indicate whether field name should be translated into column name
   	private boolean m_translateField = true;
  +    private String m_clause;
   
   	/**
   	 * Constructor declaration
  @@ -73,11 +104,20 @@
   	 * @param negative  criteria is negated (ie NOT LIKE instead of LIKE)
   	 * @param alias  use alias to link anAttribute to
   	 */
  -	FieldCriteria(String anAttribute, Object aValue, boolean negative, String alias)
  +	FieldCriteria(Object anAttribute, Object aValue, String aClause, String alias)
   	{
  -		super(anAttribute, aValue, negative, alias);
  +		super(anAttribute, aValue, alias);
  +        m_clause = aClause;
   	}
   
  +    /**
  +     * @see SelectionCriteria#isBindable()
  +     */
  +    protected boolean isBindable()
  +    {
  +        return false;
  +    }
  +
   	/**
   	 * @return true if field name should be translated into column name
   	 */
  @@ -94,4 +134,11 @@
   		m_translateField = b;
   	}
   
  +    /* (non-Javadoc)
  +     * @see org.apache.ojb.broker.query.SelectionCriteria#getClause()
  +     */
  +    public String getClause()
  +    {
  +        return m_clause;
  +    }
   }
  
  
  
  1.4       +93 -10    db-ojb/src/java/org/apache/ojb/broker/query/ValueCriteria.java
  
  Index: ValueCriteria.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/ValueCriteria.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ValueCriteria.java	1 Mar 2003 20:19:13 -0000	1.3
  +++ ValueCriteria.java	13 Sep 2003 14:33:57 -0000	1.4
  @@ -55,24 +55,107 @@
    */
   
   /**
  - * Abstract superclass for Criteria using a value to compare with
  + * Models a Criteria comparing an attribute to a value
  + * <br>ie: name = 'Mark' , name like 'M%'
    * 
  - * @author <a href="mailto:jbraeuchi@hotmail.com">Jakob Braeuchi</a>
  + * @author <a href="mailto:jbraeuchi@gmx.ch">Jakob Braeuchi</a>
    * @version $Id$
    */ 
  -public abstract class ValueCriteria extends SelectionCriteria
  +public class ValueCriteria extends SelectionCriteria
   {
  +    static ValueCriteria buildEqualToCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new ValueCriteria(anAttribute, aValue, EQUAL, anAlias);
  +    }
  +
  +    static ValueCriteria buildNotEqualToCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new ValueCriteria(anAttribute, aValue, NOT_EQUAL, anAlias);
  +    }
  +
  +    static ValueCriteria buildGreaterCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new ValueCriteria(anAttribute, aValue,GREATER, anAlias);
  +    }
  +
  +    static ValueCriteria buildNotGreaterCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new ValueCriteria(anAttribute, aValue, NOT_GREATER, anAlias);
  +    }
  +
  +    static ValueCriteria buildLessCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new ValueCriteria(anAttribute, aValue, LESS, anAlias);
  +    }
  +
  +    static ValueCriteria buildNotLessCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new ValueCriteria(anAttribute, aValue, NOT_LESS, anAlias);
  +    }
  +
  +    static ValueCriteria buildLikeCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new ValueCriteria(anAttribute, aValue, LIKE, anAlias);
  +    }
  +
  +    static ValueCriteria buildNotLikeCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new ValueCriteria(anAttribute, aValue, NOT_LIKE, anAlias);
  +    }
  +
  +    static InCriteria buildInCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new InCriteria(anAttribute, aValue, IN, anAlias);
  +    }
  +
  +    static InCriteria buildNotInCriteria(Object anAttribute, Object aValue, String anAlias)
  +    {
  +        return new InCriteria(anAttribute, aValue, NOT_IN, anAlias);
  +    }
  +
  +    static NullCriteria buildNullCriteria(String anAttribute, String anAlias)
  +    {
  +        return new NullCriteria(anAttribute, IS_NULL, anAlias);
  +    }
  +
  +    static NullCriteria buildNotNullCriteria(String anAttribute, String anAlias)
  +    {
  +        return new NullCriteria(anAttribute, NOT_IS_NULL, anAlias);
  +    }
  +   
  +    static BetweenCriteria buildBeweenCriteria(Object anAttribute, Object aValue1, Object aValue2, String anAlias)
  +    {
  +        return new BetweenCriteria(anAttribute, aValue1, aValue2, BETWEEN, anAlias);
  +    }
  +
  +    static BetweenCriteria buildNotBeweenCriteria(Object anAttribute, Object aValue1, Object aValue2, String anAlias)
  +    {
  +        return new BetweenCriteria(anAttribute, aValue1, aValue2, NOT_BETWEEN, anAlias);
  +    }
  +    
  +    private String m_clause;
  +
       /**
        * Constructor declaration
        *
        * @param anAttribute  column- or fieldName
        * @param aValue  the value to compare with
  -     * @param negative  criteria is negated (ie NOT LIKE instead of LIKE)
  -     * @param alias  use alias to link anAttribute to
  +     * @param aClause the SQL compare clause (ie LIKE, = , IS NULL)
  +     * @param anAlias use alias to link anAttribute to
        */
  -	ValueCriteria(String anAttribute, Object aValue, boolean negative, String alias)
  -	{
  -		super(anAttribute, aValue, negative, alias);
  -	}
  +    ValueCriteria(Object anAttribute, Object aValue, String aClause, String anAlias)
  +    {
  +        super(anAttribute, aValue, anAlias);
  +        m_clause = aClause;
  +    }
  +    
  +
  +    /* (non-Javadoc)
  +     * @see org.apache.ojb.broker.query.SelectionCriteria#getClause()
  +     */
  +    public String getClause()
  +    {
  +        return m_clause;
  +    }
   
   }
  
  
  
  1.19      +22 -5     db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlGeneratorDefaultImpl.java
  
  Index: SqlGeneratorDefaultImpl.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlGeneratorDefaultImpl.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- SqlGeneratorDefaultImpl.java	9 Sep 2003 19:02:31 -0000	1.18
  +++ SqlGeneratorDefaultImpl.java	13 Sep 2003 14:33:57 -0000	1.19
  @@ -443,6 +443,23 @@
           return toSQLClause(c, cld);
       }
   
  +    private String toSqlClause(Object attributeOrQuery, ClassDescriptor cld)
  +    {
  +        String result;
  +        
  +        if (attributeOrQuery instanceof Query)
  +        {
  +            Query q = (Query)attributeOrQuery;
  +            result = getPreparedSelectStatement(q,cld.getRepository().getDescriptorFor(q.getSearchClass()));
  +        }   
  +        else
  +        {
  +           result = (String)attributeOrQuery; 
  +        } 
  +
  +        return result;
  +    } 
  +    
       /**
        * Answer the SQL-Clause for a NullCriteria
        *
  @@ -451,7 +468,7 @@
        */
       private String toSQLClause(NullCriteria c, ClassDescriptor cld)
       {
  -        String colName = c.getAttribute();
  +        String colName = (String)c.getAttribute();
           return colName + c.getClause();
       }
   
  @@ -463,7 +480,7 @@
        */
       private String toSQLClause(FieldCriteria c, ClassDescriptor cld)
       {
  -        String colName = c.getAttribute();
  +        String colName = toSqlClause(c.getAttribute(), cld);
           return colName + c.getClause() + c.getValue();
       }
   
  @@ -475,7 +492,7 @@
        */
       private String toSQLClause(BetweenCriteria c, ClassDescriptor cld)
       {
  -        String colName = c.getAttribute();
  +        String colName = toSqlClause(c.getAttribute(), cld);
           return colName + c.getClause() + " ? AND ? ";
       }
   
  @@ -510,7 +527,7 @@
        */
       private String toSQLClause(SelectionCriteria c, ClassDescriptor cld)
       {
  -        String colName = c.getAttribute();
  +        String colName = toSqlClause(c.getAttribute(), cld);
           return colName + c.getClause() + " ? ";
       }
   
  
  
  
  1.55      +45 -33    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.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- SqlQueryStatement.java	5 Sep 2003 22:02:55 -0000	1.54
  +++ SqlQueryStatement.java	13 Sep 2003 14:33:57 -0000	1.55
  @@ -101,6 +101,10 @@
       private ClassDescriptor m_searchCld;
   
       private int m_aliasCount = 0;
  +    
  +    // prefix to identify attributes referencing enclosing query
  +    private static String PARENT_QUERY_PREFIX = "parentQuery.";
  +    
   
   
       /**
  @@ -186,40 +190,25 @@
           String colName = pathInfo.column;
           int sp;
   
  -        sp = colName.lastIndexOf(".");
  +        // BRJ:
  +        // check if we refer to an attribute in the parent query
  +        // this prefix is temporary !
  +        if (colName.startsWith(PARENT_QUERY_PREFIX) && m_parentStatement != null)
  +        {
  +            String[] fieldNameRef = { colName.substring(PARENT_QUERY_PREFIX.length())};
  +            return m_parentStatement.getAttributeInfo(fieldNameRef[0], useOuterJoins, aUserAlias);
  +        }
   
  +        sp = colName.lastIndexOf(".");
           if (sp == -1)
           {
               tableAlias = getRoot();
  -            // BRJ : ignore alias for simple attributes ??
  -            /*
  -            if (aUserAlias == null)
  -            {
  -                tableAlias = getRoot();
  -            }
  -            else
  -            {
  -                tableAlias = getTableAlias(colName, useOuterJoins, aUserAlias);
  -                if (tableAlias == null)
  -                {
  -                    tableAlias = getRoot();
  -                }
  -            }
  -            */
           }
           else
           {
               String pathName = colName.substring(0, sp);
               String[] fieldNameRef = { colName.substring(sp + 1)};
   
  -            // BRJ:
  -            // check if we refer to an attribute in the parent query
  -            // this prefix is temporary !
  -            if (pathName.equals("parentQuery") && m_parentStatement != null)
  -            {
  -                return m_parentStatement.getAttributeInfo(fieldNameRef[0], useOuterJoins, aUserAlias);
  -            }
  -
               tableAlias = getTableAlias(pathName, useOuterJoins, aUserAlias, fieldNameRef);
               /**
                * if we have not found an alias by the pathName or
  @@ -769,7 +758,20 @@
        */
       protected void appendSQLClause(SelectionCriteria c, StringBuffer buf)
       {
  -        AttributeInfo attrInfo = getAttributeInfo(c.getAttribute(), false, c.getAlias());
  +        // BRJ : criteria attribute is a query
  +        if (c.getAttribute() instanceof Query)
  +        {
  +            Query q = (Query)c.getAttribute();
  +            buf.append("(");
  +            buf.append(getSubQuerySQL(q));
  +            buf.append(")");
  +            buf.append(c.getClause());
  +            appendParameter(c.getValue(), buf);
  +            return;
  +        }    
  +
  +            
  +        AttributeInfo attrInfo = getAttributeInfo((String)c.getAttribute(), false, c.getAlias());
           TableAlias alias = attrInfo.tableAlias;
   
           if (alias != null)
  @@ -830,6 +832,18 @@
        */
       private void appendSubQuery(Query subQuery, StringBuffer buf)
       {
  +        buf.append(" (");
  +        buf.append(getSubQuerySQL(subQuery));
  +        buf.append(") ");
  +    }
  +
  +
  +    /**
  +     * Convert subQuery to SQL
  +     * @param subQuery the subQuery value of SelectionCriteria
  +     */
  +    private String getSubQuerySQL(Query subQuery)
  +    {
           ClassDescriptor cld = getRoot().cld.getRepository().getDescriptorFor(subQuery.getSearchClass());
           String sql;
   
  @@ -847,12 +861,9 @@
               sql = new SqlSelectStatement(this ,m_platform, cld, columns, subQuery, m_logger).getStatement();
           }
   
  -        buf.append(" (");
  -        buf.append(sql);
  -        buf.append(") ");
  +        return sql;
       }
   
  -
       /**
        * Get TableAlias by the path from the target table of the query.
        * @param aPath the path from the target table of the query to this TableAlias.
  @@ -1462,12 +1473,13 @@
               else
               {
                   SelectionCriteria c = (SelectionCriteria) o;
  -                // BRJ : Outer join for OR
  +                // BRJ: Outer join for OR
                   boolean useOuterJoin = (crit.getType() == Criteria.OR);
   
  -                if (c.getAttribute() != null)
  +                // BRJ: do not build join tree for subQuery attribute                  
  +                if (c.getAttribute() != null && c.getAttribute() instanceof String)
                   {
  -                    buildJoinTreeForColumn(c.getAttribute(), useOuterJoin, c.getAlias());
  +                    buildJoinTreeForColumn((String)c.getAttribute(), useOuterJoin, c.getAlias());
                   }
                   if (c instanceof FieldCriteria)
                   {
  
  
  
  1.13      +71 -18    db-ojb/src/test/org/apache/ojb/repository_database.xml
  
  Index: repository_database.xml
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/repository_database.xml,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- repository_database.xml	9 Jun 2003 12:11:24 -0000	1.12
  +++ repository_database.xml	13 Sep 2003 14:33:57 -0000	1.13
  @@ -1,4 +1,4 @@
  -<!-- @version $Id$ -->
  +
   <!--
   Define here all used connections.
   One defined connection should be defined as the default one,
  @@ -13,36 +13,89 @@
   using the MetadataManager.
   -->
   
  -
  -    <!-- this connection was used as the default one within OJB -->
  +    <!-- P6Spy for HSQLDB -->
       <jdbc-connection-descriptor
  -   		jcd-alias="@JCD_ALIAS@"
  +   		jcd-alias="default"
      		default-connection="true"
  -   		platform="@DBMS_NAME@"
  -   		jdbc-level="@JDBC_LEVEL@"
  -   		driver="@DRIVER_NAME@"
  -   		protocol="@URL_PROTOCOL@"
  -   		subprotocol="@URL_SUBPROTOCOL@"
  -   		dbalias="@URL_DBALIAS@"
  -   		username="@USER_NAME@"
  -   		password="@USER_PASSWD@"
  +   		platform="Hsqldb"
  +   		jdbc-level="2.0"
  +   		driver="com.p6spy.engine.spy.P6SpyDriver"
  +   		protocol="jdbc"
  +   		subprotocol="hsqldb"
  +   		dbalias="e:/java/jdbc/hsql/OJB"
  +   		username="sa"
  +   		password=""
           eager-release="false"
      		batch-mode="false"
           useAutoCommit="1"
           ignoreAutoCommitExceptions="false"
        >
  +        <connection-pool
  +            maxActive="10"
  +            validationQuery="" />
  +        <sequence-manager className="org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl">
  +            <attribute attribute-name="grabSize" attribute-value="20"/>
  +            <attribute attribute-name="autoNaming" attribute-value="true"/>
  +            <attribute attribute-name="globalSequenceId" attribute-value="false"/>
  +            <attribute attribute-name="globalSequenceStart" attribute-value="10000"/>
  +        </sequence-manager>
  +   </jdbc-connection-descriptor>
   
  +    <!-- P6Spy for MySQL -->
  +    <!--jdbc-connection-descriptor
  +   		jcd-alias="default"
  +   		default-connection="true"
  +   		platform="MySQL"
  +   		jdbc-level="2.0"
  +   		driver="com.p6spy.engine.spy.P6SpyDriver"
  +   		protocol="jdbc"
  +   		subprotocol="mysql"
  +   		dbalias="//localhost:3306/ojb"
  +   		username="sa"
  +   		password=""
  +        eager-release="false"
  +   		batch-mode="false"
  +        useAutoCommit="1"
  +        ignoreAutoCommitExceptions="false"
  +     >
           <connection-pool
  -            maxActive="21"
  +            maxActive="10"
               validationQuery="" />
  +        <sequence-manager className="org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl">
  +            <attribute attribute-name="grabSize" attribute-value="20"/>
  +            <attribute attribute-name="autoNaming" attribute-value="true"/>
  +            <attribute attribute-name="globalSequenceId" attribute-value="false"/>
  +            <attribute attribute-name="globalSequenceStart" attribute-value="10000"/>
  +        </sequence-manager>
  +   </jdbc-connection-descriptor-->
   
  +    <!-- P6Spy for SAPDB -->
  +    <!--jdbc-connection-descriptor
  +   		jcd-alias="default"
  +   		default-connection="true"
  +   		platform="Sapdb"
  +   		jdbc-level="2.0"
  +   		driver="com.p6spy.engine.spy.P6SpyDriver"
  +   		protocol="jdbc"
  +   		subprotocol="sapdb"
  +   		dbalias="//localhost/ojb"
  +   		username="ojb_adm"
  +   		password="ojb_adm"
  +        eager-release="false"
  +   		batch-mode="false"
  +        useAutoCommit="1"
  +        ignoreAutoCommitExceptions="false"
  +     >
  +        <connection-pool
  +            maxActive="10"
  +            validationQuery="" />
           <sequence-manager className="org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl">
               <attribute attribute-name="grabSize" attribute-value="20"/>
               <attribute attribute-name="autoNaming" attribute-value="true"/>
               <attribute attribute-name="globalSequenceId" attribute-value="false"/>
               <attribute attribute-name="globalSequenceStart" attribute-value="10000"/>
           </sequence-manager>
  -   </jdbc-connection-descriptor>
  +   </jdbc-connection-descriptor-->
   
      <!-- Datasource example -->
       <!-- jdbc-connection-descriptor
  @@ -83,13 +136,13 @@
           driver="org.hsqldb.jdbcDriver"
           protocol="jdbc"
           subprotocol="hsqldb"
  -        dbalias="../OJB_FarAway"
  +        dbalias="e:/java/jdbc/hsql/OJB_FarAway"
           username="sa"
           password=""
           batch-mode="false"
       >
  -        <connection-pool
  -            maxActive="6"
  +       <connection-pool
  +            maxActive="5"
               whenExhaustedAction="0"
               validationQuery="select count(*) from OJB_HL_SEQ"
           />
  @@ -145,4 +198,4 @@
               <attribute attribute-name="key1" attribute-value="value1"/>
               <attribute attribute-name="key2" attribute-value="value2"/>
           </sequence-manager>
  -    </jdbc-connection-descriptor>
  +    </jdbc-connection-descriptor>
  \ No newline at end of file
  
  
  
  1.41      +2 -2      db-ojb/build.properties
  
  Index: build.properties
  ===================================================================
  RCS file: /home/cvs/db-ojb/build.properties,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- build.properties	27 Jul 2003 11:18:15 -0000	1.40
  +++ build.properties	13 Sep 2003 14:33:57 -0000	1.41
  @@ -43,7 +43,7 @@
   ###
   #
   # non-redistributable jars
  -# Certain jar files required for a full OJB build may not be shipped 
  +# Certain jar files required for a full OJB build may not be shipped
   # as part of the OJB distribution.
   #
   j2ee.jars=j2ee.jar
  @@ -131,4 +131,4 @@
   
   
   #
  -### Preprocessor flags end here
  +### Preprocessor flags end here
  \ No newline at end of file
  
  
  
  1.7       +2 -2      db-ojb/profile/sapdb.profile
  
  Index: sapdb.profile
  ===================================================================
  RCS file: /home/cvs/db-ojb/profile/sapdb.profile,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- sapdb.profile	1 Sep 2002 21:20:03 -0000	1.6
  +++ sapdb.profile	13 Sep 2003 14:33:57 -0000	1.7
  @@ -73,8 +73,8 @@
   buildDatabaseUrl = ${urlProtocol}:${urlSubprotocol}:${urlDbalias}
   databaseUrl = ${urlProtocol}:${urlSubprotocol}:${urlDbalias}
   databaseDriver = com.sap.dbtech.jdbc.DriverSapDB
  -databaseUser = user
  -databasePassword = password
  +databaseUser = ojb_adm
  +databasePassword = ojb_adm
   databaseHost = 127.0.0.1
   
   
  
  
  
  1.5       +1 -1      db-ojb/profile/mysql.profile
  
  Index: mysql.profile
  ===================================================================
  RCS file: /home/cvs/db-ojb/profile/mysql.profile,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- mysql.profile	13 Oct 2002 10:11:40 -0000	1.4
  +++ mysql.profile	13 Sep 2003 14:33:57 -0000	1.5
  @@ -70,7 +70,7 @@
   buildDatabaseUrl = ${urlProtocol}:${urlSubprotocol}:${urlDbalias}
   databaseUrl = ${urlProtocol}:${urlSubprotocol}:${urlDbalias}
   databaseDriver = org.gjt.mm.mysql.Driver
  -databaseUser = root
  +databaseUser = 
   databasePassword =
   databaseHost = 127.0.0.1
   
  
  
  
  1.36      +30 -3     db-ojb/src/test/org/apache/ojb/broker/QueryTest.java
  
  Index: QueryTest.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/QueryTest.java,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- QueryTest.java	17 Aug 2003 08:49:31 -0000	1.35
  +++ QueryTest.java	13 Sep 2003 14:33:58 -0000	1.36
  @@ -148,7 +148,8 @@
   
       /**
        * test Subquery
  -     * get all product groups with more than 10 articles
  +     * get all product groups with more than 10 articles, uses attribute as value !
  +     * see testSubQuery4 for a better way
        *
        * test may fail if db does not support sub queries
        */
  @@ -163,14 +164,41 @@
           subQuery = QueryFactory.newReportQuery(Article.class, subCrit);
           subQuery.setColumns(new String[]{"count(productGroupId)"});
   
  -        crit.addLessThan("10", subQuery);    // MORE than 10 articles
  +        crit.addLessThan("10", subQuery);    // MORE than 10 articles, uses attribute as value !
  +        crit.addLessThan("groupId",new Integer(987654));
           Query q = QueryFactory.newQuery(ProductGroup.class, crit);
   
           Collection results = broker.getCollectionByQuery(q);
           assertNotNull(results);
           assertTrue(results.size() == 4);
  +    }
  +
  +    /**
  +     * test Subquery
  +     * get all product groups with more than 10 articles
  +     *
  +     * test may fail if db does not support sub queries
  +     */
  +    public void testSubQuery4()
  +    {
  +
  +        ReportQueryByCriteria subQuery;
  +        Criteria subCrit = new Criteria();
  +        Criteria crit = new Criteria();
   
  +        subCrit.addEqualToField("productGroupId","parentQuery.groupId");
  +        subQuery = QueryFactory.newReportQuery(Article.class, subCrit);
  +        subQuery.setColumns(new String[]{"count(productGroupId)"});
  +
  +        crit.addGreaterThan(subQuery,"10");    // MORE than 10 articles
  +        crit.addLessThan("groupId",new Integer(987654));
  +        Query q = QueryFactory.newQuery(ProductGroup.class, crit);
  +
  +        Collection results = broker.getCollectionByQuery(q);
  +        assertNotNull(results);
  +        assertTrue(results.size() == 4);
       }
  +
   	/**
   	 * test Like Criteria
   	 */
  @@ -184,7 +212,6 @@
   		Collection results = broker.getCollectionByQuery(q);
   		assertNotNull(results);
   		assertTrue(results.size() > 0);
  -
   	}
   
   	/**
  
  
  
  1.41      +75 -203   db-ojb/src/java/org/apache/ojb/broker/accesslayer/StatementManager.java
  
  Index: StatementManager.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/StatementManager.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- StatementManager.java	9 Sep 2003 19:02:31 -0000	1.40
  +++ StatementManager.java	13 Sep 2003 14:33:58 -0000	1.41
  @@ -127,8 +127,7 @@
        * Note; not important to synchronize completely as a threading issue in this code
        * will only result in a little extra code being executed
        */
  -    protected StatementsForClassIF getStatementsForClass(ClassDescriptor cds)
  -        throws PersistenceBrokerException
  +    protected StatementsForClassIF getStatementsForClass(ClassDescriptor cds) throws PersistenceBrokerException
       {
           StatementsForClassIF sfc = (StatementsForClassIF) m_statementTable.get(cds);
           if (sfc == null)
  @@ -137,10 +136,7 @@
               {
                   // 07.17.2003 - RB: StatementsForClassImpl is now configurable
                   //sfc = (StatementsForClassIF) new StatementsForClassImpl(m_conMan.getConnectionDescriptor(), cds);
  -                sfc =
  -                    StatementsForClassFactory.getInstance().getStatementsForClass(
  -                        m_conMan.getConnectionDescriptor(),
  -                        cds);
  +                sfc = StatementsForClassFactory.getInstance().getStatementsForClass(m_conMan.getConnectionDescriptor(), cds);
                   m_statementTable.put(cds, sfc);
               }
           }
  @@ -187,8 +183,7 @@
       /**
        * binds the Identities Primary key values to the statement
        */
  -    public void bindDelete(PreparedStatement stmt, Identity oid, ClassDescriptor cld)
  -        throws SQLException
  +    public void bindDelete(PreparedStatement stmt, Identity oid, ClassDescriptor cld) throws SQLException
       {
           Object[] values = null;
           int i = 0;
  @@ -204,22 +199,12 @@
           {
               for (i = 0; i < values.length; i++)
               {
  -                m_platform.setObjectForStatement(
  -                    stmt,
  -                    i + 1,
  -                    values[i],
  -                    SqlHelper.getSqlTypePk(cld, i));
  +                m_platform.setObjectForStatement(stmt, i + 1, values[i], SqlHelper.getSqlTypePk(cld, i));
               }
           }
           catch (SQLException e)
           {
  -            m_log.error(
  -                "bindDelete failed for: "
  -                    + oid.toString()
  -                    + ", PK: "
  -                    + i
  -                    + ", value: "
  -                    + values[i]);
  +            m_log.error("bindDelete failed for: " + oid.toString() + ", PK: " + i + ", value: " + values[i]);
               throw e;
           }
       }
  @@ -227,8 +212,7 @@
       /**
        * binds the objects primary key and locking values to the statement, BRJ
        */
  -    public void bindDelete(PreparedStatement stmt, ClassDescriptor cld, Object obj)
  -        throws SQLException
  +    public void bindDelete(PreparedStatement stmt, ClassDescriptor cld, Object obj) throws SQLException
       {
           if (cld.getDeleteProcedure() != null)
           {
  @@ -245,11 +229,7 @@
               values = getKeyValues(m_broker, cld, obj);
               for (int i = 0; i < values.length; i++)
               {
  -                m_platform.setObjectForStatement(
  -                    stmt,
  -                    index,
  -                    values[i],
  -                    SqlHelper.getSqlTypePk(cld, i));
  +                m_platform.setObjectForStatement(stmt, index, values[i], SqlHelper.getSqlTypePk(cld, i));
                   index++;
               }
   
  @@ -257,57 +237,51 @@
               values = currentLockingValues;
               for (int i = 0; i < values.length; i++)
               {
  -                m_platform.setObjectForStatement(
  -                    stmt,
  -                    index,
  -                    values[i],
  -                    SqlHelper.getSqlTypeLocking(cld, i));
  +                m_platform.setObjectForStatement(stmt, index, values[i], SqlHelper.getSqlTypeLocking(cld, i));
                   index++;
               }
           }
       }
   
       /**
  -     * bind a value
  -     * @param stmt the PreparedStatement
  -     * @param index the position of the parameter to bind
  -     * @param value the value to bind
  -     * @param cld the ClassDescriptor
  -     * @param fld the FielsDescriptor
  -     * @return next index for PreparedStatement
  +     * bind attribute and value
  +     * @param stmt
  +     * @param index
  +     * @param attributeOrQuery
  +     * @param value
  +     * @param cld
  +     * @return
  +     * @throws SQLException
        */
  -    private int bindStatementValue(
  -        PreparedStatement stmt,
  -        int index,
  -        Object value,
  -        ClassDescriptor cld,
  -        FieldDescriptor fld)
  +    private int bindStatementValue(PreparedStatement stmt, int index, Object attributeOrQuery, Object value, ClassDescriptor cld)
           throws SQLException
       {
  +        FieldDescriptor fld = null;
  +
           // if value is a subQuery bind it
           if (value instanceof Query)
           {
               Query subQuery = (Query) value;
  +            return bindStatement(stmt, subQuery, cld.getRepository().getDescriptorFor(subQuery.getSearchClass()), index);
  +        }
   
  -            // BRJ: simply bind the whole subQuery
  -            return bindStatement(
  -                stmt,
  -                subQuery,
  -                cld.getRepository().getDescriptorFor(subQuery.getSearchClass()),
  -                index);
  +        // if attribute is a subQuery bind it
  +        if (attributeOrQuery instanceof Query)
  +        {
  +            Query subQuery = (Query) attributeOrQuery;
  +            bindStatement(stmt, subQuery, cld.getRepository().getDescriptorFor(subQuery.getSearchClass()), index);
  +        }
  +        else
  +        {
  +            fld = cld.getFieldDescriptorForPath((String) attributeOrQuery);
           }
   
  -        // if query has criteria, bind them
           if (fld != null)
           {
               // BRJ: use field conversions and platform
               if (value != null)
               {
  -                m_platform.setObjectForStatement(
  -                    stmt,
  -                    index,
  -                    fld.getFieldConversion().javaToSql(value),
  -                    fld.getColumnJdbcType());
  +                m_platform.setObjectForStatement(stmt, index, fld.getFieldConversion().javaToSql(value), fld.getColumnJdbcType());
               }
               else
               {
  @@ -316,7 +290,6 @@
           }
           else
           {
  -            // BRJ: No FieldDescriptor found
               if (value != null)
               {
                   stmt.setObject(index, value);
  @@ -338,15 +311,9 @@
        * @param cld the ClassDescriptor
        * @return next index for PreparedStatement
        */
  -    private int bindStatement(
  -        PreparedStatement stmt,
  -        int index,
  -        SelectionCriteria crit,
  -        ClassDescriptor cld)
  -        throws SQLException
  +    private int bindStatement(PreparedStatement stmt, int index, SelectionCriteria crit, ClassDescriptor cld) throws SQLException
       {
  -        FieldDescriptor fld = cld.getFieldDescriptorForPath(crit.getAttribute());
  -        return bindStatementValue(stmt, index, crit.getValue(), cld, fld);
  +        return bindStatementValue(stmt, index, crit.getAttribute(), crit.getValue(), cld);
       }
   
       /**
  @@ -356,8 +323,7 @@
        * @param crit the Criteria containing the parameter
        * @return next index for PreparedStatement
        */
  -    private int bindStatement(PreparedStatement stmt, int index, NullCriteria crit)
  -        throws SQLException
  +    private int bindStatement(PreparedStatement stmt, int index, NullCriteria crit) throws SQLException
       {
           return index;
       }
  @@ -369,8 +335,7 @@
        * @param crit , the Criteria containing the parameter
        * @return next index for PreparedStatement
        */
  -    private int bindStatement(PreparedStatement stmt, int index, FieldCriteria crit)
  -        throws SQLException
  +    private int bindStatement(PreparedStatement stmt, int index, FieldCriteria crit) throws SQLException
       {
           return index;
       }
  @@ -382,8 +347,7 @@
        * @param crit the Criteria containing the parameter
        * @return next index for PreparedStatement
        */
  -    private int bindStatement(PreparedStatement stmt, int index, SqlCriteria crit)
  -        throws SQLException
  +    private int bindStatement(PreparedStatement stmt, int index, SqlCriteria crit) throws SQLException
       {
           return index;
       }
  @@ -396,17 +360,11 @@
        * @param cld the ClassDescriptor
        * @return next index for PreparedStatement
        */
  -    private int bindStatement(
  -        PreparedStatement stmt,
  -        int index,
  -        BetweenCriteria crit,
  -        ClassDescriptor cld)
  -        throws SQLException
  +    private int bindStatement(PreparedStatement stmt, int index, BetweenCriteria crit, ClassDescriptor cld) throws SQLException
       {
  -        FieldDescriptor fld = cld.getFieldDescriptorForPath(crit.getAttribute());
  -        index = bindStatementValue(stmt, index, crit.getValue(), cld, fld);
  +        index = bindStatementValue(stmt, index, crit.getAttribute(), crit.getValue(), cld);
   
  -        return bindStatementValue(stmt, index, crit.getValue2(), cld, fld);
  +        return bindStatementValue(stmt, index, crit.getAttribute(), crit.getValue2(), cld);
       }
   
       /**
  @@ -417,14 +375,8 @@
        * @param cld the ClassDescriptor
        * @return next index for PreparedStatement
        */
  -    private int bindStatement(
  -        PreparedStatement stmt,
  -        int index,
  -        InCriteria crit,
  -        ClassDescriptor cld)
  -        throws SQLException
  +    private int bindStatement(PreparedStatement stmt, int index, InCriteria crit, ClassDescriptor cld) throws SQLException
       {
  -        FieldDescriptor fld = cld.getFieldDescriptorForPath(crit.getAttribute());
           if (crit.getValue() instanceof Collection)
           {
               Collection values = (Collection) crit.getValue();
  @@ -432,12 +384,12 @@
   
               while (iter.hasNext())
               {
  -                index = bindStatementValue(stmt, index, iter.next(), cld, fld);
  +                index = bindStatementValue(stmt, index, crit.getAttribute(), iter.next(), cld);
               }
           }
           else
           {
  -            index = bindStatementValue(stmt, index, crit.getValue(), cld, fld);
  +            index = bindStatementValue(stmt, index, crit.getAttribute(), crit.getValue(), cld);
           }
           return index;
       }
  @@ -450,23 +402,14 @@
        * @param cld the ClassDescriptor
        * @return next index for PreparedStatement
        */
  -    private int bindStatement(
  -        PreparedStatement stmt,
  -        int index,
  -        ExistsCriteria crit,
  -        ClassDescriptor cld)
  -        throws SQLException
  +    private int bindStatement(PreparedStatement stmt, int index, ExistsCriteria crit, ClassDescriptor cld) throws SQLException
       {
           Query subQuery = (Query) crit.getValue();
   
           // if query has criteria, bind them
           if (subQuery.getCriteria() != null && !subQuery.getCriteria().isEmpty())
           {
  -            return bindStatement(
  -                stmt,
  -                subQuery.getCriteria(),
  -                cld.getRepository().getDescriptorFor(subQuery.getSearchClass()),
  -                index);
  +            return bindStatement(stmt, subQuery.getCriteria(), cld.getRepository().getDescriptorFor(subQuery.getSearchClass()), index);
   
               // otherwise, just ignore it
           }
  @@ -479,8 +422,7 @@
       /**
        * bind a Query based Select Statement
        */
  -    public int bindStatement(PreparedStatement stmt, Query query, ClassDescriptor cld, int param)
  -        throws SQLException
  +    public int bindStatement(PreparedStatement stmt, Query query, ClassDescriptor cld, int param) throws SQLException
       {
           int result;
   
  @@ -493,12 +435,7 @@
       /**
        * bind a Query based Select Statement
        */
  -    protected int bindStatement(
  -        PreparedStatement stmt,
  -        Criteria crit,
  -        ClassDescriptor cld,
  -        int param)
  -        throws SQLException
  +    protected int bindStatement(PreparedStatement stmt, Criteria crit, ClassDescriptor cld, int param) throws SQLException
       {
           if (crit != null)
           {
  @@ -538,12 +475,7 @@
        * @param cld the ClassDescriptor
        * @return next index for PreparedStatement
        */
  -    private int bindSelectionCriteria(
  -        PreparedStatement stmt,
  -        int index,
  -        SelectionCriteria crit,
  -        ClassDescriptor cld)
  -        throws SQLException
  +    private int bindSelectionCriteria(PreparedStatement stmt, int index, SelectionCriteria crit, ClassDescriptor cld) throws SQLException
       {
           if (crit instanceof NullCriteria)
               index = bindStatement(stmt, index, (NullCriteria) crit);
  @@ -566,8 +498,7 @@
       /**
        * binds the values of the object obj to the statements parameters
        */
  -    public void bindInsert(PreparedStatement stmt, ClassDescriptor cld, Object obj)
  -        throws java.sql.SQLException
  +    public void bindInsert(PreparedStatement stmt, ClassDescriptor cld, Object obj) throws java.sql.SQLException
       {
           Object[] values;
           cld.updateLockingValues(obj); // BRJ : provide useful defaults for locking fields
  @@ -584,11 +515,7 @@
                   Object val = values[i];
                   if (val != null)
                   {
  -                    m_platform.setObjectForStatement(
  -                        stmt,
  -                        i + 1,
  -                        val,
  -                        SqlHelper.getSqlTypeRwAll(cld, i));
  +                    m_platform.setObjectForStatement(stmt, i + 1, val, SqlHelper.getSqlTypeRwAll(cld, i));
                   }
                   else
                   {
  @@ -601,8 +528,7 @@
       /**
        * binds the Identities Primary key values to the statement
        */
  -    public void bindSelect(PreparedStatement stmt, Identity oid, ClassDescriptor cld)
  -        throws SQLException
  +    public void bindSelect(PreparedStatement stmt, Identity oid, ClassDescriptor cld) throws SQLException
       {
           Object[] values = null;
           int i = 0;
  @@ -619,11 +545,7 @@
                   Object val = values[i];
                   if (val != null)
                   {
  -                    m_platform.setObjectForStatement(
  -                        stmt,
  -                        i + 1,
  -                        val,
  -                        SqlHelper.getSqlTypePk(cld, i));
  +                    m_platform.setObjectForStatement(stmt, i + 1, val, SqlHelper.getSqlTypePk(cld, i));
                   }
                   else
                   {
  @@ -633,13 +555,7 @@
           }
           catch (SQLException e)
           {
  -            m_log.error(
  -                "bindSelect failed for: "
  -                    + oid.toString()
  -                    + ", PK: "
  -                    + i
  -                    + ", value: "
  -                    + values[i]);
  +            m_log.error("bindSelect failed for: " + oid.toString() + ", PK: " + i + ", value: " + values[i]);
               throw e;
           }
       }
  @@ -647,8 +563,7 @@
       /**
        * binds the values of the object obj to the statements parameters
        */
  -    public void bindUpdate(PreparedStatement stmt, ClassDescriptor cld, Object obj)
  -        throws java.sql.SQLException
  +    public void bindUpdate(PreparedStatement stmt, ClassDescriptor cld, Object obj) throws java.sql.SQLException
       {
           if (cld.getUpdateProcedure() != null)
           {
  @@ -669,18 +584,11 @@
                   Object val = values[i];
                   if (val != null)
                   {
  -                    m_platform.setObjectForStatement(
  -                        stmt,
  -                        index,
  -                        val,
  -                        SqlHelper.getSqlTypeRwNonPk(cld, i));
  +                    m_platform.setObjectForStatement(stmt, index, val, SqlHelper.getSqlTypeRwNonPk(cld, i));
                   }
                   else
                   {
  -                    m_platform.setNullForStatement(
  -                        stmt,
  -                        index,
  -                        SqlHelper.getSqlTypeRwNonPk(cld, i));
  +                    m_platform.setNullForStatement(stmt, index, SqlHelper.getSqlTypeRwNonPk(cld, i));
                   }
   
                   index++;
  @@ -731,11 +639,7 @@
           {
               for (int i = 0; i < values.length; i++)
               {
  -                m_platform.setObjectForStatement(
  -                    stmt,
  -                    index,
  -                    values[i],
  -                    SqlHelper.getSqlTypeByValue(values[i]));
  +                m_platform.setObjectForStatement(stmt, index, values[i], SqlHelper.getSqlTypeByValue(values[i]));
                   index++;
               }
           }
  @@ -745,8 +649,7 @@
       /**
        * return a prepared DELETE Statement fitting for the given ClassDescriptor
        */
  -    public PreparedStatement getDeleteStatement(ClassDescriptor cld)
  -        throws PersistenceBrokerSQLException, PersistenceBrokerException
  +    public PreparedStatement getDeleteStatement(ClassDescriptor cld) throws PersistenceBrokerSQLException, PersistenceBrokerException
       {
           try
           {
  @@ -758,9 +661,7 @@
           }
           catch (LookupException e)
           {
  -            throw new PersistenceBrokerException(
  -                "Used ConnectionManager instance could not obtain a connection",
  -                e);
  +            throw new PersistenceBrokerException("Used ConnectionManager instance could not obtain a connection", e);
           }
       }
   
  @@ -768,8 +669,7 @@
        * return a generic Statement for the given ClassDescriptor.
        * Never use this method for UPDATE/INSERT/DELETE if you want to use the batch mode.
        */
  -    public Statement getGenericStatement(ClassDescriptor cds, boolean scrollable)
  -        throws PersistenceBrokerException
  +    public Statement getGenericStatement(ClassDescriptor cds, boolean scrollable) throws PersistenceBrokerException
       {
           try
           {
  @@ -777,17 +677,14 @@
           }
           catch (LookupException e)
           {
  -            throw new PersistenceBrokerException(
  -                "Used ConnectionManager instance could not obtain a connection",
  -                e);
  +            throw new PersistenceBrokerException("Used ConnectionManager instance could not obtain a connection", e);
           }
       }
   
       /**
        * return a prepared Insert Statement fitting for the given ClassDescriptor
        */
  -    public PreparedStatement getInsertStatement(ClassDescriptor cds)
  -        throws PersistenceBrokerSQLException, PersistenceBrokerException
  +    public PreparedStatement getInsertStatement(ClassDescriptor cds) throws PersistenceBrokerSQLException, PersistenceBrokerException
       {
           try
           {
  @@ -799,41 +696,29 @@
           }
           catch (LookupException e)
           {
  -            throw new PersistenceBrokerException(
  -                "Used ConnectionManager instance could not obtain a connection",
  -                e);
  +            throw new PersistenceBrokerException("Used ConnectionManager instance could not obtain a connection", e);
           }
       }
   
       /**
        * return a generic Statement for the given ClassDescriptor
        */
  -    public PreparedStatement getPreparedStatement(
  -        ClassDescriptor cds,
  -        String sql,
  -        boolean scrollable)
  -        throws PersistenceBrokerException
  +    public PreparedStatement getPreparedStatement(ClassDescriptor cds, String sql, boolean scrollable) throws PersistenceBrokerException
       {
           try
           {
  -            return getStatementsForClass(cds).getPreparedStmt(
  -                m_conMan.getConnection(),
  -                sql,
  -                scrollable);
  +            return getStatementsForClass(cds).getPreparedStmt(m_conMan.getConnection(), sql, scrollable);
           }
           catch (LookupException e)
           {
  -            throw new PersistenceBrokerException(
  -                "Used ConnectionManager instance could not obtain a connection",
  -                e);
  +            throw new PersistenceBrokerException("Used ConnectionManager instance could not obtain a connection", e);
           }
       }
   
       /**
        * return a prepared Select Statement for the given ClassDescriptor
        */
  -    public PreparedStatement getSelectByPKStatement(ClassDescriptor cds)
  -        throws PersistenceBrokerSQLException, PersistenceBrokerException
  +    public PreparedStatement getSelectByPKStatement(ClassDescriptor cds) throws PersistenceBrokerSQLException, PersistenceBrokerException
       {
           try
           {
  @@ -845,17 +730,14 @@
           }
           catch (LookupException e)
           {
  -            throw new PersistenceBrokerException(
  -                "Used ConnectionManager instance could not obtain a connection",
  -                e);
  +            throw new PersistenceBrokerException("Used ConnectionManager instance could not obtain a connection", e);
           }
       }
   
       /**
        * return a prepared Update Statement fitting to the given ClassDescriptor
        */
  -    public PreparedStatement getUpdateStatement(ClassDescriptor cds)
  -        throws PersistenceBrokerSQLException, PersistenceBrokerException
  +    public PreparedStatement getUpdateStatement(ClassDescriptor cds) throws PersistenceBrokerSQLException, PersistenceBrokerException
       {
           try
           {
  @@ -867,9 +749,7 @@
           }
           catch (LookupException e)
           {
  -            throw new PersistenceBrokerException(
  -                "Used ConnectionManager instance could not obtain a connection",
  -                e);
  +            throw new PersistenceBrokerException("Used ConnectionManager instance could not obtain a connection", e);
           }
       }
   
  @@ -877,8 +757,7 @@
        * returns an array containing values for all the Objects attribute
        * @throws PersistenceBrokerException if there is an erros accessing obj field values
        */
  -    protected Object[] getAllValues(ClassDescriptor cld, Object obj)
  -        throws PersistenceBrokerException
  +    protected Object[] getAllValues(ClassDescriptor cld, Object obj) throws PersistenceBrokerException
       {
           return m_broker.serviceBrokerHelper().getAllRwValues(cld, obj);
       }
  @@ -887,8 +766,7 @@
        * returns an Array with an Objects PK VALUES
        * @throws PersistenceBrokerException if there is an erros accessing o field values
        */
  -    protected Object[] getKeyValues(PersistenceBroker broker, ClassDescriptor cld, Object obj)
  -        throws PersistenceBrokerException
  +    protected Object[] getKeyValues(PersistenceBroker broker, ClassDescriptor cld, Object obj) throws PersistenceBrokerException
       {
           return broker.serviceBrokerHelper().getKeyValues(cld, obj);
       }
  @@ -897,8 +775,7 @@
        * returns an Array with an Identities PK VALUES
        * @throws PersistenceBrokerException if there is an erros accessing o field values
        */
  -    protected Object[] getKeyValues(PersistenceBroker broker, ClassDescriptor cld, Identity oid)
  -        throws PersistenceBrokerException
  +    protected Object[] getKeyValues(PersistenceBroker broker, ClassDescriptor cld, Identity oid) throws PersistenceBrokerException
       {
           return broker.serviceBrokerHelper().getKeyValues(cld, oid);
       }
  @@ -907,8 +784,7 @@
        * returns an Array with an Objects NON-PK VALUES
        * @throws PersistenceBrokerException if there is an erros accessing o field values
        */
  -    protected Object[] getNonKeyValues(PersistenceBroker broker, ClassDescriptor cld, Object obj)
  -        throws PersistenceBrokerException
  +    protected Object[] getNonKeyValues(PersistenceBroker broker, ClassDescriptor cld, Object obj) throws PersistenceBrokerException
       {
           return broker.serviceBrokerHelper().getNonKeyRwValues(cld, obj);
       }
  @@ -926,11 +802,7 @@
        *        the arguments that shoudl be passed to the procedure or
        *        user-defined function
        */
  -    private void bindProcedure(
  -        PreparedStatement stmt,
  -        ClassDescriptor cld,
  -        Object obj,
  -        ProcedureDescriptor proc)
  +    private void bindProcedure(PreparedStatement stmt, ClassDescriptor cld, Object obj, ProcedureDescriptor proc)
           throws java.sql.SQLException
       {
           int valueSub = 0;
  
  
  
  1.14      +8 -0      db-ojb/src/test/org/apache/ojb/odmg/ContractVersionEffectivenessOQLTest.java
  
  Index: ContractVersionEffectivenessOQLTest.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/odmg/ContractVersionEffectivenessOQLTest.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- ContractVersionEffectivenessOQLTest.java	2 Aug 2003 08:27:22 -0000	1.13
  +++ ContractVersionEffectivenessOQLTest.java	13 Sep 2003 14:33:58 -0000	1.14
  @@ -17,6 +17,8 @@
   import org.apache.ojb.broker.RelatedToContract;
   import org.apache.ojb.broker.TestHelper;
   import org.apache.ojb.broker.Version;
  +import org.apache.ojb.broker.query.QueryByCriteria;
  +import org.apache.ojb.odmg.oql.OQLQueryImpl;
   import org.odmg.Database;
   import org.odmg.Implementation;
   import org.odmg.OQLQuery;
  @@ -165,6 +167,9 @@
           query.bind(new Timestamp(System.currentTimeMillis() + 5000)); // a while from now (effValue3<$5)
           query.bind(new Integer(5)); // version.contract.relatedToContract.relatedValue2=$6
   
  +        QueryByCriteria cbc = (QueryByCriteria)((OQLQueryImpl)query).getQuery();
  +        cbc.setPathOuterJoin("relatedToContract");
  +        
           ManageableCollection all = (ManageableCollection) query.execute();
           java.util.Iterator it = all.ojbIterator();
           /**
  @@ -236,6 +241,9 @@
           query.bind(new Timestamp(System.currentTimeMillis() - 5000)); // a while ago (effValue3 > $3)
           query.bind(new Integer(20)); // effValue2 <= $4
           query.bind(new Timestamp(System.currentTimeMillis() + 5000)); // a while from now (effValue3<$5)
  +
  +        QueryByCriteria cbc = (QueryByCriteria)((OQLQueryImpl)query).getQuery();
  +        cbc.setPathOuterJoin("relatedToContract");
   
           ManageableCollection all = (ManageableCollection) query.execute();
           java.util.Iterator it = all.ojbIterator();
  
  
  
  1.4       +3 -0      db-ojb/src/jdori/org/apache/ojb/tutorial5/Application.java
  
  Index: Application.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/jdori/org/apache/ojb/tutorial5/Application.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Application.java	8 Apr 2003 20:19:27 -0000	1.3
  +++ Application.java	13 Sep 2003 14:33:58 -0000	1.4
  @@ -115,10 +115,13 @@
        */
       public UseCase selectUseCase()
       {
  +        return  (UseCase)useCases.get(0);
  +        /*
           displayUseCases();
           System.out.println("type in number to select a use case");
           String in = readLine();
           int index = Integer.parseInt(in);
           return (UseCase) useCases.get(index);
  +        */
       }
   }
  
  
  

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