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/03/06 14:02:29 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/broker/accesslayer MtoNCollectionPrefetcher.java
brj 2004/03/06 05:02:29
Modified: src/java/org/apache/ojb/broker/query Criteria.java
src/java/org/apache/ojb/broker/accesslayer
MtoNCollectionPrefetcher.java
Log:
use column-criteria (no need translation needed) for m-n-prefetching
Revision Changes Path
1.40 +850 -783 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.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- Criteria.java 21 Feb 2004 21:41:45 -0000 1.39
+++ Criteria.java 6 Mar 2004 13:02:29 -0000 1.40
@@ -79,88 +79,94 @@
* Copyright (C) 1997, 1998 DB Harvey-George
* eMail: cobra@lowrent.org
*
- * @author <a href="mailto:jbraeuchi@hotmail.com">Jakob Braeuchi</a>
+ * @author <a href="mailto:jbraeuchi@gmx.ch">Jakob Braeuchi</a>
* @version $Id$
*/
public class Criteria implements java.io.Serializable
{
- static final long serialVersionUID = 7384550404778187808L; public final static int OR = 0;
- public final static int AND = 1;
- public final static int NONE = 9;
-
- // prefix to identify attributes referencing enclosing query
- public static String PARENT_QUERY_PREFIX = "parentQuery.";
-
- private Vector m_criteria;
- private int m_type;
- private boolean m_embraced;
+ static final long serialVersionUID = 7384550404778187808L;
+
+ /** criteria is OR-ed with it's parent */
+ public static final int OR = 0;
+ /** criteria is AND-ed with it's parent */
+ public static final int AND = 1;
+ /** criteria has no parent */
+ public static final int NONE = 9;
+
+ /** prefix to identify attributes referencing enclosing query */
+ public static final String PARENT_QUERY_PREFIX = "parentQuery.";
+
+ private Vector m_criteria;
+ private int m_type;
+ private boolean m_embraced;
private boolean m_negative = false;
- // holding CriteriaFields for orderBy and groupBy
- private List orderby = null;
- private List groupby = null;
- private List prefetchedRelationships = null;
+ // holding CriteriaFields for orderBy and groupBy
+ private List orderby = null;
+ 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;
- protected static final int IN_LIMIT = getSqlInLimit();
+ /** the max. number of parameters in a IN-statement */
+ protected static final int IN_LIMIT = getSqlInLimit();
private QueryByCriteria m_query;
private Criteria m_parentCriteria;
- /**
- * Constructor declaration
- */
- public Criteria()
- {
- m_criteria = new Vector();
- groupby = new ArrayList();
- orderby = new ArrayList();
- prefetchedRelationships = new ArrayList();
- m_type = NONE;
- m_embraced = false;
- }
-
- /**
- * Constructor with a SelectionCriteria
- * @param aSelectionCriteria
- */
- public Criteria(SelectionCriteria aSelectionCriteria)
- {
- this();
- addSelectionCriteria(aSelectionCriteria);
- }
+ /**
+ * Constructor declaration
+ */
+ public Criteria()
+ {
+ m_criteria = new Vector();
+ groupby = new ArrayList();
+ orderby = new ArrayList();
+ prefetchedRelationships = new ArrayList();
+ m_type = NONE;
+ m_embraced = false;
+ }
+
+ /**
+ * Constructor with a SelectionCriteria
+ * @param aSelectionCriteria SelectionCriteria
+ */
+ public Criteria(SelectionCriteria aSelectionCriteria)
+ {
+ this();
+ addSelectionCriteria(aSelectionCriteria);
+ }
/**
* make a copy of the criteria
- * @param includeGroupBy
- * @param includeOrderBy
- * @param includePrefetchedRelationships
- * @return
+ * @param includeGroupBy if true
+ * @param includeOrderBy if ture
+ * @param includePrefetchedRelationships if true
+ * @return a copy of the criteria
*/
- public Criteria copy(boolean includeGroupBy, boolean includeOrderBy, boolean includePrefetchedRelationships)
- {
- Criteria copy = new Criteria();
+ public Criteria copy(boolean includeGroupBy, boolean includeOrderBy, boolean includePrefetchedRelationships)
+ {
+ Criteria copy = new Criteria();
- copy.m_criteria = this.m_criteria;
+ copy.m_criteria = this.m_criteria;
copy.m_negative = this.m_negative;
-
- if (includeGroupBy)
- {
- copy.groupby = this.groupby;
- }
- if (includeOrderBy)
- {
- copy.orderby = this.orderby;
- }
- if (includePrefetchedRelationships)
- {
- copy.prefetchedRelationships = this.prefetchedRelationships;
- }
- return copy;
- }
+ if (includeGroupBy)
+ {
+ copy.groupby = this.groupby;
+ }
+ if (includeOrderBy)
+ {
+ copy.orderby = this.orderby;
+ }
+ if (includePrefetchedRelationships)
+ {
+ copy.prefetchedRelationships = this.prefetchedRelationships;
+ }
+
+ return copy;
+ }
protected void addSelectionCriteria(SelectionCriteria selectionCrit)
{
@@ -183,51 +189,50 @@
crit = criteria.elementAt(i);
if (crit instanceof SelectionCriteria)
{
- addSelectionCriteria((SelectionCriteria)crit);
+ addSelectionCriteria((SelectionCriteria) crit);
}
else if (crit instanceof Criteria)
{
- addCriteria((Criteria)crit);
+ addCriteria((Criteria) crit);
}
}
}
- /**
- * Answer a List of InCriteria based on values, each InCriteria
- * contains only inLimit values
- * @param attribute
- * @param values
- * @param negative
- * @param inLimit the maximum number of values for IN (-1 for no limit)
- * @return
- */
- protected List splitInCriteria(Object attribute, Collection values, boolean negative, int inLimit)
- {
- List result = new ArrayList();
- Collection inCollection = new ArrayList();
-
- if (values == null || values.isEmpty())
- {
- // OQL creates empty Criteria for late binding
- result.add(buildInCriteria(attribute, negative, values));
- }
- else
- {
- Iterator iter = values.iterator();
-
- while (iter.hasNext())
- {
- inCollection.add(iter.next());
- if (inCollection.size() == inLimit || !iter.hasNext())
- {
- result.add(buildInCriteria(attribute, negative, inCollection));
- inCollection = new ArrayList();
- }
- }
- }
- return result;
- }
+ /**
+ * Answer a List of InCriteria based on values, each InCriteria
+ * contains only inLimit values
+ * @param attribute
+ * @param values
+ * @param negative
+ * @param inLimit the maximum number of values for IN (-1 for no limit)
+ * @return
+ */
+ protected List splitInCriteria(Object attribute, Collection values, boolean negative, int inLimit)
+ {
+ List result = new ArrayList();
+ Collection inCollection = new ArrayList();
+ if (values == null || values.isEmpty())
+ {
+ // OQL creates empty Criteria for late binding
+ result.add(buildInCriteria(attribute, negative, values));
+ }
+ else
+ {
+ Iterator iter = values.iterator();
+
+ while (iter.hasNext())
+ {
+ inCollection.add(iter.next());
+ if (inCollection.size() == inLimit || !iter.hasNext())
+ {
+ result.add(buildInCriteria(attribute, negative, inCollection));
+ inCollection = new ArrayList();
+ }
+ }
+ }
+ return result;
+ }
private InCriteria buildInCriteria(Object attribute, boolean negative, Collection values)
{
@@ -237,76 +242,75 @@
}
else
{
- return ValueCriteria.buildInCriteria(attribute, values, getAlias());
- }
+ return ValueCriteria.buildInCriteria(attribute, values, getAlias());
+ }
+ }
+
+ /**
+ * Get an Enumeration with all sub criteria
+ * @return Enumeration
+ */
+ public Enumeration getElements()
+ {
+ return getCriteria().elements();
+ }
+
+ /**
+ * Get a Vector with all sub criteria
+ * @return Vector
+ */
+ protected Vector getCriteria()
+ {
+ return m_criteria;
+ }
+
+ /**
+ * Answer the type
+ * @return int
+ */
+ public int getType()
+ {
+ return m_type;
+ }
+
+ /**
+ * Set the type
+ * @param type OR, AND, NONE
+ */
+ public void setType(int type)
+ {
+ m_type = type;
+ }
+
+ /**
+ * ANDed criteria are embraced
+ * @return true if embraced,
+ */
+ public boolean isEmbraced()
+ {
+ return m_embraced;
}
- /**
- * Get an Enumeration with all sub criteria
- * @return Enumaration
- */
- public Enumeration getElements()
- {
- return getCriteria().elements();
- }
-
- /**
- * Get a Vector with all sub criteria
- * @return Vector
- */
- protected Vector getCriteria()
- {
- return m_criteria;
- }
-
- /**
- * Answer the type
- * @return int
- */
- public int getType()
- {
- return m_type;
- }
-
- /**
- * Set the type
- * @param type
- */
- public void setType(int type)
- {
- this.m_type = type;
- }
-
- /**
- * Answer true if embraced,
- * ANDed criteria are embraced
- */
- public boolean isEmbraced()
- {
- return m_embraced;
- }
-
- /**
- * Set embraced
- * @param embraced
- */
- public void setEmbraced(boolean embraced)
- {
- this.m_embraced = embraced;
- }
-
- /**
- * Adds and equals (=) criteria,
- * customer_id = 10034
- *
- * @param attribute The field name to be used
- * @param value An object representing the value of the field
- */
- public void addEqualTo(String attribute, Object value)
- {
-// addSelectionCriteria(new EqualToCriteria(attribute, value, false, getAlias()));
+ /**
+ * Set embraced
+ * @param embraced true if criteria is to be surrounded by braces
+ */
+ public void setEmbraced(boolean embraced)
+ {
+ m_embraced = embraced;
+ }
+
+ /**
+ * Adds and equals (=) criteria,
+ * customer_id = 10034
+ *
+ * @param attribute The field name to be used
+ * @param value An object representing the value of the field
+ */
+ public void addEqualTo(String attribute, Object value)
+ {
addSelectionCriteria(ValueCriteria.buildEqualToCriteria(attribute, value, getAlias()));
- }
+ }
/**
* Adds and equals (=) criteria,
@@ -338,617 +342,677 @@
addSelectionCriteria(c);
}
- /**
- * Adds and equals (=) criteria for field comparison.
- * The field name will be translated into the appropriate columnName by SqlStatement.
- * <br>
- * name = boss.name
- *
- * @param attribute The field name to be used
- * @param fieldName The field name to compare with
- */
- public void addEqualToField(String attribute, String fieldName)
- {
+ /**
+ * Adds and equals (=) criteria for field comparison.
+ * The field name will be translated into the appropriate columnName by SqlStatement.
+ * <br>
+ * name = boss.name
+ *
+ * @param attribute The field name to be used
+ * @param fieldName The field name to compare with
+ */
+ public void addEqualToField(String attribute, String fieldName)
+ {
FieldCriteria c = FieldCriteria.buildEqualToCriteria(attribute, fieldName, getAlias());
- addSelectionCriteria(c);
- }
+ addSelectionCriteria(c);
+ }
- /**
- * Adds and equals (=) criteria for field comparison.
- * The field name will be translated into the appropriate columnName by SqlStatement.
- * <br>
- * name <> boss.name
- *
- * @param attribute The field name to be used
- * @param fieldName The field name to compare with
- */
- public void addNotEqualToField(String attribute, String fieldName)
- {
- SelectionCriteria c = FieldCriteria.buildNotEqualToCriteria(attribute, fieldName, getAlias());
- addSelectionCriteria(c);
- }
-
- /**
- * Adds and equals (<>) criteria for column comparison.
- * The column Name will NOT be translated.
- * <br>
- * name <> T_BOSS.LASTNMAE
- *
- * @param attribute The field name to be used
- * @param colName The name of the column to compare with
- */
- public void addNotEqualToColumn(String attribute, String colName)
- {
+ /**
+ * Adds and equals (=) criteria for field comparison.
+ * The field name will be translated into the appropriate columnName by SqlStatement.
+ * <br>
+ * name <> boss.name
+ *
+ * @param attribute The field name to be used
+ * @param fieldName The field name to compare with
+ */
+ public void addNotEqualToField(String attribute, String fieldName)
+ {
+ SelectionCriteria c = FieldCriteria.buildNotEqualToCriteria(attribute, fieldName, getAlias());
+ addSelectionCriteria(c);
+ }
+
+ /**
+ * Adds and equals (<>) criteria for column comparison.
+ * The column Name will NOT be translated.
+ * <br>
+ * name <> T_BOSS.LASTNMAE
+ *
+ * @param attribute The field name to be used
+ * @param colName The name of the column to compare with
+ */
+ public void addNotEqualToColumn(String attribute, String colName)
+ {
FieldCriteria c = FieldCriteria.buildNotEqualToCriteria(attribute, colName, getAlias());
c.setTranslateField(false);
- addSelectionCriteria(c);
- }
+ addSelectionCriteria(c);
+ }
- /**
- * Adds and equals (=) criteria for column comparison.
- * The column Name will NOT be translated.
- * <br>
- * name = T_BOSS.LASTNMAE
- *
- * @param attribute The field name to be used
- * @param colName The name of the column to compare with
- */
- public void addEqualToColumn(String attribute, String colName)
- {
- FieldCriteria c = FieldCriteria.buildEqualToCriteria(attribute, colName, getAlias());
+ /**
+ * Adds and equals (=) criteria for column comparison.
+ * The column Name will NOT be translated.
+ * <br>
+ * name = T_BOSS.LASTNMAE
+ *
+ * @param attribute The field name to be used
+ * @param colName The name of the column to compare with
+ */
+ public void addEqualToColumn(String attribute, String colName)
+ {
+ FieldCriteria c = FieldCriteria.buildEqualToCriteria(attribute, colName, getAlias());
c.setTranslateField(false);
- addSelectionCriteria(c);
- }
+ addSelectionCriteria(c);
+ }
+
+ /**
+ * Adds GreaterOrEqual Than (>=) criteria,
+ * customer_id >= 10034
+ *
+ * @param attribute The field name to be used
+ * @param value An object representing the value of the field
+ */
+ public void addGreaterOrEqualThan(Object attribute, Object value)
+ {
+ addSelectionCriteria(ValueCriteria.buildNotLessCriteria(attribute, value, getAlias()));
+ }
+
+ /**
+ * Adds GreaterOrEqual Than (>=) criteria,
+ * customer_id >= person_id
+ *
+ * @param attribute The field name to be used
+ * @param value The field name to compare with
+ */
+ public void addGreaterOrEqualThanField(String attribute, Object value)
+ {
+ addSelectionCriteria(FieldCriteria.buildNotLessCriteria(attribute, value, getAlias()));
+ }
- /**
- * Adds GreaterOrEqual Than (>=) criteria,
- * customer_id >= 10034
- *
- * @param attribute The field name to be used
- * @param value An object representing the value of the field
- */
- public void addGreaterOrEqualThan(Object attribute, Object value)
- {
- addSelectionCriteria(ValueCriteria.buildNotLessCriteria(attribute, value, getAlias()));
- }
-
- /**
- * Adds GreaterOrEqual Than (>=) criteria,
- * customer_id >= person_id
- *
- * @param attribute The field name to be used
- * @param value The field name to compare with
- */
- public void addGreaterOrEqualThanField(String attribute, Object value)
- {
- addSelectionCriteria(FieldCriteria.buildNotLessCriteria(attribute, value, getAlias()));
- }
-
- /**
- * Adds LessOrEqual Than (<=) criteria,
- * customer_id <= 10034
- *
- * @param attribute The field name to be used
- * @param value An object representing the value of the field
- */
- public void addLessOrEqualThan(Object attribute, Object value)
- {
- addSelectionCriteria(ValueCriteria.buildNotGreaterCriteria(attribute, value, getAlias()));
- }
-
- /**
- * Adds LessOrEqual Than (<=) criteria,
- * customer_id <= person_id
- *
- * @param attribute The field name to be used
- * @param value The field name to compare with
- */
- public void addLessOrEqualThanField(String attribute, Object value)
- {
- addSelectionCriteria(FieldCriteria.buildNotGreaterCriteria(attribute, value, getAlias()));
- }
-
- /**
- * Adds Like (LIKE) criteria,
- * customer_name LIKE "m%ller"
- *
+ /**
+ * Adds LessOrEqual Than (<=) criteria,
+ * customer_id <= 10034
+ *
+ * @param attribute The field name to be used
+ * @param value An object representing the value of the field
+ */
+ public void addLessOrEqualThan(Object attribute, Object value)
+ {
+ addSelectionCriteria(ValueCriteria.buildNotGreaterCriteria(attribute, value, getAlias()));
+ }
+
+ /**
+ * Adds LessOrEqual Than (<=) criteria,
+ * customer_id <= person_id
+ *
+ * @param attribute The field name to be used
+ * @param value The field name to compare with
+ */
+ public void addLessOrEqualThanField(String attribute, Object value)
+ {
+ addSelectionCriteria(FieldCriteria.buildNotGreaterCriteria(attribute, value, getAlias()));
+ }
+
+ /**
+ * Adds Like (LIKE) criteria,
+ * customer_name LIKE "m%ller"
+ *
* @see LikeCriteria
* @param attribute The field name to be used
- * @param value An object representing the value of the field
- */
- public void addLike(Object attribute, Object value)
- {
- addSelectionCriteria(ValueCriteria.buildLikeCriteria(attribute, value, getAlias()));
- }
-
- /**
- * Adds Like (NOT LIKE) criteria,
- * customer_id NOT LIKE 10034
- *
+ * @param value An object representing the value of the field
+ */
+ public void addLike(Object attribute, Object value)
+ {
+ addSelectionCriteria(ValueCriteria.buildLikeCriteria(attribute, value, getAlias()));
+ }
+
+ /**
+ * Adds Like (NOT LIKE) criteria,
+ * customer_id NOT LIKE 10034
+ *
* @see LikeCriteria
- * @param attribute The field name to be used
- * @param value An object representing the value of the field
- */
- public void addNotLike(String attribute, Object value)
- {
+ * @param attribute The field name to be used
+ * @param value An object representing the value of the field
+ */
+ public void addNotLike(String attribute, Object value)
+ {
addSelectionCriteria(ValueCriteria.buildNotLikeCriteria(attribute, value, getAlias()));
- }
+ }
- /**
- * Adds NotEqualTo (<>) criteria,
- * customer_id <> 10034
- *
- * @param attribute The field name to be used
- * @param value An object representing the value of the field
- */
- public void addNotEqualTo(Object attribute, Object value)
- {
+ /**
+ * Adds NotEqualTo (<>) criteria,
+ * customer_id <> 10034
+ *
+ * @param attribute The field name to be used
+ * @param value An object representing the value of the field
+ */
+ public void addNotEqualTo(Object attribute, Object value)
+ {
addSelectionCriteria(ValueCriteria.buildNotEqualToCriteria(attribute, value, getAlias()));
- }
+ }
- /**
- * Adds Greater Than (>) criteria,
- * customer_id > 10034
- *
- * @param attribute The field name to be used
- * @param value An object representing the value of the field
- */
- public void addGreaterThan(Object attribute, Object value)
- {
+ /**
+ * Adds Greater Than (>) criteria,
+ * customer_id > 10034
+ *
+ * @param attribute The field name to be used
+ * @param value An object representing the value of the field
+ */
+ public void addGreaterThan(Object attribute, Object value)
+ {
addSelectionCriteria(ValueCriteria.buildGreaterCriteria(attribute, value, getAlias()));
- }
+ }
+
+ /**
+ * Adds Greater Than (>) criteria,
+ * customer_id > person_id
+ *
+ * @param attribute The field name to be used
+ * @param value The field to compare with
+ */
+ public void addGreaterThanField(String attribute, Object value)
+ {
+ addSelectionCriteria(FieldCriteria.buildGreaterCriteria(attribute, value, getAlias()));
+ }
+
+ /**
+ * Adds Less Than (<) criteria,
+ * customer_id < 10034
+ *
+ * @param attribute The field name to be used
+ * @param value An object representing the value of the field
+ */
+ public void addLessThan(Object attribute, Object value)
+ {
+ addSelectionCriteria(ValueCriteria.buildLessCriteria(attribute, value, getAlias()));
+ }
+
+ /**
+ * Adds Less Than (<) criteria,
+ * customer_id < person_id
+ *
+ * @param attribute The field name to be used
+ * @param value The field to compare with
+ */
+ public void addLessThanField(String attribute, Object value)
+ {
+ addSelectionCriteria(FieldCriteria.buildLessCriteria(attribute, value, getAlias()));
+ }
- /**
- * Adds Greater Than (>) criteria,
- * customer_id > person_id
- *
- * @param attribute The field name to be used
- * @param value The field to compare with
- */
- public void addGreaterThanField(String attribute, Object value)
- {
- addSelectionCriteria(FieldCriteria.buildGreaterCriteria(attribute, value, getAlias()));
- }
-
- /**
- * Adds Less Than (<) criteria,
- * customer_id < 10034
- *
- * @param attribute The field name to be used
- * @param value An object representing the value of the field
- */
- public void addLessThan(Object attribute, Object value)
- {
- addSelectionCriteria(ValueCriteria.buildLessCriteria(attribute, value, getAlias()));
- }
-
- /**
- * Adds Less Than (<) criteria,
- * customer_id < person_id
- *
- * @param attribute The field name to be used
- * @param value The field to compare with
- */
- public void addLessThanField(String attribute, Object value)
- {
- addSelectionCriteria(FieldCriteria.buildLessCriteria(attribute, value, getAlias()));
- }
-
- /**
- * Adds a field for orderBy, order is ASCENDING
- * @param fieldName The field name to be used
- * @deprecated use #addOrderByAscending(String fieldName)
- */
- public void addOrderBy(String fieldName)
- {
- addOrderBy(fieldName, true);
- }
-
- /**
- * Adds a field for orderBy
- * @param fieldName The field name to be used
- * @param sortAscending true for ASCENDING, false for DESCENDING
- */
- public void addOrderBy(String fieldName, boolean sortAscending)
- {
- if (fieldName != null)
- {
- _getOrderby().add(new FieldHelper(fieldName, sortAscending));
- }
- }
-
- /**
- * Adds a field for orderBy
- * @param aField
+ /**
+ * Adds a field for orderBy, order is ASCENDING
+ * @param fieldName The field name to be used
+ * @deprecated use #addOrderByAscending(String fieldName)
+ */
+ public void addOrderBy(String fieldName)
+ {
+ addOrderBy(fieldName, true);
+ }
+
+ /**
+ * Adds a field for orderBy
+ * @param fieldName the field name to be used
+ * @param sortAscending true for ASCENDING, false for DESCENDING
+ */
+ public void addOrderBy(String fieldName, boolean sortAscending)
+ {
+ if (fieldName != null)
+ {
+ _getOrderby().add(new FieldHelper(fieldName, sortAscending));
+ }
+ }
+
+ /**
+ * Adds a field for orderBy
+ * @param aField the Field
* @deprecated use QueryByCriteria#addOrderBy
- */
- public void addOrderBy(FieldHelper aField)
- {
- if (aField != null)
- {
- _getOrderby().add(aField);
- }
- }
-
- /**
- * Adds a field for orderBy ASCENDING
- * @param fieldName The field name to be used
+ */
+ public void addOrderBy(FieldHelper aField)
+ {
+ if (aField != null)
+ {
+ _getOrderby().add(aField);
+ }
+ }
+
+ /**
+ * Adds a field for orderBy ASCENDING
+ * @param fieldName The field name to be used
* @deprecated use QueryByCriteria#addOrderByAscending
- */
- public void addOrderByAscending(String fieldName)
- {
- addOrderBy(fieldName, true);
- }
-
- /**
- * Adds a field for orderBy DESCENDING
- * @param fieldName The field name to be used
+ */
+ public void addOrderByAscending(String fieldName)
+ {
+ addOrderBy(fieldName, true);
+ }
+
+ /**
+ * Adds a field for orderBy DESCENDING
+ * @param fieldName The field name to be used
* @deprecated use QueryByCriteria#addOrderByDescending
- */
- public void addOrderByDescending(String fieldName)
- {
- addOrderBy(fieldName, false);
- }
+ */
+ public void addOrderByDescending(String fieldName)
+ {
+ addOrderBy(fieldName, false);
+ }
+
+ /**
+ * Answer the orderBy of all Criteria and Sub Criteria
+ * the elements are of class Criteria.FieldHelper
+ * @return List
+ */
+ List getOrderby()
+ {
+ List result = _getOrderby();
+ Iterator iter = getCriteria().iterator();
+ Object crit;
- /**
- * Answer the orderBy of all Criteria and Sub Criteria
+ while (iter.hasNext())
+ {
+ crit = iter.next();
+ if (crit instanceof Criteria)
+ {
+ result.addAll(((Criteria) crit).getOrderby());
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Answer the Vector with all orderBy,
* the elements are of class Criteria.FieldHelper
* @return List
- */
- List getOrderby()
- {
- List result = _getOrderby();
- Iterator iter = getCriteria().iterator();
- Object crit;
-
- while (iter.hasNext())
- {
- crit = iter.next();
- if (crit instanceof Criteria)
- {
- result.addAll(((Criteria) crit).getOrderby());
- }
- }
-
- return result;
- }
-
- /**
- * Answer the Vector with all orderBy,
- * the elements are of class Criteria.FieldHelper
- * @return List
- */
- protected List _getOrderby()
- {
- return orderby;
- }
-
- /**
- * ORs two sets of criteria together:
- * <pre>
- * active = true AND balance < 0 OR active = true AND overdraft = 0
- * </pre>
- * @param pc criteria
- */
- public void addOrCriteria(Criteria pc)
- {
- if (!m_criteria.isEmpty())
- {
- pc.setEmbraced(true);
- pc.setType(OR);
- addCriteria(pc);
- }
- else
- {
- setEmbraced(false);
+ */
+ protected List _getOrderby()
+ {
+ return orderby;
+ }
+
+ /**
+ * ORs two sets of criteria together:
+ * <pre>
+ * active = true AND balance < 0 OR active = true AND overdraft = 0
+ * </pre>
+ * @param pc criteria
+ */
+ public void addOrCriteria(Criteria pc)
+ {
+ if (!m_criteria.isEmpty())
+ {
+ pc.setEmbraced(true);
+ pc.setType(OR);
+ addCriteria(pc);
+ }
+ else
+ {
+ setEmbraced(false);
pc.setType(OR);
addCriteria(pc);
- }
- }
+ }
+ }
- /**
- * Adds is Null criteria,
- * customer_id is Null
- *
- * @param attribute The field name to be used
- */
- public void addIsNull(String attribute)
- {
+ /**
+ * Adds is Null criteria,
+ * customer_id is Null
+ *
+ * @param attribute The field name to be used
+ */
+ public void addIsNull(String attribute)
+ {
addSelectionCriteria(ValueCriteria.buildNullCriteria(attribute, getAlias()));
- }
+ }
- /**
- * Adds not Null criteria,
- * customer_id is not Null
- *
- * @param attribute The field name to be used
- */
- public void addNotNull(String attribute)
- {
- addSelectionCriteria(ValueCriteria.buildNotNullCriteria(attribute, getAlias()));
- }
-
- /**
- * Adds BETWEEN criteria,
- * customer_id between 1 and 10
- *
- * @param attribute The field name to be used
- * @param value1 The lower boundary
- * @param value2 The upper boundary
- */
- public void addBetween(Object attribute, Object value1, Object value2)
- {
- addSelectionCriteria(ValueCriteria.buildBeweenCriteria(attribute, value1, value2, getAlias()));
- }
-
- /**
- * Adds NOT BETWEEN criteria,
- * customer_id not between 1 and 10
- *
- * @param attribute The field name to be used
- * @param value1 The lower boundary
- * @param value2 The upper boundary
- */
- public void addNotBetween(Object attribute, Object value1, Object value2)
- {
+ /**
+ * Adds is Null criteria,
+ * customer_id is Null
+ * The attribute will NOT be translated into column name
+ *
+ * @param column The column name to be used without translation
+ */
+ public void addColumnIsNull(String column)
+ {
+ SelectionCriteria c = ValueCriteria.buildNullCriteria(column, getAlias());
+ c.setTranslateAttribute(false);
+ addSelectionCriteria(c);
+ }
+
+ /**
+ * Adds not Null criteria,
+ * customer_id is not Null
+ *
+ * @param attribute The field name to be used
+ */
+ public void addNotNull(String attribute)
+ {
+ addSelectionCriteria(ValueCriteria.buildNotNullCriteria(attribute, getAlias()));
+ }
+
+ /**
+ * Adds not Null criteria,
+ * customer_id is not Null
+ * The attribute will NOT be translated into column name
+ *
+ * @param column The column name to be used without translation
+ */
+ public void addColumnNotNull(String column)
+ {
+ SelectionCriteria c = ValueCriteria.buildNotNullCriteria(column, getAlias());
+ c.setTranslateAttribute(false);
+ addSelectionCriteria(c);
+ }
+
+ /**
+ * Adds BETWEEN criteria,
+ * customer_id between 1 and 10
+ *
+ * @param attribute The field name to be used
+ * @param value1 The lower boundary
+ * @param value2 The upper boundary
+ */
+ public void addBetween(Object attribute, Object value1, Object value2)
+ {
+ addSelectionCriteria(ValueCriteria.buildBeweenCriteria(attribute, value1, value2, getAlias()));
+ }
+
+ /**
+ * Adds NOT BETWEEN criteria,
+ * customer_id not between 1 and 10
+ *
+ * @param attribute The field name to be used
+ * @param value1 The lower boundary
+ * @param value2 The upper boundary
+ */
+ public void addNotBetween(Object attribute, Object value1, Object value2)
+ {
addSelectionCriteria(ValueCriteria.buildNotBeweenCriteria(attribute, value1, value2, getAlias()));
- }
+ }
+
+ /**
+ * Adds IN criteria,
+ * customer_id in(1,10,33,44)
+ * large values are split into multiple InCriteria
+ * IN (1,10) OR IN(33, 44)
+ *
+ * @param attribute The field name to be used
+ * @param values The value Collection
+ */
+ public void addIn(String attribute, Collection values)
+ {
+ List list = splitInCriteria(attribute, values, false, IN_LIMIT);
+ int index = 0;
+ InCriteria inCrit;
+ Criteria allInCritaria;
+
+ inCrit = (InCriteria) list.get(index);
+ allInCritaria = new Criteria(inCrit);
+
+ for (index = 1; index < list.size(); index++)
+ {
+ inCrit = (InCriteria) list.get(index);
+ allInCritaria.addOrCriteria(new Criteria(inCrit));
+ }
- /**
- * Adds IN criteria,
- * customer_id in(1,10,33,44)
- * large values are split into multiple InCriteria
- * IN (1,10) OR IN(33, 44)
- *
- * @param attribute The field name to be used
- * @param values The value Collection
- */
- public void addIn(String attribute, Collection values)
- {
- List list = splitInCriteria(attribute, values, false, IN_LIMIT);
- int index = 0;
- InCriteria inCrit;
- Criteria allInCritaria;
-
- inCrit = (InCriteria) list.get(index);
- allInCritaria = new Criteria(inCrit);
-
- for (index = 1; index < list.size(); index++)
- {
- inCrit = (InCriteria) list.get(index);
- allInCritaria.addOrCriteria(new Criteria(inCrit));
- }
-
- addAndCriteria(allInCritaria);
- }
-
- /**
- * Adds NOT IN criteria,
- * customer_id not in(1,10,33,44)
- * large values are split into multiple InCriteria
- * NOT IN (1,10) AND NOT IN(33, 44)
- *
- * @param attribute The field name to be used
- * @param values The value Collection
- */
- public void addNotIn(String attribute, Collection values)
- {
- List list = splitInCriteria(attribute, values, true, IN_LIMIT);
- int index = 0;
- InCriteria inCrit;
-
- for (index = 0; index < list.size(); index++)
- {
- inCrit = (InCriteria) list.get(index);
- addSelectionCriteria(inCrit);
- }
- }
-
- /**
- * IN Criteria with SubQuery
- * @param attribute
- * @param subQuery
- */
- public void addIn(Object attribute, Query subQuery)
- {
- addSelectionCriteria(ValueCriteria.buildInCriteria(attribute, subQuery, getAlias()));
- }
-
- /**
- * NOT IN Criteria with SubQuery
- * @param attribute
- * @param subQuery
- */
- public void addNotIn(String attribute, Query subQuery)
- {
+ addAndCriteria(allInCritaria);
+ }
+
+ /**
+ * Adds IN criteria,
+ * customer_id in(1,10,33,44)
+ * large values are split into multiple InCriteria
+ * IN (1,10) OR IN(33, 44) </br>
+ * The attribute will NOT be translated into column name
+ *
+ * @param column The column name to be used without translation
+ * @param values The value Collection
+ */
+ public void addColumnIn(String column, Collection values)
+ {
+ List list = splitInCriteria(column, values, false, IN_LIMIT);
+ int index = 0;
+ InCriteria inCrit;
+ Criteria allInCritaria;
+
+ inCrit = (InCriteria) list.get(index);
+ inCrit.setTranslateAttribute(false);
+ allInCritaria = new Criteria(inCrit);
+
+ for (index = 1; index < list.size(); index++)
+ {
+ inCrit = (InCriteria) list.get(index);
+ inCrit.setTranslateAttribute(false);
+ allInCritaria.addOrCriteria(new Criteria(inCrit));
+ }
+
+ addAndCriteria(allInCritaria);
+ }
+
+ /**
+ * Adds NOT IN criteria,
+ * customer_id not in(1,10,33,44)
+ * large values are split into multiple InCriteria
+ * NOT IN (1,10) AND NOT IN(33, 44)
+ *
+ * @param attribute The field name to be used
+ * @param values The value Collection
+ */
+ public void addNotIn(String attribute, Collection values)
+ {
+ List list = splitInCriteria(attribute, values, true, IN_LIMIT);
+ int index = 0;
+ InCriteria inCrit;
+
+ for (index = 0; index < list.size(); index++)
+ {
+ inCrit = (InCriteria) list.get(index);
+ addSelectionCriteria(inCrit);
+ }
+ }
+
+ /**
+ * IN Criteria with SubQuery
+ * @param attribute The field name to be used
+ * @param subQuery The subQuery
+ */
+ public void addIn(Object attribute, Query subQuery)
+ {
+ addSelectionCriteria(ValueCriteria.buildInCriteria(attribute, subQuery, getAlias()));
+ }
+
+ /**
+ * NOT IN Criteria with SubQuery
+ * @param attribute The field name to be used
+ * @param subQuery The subQuery
+ */
+ public void addNotIn(String attribute, Query subQuery)
+ {
addSelectionCriteria(ValueCriteria.buildNotInCriteria(attribute, subQuery, getAlias()));
- }
+ }
+
+ /**
+ * Adds freeform SQL criteria,
+ * REVERSE(name) like 're%'
+ *
+ * @param anSqlStatment The free form SQL-Statement
+ */
+ public void addSql(String anSqlStatment)
+ {
+ addSelectionCriteria(new SqlCriteria(anSqlStatment));
+ }
- /**
- * Adds freeform SQL criteria,
- * REVERSE(name) like 're%'
- *
- * @param anSqlStatment The free form SQL-Statement
- */
- public void addSql(String anSqlStatment)
- {
- addSelectionCriteria(new SqlCriteria(anSqlStatment));
- }
-
- /**
- * ANDs two sets of criteria together:
- *
- * @param pc criteria
- */
- public void addAndCriteria(Criteria pc)
- {
+ /**
+ * ANDs two sets of criteria together:
+ *
+ * @param pc criteria
+ */
+ public void addAndCriteria(Criteria pc)
+ {
// by combining a second criteria by 'AND' the existing criteria needs to be enclosed
- // in parenthesis
- if (!m_criteria.isEmpty())
- {
- this.setEmbraced(true);
- pc.setEmbraced(true);
- pc.setType(AND);
- addCriteria(pc);
- }
- else
- {
- setEmbraced(false);
+ // in parenthesis
+ if (!m_criteria.isEmpty())
+ {
+ this.setEmbraced(true);
+ pc.setEmbraced(true);
+ pc.setType(AND);
+ addCriteria(pc);
+ }
+ else
+ {
+ setEmbraced(false);
pc.setType(AND);
addCriteria(pc);
- }
- }
+ }
+ }
+
+ /**
+ * Adds an exists(sub query)
+ *
+ * @param subQuery sub-query
+ */
+ public void addExists(Query subQuery)
+ {
+ addSelectionCriteria(new ExistsCriteria(subQuery, false));
+ }
+
+ /**
+ * Adds a not exists(sub query)
+ *
+ * @param subQuery sub-query
+ */
+ public void addNotExists(Query subQuery)
+ {
+ addSelectionCriteria(new ExistsCriteria(subQuery, true));
+ }
+
+ /**
+ * Answer true if no sub criteria available
+ * @return boolean
+ */
+ public boolean isEmpty()
+ {
+ return m_criteria.isEmpty();
+ }
+
+ /**
+ * Gets the groupby for ReportQueries of all Criteria and Sub Criteria
+ * the elements are of class FieldHelper
+ * @return List of FieldHelper
+ */
+ List getGroupby()
+ {
+ List result = _getGroupby();
+ Iterator iter = getCriteria().iterator();
+ Object crit;
+
+ while (iter.hasNext())
+ {
+ crit = iter.next();
+ if (crit instanceof Criteria)
+ {
+ result.addAll(((Criteria) crit).getGroupby());
+ }
+ }
- /**
- * Adds an exists(sub query)
- *
- * @param subQuery sub-query
- */
- public void addExists(Query subQuery)
- {
- addSelectionCriteria(new ExistsCriteria(subQuery, false));
- }
-
- /**
- * Adds a not exists(sub query)
- *
- * @param subQuery sub-query
- */
- public void addNotExists(Query subQuery)
- {
- addSelectionCriteria(new ExistsCriteria(subQuery, true));
- }
-
- /**
- * Answer true if no sub criteria available
- * @return boolean
- */
- public boolean isEmpty()
- {
- return m_criteria.isEmpty();
- }
-
- /**
- * Gets the groupby for ReportQueries of all Criteria and Sub Criteria
- * the elements are of class FieldHelper
- * @return List of FieldHelper
- */
- List getGroupby()
- {
- List result = _getGroupby();
- Iterator iter = getCriteria().iterator();
- Object crit;
-
- while (iter.hasNext())
- {
- crit = iter.next();
- if (crit instanceof Criteria)
- {
- result.addAll(((Criteria) crit).getGroupby());
- }
- }
-
- return result;
- }
-
- /**
- * Gets the groupby for ReportQueries,
- * the elements are of class Criteria.FieldHelper
- * @return List of Criteria.FieldHelper
- */
- protected List _getGroupby()
- {
- return groupby;
- }
-
- /**
- * Adds a groupby fieldName for ReportQueries.
- * @param fieldName The groupby to set
+ return result;
+ }
+
+ /**
+ * Gets the groupby for ReportQueries,
+ * the elements are of class Criteria.FieldHelper
+ * @return List of Criteria.FieldHelper
+ */
+ protected List _getGroupby()
+ {
+ return groupby;
+ }
+
+ /**
+ * Adds a groupby fieldName for ReportQueries.
+ * @param fieldName The groupby to set
* @deprecated use QueryByCriteria#addGroupBy
- */
- public void addGroupBy(String fieldName)
- {
- if (fieldName != null)
- {
- _getGroupby().add(new FieldHelper(fieldName, false));
- }
- }
-
- /**
- * Adds a field for groupby
- * @param aField
+ */
+ public void addGroupBy(String fieldName)
+ {
+ if (fieldName != null)
+ {
+ _getGroupby().add(new FieldHelper(fieldName, false));
+ }
+ }
+
+ /**
+ * Adds a field for groupby
+ * @param aField the Field
* @deprecated use QueryByCriteria#addGroupBy
- */
- public void addGroupBy(FieldHelper aField)
- {
- if (aField != null)
- {
- _getGroupby().add(aField);
- }
- }
-
- /**
- * Adds an array of groupby fieldNames for ReportQueries.
- * @param fieldNames The groupby to set
+ */
+ public void addGroupBy(FieldHelper aField)
+ {
+ if (aField != null)
+ {
+ _getGroupby().add(aField);
+ }
+ }
+
+ /**
+ * Adds an array of groupby fieldNames for ReportQueries.
+ * @param fieldNames The groupby to set
* @deprecated use QueryByCriteria#addGroupBy
- */
- public void addGroupBy(String[] fieldNames)
- {
- for (int i = 0; i < fieldNames.length; i++)
- {
- addGroupBy(fieldNames[i]);
- }
- }
-
- /**
- * Returns the prefetchedRelationships.
- * @return List
- */
- List getPrefetchedRelationships()
- {
- return prefetchedRelationships;
- }
+ */
+ public void addGroupBy(String[] fieldNames)
+ {
+ for (int i = 0; i < fieldNames.length; i++)
+ {
+ addGroupBy(fieldNames[i]);
+ }
+ }
- /**
- * add the name of aRelationship for prefetch read
+ /**
+ * Returns the prefetchedRelationships.
+ * @return List
+ */
+ List getPrefetchedRelationships()
+ {
+ return prefetchedRelationships;
+ }
+
+ /**
+ * add the name of a Relationship for prefetch read
+ * @param aName the name of the relationship
* @deprecated use QueryByCriteria#addPrefetchedRelationship
- */
- public void addPrefetchedRelationship(String aName)
- {
- getPrefetchedRelationships().add(aName);
- }
-
- /**
- * read the prefetchInLimit from Config based on OJB.properties
- */
- private static int getSqlInLimit()
- {
- try
- {
- PersistenceBrokerConfiguration config =
- (PersistenceBrokerConfiguration) PersistenceBrokerFactory.getConfigurator().getConfigurationFor(null);
- return config.getSqlInLimit();
- }
- catch (ConfigurationException e)
- {
- return 200;
- }
- }
-
- /**
- * @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)
- {
+ */
+ public void addPrefetchedRelationship(String aName)
+ {
+ getPrefetchedRelationships().add(aName);
+ }
+
+ /**
+ * read the prefetchInLimit from Config based on OJB.properties
+ */
+ private static int getSqlInLimit()
+ {
+ try
+ {
+ PersistenceBrokerConfiguration config = (PersistenceBrokerConfiguration) PersistenceBrokerFactory
+ .getConfigurator().getConfigurationFor(null);
+ return config.getSqlInLimit();
+ }
+ catch (ConfigurationException e)
+ {
+ return 200;
+ }
+ }
+
+ /**
+ * @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;
@@ -958,21 +1022,21 @@
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);
- }
- }
- }
-
- /**
- * @return
- */
- public QueryByCriteria getQuery()
- {
+ // 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
+ */
+ public QueryByCriteria getQuery()
+ {
if (getParentCriteria() != null)
{
return getParentCriteria().getQuery();
@@ -982,34 +1046,37 @@
return m_query;
}
- }
+ }
+
+ /**
+ * @param query
+ */
+ void setQuery(QueryByCriteria query)
+ {
+ m_query = query;
+ }
+
+ /**
+ * @return the parent criteria
+ */
+ public Criteria getParentCriteria()
+ {
+ return m_parentCriteria;
+ }
+
+ /**
+ * @param criteria
+ */
+ void setParentCriteria(Criteria criteria)
+ {
+ m_parentCriteria = criteria;
+ }
- /**
- * @param query
- */
- void setQuery(QueryByCriteria query)
- {
- m_query = query;
- }
-
- /**
- * @return
- */
- public Criteria getParentCriteria()
- {
- return m_parentCriteria;
- }
-
- /**
- * @param criteria
- */
- void setParentCriteria(Criteria criteria)
- {
- m_parentCriteria = criteria;
- }
-
- public String toString()
- {
+ /**
+ * @see Object#toString()
+ */
+ public String toString()
+ {
if (isNegative())
{
return "-" + m_criteria.toString();
@@ -1018,7 +1085,7 @@
{
return m_criteria.toString();
}
- }
+ }
/**
* @return Returns the negative.
@@ -1029,7 +1096,7 @@
}
/**
- * Flags the whole Criteria as negative.
+ * Flags the whole Criteria as negative.
* @param negative The negative to set.
*/
public void setNegative(boolean negative)
1.6 +85 -85 db-ojb/src/java/org/apache/ojb/broker/accesslayer/MtoNCollectionPrefetcher.java
Index: MtoNCollectionPrefetcher.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/MtoNCollectionPrefetcher.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- MtoNCollectionPrefetcher.java 6 Feb 2004 20:49:21 -0000 1.5
+++ MtoNCollectionPrefetcher.java 6 Mar 2004 13:02:29 -0000 1.6
@@ -1,4 +1,3 @@
-
package org.apache.ojb.broker.accesslayer;
/* ====================================================================
@@ -87,8 +86,8 @@
{
/**
- * @param aBroker
- * @param anOrd
+ * @param aBroker the PersistenceBroker
+ * @param anOrd the CollectionDescriptor
*/
public MtoNCollectionPrefetcher(PersistenceBroker aBroker, ObjectReferenceDescriptor anOrd)
{
@@ -100,8 +99,8 @@
*/
public void prefetchRelationship(Collection owners)
{
- Query queries[];
- Query mnQueries[];
+ Query[] queries;
+ Query[] mnQueries;
Collection children = new ArrayList();
Collection mnImplementors = new ArrayList();
@@ -114,59 +113,58 @@
while (iter.hasNext())
{
Object aChild = iter.next();
-
+
// BRJ: simulate the distinct removed from the query
if (!children.contains(aChild))
{
children.add(aChild);
- }
+ }
}
-
+
Iterator mnIter = getBroker().getReportQueryIteratorByQuery(mnQueries[i]);
while (mnIter.hasNext())
{
mnImplementors.add(mnIter.next());
}
}
-
+
associateBatched(owners, children, mnImplementors);
}
-
+
/**
* Build the prefetch query for a M-N relationship, The query looks like the following sample :
* <br>
* <pre>
- * crit = new Criteria();
- * crit.addIn("PERSON_PROJECT.PROJECT_ID", ids);
- * crit.addEqualToField("id","PERSON_PROJECT.PERSON_ID");
+ * crit = new Criteria();
+ * crit.addIn("PERSON_PROJECT.PROJECT_ID", ids);
+ * crit.addEqualToField("id","PERSON_PROJECT.PERSON_ID");
* qry = new QueryByMtoNCriteria(Person.class, "PERSON_PROJECT", crit, true);
* </pre>
- *
+ *
* @param ids Collection containing all identities of objects of the M side
- * @return
+ * @return the prefetch Query
*/
protected Query buildPrefetchQuery(Collection ids)
{
- CollectionDescriptor cds = getCollectionDescriptor();
+ CollectionDescriptor cds = getCollectionDescriptor();
String[] indFkCols = getFksToThisClass();
String[] indItemFkCols = getFksToItemClass();
FieldDescriptor[] itemPkFields = getItemClassDescriptor().getPkFields();
-
+
Criteria crit = buildPrefetchCriteria(ids, indFkCols, indItemFkCols, itemPkFields);
-
+
// BRJ: do not use distinct:
- //
+ //
// ORA-22901 cannot compare nested table or VARRAY or LOB attributes of an object type
- // Cause: Comparison of nested table or VARRAY or LOB attributes of an
+ // Cause: Comparison of nested table or VARRAY or LOB attributes of an
// object type was attempted in the absence of a MAP or ORDER method.
// Action: Define a MAP or ORDER method for the object type.
//
// Without the distinct the resultset may contain duplicate rows
-
+
return new QueryByMtoNCriteria(cds.getItemClass(), cds.getIndirectionTable(), crit, false);
}
-
/**
* Build a query to read the mn-implementors
* @param ids
@@ -197,8 +195,8 @@
jdbcTypes[pkFields.length + i] = itemPkFields[i].getJdbcType().getType();
}
- ReportQueryByMtoNCriteria q = new ReportQueryByMtoNCriteria(getItemClassDescriptor()
- .getClassOfObject(), cols, crit, false);
+ ReportQueryByMtoNCriteria q = new ReportQueryByMtoNCriteria(getItemClassDescriptor().getClassOfObject(), cols,
+ crit, false);
q.setIndirectionTable(getCollectionDescriptor().getIndirectionTable());
q.setJdbcTypes(jdbcTypes);
@@ -214,33 +212,33 @@
String indTable = getCollectionDescriptor().getIndirectionTable();
String[] fks = getCollectionDescriptor().getFksToThisClass();
String[] result = new String[fks.length];
-
+
for (int i = 0; i < result.length; i++)
{
result[i] = indTable + "." + fks[i];
}
-
+
return result;
}
-
+
/**
* prefix the item class fk columns with the indirection table
* @return
*/
private String[] getFksToItemClass()
- {
+ {
String indTable = getCollectionDescriptor().getIndirectionTable();
String[] fks = getCollectionDescriptor().getFksToItemClass();
String[] result = new String[fks.length];
-
+
for (int i = 0; i < result.length; i++)
{
result[i] = indTable + "." + fks[i];
}
-
+
return result;
- }
-
+ }
+
/**
* Build the multiple queries for one relationship because of limitation of IN(...)
*
@@ -277,37 +275,39 @@
}
return (Query[]) queries.toArray(new Query[queries.size()]);
- }
+ }
+
/**
* Build the prefetch criteria
- *
+ *
* @param ids Collection of identities of M side
* @param fkCols indirection table fks to this class
* @param itemFkCols indirection table fks to item class
* @param itemPkFields
* @return
*/
- private Criteria buildPrefetchCriteria(Collection ids, String[] fkCols, String[] itemFkCols, FieldDescriptor itemPkFields[])
+ private Criteria buildPrefetchCriteria(Collection ids, String[] fkCols, String[] itemFkCols,
+ FieldDescriptor[] itemPkFields)
{
if (fkCols.length == 1)
{
- return buildPrefetchCriteriaSingleKey(ids, fkCols[0], itemFkCols[0], itemPkFields[0]);
+ return buildPrefetchCriteriaSingleKey(ids, fkCols[0], itemFkCols[0], itemPkFields[0]);
}
else
{
return buildPrefetchCriteriaMultipleKeys(ids, fkCols, itemFkCols, itemPkFields);
}
-
+
}
/**
* Build the prefetch criteria
- *
+ *
* @param ids Collection of identities of M side
* @param fkCol indirection table fks to this class
* @param itemFk indirection table fks to item class
* @param itemPkField
- * @return
+ * @return the Criteria
*/
private Criteria buildPrefetchCriteriaSingleKey(Collection ids, String fkCol, String itemFkCol,
FieldDescriptor itemPkField)
@@ -328,123 +328,124 @@
case 0 :
break;
case 1 :
- crit.addEqualTo(fkCol, values.get(0));
+ crit.addColumnEqualTo(fkCol, values.get(0));
break;
default :
// create IN (...) for the single key field
- crit.addIn(fkCol, values);
+ crit.addColumnIn(fkCol, values);
break;
}
- crit.addEqualToField(itemPkField.getAttributeName(), itemFkCol);
+ crit.addEqualToColumn(itemPkField.getAttributeName(), itemFkCol);
return crit;
}
/**
* Build the prefetch criteria
- *
+ *
* @param ids Collection of identities of M side
* @param fkCols indirection table fks to this class
* @param itemFkCols indirection table fks to item class
* @param itemPkFields
- * @return
+ * @return the Criteria
*/
- private Criteria buildPrefetchCriteriaMultipleKeys(Collection ids, String fkCols[], String itemFkCols[], FieldDescriptor itemPkFields[])
+ private Criteria buildPrefetchCriteriaMultipleKeys(Collection ids, String[] fkCols, String[] itemFkCols,
+ FieldDescriptor[] itemPkFields)
{
Criteria crit = new Criteria();
Iterator iter = ids.iterator();
-
+
while (iter.hasNext())
{
Criteria c = new Criteria();
Identity id = (Identity) iter.next();
Object[] val = id.getPrimaryKeyValues();
-
+
for (int i = 0; i < val.length; i++)
{
-
+
if (val[i] == null)
{
- c.addIsNull(fkCols[i]);
+ c.addColumnIsNull(fkCols[i]);
}
else
{
- c.addEqualTo(fkCols[i], val[i]);
+ c.addColumnEqualTo(fkCols[i], val[i]);
}
-
- crit.addEqualToField(itemPkFields[i].getAttributeName(), itemFkCols[i]);
+
+ crit.addEqualToColumn(itemPkFields[i].getAttributeName(), itemFkCols[i]);
}
crit.addOrCriteria(c);
}
-
+
return crit;
}
-
+
/**
* associate the batched Children with their owner object loop over children
- */
+ */
protected void associateBatched(Collection owners, Collection children, Collection mToNImplementors)
{
CollectionDescriptor cds = getCollectionDescriptor();
PersistentField field = cds.getPersistentField();
PersistenceBroker pb = getBroker();
- Class ownerTopLevelClass = pb.getTopLevelClass(getOwnerClassDescriptor().getClassOfObject());
- Class childTopLevelClass = pb.getTopLevelClass(getItemClassDescriptor().getClassOfObject());
+ Class ownerTopLevelClass = pb.getTopLevelClass(getOwnerClassDescriptor().getClassOfObject());
+ Class childTopLevelClass = pb.getTopLevelClass(getItemClassDescriptor().getClassOfObject());
Class collectionClass = cds.getCollectionClass(); // this collection type will be used:
HashMap childMap = new HashMap();
HashMap ownerIdsToLists = new HashMap();
-
+
// initialize the owner list map
for (Iterator it = owners.iterator(); it.hasNext();)
{
Object owner = it.next();
- ownerIdsToLists.put(new Identity(owner,pb), new ArrayList());
+ ownerIdsToLists.put(new Identity(owner, pb), new ArrayList());
}
-
+
// build the children map
for (Iterator it = children.iterator(); it.hasNext();)
{
Object child = it.next();
- childMap.put(new Identity(child,pb), child);
+ childMap.put(new Identity(child, pb), child);
}
-
+
int ownerPkLen = getOwnerClassDescriptor().getPkFields().length;
int childPkLen = getItemClassDescriptor().getPkFields().length;
Object[] ownerPk = new Object[ownerPkLen];
Object[] childPk = new Object[childPkLen];
- // build list of children based on m:n implementors
+ // build list of children based on m:n implementors
for (Iterator it = mToNImplementors.iterator(); it.hasNext();)
{
- Object[] mToN = (Object[])it.next();
- System.arraycopy(mToN,0,ownerPk,0,ownerPkLen);
- System.arraycopy(mToN,ownerPkLen,childPk,0,childPkLen);
-
+ Object[] mToN = (Object[]) it.next();
+ System.arraycopy(mToN, 0, ownerPk, 0, ownerPkLen);
+ System.arraycopy(mToN, ownerPkLen, childPk, 0, childPkLen);
+
Identity ownerId = new Identity(null, ownerTopLevelClass, ownerPk);
Identity childId = new Identity(null, childTopLevelClass, childPk);
-
- Collection list = (Collection) ownerIdsToLists.get(ownerId);
+
+ Collection list = (Collection) ownerIdsToLists.get(ownerId);
Object child = childMap.get(childId);
list.add(child);
- }
-
- // connect children list to owners
+ }
+
+ // connect children list to owners
for (Iterator it = owners.iterator(); it.hasNext();)
{
Object result;
Object owner = it.next();
- Identity ownerId = new Identity(owner,pb);
-
- List list = (List)ownerIdsToLists.get(ownerId);
-
+ Identity ownerId = new Identity(owner, pb);
+
+ List list = (List) ownerIdsToLists.get(ownerId);
+
if ((collectionClass == null) && field.getType().isArray())
{
int length = list.size();
Class itemtype = field.getType().getComponentType();
-
+
result = Array.newInstance(itemtype, length);
-
+
for (int j = 0; j < length; j++)
{
Array.set(result, j, list.get(j));
@@ -453,14 +454,14 @@
else
{
ManageableCollection col = createCollection(collectionClass);
-
+
for (Iterator it2 = list.iterator(); it2.hasNext();)
{
col.ojbAdd(it2.next());
}
result = col;
- }
-
+ }
+
Object value = field.get(owner);
if ((value instanceof CollectionProxy) && (result instanceof Collection))
{
@@ -471,8 +472,7 @@
field.set(owner, result);
}
}
-
-
+
}
-
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org