private void buildAggregateQuery(DocumentNode node, Query outerQuery, ExpandDocumentNode expandResource, OrderBy expandOrder, Query query, EdmNavigationProperty navigationProperty) throws TeiidException { Select select = query.getSelect(); Array array = new Array(Object.class, new ArrayList<Expression>(select.getSymbols())); select.getSymbols().clear(); AggregateSymbol symbol = new AggregateSymbol(AggregateSymbol.Type.ARRAY_AGG.name(), false, array); select.addSymbol(symbol); symbol.setOrderBy(expandOrder); Criteria crit = node.buildJoinCriteria(expandResource, navigationProperty); if (crit != null) { query.setCriteria(Criteria.combineCriteria(crit, query.getCriteria())); } // else assertion error? expandResource.setColumnIndex(outerQuery.getSelect().getCount() + 1); ScalarSubquery agg = new ScalarSubquery(query); SubqueryHint subqueryHint = new SubqueryHint(); subqueryHint.setMergeJoin(true); agg.setSubqueryHint(subqueryHint); outerQuery.getSelect().addSymbol(agg); }
@Test public void testScalarSubqueryWithHint() { Select s1 = new Select(); s1.addSymbol(new ElementSymbol("e1")); //$NON-NLS-1$ From f1 = new From(); f1.addGroup(new GroupSymbol("m.g1")); //$NON-NLS-1$ Query q1 = new Query(); q1.setSelect(s1); q1.setFrom(f1); ScalarSubquery obj = new ScalarSubquery(q1); SubqueryHint subqueryHint = new SubqueryHint(); subqueryHint.setMergeJoin(true); obj.setSubqueryHint(subqueryHint); helpTest(obj, " /*+ MJ */ (SELECT e1 FROM m.g1)"); //$NON-NLS-1$ }
q.getSelect().addSymbol(new AggregateSymbol(type.name(), false, expr)); ScalarSubquery ss = new ScalarSubquery(q); ss.setSubqueryHint(criteria.getSubqueryHint()); cc.setRightExpression(ss); cc.setOperator(criteria.getOperator());
q.getSelect().addSymbol(new AggregateSymbol(type.name(), false, expr)); ScalarSubquery ss = new ScalarSubquery(q); ss.setSubqueryHint(criteria.getSubqueryHint()); cc.setRightExpression(ss); cc.setOperator(criteria.getOperator());
q.getSelect().addSymbol(new AggregateSymbol(type.name(), false, expr)); ScalarSubquery ss = new ScalarSubquery(q); ss.setSubqueryHint(criteria.getSubqueryHint()); cc.setRightExpression(ss); cc.setOperator(criteria.getOperator());
subquery = subquery(info); ScalarSubquery ss = new ScalarSubquery(subquery); ss.setSubqueryHint(hint); expression = ss; } else {
subquery = subquery(info); ScalarSubquery ss = new ScalarSubquery(subquery); ss.setSubqueryHint(hint); expression = ss; } else {
subquery = subquery(info); ScalarSubquery ss = new ScalarSubquery(subquery); ss.setSubqueryHint(hint); expression = ss; } else {