SubqueryHint getSubqueryHint(Token t) { SubqueryHint hint = new SubqueryHint(); String[] parts = getComment(t).split("\\s"); //$NON-NLS-1$ for (int i = 0; i < parts.length; i++) { if (parts[i].equalsIgnoreCase(SubqueryHint.MJ)) { hint.setMergeJoin(true); } else if (parts[i].equalsIgnoreCase(SubqueryHint.NOUNNEST)) { hint.setNoUnnest(true); } else if (parts[i].equalsIgnoreCase(SubqueryHint.DJ)) { hint.setDepJoin(); } } return hint; }
SubqueryHint getSubqueryHint(Token t) { SubqueryHint hint = new SubqueryHint(); String[] parts = getComment(t).split("\\s"); //$NON-NLS-1$ for (int i = 0; i < parts.length; i++) { if (parts[i].equalsIgnoreCase(SubqueryHint.MJ)) { hint.setMergeJoin(true); } else if (parts[i].equalsIgnoreCase(SubqueryHint.NOUNNEST)) { hint.setNoUnnest(true); } else if (parts[i].equalsIgnoreCase(SubqueryHint.DJ)) { hint.setDepJoin(); } } return hint; }
SubqueryHint getSubqueryHint(Token t) { SubqueryHint hint = new SubqueryHint(); String[] parts = getComment(t).split("\\s"); //$NON-NLS-1$ for (int i = 0; i < parts.length; i++) { if (parts[i].equalsIgnoreCase(SubqueryHint.MJ)) { hint.setMergeJoin(true); } else if (parts[i].equalsIgnoreCase(SubqueryHint.NOUNNEST)) { hint.setNoUnnest(true); } else if (parts[i].equalsIgnoreCase(SubqueryHint.DJ)) { hint.setDepJoin(); } } return hint; }
static Query exampleExists(boolean semiJoin) { 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); Select s2 = new Select(); s2.addSymbol(new ElementSymbol("e1")); //$NON-NLS-1$ From f2 = new From(); f2.addGroup(new GroupSymbol("m.g2")); //$NON-NLS-1$ ExistsCriteria existsCrit = new ExistsCriteria(q1); existsCrit.getSubqueryHint().setMergeJoin(semiJoin); Query q2 = new Query(); q2.setSelect(s2); q2.setFrom(f2); q2.setCriteria(existsCrit); return q2; }
static Query exampleIn(boolean semiJoin) { GroupSymbol g = new GroupSymbol("db.g"); //$NON-NLS-1$ From from = new From(); from.addGroup(g); Select select = new Select(); select.addSymbol(new ElementSymbol("a")); //$NON-NLS-1$ Expression expr = new ElementSymbol("b"); //$NON-NLS-1$ Criteria criteria = new CompareCriteria(new ElementSymbol("a2"), CompareCriteria.EQ, //$NON-NLS-1$ new Constant(new Integer(5))); Query query = new Query(); query.setSelect(select); query.setFrom(from); query.setCriteria(criteria); SubquerySetCriteria subCrit = new SubquerySetCriteria(expr, query); subCrit.getSubqueryHint().setMergeJoin(semiJoin); Query outer = new Query(); outer.setSelect(select); outer.setFrom(from); outer.setCriteria(subCrit); return outer; }
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$ }