/** * Deep copy of object. The values Iterator of this object * will not be cloned - it will be null in the new object * (see #setValueIterator setValueIterator}). * @return Deep copy of object * @see java.lang.Object#clone() */ public Object clone() { ExistsCriteria ec = new ExistsCriteria((QueryCommand) this.command.clone()); ec.subqueryHint = this.subqueryHint.clone(); ec.setNegated(this.negated); ec.shouldEvaluate = this.shouldEvaluate; return ec; }
@Override public void visit( ExistsCriteria obj ) { if (obj.isNegated()) { append(NOT); append(SPACE); } append(EXISTS); addSubqueryHint(obj.getSubqueryHint()); append(" ("); //$NON-NLS-1$ visitNode(obj.getCommand()); append(")"); //$NON-NLS-1$ }
final public ExistsCriteria existsCriteria(ParseInfo info) throws ParseException { QueryCommand subquery = null; ExistsCriteria.SubqueryHint hint = null; jj_consume_token(EXISTS); hint = getSubqueryHint(getToken(1)); subquery = subquery(info); ExistsCriteria existsCrit = new ExistsCriteria(subquery); existsCrit.setSubqueryHint(hint); {if (true) return existsCrit;} throw new Error("Missing return statement in function"); }
Condition translate(ExistsCriteria criteria) { Exists exists = new Exists(translate(criteria.getCommand())); if (criteria.isNegated()) { return new Not(exists); } return exists; }
public void visit(ExistsCriteria obj) { preVisitVisitor(obj); if (deep && (!obj.shouldEvaluate() || !skipEvaluatable)) { visitNode(obj.getCommand()); } postVisitVisitor(obj); } public void visit(ExpressionSymbol obj) {
query.setCriteria(crit); ExistsCriteria ec = new ExistsCriteria(); ec.setSubqueryHint(new ExistsCriteria.SubqueryHint()); ec.getSubqueryHint().setDepJoin(); ec.setCommand(query); Criteria existing = stagableQuery.getCriteria(); stagableQuery.setCriteria(Criteria.combineCriteria(existing, ec));
/** * If rows are returned but they contain null, the result should * still be true. */ @Test public void testExistsCriteria3() throws Exception { ExistsCriteria crit = new ExistsCriteria(new Query()); ArrayList values = new ArrayList(); values.add(null); values.add(null); values.add(null); helpTestCompareSubqueryCriteria(crit, true, values); }
/** * @see org.teiid.query.sql.LanguageVisitor#visit(org.teiid.query.sql.lang.ExistsCriteria) */ public void visit(ExistsCriteria crit) { // Check if exists criteria are allowed if(! this.caps.supportsCapability(Capability.CRITERIA_EXISTS)) { markInvalid(crit, "Exists is not supported by source"); //$NON-NLS-1$ return; } if (crit.isNegated() && !this.caps.supportsCapability(Capability.CRITERIA_NOT)) { markInvalid(crit, "Negation is not supported by source"); //$NON-NLS-1$ return; } try { if (validateSubqueryPushdown(crit, modelID, metadata, capFinder, analysisRecord) == null) { if (crit.getCommand().getCorrelatedReferences() == null) { crit.setShouldEvaluate(true); } else { markInvalid(crit.getCommand(), "Subquery cannot be pushed down"); //$NON-NLS-1$ } } } catch (TeiidComponentException e) { handleException(e); } }
} else if (criteria instanceof ExistsCriteria) { ExistsCriteria exists = (ExistsCriteria)criteria; if (exists.shouldEvaluate() && processing) { return getCriteria(evaluator.evaluate(exists, null)); if (!RelationalNodeUtil.shouldExecute(exists.getCommand(), false, true)) { return exists.isNegated()?TRUE_CRITERIA:FALSE_CRITERIA; if (exists.getCommand().getProcessorPlan() == null) { if (exists.getCommand() instanceof Query) { Query query = (Query)exists.getCommand(); if ((query.getLimit() == null || query.getOrderBy() == null) && query.getSelect().getProjectedSymbols().size() > 1) { query.getSelect().clearSymbols();
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; }
/** * @see org.teiid.query.sql.LanguageVisitor#visit(org.teiid.query.sql.lang.ExistsCriteria) */ public void visit(ExistsCriteria obj) { this.commands.add(obj.getCommand()); }
public void visit(ExistsCriteria obj) { if (obj.shouldEvaluate()) { evaluationNotPossible(EvaluationLevel.PROCESSING); } else { evaluationNotPossible(EvaluationLevel.PUSH_DOWN); } }
private boolean evaluate(ExistsCriteria criteria, List<?> tuple) throws BlockedException, TeiidComponentException, ExpressionEvaluationException { ValueIterator valueIter; try { valueIter = evaluateSubquery(criteria, tuple); } catch (TeiidProcessingException e) { throw new ExpressionEvaluationException(e); } if(valueIter.hasNext()) { return !criteria.isNegated(); } return criteria.isNegated(); }
((ScalarSubquery) subqueryContainer).setShouldEvaluate(true); } else if (subqueryContainer instanceof ExistsCriteria) { ((ExistsCriteria) subqueryContainer).setShouldEvaluate(true); } else { throw new QueryPlannerException(QueryPlugin.Event.TEIID30253, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30253, container));
@Test public void testExistsCriteria() throws Exception { ExistsCriteria crit = new ExistsCriteria(new Query()); ArrayList values = new ArrayList(); values.add("a"); //$NON-NLS-1$ values.add("b"); //$NON-NLS-1$ values.add("c"); //$NON-NLS-1$ helpTestCompareSubqueryCriteria(crit, true, values); }
public void visit(ExistsCriteria obj) { preVisitVisitor(obj); if (deep && (!obj.shouldEvaluate() || !skipEvaluatable)) { visitNode(obj.getCommand()); } postVisitVisitor(obj); } public void visit(ExpressionSymbol obj) {
/** * @see org.teiid.query.sql.LanguageVisitor#visit(org.teiid.query.sql.lang.ExistsCriteria) */ public void visit(ExistsCriteria crit) { // Check if exists criteria are allowed if(! this.caps.supportsCapability(Capability.CRITERIA_EXISTS)) { markInvalid(crit, "Exists is not supported by source"); //$NON-NLS-1$ return; } if (crit.isNegated() && !this.caps.supportsCapability(Capability.CRITERIA_NOT)) { markInvalid(crit, "Negation is not supported by source"); //$NON-NLS-1$ return; } try { if (validateSubqueryPushdown(crit, modelID, metadata, capFinder, analysisRecord) == null) { if (crit.getCommand().getCorrelatedReferences() == null) { crit.setShouldEvaluate(true); } else { markInvalid(crit.getCommand(), "Subquery cannot be pushed down"); //$NON-NLS-1$ } } } catch (TeiidComponentException e) { handleException(e); } }
} else if (criteria instanceof ExistsCriteria) { ExistsCriteria exists = (ExistsCriteria)criteria; if (exists.shouldEvaluate() && processing) { return getCriteria(evaluator.evaluate(exists, null)); if (!RelationalNodeUtil.shouldExecute(exists.getCommand(), false, true)) { return exists.isNegated()?TRUE_CRITERIA:FALSE_CRITERIA; if (exists.getCommand().getProcessorPlan() == null) { if (exists.getCommand() instanceof Query) { Query query = (Query)exists.getCommand(); if ((query.getLimit() == null || query.getOrderBy() == null) && query.getSelect().getProjectedSymbols().size() > 1) { query.getSelect().clearSymbols();
/** * @see org.teiid.query.sql.LanguageVisitor#visit(org.teiid.query.sql.lang.ExistsCriteria) */ public void visit(ExistsCriteria obj) { this.commands.add(obj.getCommand()); }
Condition translate(ExistsCriteria criteria) { Exists exists = new Exists(translate(criteria.getCommand())); if (criteria.isNegated()) { return new Not(exists); } return exists; }