/* * INTERNAL: * If this query key represents a foreign reference answer the * base expression -> foreign reference join criteria. */ public Expression mappingCriteria() { Expression selectionCriteria; // First look for a query key, then a mapping if (getQueryKeyOrNull() == null) { if ((getMapping() == null) || (!getMapping().isForeignReferenceMapping())) { return null; } else { // The join criteria is now twisted by the mappings. selectionCriteria = ((ForeignReferenceMapping) getMapping()).getJoinCriteria(this); } } else { if (!getQueryKeyOrNull().isForeignReferenceQueryKey()) { return null; } else { selectionCriteria = ((ForeignReferenceQueryKey) getQueryKeyOrNull()).getJoinCriteria(); selectionCriteria = getBaseExpression().twist(selectionCriteria, this); } } if (shouldUseOuterJoin() && getSession().getPlatform().shouldPrintOuterJoinInWhereClause()) { selectionCriteria = selectionCriteria.convertToUseOuterJoin(); } return selectionCriteria; }
/** * INTERNAL: this returns a single expression to represent the join from the main table to all * child descriptor tables Only if outer joins should be printed in the where clause * * @return Expression */ public Expression getTreatCriteria() { if (getDescriptor() == null) { return null; } // need to build this using just the multiple tables on this descriptor not included in the // parent's join expression Expression criteria = null; if (getSession().getPlatform().shouldPrintOuterJoinInWhereClause()) { Vector tables = getDescriptor().getTables(); // This child's tables ClassDescriptor parentDescriptor = this.typeExpressionBase.getDescriptor(); int tablesSize = tables.size(); if (parentDescriptor.hasInheritance() && parentDescriptor.getInheritancePolicy().hasMultipleTableChild()) { // look up the joins from the parent descriptor to our tables. for (int i = 0; i < tablesSize; i++) { DatabaseTable table = (DatabaseTable) tables.elementAt(i); Expression joinExpression = parentDescriptor.getInheritancePolicy().getChildrenTablesJoinExpressions().get(table); // Some of our tables might be the in our parent as well, so ignore the lack of a // joinExpression if (joinExpression != null) { joinExpression = this.baseExpression.twist(joinExpression, this); if (shouldUseOuterJoin()) { joinExpression = joinExpression.convertToUseOuterJoin(); } criteria = joinExpression.and(criteria); } } } } return criteria; }
/** * INTERNAL: Return the expression to join the main table of this node to any auxiliary tables. */ public Expression additionalExpressionCriteria() { if (getDescriptor() == null) { return null; } Expression criteria = getDescriptor().getQueryManager().getAdditionalJoinExpression(); if (criteria != null) { criteria = getBaseExpression().twist(criteria, this); if (shouldUseOuterJoin() && getSession().getPlatform().shouldPrintOuterJoinInWhereClause()) { criteria.convertToUseOuterJoin(); } } if (getSession().getPlatform().shouldPrintOuterJoinInWhereClause()) { if (isUsingOuterJoinForMultitableInheritance()) { Expression childrenCriteria = getDescriptor().getInheritancePolicy().getChildrenJoinExpression(); childrenCriteria = getBaseExpression().twist(childrenCriteria, this); childrenCriteria.convertToUseOuterJoin(); if (criteria == null) { criteria = childrenCriteria; } else { criteria = criteria.and(childrenCriteria); } } } if ((getDescriptor() != null) && (getDescriptor().getHistoryPolicy() != null)) { Expression historyCriteria = getDescriptor().getHistoryPolicy().additionalHistoryExpression(this); if (criteria != null) { criteria = criteria.and(historyCriteria); } else { criteria = historyCriteria; } } return criteria; }
/** * INTERNAL: Return the expression to join the main table of this node to any auxiliary tables. */ public Expression additionalTreatExpressionCriteria() { if (getDescriptor() == null) { return null; } // need to build this using just the multiple tables on this descriptor not included in the // parent's join expression Expression criteria = null; if (getSession().getPlatform().shouldPrintOuterJoinInWhereClause()) { if (isUsingOuterJoinForMultitableInheritance()) { criteria = getDescriptor().getInheritancePolicy().getChildrenJoinExpression(); criteria = this.baseExpression.twist(criteria, this); criteria.convertToUseOuterJoin(); } } return criteria; }