public void visit(AndOr obj) { String opString = obj.getOperator().toString(); appendNestedCondition(obj, obj.getLeftCondition()); buffer.append(Tokens.SPACE) .append(opString) .append(Tokens.SPACE); appendNestedCondition(obj, obj.getRightCondition()); }
public AndOr createAndOr(AndOr.Operator operator, Condition left, Condition right) { return new AndOr(left, right, operator); }
@Override public void visit(AndOr obj) { visitNode(obj.getLeftCondition()); visitNode(obj.getRightCondition()); }
@Test public void testExpansion1() throws Exception { SetCriteria inCriteria = helpExample(false); LanguageBridgeFactory lbf = new LanguageBridgeFactory(RealMetadataFactory.example1Cached()); lbf.setMaxInPredicateSize(2); AndOr or = (AndOr) lbf.translate(inCriteria); assertEquals(Operator.OR, or.getOperator()); assertEquals(2, ((In)or.getRightCondition()).getRightExpressions().size()); inCriteria.setNegated(true); AndOr and = (AndOr) lbf.translate(inCriteria); assertEquals(Operator.AND, and.getOperator()); assertEquals("300 NOT IN (100, 200) AND 300 NOT IN (300, 400)", and.toString()); }
protected void appendNestedCondition(AndOr parent, Condition condition) { if (condition instanceof AndOr) { AndOr nested = (AndOr)condition; if (nested.getOperator() != parent.getOperator()) { buffer.append(Tokens.LPAREN); append(condition); buffer.append(Tokens.RPAREN); return; } } append(condition); }
public void visit(AndOr obj) { visitNode(obj.getLeftCondition()); visitNode(obj.getRightCondition()); }
protected void appendNestedCondition(AndOr parent, Condition condition) { if (condition instanceof AndOr) { AndOr nested = (AndOr)condition; if (nested.getOperator() != parent.getOperator()) { this.filter.append(Tokens.LPAREN); append(condition); this.filter.append(Tokens.RPAREN); return; } } append(condition); }
@Override public void visit(AndOr obj) { this.criteriaBuffer.add(OPEN); super.visitNode(obj.getLeftCondition()); this.criteriaBuffer.add(CLOSE); this.criteriaBuffer.add(SPACE); this.criteriaBuffer.add(obj.getOperator().toString()); this.criteriaBuffer.add(SPACE); this.criteriaBuffer.add(OPEN); super.visitNode(obj.getRightCondition()); this.criteriaBuffer.add(CLOSE); }
public void testGetCriteria() throws Exception { AndOr cc = example(org.teiid.query.sql.lang.CompoundCriteria.AND); assertTrue(cc.getLeftCondition() instanceof Comparison); assertTrue(cc.getRightCondition() instanceof Comparison); }
protected void appendNestedCondition(AndOr parent, Condition condition) { if (condition instanceof AndOr) { AndOr nested = (AndOr)condition; if (nested.getOperator() != parent.getOperator()) { this.filter.append(Tokens.LPAREN); append(condition); this.filter.append(Tokens.RPAREN); return; } } append(condition); }
/** * Combines a list of conditions under a single AndOr * @param crits * @return */ public static Condition combineCriteria(List<Condition> crits) { if(crits == null || crits.isEmpty()) { return null; } if (crits.size() == 1) { return crits.get(0); } Condition result = null; for (Condition crit : crits) { if (result == null) { result = crit; } else { result = new AndOr(result, crit, Operator.AND); } } return result; }
@Override public void visit(AndOr obj) { String opString = obj.getOperator().name().toLowerCase(); appendNestedCondition(obj, obj.getLeftCondition()); this.filter.append(Tokens.SPACE) .append(opString) .append(Tokens.SPACE); appendNestedCondition(obj, obj.getRightCondition()); }
public void testGetOperator() throws Exception { assertEquals(Operator.AND, example(org.teiid.query.sql.lang.CompoundCriteria.AND).getOperator()); assertEquals(Operator.OR, example(org.teiid.query.sql.lang.CompoundCriteria.OR).getOperator()); }
AndOr translate(CompoundCriteria criteria) { List nestedCriteria = criteria.getCriteria(); int size = nestedCriteria.size(); AndOr.Operator op = criteria.getOperator() == CompoundCriteria.AND?AndOr.Operator.AND:AndOr.Operator.OR; AndOr result = new AndOr(translate((Criteria)nestedCriteria.get(size - 2)), translate((Criteria)nestedCriteria.get(size - 1)), op); for (int i = nestedCriteria.size() - 3; i >= 0; i--) { result = new AndOr(translate((Criteria)nestedCriteria.get(i)), result, op); } return result; }
@Override public void visit(AndOr obj) { String opString = obj.getOperator().name().toLowerCase(); appendNestedCondition(obj, obj.getLeftCondition()); this.filter.append(Tokens.SPACE) .append(opString) .append(Tokens.SPACE); appendNestedCondition(obj, obj.getRightCondition()); }
@Test public void testExpansion() throws Exception { SetCriteria inCriteria = helpExample(false); LanguageBridgeFactory lbf = new LanguageBridgeFactory(RealMetadataFactory.example1Cached()); lbf.setConvertIn(true); AndOr or = (AndOr) lbf.translate(inCriteria); assertEquals(Operator.OR, or.getOperator()); inCriteria.setNegated(true); AndOr and = (AndOr) lbf.translate(inCriteria); assertEquals(Operator.AND, and.getOperator()); }
AndOr translate(CompoundCriteria criteria) { List nestedCriteria = criteria.getCriteria(); int size = nestedCriteria.size(); AndOr.Operator op = criteria.getOperator() == CompoundCriteria.AND?AndOr.Operator.AND:AndOr.Operator.OR; AndOr result = new AndOr(translate((Criteria)nestedCriteria.get(size - 2)), translate((Criteria)nestedCriteria.get(size - 1)), op); for (int i = nestedCriteria.size() - 3; i >= 0; i--) { result = new AndOr(translate((Criteria)nestedCriteria.get(i)), result, op); } return result; }
/** * Helper method for {@link #separateCriteriaByAnd(Condition)} that * can be called recursively to collect parts. * @param crit Crit to break apart * @param parts List to add parts to */ private static void separateCriteria(Condition crit, List<Condition> parts) { if(crit instanceof AndOr) { AndOr compCrit = (AndOr) crit; if(compCrit.getOperator() == Operator.AND) { separateCriteria(compCrit.getLeftCondition(), parts); separateCriteria(compCrit.getRightCondition(), parts); } else { parts.add(crit); } } else { parts.add(crit); } }
AndOr translate(CompoundCriteria criteria) { List nestedCriteria = criteria.getCriteria(); int size = nestedCriteria.size(); AndOr.Operator op = criteria.getOperator() == CompoundCriteria.AND?AndOr.Operator.AND:AndOr.Operator.OR; AndOr result = new AndOr(translate((Criteria)nestedCriteria.get(size - 2)), translate((Criteria)nestedCriteria.get(size - 1)), op); for (int i = nestedCriteria.size() - 3; i >= 0; i--) { result = new AndOr(translate((Criteria)nestedCriteria.get(i)), result, op); } return result; }
@Override public void visit(AndOr obj) { append(obj.getLeftCondition()); append(obj.getRightCondition()); if (!this.exceptions.isEmpty()) { return; } boolean right = this.match.pop(); boolean left = this.match.pop(); switch(obj.getOperator()) { case AND: this.match.push(right && left); break; case OR: this.match.push(right || left); break; } }