/** * PUBLIC: * Return a sub query expression. * A sub query using a report query to define a subselect within another queries expression or select's where clause. * The sub query (the report query) will use its own expression builder be can reference expressions from the base expression builder. * <p>Example: * <pre><blockquote> * ExpressionBuilder builder = new ExpressionBuilder(); * ReportQuery subQuery = new ReportQuery(Employee.class, new ExpressionBuilder()); * subQuery.addMaximum("salary"); * builder.get("salary").equal(builder.subQuery(subQuery)); * </blockquote></pre> */ public Expression subQuery(ReportQuery subQuery) { return new SubSelectExpression(subQuery, this); }
/** * PUBLIC: * Return a sub query expression. * A sub query using a report query to define a subselect within another queries expression or select's where clause. * The sub query (the report query) will use its own expression builder be can reference expressions from the base expression builder. * <p>Example: * <blockquote><pre> * ExpressionBuilder builder = new ExpressionBuilder(); * ReportQuery subQuery = new ReportQuery(Employee.class, new ExpressionBuilder()); * subQuery.addMaximum("salary"); * builder.get("salary").equal(builder.subQuery(subQuery)); * </pre></blockquote> */ public Expression subQuery(ReportQuery subQuery) { return new SubSelectExpression(subQuery, this); }
/** * PUBLIC: * Return a sub query expression. * A sub query using a report query to define a subselect within another queries expression or select's where clause. * The sub query (the report query) will use its own expression builder be can reference expressions from the base expression builder. * <p>Example: * <blockquote><pre> * ExpressionBuilder builder = new ExpressionBuilder(); * ReportQuery subQuery = new ReportQuery(Employee.class, new ExpressionBuilder()); * subQuery.addMaximum("salary"); * builder.get("salary").equal(builder.subQuery(subQuery)); * </pre></blockquote> */ public Expression subQuery(ReportQuery subQuery) { return new SubSelectExpression(subQuery, this); }
/** * INTERNAL: * This factory method is used to build a subselect that will do a count. * It will count the number of items in baseExpression.anyOf(attribute). */ public static SubSelectExpression createSubSelectExpressionForCount(Expression outerQueryBaseExpression, Expression outerQueryCriteria, String attribute, Class returnType){ SubSelectExpression expression = new SubSelectExpression(); expression.setBaseExpression(outerQueryBaseExpression); expression.attribute = attribute; expression.criteriaBase = outerQueryCriteria; if (returnType != null){ expression.returnType = returnType; } return expression; } }
/** * INTERNAL: * This factory method is used to build a subselect that will do a count. * It will count the number of items in baseExpression.anyOf(attribute). */ public static SubSelectExpression createSubSelectExpressionForCount(Expression outerQueryBaseExpression, Expression outerQueryCriteria, String attribute, Class returnType){ SubSelectExpression expression = new SubSelectExpression(); expression.setBaseExpression(outerQueryBaseExpression); expression.attribute = attribute; expression.criteriaBase = outerQueryCriteria; if (returnType != null){ expression.returnType = returnType; } return expression; } }
public SubQueryImpl(Metamodel metamodel, Class result, CriteriaBuilderImpl queryBuilder, CommonAbstractCriteria parent){ super(metamodel, ResultType.OTHER, queryBuilder, result); this.subQuery = new ReportQuery(); TypeImpl queryType = ((MetamodelImpl)metamodel).getType(result); if (queryType != null && queryType.getPersistenceType() == PersistenceType.ENTITY){ this.subQuery.setReferenceClass(result); } this.subQuery.setDistinctState(ObjectLevelReadQuery.DONT_USE_DISTINCT); this.correlatedJoins = new HashSet(); this.correlations = new HashSet(); this.currentNode = new SubSelectExpression(subQuery, new ExpressionBuilder()); this.parent = parent; }
SubSelectExpression sub = new SubSelectExpression(subSelect, ((BaseExpression) baseExp).getBaseExpression()); this.setBaseExpression(outerBuilder); this.children.setElementAt(outerBuilder, 0);