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/05/22 10:37:24 UTC
cvs commit: db-ojb/src/test/org/apache/ojb/broker PathTest.java
brj 2004/05/22 01:37:24
Modified: src/java/org/apache/ojb/broker/query BetweenCriteria.java
SqlCriteria.java ExistsCriteria.java Criteria.java
NullCriteria.java SelectionCriteria.java
FieldCriteria.java InCriteria.java
ValueCriteria.java LikeCriteria.java
src/java/org/apache/ojb/broker/accesslayer/sql
SqlQueryStatement.java
src/test/org/apache/ojb/broker PathTest.java
Added: src/java/org/apache/ojb/broker/query UserAlias.java
Log:
query criteria support per path-segment alias (solution by Phil Warrick)
Revision Changes Path
1.10 +13 -6 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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- BetweenCriteria.java 24 Apr 2004 08:25:37 -0000 1.9
+++ BetweenCriteria.java 22 May 2004 08:37:23 -0000 1.10
@@ -25,12 +25,19 @@
public class BetweenCriteria extends ValueCriteria
{
private Object value2;
+
+ BetweenCriteria(Object anAttribute, Object aValue1, Object aValue2, String aClause, String anAlias)
+ {
+ super(anAttribute, aValue1, aClause, anAlias);
+ setValue2(aValue2);
+ }
- BetweenCriteria(Object anAttribute, Object aValue1, Object aValue2, String aClause, String anAlias)
- {
- super(anAttribute, aValue1, aClause, anAlias);
- setValue2(aValue2);
- }
+ // PAW
+ BetweenCriteria(Object anAttribute, Object aValue1, Object aValue2, String aClause, UserAlias aUserAlias)
+ {
+ super(anAttribute, aValue1, aClause, aUserAlias);
+ setValue2(aValue2);
+ }
/**
* sets the value of the criteria to newValue.
1.8 +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.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- SqlCriteria.java 4 Apr 2004 23:53:36 -0000 1.7
+++ SqlCriteria.java 22 May 2004 08:37:23 -0000 1.8
@@ -18,7 +18,7 @@
/**
* SelectionCriteria for free form sql "REVERSE(name) like 're%'"
*
- * @author <a href="mailto:jbraeuchi@hotmail.com">Jakob Braeuchi</a>
+ * @author <a href="mailto:jbraeuchi@gmx.ch">Jakob Braeuchi</a>
* @version $Id$
*/
public class SqlCriteria extends SelectionCriteria
@@ -30,7 +30,7 @@
*/
SqlCriteria(String anSqlStatement)
{
- super(anSqlStatement, null, null);
+ super(anSqlStatement, null, (String)null);
}
/*
1.7 +3 -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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ExistsCriteria.java 4 Apr 2004 23:53:36 -0000 1.6
+++ ExistsCriteria.java 22 May 2004 08:37:23 -0000 1.7
@@ -18,7 +18,7 @@
/**
* SelectionCriteria for [not] exists(sub query)
*
- * @author <a href="mailto:jbraeuchi@hotmail.com">Jakob Braeuchi</a>
+ * @author <a href="mailto:jbraeuchi@gmx.ch">Jakob Braeuchi</a>
* @version $Id$
*/
public class ExistsCriteria extends SelectionCriteria
@@ -31,7 +31,7 @@
*/
ExistsCriteria(Query subQuery, boolean negative)
{
- super("", subQuery, null);
+ super("", subQuery, (String)null);
m_negative = negative;
}
1.45 +211 -63 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.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- Criteria.java 24 Apr 2004 08:25:37 -0000 1.44
+++ Criteria.java 22 May 2004 08:37:23 -0000 1.45
@@ -69,10 +69,17 @@
private List groupby = null;
private List prefetchedRelationships = null;
- // an optional alias to be used for this criteria
- private String m_alias = null;
+ // an optional alias to be used for this criteria
+ private String m_alias = null;
- /** the max. number of parameters in a IN-statement */
+ // PAW
+ // an aliasPath to be used for this criteria
+ private String m_aliasPath = null;
+
+ // holds the path segment(s) to which the alias applies
+ private UserAlias m_userAlias = null;
+
+ /** the max. number of parameters in a IN-statement */
protected static final int IN_LIMIT = getSqlInLimit();
private QueryByCriteria m_query;
@@ -207,11 +214,15 @@
{
if (negative)
{
- return ValueCriteria.buildNotInCriteria(attribute, values, getAlias());
+ // PAW
+ // return ValueCriteria.buildNotInCriteria(attribute, values, getAlias());
+ return ValueCriteria.buildNotInCriteria(attribute, values, getUserAlias(attribute));
}
else
{
- return ValueCriteria.buildInCriteria(attribute, values, getAlias());
+ // PAW
+ // return ValueCriteria.buildInCriteria(attribute, values, getAlias());
+ return ValueCriteria.buildInCriteria(attribute, values, getUserAlias(attribute));
}
}
@@ -278,7 +289,9 @@
*/
public void addEqualTo(String attribute, Object value)
{
- addSelectionCriteria(ValueCriteria.buildEqualToCriteria(attribute, value, getAlias()));
+ // PAW
+// addSelectionCriteria(ValueCriteria.buildEqualToCriteria(attribute, value, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildEqualToCriteria(attribute, value, getUserAlias(attribute)));
}
/**
@@ -291,7 +304,9 @@
*/
public void addColumnEqualTo(String column, Object value)
{
- SelectionCriteria c = ValueCriteria.buildEqualToCriteria(column, value, getAlias());
+ // PAW
+// SelectionCriteria c = ValueCriteria.buildEqualToCriteria(column, value, getAlias());
+ SelectionCriteria c = ValueCriteria.buildEqualToCriteria(column, value, getUserAlias(column));
c.setTranslateAttribute(false);
addSelectionCriteria(c);
}
@@ -306,7 +321,9 @@
*/
public void addColumnEqualToField(String column, Object fieldName)
{
- SelectionCriteria c = FieldCriteria.buildEqualToCriteria(column, fieldName, getAlias());
+ // PAW
+ //SelectionCriteria c = FieldCriteria.buildEqualToCriteria(column, fieldName, getAlias());
+ SelectionCriteria c = FieldCriteria.buildEqualToCriteria(column, fieldName, getUserAlias(column));
c.setTranslateAttribute(false);
addSelectionCriteria(c);
}
@@ -322,7 +339,9 @@
*/
public void addEqualToField(String attribute, String fieldName)
{
- FieldCriteria c = FieldCriteria.buildEqualToCriteria(attribute, fieldName, getAlias());
+ // PAW
+ // FieldCriteria c = FieldCriteria.buildEqualToCriteria(attribute, fieldName, getAlias());
+ FieldCriteria c = FieldCriteria.buildEqualToCriteria(attribute, fieldName, getUserAlias(attribute));
addSelectionCriteria(c);
}
@@ -337,7 +356,9 @@
*/
public void addNotEqualToField(String attribute, String fieldName)
{
- SelectionCriteria c = FieldCriteria.buildNotEqualToCriteria(attribute, fieldName, getAlias());
+ // PAW
+ // SelectionCriteria c = FieldCriteria.buildNotEqualToCriteria(attribute, fieldName, getAlias());
+ SelectionCriteria c = FieldCriteria.buildNotEqualToCriteria(attribute, fieldName, getUserAlias(attribute));
addSelectionCriteria(c);
}
@@ -352,7 +373,9 @@
*/
public void addNotEqualToColumn(String attribute, String colName)
{
- FieldCriteria c = FieldCriteria.buildNotEqualToCriteria(attribute, colName, getAlias());
+ // PAW
+ // FieldCriteria c = FieldCriteria.buildNotEqualToCriteria(attribute, colName, getAlias());
+ FieldCriteria c = FieldCriteria.buildNotEqualToCriteria(attribute, colName, getUserAlias(attribute));
c.setTranslateField(false);
addSelectionCriteria(c);
}
@@ -368,7 +391,8 @@
*/
public void addEqualToColumn(String attribute, String colName)
{
- FieldCriteria c = FieldCriteria.buildEqualToCriteria(attribute, colName, getAlias());
+ // FieldCriteria c = FieldCriteria.buildEqualToCriteria(attribute, colName, getAlias());
+ FieldCriteria c = FieldCriteria.buildEqualToCriteria(attribute, colName, getUserAlias(attribute));
c.setTranslateField(false);
addSelectionCriteria(c);
}
@@ -382,7 +406,9 @@
*/
public void addGreaterOrEqualThan(Object attribute, Object value)
{
- addSelectionCriteria(ValueCriteria.buildNotLessCriteria(attribute, value, getAlias()));
+ // PAW
+ // addSelectionCriteria(ValueCriteria.buildNotLessCriteria(attribute, value, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildNotLessCriteria(attribute, value, getUserAlias(attribute)));
}
/**
@@ -394,7 +420,9 @@
*/
public void addGreaterOrEqualThanField(String attribute, Object value)
{
- addSelectionCriteria(FieldCriteria.buildNotLessCriteria(attribute, value, getAlias()));
+ // PAW
+ // addSelectionCriteria(FieldCriteria.buildNotLessCriteria(attribute, value, getAlias()));
+ addSelectionCriteria(FieldCriteria.buildNotLessCriteria(attribute, value, getUserAlias(attribute)));
}
/**
@@ -406,7 +434,9 @@
*/
public void addLessOrEqualThan(Object attribute, Object value)
{
- addSelectionCriteria(ValueCriteria.buildNotGreaterCriteria(attribute, value, getAlias()));
+ // PAW
+ // addSelectionCriteria(ValueCriteria.buildNotGreaterCriteria(attribute, value, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildNotGreaterCriteria(attribute, value, getUserAlias(attribute)));
}
/**
@@ -418,7 +448,9 @@
*/
public void addLessOrEqualThanField(String attribute, Object value)
{
- addSelectionCriteria(FieldCriteria.buildNotGreaterCriteria(attribute, value, getAlias()));
+ // PAW
+ // addSelectionCriteria(FieldCriteria.buildNotGreaterCriteria(attribute, value, getAlias()));
+ addSelectionCriteria(FieldCriteria.buildNotGreaterCriteria(attribute, value, getUserAlias(attribute)));
}
/**
@@ -431,7 +463,9 @@
*/
public void addLike(Object attribute, Object value)
{
- addSelectionCriteria(ValueCriteria.buildLikeCriteria(attribute, value, getAlias()));
+ // PAW
+ // addSelectionCriteria(ValueCriteria.buildLikeCriteria(attribute, value, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildLikeCriteria(attribute, value, getUserAlias(attribute)));
}
/**
@@ -444,7 +478,9 @@
*/
public void addNotLike(String attribute, Object value)
{
- addSelectionCriteria(ValueCriteria.buildNotLikeCriteria(attribute, value, getAlias()));
+ // PAW
+ // addSelectionCriteria(ValueCriteria.buildNotLikeCriteria(attribute, value, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildNotLikeCriteria(attribute, value, getUserAlias(attribute)));
}
/**
@@ -456,7 +492,9 @@
*/
public void addNotEqualTo(Object attribute, Object value)
{
- addSelectionCriteria(ValueCriteria.buildNotEqualToCriteria(attribute, value, getAlias()));
+ // PAW
+ // addSelectionCriteria(ValueCriteria.buildNotEqualToCriteria(attribute, value, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildNotEqualToCriteria(attribute, value, getUserAlias(attribute)));
}
/**
@@ -468,7 +506,9 @@
*/
public void addGreaterThan(Object attribute, Object value)
{
- addSelectionCriteria(ValueCriteria.buildGreaterCriteria(attribute, value, getAlias()));
+ // PAW
+ // addSelectionCriteria(ValueCriteria.buildGreaterCriteria(attribute, value, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildGreaterCriteria(attribute, value, getUserAlias(attribute)));
}
/**
@@ -480,7 +520,9 @@
*/
public void addGreaterThanField(String attribute, Object value)
{
- addSelectionCriteria(FieldCriteria.buildGreaterCriteria(attribute, value, getAlias()));
+ // PAW
+ // addSelectionCriteria(FieldCriteria.buildGreaterCriteria(attribute, value, getAlias()));
+ addSelectionCriteria(FieldCriteria.buildGreaterCriteria(attribute, value, getUserAlias(attribute)));
}
/**
@@ -492,7 +534,9 @@
*/
public void addLessThan(Object attribute, Object value)
{
- addSelectionCriteria(ValueCriteria.buildLessCriteria(attribute, value, getAlias()));
+ // PAW
+ // addSelectionCriteria(ValueCriteria.buildLessCriteria(attribute, value, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildLessCriteria(attribute, value, getUserAlias(attribute)));
}
/**
@@ -504,7 +548,9 @@
*/
public void addLessThanField(String attribute, Object value)
{
- addSelectionCriteria(FieldCriteria.buildLessCriteria(attribute, value, getAlias()));
+ // PAW
+ // addSelectionCriteria(FieldCriteria.buildLessCriteria(attribute, value, getAlias()));
+ addSelectionCriteria(FieldCriteria.buildLessCriteria(attribute, value, getUserAlias(attribute)));
}
/**
@@ -628,7 +674,9 @@
*/
public void addIsNull(String attribute)
{
- addSelectionCriteria(ValueCriteria.buildNullCriteria(attribute, getAlias()));
+ // PAW
+ //addSelectionCriteria(ValueCriteria.buildNullCriteria(attribute, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildNullCriteria(attribute, getUserAlias(attribute)));
}
/**
@@ -640,7 +688,9 @@
*/
public void addColumnIsNull(String column)
{
- SelectionCriteria c = ValueCriteria.buildNullCriteria(column, getAlias());
+ // PAW
+ //SelectionCriteria c = ValueCriteria.buildNullCriteria(column, getAlias());
+ SelectionCriteria c = ValueCriteria.buildNullCriteria(column, getUserAlias(column));
c.setTranslateAttribute(false);
addSelectionCriteria(c);
}
@@ -653,7 +703,9 @@
*/
public void addNotNull(String attribute)
{
- addSelectionCriteria(ValueCriteria.buildNotNullCriteria(attribute, getAlias()));
+ // PAW
+ //addSelectionCriteria(ValueCriteria.buildNotNullCriteria(attribute, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildNotNullCriteria(attribute, getUserAlias(attribute)));
}
/**
@@ -665,7 +717,9 @@
*/
public void addColumnNotNull(String column)
{
- SelectionCriteria c = ValueCriteria.buildNotNullCriteria(column, getAlias());
+ // PAW
+ // SelectionCriteria c = ValueCriteria.buildNotNullCriteria(column, getAlias());
+ SelectionCriteria c = ValueCriteria.buildNotNullCriteria(column, getUserAlias(column));
c.setTranslateAttribute(false);
addSelectionCriteria(c);
}
@@ -680,7 +734,9 @@
*/
public void addBetween(Object attribute, Object value1, Object value2)
{
- addSelectionCriteria(ValueCriteria.buildBeweenCriteria(attribute, value1, value2, getAlias()));
+ // PAW
+ // addSelectionCriteria(ValueCriteria.buildBeweenCriteria(attribute, value1, value2, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildBeweenCriteria(attribute, value1, value2, getUserAlias(attribute)));
}
/**
@@ -693,7 +749,9 @@
*/
public void addNotBetween(Object attribute, Object value1, Object value2)
{
- addSelectionCriteria(ValueCriteria.buildNotBeweenCriteria(attribute, value1, value2, getAlias()));
+ // PAW
+ // addSelectionCriteria(ValueCriteria.buildNotBeweenCriteria(attribute, value1, value2, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildNotBeweenCriteria(attribute, value1, value2, getUserAlias(attribute)));
}
/**
@@ -784,7 +842,9 @@
*/
public void addIn(Object attribute, Query subQuery)
{
- addSelectionCriteria(ValueCriteria.buildInCriteria(attribute, subQuery, getAlias()));
+ // PAW
+ // addSelectionCriteria(ValueCriteria.buildInCriteria(attribute, subQuery, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildInCriteria(attribute, subQuery, getUserAlias(attribute)));
}
/**
@@ -794,7 +854,9 @@
*/
public void addNotIn(String attribute, Query subQuery)
{
- addSelectionCriteria(ValueCriteria.buildNotInCriteria(attribute, subQuery, getAlias()));
+ // PAW
+ // addSelectionCriteria(ValueCriteria.buildNotInCriteria(attribute, subQuery, getAlias()));
+ addSelectionCriteria(ValueCriteria.buildNotInCriteria(attribute, subQuery, getUserAlias(attribute)));
}
/**
@@ -969,38 +1031,124 @@
}
}
- /**
- * @return String
- */
- public String getAlias()
- {
- return m_alias;
- }
-
- /**
- * Sets the alias. Empty String is regarded as null.
- * @param alias The alias to set
- */
- public void setAlias(String alias)
- {
- if (alias == null || alias.trim().equals(""))
- {
- m_alias = null;
- }
- else
- {
- m_alias = alias;
- }
+ /**
+ * @return String
+ */
+ public String getAlias()
+ {
+ return m_alias;
+ }
+
+ /**
+ * @return String
+ */
+ // PAW
+ public UserAlias getUserAlias()
+ {
+ return m_userAlias;
+ }
+
+ // PAW
+ /**
+ * Retrieves or if necessary, creates a user alias to be used
+ * by a child criteria
+ * @param userAlias The alias to set
+ */
+ private UserAlias getUserAlias(Object attribute)
+ {
+ if (m_userAlias != null)
+ {
+ return m_userAlias;
+ }
+ if (!(attribute instanceof String))
+ {
+ return null;
+ }
+ if (m_alias == null)
+ {
+ return null;
+ }
+ if (m_aliasPath == null)
+ {
+ boolean allPathsAliased = true;
+ return new UserAlias(m_alias, (String)attribute, allPathsAliased);
+ }
+ return new UserAlias(m_alias, (String)attribute, m_aliasPath);
+ }
+
+
+ /**
+ * Sets the alias. Empty String is regarded as null.
+ * @param alias The alias to set
+ */
+ public void setAlias(String alias)
+ {
+ if (alias == null || alias.trim().equals(""))
+ {
+ m_alias = null;
+ }
+ else
+ {
+ m_alias = alias;
+ }
+
+ // propagate to SelectionCriteria,not to Criteria
+ for (int i = 0; i < m_criteria.size(); i++)
+ {
+ if (!(m_criteria.elementAt(i) instanceof Criteria))
+ {
+ ((SelectionCriteria) m_criteria.elementAt(i)).setAlias(m_alias);
+ }
+ }
+ }
+
+ // PAW
+ /**
+ * Sets the alias. Empty String is regarded as null.
+ * @param alias The alias to set
+ * @param aliasPath The path segment(s) to which the alias applies
+ */
+ public void setAlias(String alias, String aliasPath)
+ {
+ if (alias == null || alias.trim().equals(""))
+ {
+ m_alias = null;
+ }
+ else
+ {
+ m_alias = alias;
+ m_aliasPath = aliasPath;
+ }
+
+ // propagate to SelectionCriteria,not to Criteria
+ for (int i = 0; i < m_criteria.size(); i++)
+ {
+ if (!(m_criteria.elementAt(i) instanceof Criteria))
+ {
+ ((SelectionCriteria) m_criteria.elementAt(i)).setAlias(m_alias, aliasPath);
+ }
+ }
+ }
+
+ // PAW
+ /**
+ * Sets the alias using a userAlias object.
+ * @param userAlias The alias to set
+ */
+ public void setAlias(UserAlias userAlias)
+ {
+ m_alias = userAlias.getName();
+
+ // propagate to SelectionCriteria,not to Criteria
+ for (int i = 0; i < m_criteria.size(); i++)
+ {
+ if (!(m_criteria.elementAt(i) instanceof Criteria))
+ {
+ ((SelectionCriteria) m_criteria.elementAt(i)).setAlias(userAlias);
+ }
+ }
+ }
- // propagate to SelectionCriteria,not to Criteria
- for (int i = 0; i < m_criteria.size(); i++)
- {
- if (!(m_criteria.elementAt(i) instanceof Criteria))
- {
- ((SelectionCriteria) m_criteria.elementAt(i)).setAlias(m_alias);
- }
- }
- }
/**
* @return the query containing the criteria
1.9 +12 -7 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.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- NullCriteria.java 4 Apr 2004 23:53:36 -0000 1.8
+++ NullCriteria.java 22 May 2004 08:37:23 -0000 1.9
@@ -18,22 +18,27 @@
/**
* SelectionCriteria for 'is null' and 'is not null'
*
- * @author <a href="mailto:jbraeuchi@hotmail.com">Jakob Braeuchi</a>
+ * @author <a href="mailto:jbraeuchi@gmx.ch">Jakob Braeuchi</a>
* @version $Id$
*/
public class NullCriteria extends ValueCriteria
{
- NullCriteria(String anAttribute, String aClause, String anAlias)
- {
- super(anAttribute, null, aClause, anAlias);
- }
+ NullCriteria(String anAttribute, String aClause, String anAlias)
+ {
+ super(anAttribute, null, aClause, anAlias);
+ }
+
+ NullCriteria(String anAttribute, String aClause, UserAlias anAlias)
+ {
+ super(anAttribute, null, aClause, anAlias);
+ }
public String toString()
{
return getAttribute() + getClause();
}
- /*
+ /**
* @see SelectionCriteria#isBound()
*/
public boolean isBound()
1.17 +63 -11 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.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- SelectionCriteria.java 24 Apr 2004 08:25:37 -0000 1.16
+++ SelectionCriteria.java 22 May 2004 08:37:23 -0000 1.17
@@ -28,7 +28,7 @@
* @author DB Harvey-George
* @author Thomas Mahler
- * @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 SelectionCriteria implements java.io.Serializable
@@ -56,10 +56,11 @@
private boolean m_bound = false;
// BRJ: the criterion must be bound for the main class and for all extents
- private int m_numberOfExtentsToBind = 0; // BRJ:
+ private int m_numberOfExtentsToBind = 0;
private String m_alias = null;
-
+ private UserAlias m_userAlias = null;
+
// BRJ: indicate whether attribute name should be translated into column name
private boolean m_translateAttribute = true;
@@ -75,15 +76,40 @@
*/
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 !");
- }
+ 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_bound = !isBindable();
this.m_alias = alias;
+ this.m_userAlias = m_alias == null ? null : new UserAlias(m_alias, (String)getAttribute(), true);
+ }
+
+ /**
+ * Constructor declaration
+ *
+ * @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 userAlias userAlias to link anAttribute to
+ * @param dummy used so that subclass constructors calling with null
+ * parameters have an unambiguous signature
+ */
+ SelectionCriteria(Object anAttribute, Object aValue, UserAlias aUserAlias)
+ {
+ 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_bound = !isBindable();
+ this.m_userAlias = aUserAlias;
+ this.m_alias = m_userAlias == null ? null : m_userAlias.getName();
}
/**
@@ -186,14 +212,42 @@
}
/**
+ * Sets the alias. By default the entire attribute path participates in the alias
+ * @param alias The name of the alias to set
+ */
+ public void setAlias(String alias)
+ {
+ m_alias = alias;
+ String attributePath = (String)getAttribute();
+ boolean allPathsAliased = true;
+ m_userAlias = new UserAlias(alias, attributePath, allPathsAliased);
+
+ }
+
+ /**
* Sets the alias.
* @param alias The alias to set
*/
- public void setAlias(String alias)
+ public void setAlias(String alias, String aliasPath)
{
m_alias = alias;
+ m_userAlias = new UserAlias(alias, (String)getAttribute(), aliasPath);
+ }
+
+ /**
+ * Sets the alias using a userAlias object.
+ * @param userAlias The alias to set
+ */
+ public void setAlias(UserAlias userAlias)
+ {
+ m_alias = userAlias.getName();
+ m_userAlias = userAlias;
}
+ public UserAlias getUserAlias()
+ {
+ return m_userAlias;
+ }
/**
* @return true if attribute name should be translated into column name
*/
@@ -243,7 +297,6 @@
* A Map containing hints about what Class to be used for what path segment
* @return Returns a Map
*/
- // PAW
public Map getPathClasses()
{
return getCriteria().getPathClasses();
@@ -262,5 +315,4 @@
return getCriteria().getClassesForPath(aPath);
}
-
}
1.9 +24 -9 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.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- FieldCriteria.java 4 Apr 2004 23:53:36 -0000 1.8
+++ FieldCriteria.java 22 May 2004 08:37:23 -0000 1.9
@@ -18,37 +18,49 @@
/**
* Abstract superclass for Criteria using a field to compare with
*
- * @author <a href="mailto:jbraeuchi@hotmail.com">Jakob Braeuchi</a>
+ * @author <a href="mailto:jbraeuchi@gmx.ch">Jakob Braeuchi</a>
* @version $Id$
*/
public class FieldCriteria extends SelectionCriteria
{
- static FieldCriteria buildEqualToCriteria(Object anAttribute, Object aValue, String anAlias)
+ // PAW
+// static FieldCriteria buildEqualToCriteria(Object anAttribute, Object aValue, String anAlias)
+ static FieldCriteria buildEqualToCriteria(Object anAttribute, Object aValue, UserAlias anAlias)
{
return new FieldCriteria(anAttribute, aValue, EQUAL, anAlias);
}
- static FieldCriteria buildNotEqualToCriteria(Object anAttribute, Object aValue, String anAlias)
+ // PAW
+// static FieldCriteria buildNotEqualToCriteria(Object anAttribute, Object aValue, String anAlias)
+ static FieldCriteria buildNotEqualToCriteria(Object anAttribute, Object aValue, UserAlias anAlias)
{
return new FieldCriteria(anAttribute, aValue, NOT_EQUAL, anAlias);
}
- static FieldCriteria buildGreaterCriteria(Object anAttribute, Object aValue, String anAlias)
+ // PAW
+// static FieldCriteria buildGreaterCriteria(Object anAttribute, Object aValue, String anAlias)
+ static FieldCriteria buildGreaterCriteria(Object anAttribute, Object aValue, UserAlias anAlias)
{
return new FieldCriteria(anAttribute, aValue,GREATER, anAlias);
}
- static FieldCriteria buildNotGreaterCriteria(Object anAttribute, Object aValue, String anAlias)
+ // PAW
+// static FieldCriteria buildNotGreaterCriteria(Object anAttribute, Object aValue, String anAlias)
+ static FieldCriteria buildNotGreaterCriteria(Object anAttribute, Object aValue, UserAlias anAlias)
{
return new FieldCriteria(anAttribute, aValue, NOT_GREATER, anAlias);
}
- static FieldCriteria buildLessCriteria(Object anAttribute, Object aValue, String anAlias)
+ // PAW
+// static FieldCriteria buildLessCriteria(Object anAttribute, Object aValue, String anAlias)
+ static FieldCriteria buildLessCriteria(Object anAttribute, Object aValue, UserAlias anAlias)
{
return new FieldCriteria(anAttribute, aValue, LESS, anAlias);
}
- static FieldCriteria buildNotLessCriteria(Object anAttribute, Object aValue, String anAlias)
+ // PAW
+// static FieldCriteria buildNotLessCriteria(Object anAttribute, Object aValue, String anAlias)
+ static FieldCriteria buildNotLessCriteria(Object anAttribute, Object aValue, UserAlias anAlias)
{
return new FieldCriteria(anAttribute, aValue, NOT_LESS, anAlias);
}
@@ -65,7 +77,9 @@
* @param negative criteria is negated (ie NOT LIKE instead of LIKE)
* @param alias use alias to link anAttribute to
*/
- FieldCriteria(Object anAttribute, Object aValue, String aClause, String alias)
+ // PAW
+// FieldCriteria(Object anAttribute, Object aValue, String aClause, String alias)
+ FieldCriteria(Object anAttribute, Object aValue, String aClause, UserAlias alias)
{
super(anAttribute, aValue, alias);
m_clause = aClause;
@@ -103,3 +117,4 @@
return m_clause;
}
}
+
1.11 +11 -6 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.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- InCriteria.java 4 Apr 2004 23:53:36 -0000 1.10
+++ InCriteria.java 22 May 2004 08:37:23 -0000 1.11
@@ -20,15 +20,20 @@
/**
* SelectionCriteria for 'in (a,b,c..)'
*
- * @author <a href="mailto:jbraeuchi@hotmail.com">Jakob Braeuchi</a>
+ * @author <a href="mailto:jbraeuchi@gmx.ch">Jakob Braeuchi</a>
* @version $Id$
*/
public class InCriteria extends ValueCriteria
{
- InCriteria(Object anAttribute, Object aValue, String aClause, String anAlias)
- {
- super(anAttribute, aValue, aClause, anAlias);
- }
+ InCriteria(Object anAttribute, Object aValue, String aClause, String anAlias)
+ {
+ super(anAttribute, aValue, aClause, anAlias);
+ }
+
+ InCriteria(Object anAttribute, Object aValue, String aClause, UserAlias anAlias)
+ {
+ super(anAttribute, aValue, aClause, anAlias);
+ }
/**
* @see org.apache.ojb.broker.query.SelectionCriteria#isBindable()
1.8 +154 -84 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.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ValueCriteria.java 4 Apr 2004 23:53:36 -0000 1.7
+++ ValueCriteria.java 22 May 2004 08:37:23 -0000 1.8
@@ -24,94 +24,164 @@
*/
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 LikeCriteria(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 ValueCriteria buildEqualToCriteria(Object anAttribute, Object aValue, String anAlias)
+ {
+ return new ValueCriteria(anAttribute, aValue, EQUAL, anAlias);
+ }
+
+ static ValueCriteria buildEqualToCriteria(Object anAttribute, Object aValue, UserAlias 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 buildNotEqualToCriteria(Object anAttribute, Object aValue, UserAlias 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 buildGreaterCriteria(Object anAttribute, Object aValue, UserAlias 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 buildNotGreaterCriteria(Object anAttribute, Object aValue, UserAlias 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 buildLessCriteria(Object anAttribute, Object aValue, UserAlias 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 buildNotLessCriteria(Object anAttribute, Object aValue, UserAlias anAlias)
+ {
+ return new ValueCriteria(anAttribute, aValue, NOT_LESS, anAlias);
+ }
+
+ static ValueCriteria buildLikeCriteria(Object anAttribute, Object aValue, String anAlias)
+ {
+ return new LikeCriteria(anAttribute, aValue, LIKE, anAlias);
+ }
+ static ValueCriteria buildLikeCriteria(Object anAttribute, Object aValue, UserAlias anAlias)
+ {
+ return new LikeCriteria(anAttribute, aValue, LIKE, anAlias);
+ }
+
+ static ValueCriteria buildNotLikeCriteria(Object anAttribute, Object aValue, String anAlias)
+ {
+ return new ValueCriteria(anAttribute, aValue, NOT_LIKE, anAlias);
+ }
+ static ValueCriteria buildNotLikeCriteria(Object anAttribute, Object aValue, UserAlias 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 buildInCriteria(Object anAttribute, Object aValue, UserAlias 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 InCriteria buildNotInCriteria(Object anAttribute, Object aValue, UserAlias 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 buildNullCriteria(String anAttribute, UserAlias anAlias)
+ {
+ return new NullCriteria(anAttribute, IS_NULL, anAlias);
+ }
+
+ static NullCriteria buildNotNullCriteria(String anAttribute, String anAlias)
+ {
+ return new NullCriteria(anAttribute, NOT_IS_NULL, anAlias);
+ }
+ static NullCriteria buildNotNullCriteria(String anAttribute, UserAlias 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);
- }
+ static BetweenCriteria buildBeweenCriteria(Object anAttribute, Object aValue1, Object aValue2, String anAlias)
+ {
+ return new BetweenCriteria(anAttribute, aValue1, aValue2, BETWEEN, anAlias);
+ }
+ static BetweenCriteria buildBeweenCriteria(Object anAttribute, Object aValue1, Object aValue2, UserAlias 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);
+ }
+ static BetweenCriteria buildNotBeweenCriteria(Object anAttribute, Object aValue1, Object aValue2, UserAlias 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 aClause the SQL compare clause (ie LIKE, = , IS NULL)
- * @param anAlias use alias to link anAttribute to
- */
- ValueCriteria(Object anAttribute, Object aValue, String aClause, String anAlias)
- {
- super(anAttribute, aValue, anAlias);
- m_clause = aClause;
- }
+ /**
+ * Constructor declaration
+ *
+ * @param anAttribute column- or fieldName
+ * @param aValue the value to compare with
+ * @param aClause the SQL compare clause (ie LIKE, = , IS NULL)
+ * @param anAlias use alias to link anAttribute to
+ */
+ ValueCriteria(Object anAttribute, Object aValue, String aClause, String anAlias)
+ {
+ super(anAttribute, aValue, anAlias);
+ m_clause = aClause;
+ }
-
- /* (non-Javadoc)
+ /**
+ * Constructor declaration
+ *
+ * @param anAttribute column- or fieldName
+ * @param aValue the value to compare with
+ * @param aClause the SQL compare clause (ie LIKE, = , IS NULL)
+ * @param aUserAliass userAlias to link anAttribute to
+ */
+ ValueCriteria(Object anAttribute, Object aValue, String aClause, UserAlias aUserAlias)
+ {
+ super(anAttribute, aValue, aUserAlias);
+ m_clause = aClause;
+ }
+
+ /**
* @see org.apache.ojb.broker.query.SelectionCriteria#getClause()
*/
public String getClause()
1.9 +22 -11 db-ojb/src/java/org/apache/ojb/broker/query/LikeCriteria.java
Index: LikeCriteria.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/query/LikeCriteria.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- LikeCriteria.java 4 Apr 2004 23:53:36 -0000 1.8
+++ LikeCriteria.java 22 May 2004 08:37:23 -0000 1.9
@@ -34,16 +34,27 @@
public class LikeCriteria extends ValueCriteria
{
- /**
- * @param anAttribute
- * @param aValue
- * @param aClause
- * @param anAlias
- */
- public LikeCriteria(Object anAttribute, Object aValue, String aClause, String anAlias)
- {
- super(anAttribute, generateSQLSearchPattern((String) aValue), aClause, anAlias);
- }
+ /**
+ * @param anAttribute
+ * @param aValue
+ * @param aClause
+ * @param anAlias
+ */
+ public LikeCriteria(Object anAttribute, Object aValue, String aClause, String anAlias)
+ {
+ super(anAttribute, generateSQLSearchPattern((String) aValue), aClause, anAlias);
+ }
+
+ /**
+ * @param anAttribute
+ * @param aValue
+ * @param aClause
+ * @param aUserAlias
+ */
+ public LikeCriteria(Object anAttribute, Object aValue, String aClause, UserAlias anAlias)
+ {
+ super(anAttribute, generateSQLSearchPattern((String) aValue), aClause, anAlias);
+ }
/**
* The Character used for Escaping Wildcards
1.1 db-ojb/src/java/org/apache/ojb/broker/query/UserAlias.java
Index: UserAlias.java
===================================================================
package org.apache.ojb.broker.query;
/* Copyright 2002-2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.ojb.broker.util.logging.Logger;
import org.apache.ojb.broker.util.logging.LoggerFactory;
/**
* This class is used to specify the path segments of a Criteria
* that should have associated table aliases. Previously, the default
* behaviour was that all path segments participated in the alias
*
* @author <a href="mailto:philip.warrick@mcgill.ca">Phil Warrick</a>
*/
public class UserAlias
{
private Map m_mapping = new HashMap();
private String m_name = null;
private String m_attributePath = null;
private boolean m_allPathsAliased = false;
private Logger m_logger = LoggerFactory.getLogger(UserAlias.class);
/**
* Constructor declaration
*
* @param name the name of the alias
* @param attributePath the full path of the SelectionCriteria attribute
*/
public UserAlias(String name)
{
m_name = name;
}
/**
* Constructor declaration
*
* @param name the name of the alias
* @param attributePath the full path of the SelectionCriteria attribute
* @param aliasPath the portion of the attributePath which should be aliased.
* This should be unambiguous. If ambiguous portions need aliasing (e.g.
* B.C in allAs.B.C.B.C), use add() instead
*/
public UserAlias(String name, String attributePath, String aliasPath)
{
m_name = name;
m_attributePath = attributePath;
if (attributePath.lastIndexOf(aliasPath) == -1)
{
m_logger.warn("aliasPath should be a substring of attributePath");
}
initMapping(attributePath, aliasPath);
}
/**
* Constructor declaration
*
* @param name the name of the alias
* @param attributePath the full path of the SelectionCriteria attribute
* @param allPathsAliased indicates that all path portions of attributePath
* should be aliased (previously was the default)
*/
public UserAlias(String name, String attributePath, boolean allPathsAliased)
{
m_name = name;
m_attributePath = attributePath;
m_allPathsAliased = allPathsAliased;
}
/**
* generates the mapping from the aliasPath
* @param aliasPath the portion of attributePath which should be aliased
*
*/
private void initMapping(String attributePath, String aliasPath)
{
Iterator aliasSegmentItr = pathToSegments(aliasPath).iterator();
String currPath = "";
String separator = "";
while (aliasSegmentItr.hasNext())
{
currPath = currPath + separator + (String) aliasSegmentItr.next();
int beginIndex = attributePath.indexOf(currPath);
if (beginIndex == -1)
{
break;
}
int endIndex = beginIndex + currPath.length();
m_mapping.put(attributePath.substring(0, endIndex), m_name);
separator = ".";
}
}
private ArrayList pathToSegments(String path)
{
ArrayList segments = new ArrayList();
int sp = path.indexOf('.');
while (sp != -1)
{
segments.add(path.substring(0, sp));
path = path.substring(sp + 1);
sp = path.indexOf('.');
}
segments.add(path);
return segments;
}
/**
* Returns the name of this alias
*/
public String getName()
{
return m_name;
}
/**
* Returns the name of this alias if path has been added
* to the aliased portions of attributePath
*
* @param path the path to test for inclusion in the alias
*/
public String getAlias(String path)
{
if (m_allPathsAliased && m_attributePath.lastIndexOf(path) != -1)
{
return m_name;
}
Object retObj = m_mapping.get(path);
if (retObj != null)
{
return (String) retObj;
}
return null;
}
/**
* Adds a path to the aliased paths
*
* @param path the path to add to the aliased paths
*/
public void add(String path)
{
m_mapping.put(path, m_name);
}
}
1.74 +28 -57 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.73
retrieving revision 1.74
diff -u -r1.73 -r1.74
--- SqlQueryStatement.java 6 May 2004 19:46:40 -0000 1.73
+++ SqlQueryStatement.java 22 May 2004 08:37:24 -0000 1.74
@@ -152,7 +152,7 @@
* @param pathClasses
* @return ColumnInfo
*/
- protected AttributeInfo getAttributeInfo(String attr, boolean useOuterJoins, String aUserAlias, Map pathClasses)
+ protected AttributeInfo getAttributeInfo(String attr, boolean useOuterJoins, UserAlias aUserAlias, Map pathClasses)
{
AttributeInfo result = new AttributeInfo();
TableAlias tableAlias = null;
@@ -192,7 +192,7 @@
/**
* pathName might be an alias, so check this first
*/
- tableAlias = getTableAlias(null, useOuterJoins, pathName, null, pathClasses);
+ tableAlias = getTableAlias(pathName, useOuterJoins, new UserAlias(pathName, pathName, pathName), null, pathClasses);
}
if (tableAlias != null)
@@ -421,7 +421,7 @@
* @param buf
* @return
*/
- protected boolean appendColName(String attr, boolean useOuterJoins, String aUserAlias, StringBuffer buf)
+ protected boolean appendColName(String attr, boolean useOuterJoins, UserAlias aUserAlias, StringBuffer buf)
{
// PAW: is this correct for pathClasses ?
AttributeInfo attrInfo = getAttributeInfo(attr, useOuterJoins, aUserAlias, getQuery().getPathClasses());
@@ -445,7 +445,7 @@
* @param buf
* @return
*/
- protected boolean appendColName(String attr, String attrAlias, boolean useOuterJoins, String aUserAlias,
+ protected boolean appendColName(String attr, String attrAlias, boolean useOuterJoins, UserAlias aUserAlias,
StringBuffer buf)
{
// PAW: is this correct for pathClasses ?
@@ -664,7 +664,7 @@
if (c.isTranslateField())
{
- appendColName((String) c.getValue(), false, c.getAlias(), buf);
+ appendColName((String) c.getValue(), false, c.getUserAlias(), buf);
}
else
{
@@ -827,7 +827,7 @@
return;
}
- AttributeInfo attrInfo = getAttributeInfo((String) c.getAttribute(), false, c.getAlias(), c.getPathClasses());
+ AttributeInfo attrInfo = getAttributeInfo((String) c.getAttribute(), false, c.getUserAlias(), c.getPathClasses());
TableAlias alias = attrInfo.tableAlias;
if (alias != null)
@@ -924,7 +924,7 @@
* must not add new join, but use the value of foreign key
* @param pathClasses the hints
*/
- private TableAlias getTableAlias(String aPath, boolean useOuterJoins, String aUserAlias, String[] fieldRef, Map pathClasses)
+ private TableAlias getTableAlias(String aPath, boolean useOuterJoins, UserAlias aUserAlias, String[] fieldRef, Map pathClasses)
{
TableAlias curr, prev, indirect;
String attr, attrPath = null;
@@ -937,7 +937,8 @@
boolean outer = useOuterJoins;
int pathLength;
- curr = getTableAliasForPath(aPath, aUserAlias);
+ String pathAlias = aUserAlias == null ? null : aUserAlias.getAlias(aPath);
+ curr = getTableAliasForPath(aPath, pathAlias);
if (curr != null)
{
@@ -1000,12 +1001,11 @@
else
{
String mnAttrPath = attrPath + "*";
- String mnPath = aPath + "*";
String mnUserAlias = (aUserAlias == null ? null : aUserAlias + "*");
- indirect = getTableAliasForPath(mnAttrPath, mnUserAlias, mnPath);
+ indirect = getTableAliasForPath(mnAttrPath, mnUserAlias);
if (indirect == null)
{
- indirect = createTableAlias(cod.getIndirectionTable(), mnAttrPath, mnUserAlias, mnPath);
+ indirect = createTableAlias(cod.getIndirectionTable(), mnAttrPath, mnUserAlias);
// we need two Joins for m:n
// 1.) prev class to indirectionTable
@@ -1023,7 +1023,7 @@
{
// must be n:1 or 1:1
cld = getItemClassDescriptor(ord, attrPath, pathClasses);
-
+
// BRJ : if ord is taken from 'super' we have to change prev accordingly
if (!prev.cld.equals(ord.getClassDescriptor()))
{
@@ -1052,12 +1052,13 @@
}
}
- curr = getTableAliasForPath(attrPath, aUserAlias, aPath);
+ pathAlias = aUserAlias == null ? null : aUserAlias.getAlias(attrPath);
+ curr = getTableAliasForPath(attrPath, pathAlias);
if (curr == null)
{
List hintClasses = (List) pathClasses.get(aPath);
- curr = createTableAlias(cld, attrPath, aUserAlias, aPath, hintClasses);
+ curr = createTableAlias(cld, attrPath, pathAlias, hintClasses);
outer = outer || (curr.cld == prev.cld) || curr.hasExtents() || useOuterJoins;
addJoin(prev, prevKeys, curr, keys, outer, attr);
@@ -1068,6 +1069,8 @@
prev = curr;
}
+ // PAW
+ m_logger.debug("Result of getTableAlias(): " + curr);
return curr;
}
@@ -1172,13 +1175,11 @@
* @param aCld
* @param aPath
* @param aUserAlias
- * @param anOriginalPath
* @param hints a List os Class objects to be used as hints for path expressions
* @return TableAlias
*
*/
- private TableAlias createTableAlias(ClassDescriptor aCld, String aPath, String aUserAlias, String anOriginalPath,
- List hints)
+ private TableAlias createTableAlias(ClassDescriptor aCld, String aPath, String aUserAlias, List hints)
{
if (aUserAlias == null)
{
@@ -1194,7 +1195,7 @@
* Create new TableAlias for path
* @param cld the class descriptor for the TableAlias
* @param path the path from the target table of the query to this TableAlias.
- * @@param hints a List of Class objects to be used on path expressions
+ * @param hints a List of Class objects to be used on path expressions
*/
private TableAlias createTableAlias(ClassDescriptor cld, List hints, String path)
{
@@ -1210,7 +1211,6 @@
alias = new TableAlias(cld, aliasName, lookForExtents, hints);
m_pathToAlias.put(path, alias);
-// m_cldToAlias.put(cld, alias);
return alias;
}
@@ -1220,10 +1220,9 @@
* @param aTable
* @param aPath
* @param aUserAlias
- * @param anOriginalPath
* @return TableAlias
*/
- private TableAlias createTableAlias(String aTable, String aPath, String aUserAlias, String anOriginalPath)
+ private TableAlias createTableAlias(String aTable, String aPath, String aUserAlias)
{
if (aUserAlias == null)
{
@@ -1252,6 +1251,8 @@
String aliasName = String.valueOf(getAliasChar()) + m_aliasCount++; // + m_pathToAlias.size();
alias = new TableAlias(table, aliasName);
m_pathToAlias.put(path, alias);
+ // PAW
+ m_logger.debug("createTableAlias2: path: " + path + " tableAlias: " + alias);
return alias;
}
@@ -1294,44 +1295,13 @@
}
}
- /**
- * Answer the TableAlias for aPath or aUserAlias
- * @param aPath
- * @param aUserAlias
- * @param anOriginalPath
- * @return TableAlias, null if none
- */
- private TableAlias getTableAliasForPath(String aPath, String aUserAlias, String anOriginalPath)
- {
- // BRJ: solves problem with multi-segment-path
- // if (aUserAlias == null || !anOriginalPath.equals(aPath))
- if (aUserAlias == null)
- {
- return getTableAliasForPath(aPath);
- }
- else
- {
- return getTableAliasForPath(aUserAlias + aPath);
- }
- }
-
/**
* TODO: add super ClassDescriptor
* answer the ClassDescriptor for itemClass for an ObjectReferenceDescriptor
* check optional hint;
*/
private ClassDescriptor getItemClassDescriptor(ObjectReferenceDescriptor ord, String attr, Map pathClasses)
- {
- /* PAW
- List itemClasses = null;
- Query q = getQuery();
-
- if (q instanceof QueryByCriteria)
- {
- itemClasses = ((QueryByCriteria) q).getClassesForPath(attr);
- }
- */
-
+ {
List itemClasses = (List)pathClasses.get(attr);
if (itemClasses == null)
@@ -1580,12 +1550,13 @@
// BRJ: do not build join tree for subQuery attribute
if (c.getAttribute() != null && c.getAttribute() instanceof String)
{
- buildJoinTreeForColumn((String) c.getAttribute(), useOuterJoin, c.getAlias(), c.getPathClasses());
+ //buildJoinTreeForColumn((String) c.getAttribute(), useOuterJoin, c.getAlias(), c.getPathClasses());
+ buildJoinTreeForColumn((String) c.getAttribute(), useOuterJoin, c.getUserAlias(), c.getPathClasses());
}
if (c instanceof FieldCriteria)
{
FieldCriteria cc = (FieldCriteria) c;
- buildJoinTreeForColumn((String) cc.getValue(), useOuterJoin, c.getAlias(), c.getPathClasses());
+ buildJoinTreeForColumn((String) cc.getValue(), useOuterJoin, c.getUserAlias(), c.getPathClasses());
}
}
}
@@ -1596,7 +1567,7 @@
* functions and the last segment are removed
* ie: avg(accounts.amount) -> accounts
*/
- private void buildJoinTreeForColumn(String aColName, boolean useOuterJoin, String aUserAlias, Map pathClasses)
+ private void buildJoinTreeForColumn(String aColName, boolean useOuterJoin, UserAlias aUserAlias, Map pathClasses)
{
String pathName = SqlHelper.cleanPath(aColName);
int sepPos = pathName.lastIndexOf(".");
@@ -1779,7 +1750,7 @@
boolean useHintsOnExtents = false;
// BRJ: store alias map of in enclosing class
- m_cldToAlias.put(aCld, this);
+ SqlQueryStatement.this.m_cldToAlias.put(aCld, this);
//LEANDRO: use hints
if (hints != null && hints.size() > 0)
1.2 +390 -10 db-ojb/src/test/org/apache/ojb/broker/PathTest.java
Index: PathTest.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/PathTest.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PathTest.java 24 Apr 2004 08:25:38 -0000 1.1
+++ PathTest.java 22 May 2004 08:37:24 -0000 1.2
@@ -15,6 +15,7 @@
import org.apache.ojb.broker.query.Query;
import org.apache.ojb.broker.query.QueryByCriteria;
import org.apache.ojb.broker.query.QueryFactory;
+import org.apache.ojb.broker.query.UserAlias;
public class PathTest extends TestCase
{
@@ -107,11 +108,13 @@
broker.beginTransaction();
A a = new A(A_OFFSET);
broker.store(a);
+ System.out.println("A - " + a.getAAttrib());
for (int i = 0; i < NUM_B_PER_A; i++)
{
B b = new B(A_OFFSET + B_OFFSET * i);
b.setA(a);
broker.store(b);
+ System.out.println("\tB - " + b.getBAttrib());
for (int j = 0; j < NUM_C_PER_B; j++)
{
C c = new C(A_OFFSET + B_OFFSET * i + C_OFFSET * j);
@@ -120,6 +123,8 @@
c.setD(d);
broker.store(d);
broker.store(c);
+ System.out.println("\t\tC - " + c.getCAttrib());
+ System.out.println("\t\t\tD - " + d.getDAttrib());
}
for (int j = 0; j < NUM_C1_PER_B; j++)
{
@@ -130,6 +135,8 @@
c1.setC1Attrib(c1.getCAttrib() + 1);
broker.store(d);
broker.store(c1);
+ System.out.println("\t\tC1 - " + c1.getC1Attrib());
+ System.out.println("\t\t\tD - " + d.getDAttrib());
}
}
broker.commitTransaction();
@@ -140,40 +147,277 @@
Query query = QueryFactory.newQuery(A.class, crit);
Collection As = broker.getCollectionByQuery(query);
- assertEquals(As.size(), NUM_A);
+ assertEquals(NUM_A, As.size());
query = QueryFactory.newQuery(B.class, crit);
Collection Bs = broker.getCollectionByQuery(query);
int numB = NUM_A * NUM_B_PER_A;
- assertEquals(Bs.size(), numB);
+ assertEquals(numB, Bs.size());
query = QueryFactory.newQuery(C.class, crit);
Collection Cs = broker.getCollectionByQuery(query);
int numC = numB * (NUM_C_PER_B + NUM_C1_PER_B);
- assertEquals(Cs.size(), numC);
+ assertEquals(numC, Cs.size());
query = QueryFactory.newQuery(D.class, crit);
Collection Ds = broker.getCollectionByQuery(query);
int numD = numC * NUM_D_PER_C;
- assertEquals(Ds.size(), numD);
+ assertEquals(numD, Ds.size());
}
+// This is the result of the above population
+//
+// A - 10000
+// B - 10000
+// C - 10000
+// D - 10010
+// C - 10100
+// D - 10110
+// C1 - 10001
+// D - 10010
+// C1 - 10101
+// D - 10110
+// C1 - 10201
+// D - 10210
+// B - 11000
+// C - 11000
+// D - 11010
+// C - 11100
+// D - 11110
+// C1 - 11001
+// D - 11010
+// C1 - 11101
+// D - 11110
+// C1 - 11201
+// D - 11210
+// B - 12000
+// C - 12000
+// D - 12010
+// C - 12100
+// D - 12110
+// C1 - 12001
+// D - 12010
+// C1 - 12101
+// D - 12110
+// C1 - 12201
+// D - 12210
+// B - 13000
+// C - 13000
+// D - 13010
+// C - 13100
+// D - 13110
+// C1 - 13001
+// D - 13010
+// C1 - 13101
+// D - 13110
+// C1 - 13201
+// D - 13210
+
+ /*
+ * Find all Bs having a particular C1 (c1)
+ * Works
+ */
+ public void testPathClassOnSegment1() throws Exception
+ {
+ try
+ {
+ // c1 criteria
+ Criteria crit1 = new Criteria();
+ crit1.addEqualTo("cSet.c1Attrib", new Integer("10001"));
+ crit1.addPathClass("cSet", C1.class);
+
+ Query query = new QueryByCriteria(B.class, crit1);
+
+ Collection allBs = broker.getCollectionByQuery(query);
+
+ java.util.Iterator itr = allBs.iterator();
+
+ assertEquals(1, allBs.size());
+ System.out.println("testPathClassOnSegment1() iteration size:" + allBs.size());
+ while (itr.hasNext())
+ {
+ B b = (B) itr.next();
+ System.out.println("Found B: " + b.getId() + " " + b.getBAttrib());
+ }
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace(System.out);
+ fail("testPathClassOnSegment1: " + t.getMessage());
+ }
+ }
+
+ /*
+ * Find all As having a particular C1 (c1)
+ * Works
+ */
+ public void testPathClassOnSegment2() throws Exception
+ {
+ try
+ {
+ // c1 criteria
+ Criteria crit1 = new Criteria();
+ crit1.addEqualTo("bSet.cSet.c1Attrib", new Integer("10001"));
+ crit1.addPathClass("bSet.cSet", C1.class);
+
+ Query query = new QueryByCriteria(A.class, crit1);
+
+ Collection allAs = broker.getCollectionByQuery(query);
+
+ java.util.Iterator itr = allAs.iterator();
+
+ assertEquals(allAs.size(), 1);
+ System.out.println("testPathClassOnSegment2() iteration size:" + allAs.size());
+ while (itr.hasNext())
+ {
+ A a = (A) itr.next();
+ System.out.println("Found A: " + a.getId() + " " + a.getAAttrib());
+ }
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace(System.out);
+ fail("testPathClassOnSegment2: " + t.getMessage());
+ }
+ }
+
+ /*
+ * Find all Bs having a C with a particular D (d1)
+ * Works
+ */
+ public void testSingleAlias() throws Exception
+ {
+ try
+ {
+ // d1 criteria
+ Criteria crit1 = new Criteria();
+ crit1.setAlias("cToD1", "cSet"); // unnecessary, but its use should not
+ // cause incorrect results
+ crit1.addEqualTo("cSet.d.dAttrib", new Integer("10010"));
+
+ Query query = new QueryByCriteria(B.class, crit1);
+
+ Collection allBs = broker.getCollectionByQuery(query);
+
+ java.util.Iterator itr = allBs.iterator();
+
+ assertEquals(2, allBs.size());
+ System.out.println("testSingleAlias() iteration size:" + allBs.size());
+ while (itr.hasNext())
+ {
+ B b = (B) itr.next();
+ System.out.println("Found B: " + b.getId() + " " + b.getBAttrib());
+ }
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace(System.out);
+ fail("testSingleAlias: " + t.getMessage());
+ }
+ }
+
+ /*
+ * Find all Bs having any C with a particular D (d1) and any C with a particular D (d2)
+ * Works
+ */
+ public void testTwoAliasesTwoSegments() throws Exception
+ {
+ try
+ {
+ // d1 criteria
+ Criteria crit1 = new Criteria();
+ crit1.setAlias("cToD1", "cSet.d");
+ crit1.addEqualTo("cSet.d.dAttrib", new Integer("10010"));
+
+ // d2 criteria
+ Criteria crit2 = new Criteria();
+ crit2.setAlias("cToD2", "cSet.d");
+ crit2.addEqualTo("cSet.d.dAttrib", new Integer("10110"));
+
+ crit1.addAndCriteria(crit2);
+
+ Query query = new QueryByCriteria(B.class, crit1);
+
+ Collection allBs = broker.getCollectionByQuery(query);
+
+ java.util.Iterator itr = allBs.iterator();
+
+ assertEquals(4, allBs.size());
+ System.out.println("testTwoAliasesTwoSegments() iteration size:" + allBs.size());
+ while (itr.hasNext())
+ {
+ B b = (B) itr.next();
+ System.out.println("Found B: " + b.getId() + " " + b.getBAttrib());
+ }
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace(System.out);
+ fail("testTwoAliasesTwoSegments: " + t.getMessage());
+ }
+ }
+
+ /*
+ * Find all As having any B with any C with a particular D (d1) and any C with a particular D (d2)
+ * Works
+ */
+ public void testTwoAliasesThreeSegments() throws Exception
+ {
+ try
+ {
+ // d1 criteria
+ Criteria crit1 = new Criteria();
+ crit1.addEqualTo("bSet.cSet.d.dAttrib", new Integer("10010"));
+ crit1.setAlias("bToCToD1", "cSet.d");
+
+ // d2 criteria
+ Criteria crit2 = new Criteria();
+ crit2.addEqualTo("bSet.cSet.d.dAttrib", new Integer("10110"));
+ crit2.setAlias("bToCToD2", "cSet.d");
+
+ crit1.addAndCriteria(crit2);
+
+ boolean isDistinct = true;
+ Query query = new QueryByCriteria(A.class, crit1, true);
+
+ Collection allAs = broker.getCollectionByQuery(query);
+
+ java.util.Iterator itr = allAs.iterator();
+
+ assertEquals(1, allAs.size());
+ System.out.println("testTwoAliasesThreeSegments() iteration size:" + allAs.size());
+ while (itr.hasNext())
+ {
+ A a = (A) itr.next();
+ System.out.println("Found A: " + a.getId() + " " + a.getAAttrib());
+ }
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace(System.out);
+ fail("testTwoAliasesThreeSegments: " + t.getMessage());
+ }
+ }
+
+ /*
+ * Find all Bs having a particular C (c) and a particular C1 (c1)
+ */
public void testPathClassPerCriteria() throws Exception
{
try
{
- // one EDBranch
+ // C criteria
Criteria crit1 = new Criteria();
- crit1.setAlias("alias1");
crit1.addEqualTo("cSet.cAttrib", new Integer("10200"));
crit1.addPathClass("cSet", C.class);
+ crit1.setAlias("alias1");
- // one EDLeaf
+ // C1 criteria (subclass of C)
Criteria crit2 = new Criteria();
- crit2.setAlias("alias2");
crit2.addEqualTo("cSet.c1Attrib", new Integer("10001"));
crit2.addPathClass("cSet", C1.class);
+ crit2.setAlias("alias2");
crit1.addAndCriteria(crit2);
@@ -183,7 +427,7 @@
java.util.Iterator itr = allBs.iterator();
- assertEquals(allBs.size(), 1);
+ assertEquals(1, allBs.size());
System.out.println("testPathClassPerCriteria() iteration size:" + allBs.size());
while (itr.hasNext())
{
@@ -197,7 +441,143 @@
fail("testPathClassPerCriteria: " + t.getMessage());
}
}
-
+
+ /*
+ * Find all Bs having a particular C1 (c1_a) and a particular C3 (c1_b)
+ * Works
+ */
+ public void testPathClassPerQuery() throws Exception
+ {
+ try
+ {
+ // c1_a criteria
+ Criteria crit1 = new Criteria();
+ crit1.addEqualTo("cSet.c1Attrib", new Integer("12001"));
+ //crit1.addPathClass("cSet", C1.class); // can use 1 query setting instead
+ crit1.setAlias("alias1");
+
+ // c2_b criteria
+ Criteria crit2 = new Criteria();
+ crit2.addEqualTo("cSet.c1Attrib", new Integer("12101"));
+ //crit2.addPathClass("cSet", C1.class); // can use 1 query setting instead
+ crit2.setAlias("alias2");
+
+ crit1.addAndCriteria(crit2);
+
+ QueryByCriteria query = new QueryByCriteria(B.class, crit1);
+ query.addPathClass("cSet", C1.class);
+
+ Collection allBs = broker.getCollectionByQuery(query);
+
+ java.util.Iterator itr = allBs.iterator();
+
+ assertEquals(1, allBs.size());
+ System.out.println("testPathClassPerQuery() iteration size:" + allBs.size());
+ while (itr.hasNext())
+ {
+ B b = (B) itr.next();
+ System.out.println("Found B: " + b.getId() + " " + b.getBAttrib());
+ }
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace(System.out);
+ fail("testPathClassPerQuery: " + t.getMessage());
+ }
+ }
+
+ /*
+ * Find all As having a B with both a particular C-D combination and
+ * another particular C-D combination
+ */
+ public void testThreeSegmentsAliasOnSegment2And3() throws Exception
+ {
+ try
+ {
+ // d1 criteria
+ Criteria crit1 = new Criteria();
+ crit1.addEqualTo("bSet.cSet.d.dAttrib", new Integer("10010"));
+ crit1.setAlias("bToCToD1", "cSet.d");
+
+ // d2 criteria
+ Criteria crit2 = new Criteria();
+ crit2.addEqualTo("bSet.cSet.d.dAttrib", new Integer("10110"));
+ crit2.setAlias("bToCToD2", "cSet.d");
+
+ crit1.addAndCriteria(crit2);
+
+ boolean isDistinct = true;
+ Query query = new QueryByCriteria(A.class, crit1, isDistinct);
+
+ Collection allAs = broker.getCollectionByQuery(query);
+
+ java.util.Iterator itr = allAs.iterator();
+
+ assertEquals(1, allAs.size());
+ System.out.println("testThreeSegmentsAliasOnSegment2And3() iteration size:" + allAs.size());
+ while (itr.hasNext())
+ {
+ A a = (A) itr.next();
+ System.out.println("Found A: " + a.getId() + " " + a.getAAttrib());
+ }
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace(System.out);
+ fail("testThreeSegmentsAliasOnSegment2And3: " + t.getMessage());
+ }
+ }
+
+ /*
+ * Same as above using an explicit UserAlias
+ */
+ public void testThreeSegmentsAliasOnSegment2And3UserAlias() throws Exception
+ {
+ try
+ {
+ UserAlias userAlias1 = new UserAlias("alias1");
+ userAlias1.add("bSet.cSet");
+ userAlias1.add("bSet.cSet.d");
+
+ // d1 criteria
+ Criteria crit1 = new Criteria();
+ crit1.addEqualTo("bSet.cSet.d.dAttrib", new Integer("10010"));
+ crit1.setAlias(userAlias1);
+
+ // d2 criteria
+ UserAlias userAlias2 = new UserAlias("alias2");
+ userAlias2.add("bSet.cSet");
+ userAlias2.add("bSet.cSet.d");
+
+ Criteria crit2 = new Criteria();
+ crit2.addEqualTo("bSet.cSet.d.dAttrib", new Integer("10110"));
+ crit2.setAlias(userAlias2);
+
+ crit1.addAndCriteria(crit2);
+
+ boolean isDistinct = true;
+ Query query = new QueryByCriteria(A.class, crit1, isDistinct);
+
+ Collection allAs = broker.getCollectionByQuery(query);
+
+ java.util.Iterator itr = allAs.iterator();
+
+ assertEquals(1, allAs.size());
+ System.out.println("testThreeSegmentsAliasOnSegment2And3UserAlias() iteration size:" + allAs.size());
+ while (itr.hasNext())
+ {
+ A a = (A) itr.next();
+ System.out.println("Found A: " + a.getId() + " " + a.getAAttrib());
+ }
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace(System.out);
+ fail("testThreeSegmentsAliasOnSegment2And3UserAlias: " + t.getMessage());
+ }
+ }
+
+
// Inner Classes
public static class A
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org