use of org.teiid.language.In in project teiid by teiid.
the class TestInCriteriaImpl method testGetLeftExpression.
@Test
public void testGetLeftExpression() throws Exception {
In inCriteria = example(false);
assertNotNull(inCriteria.getLeftExpression());
assertTrue(inCriteria.getLeftExpression() instanceof Literal);
assertEquals(new Integer(300), ((Literal) inCriteria.getLeftExpression()).getValue());
}
use of org.teiid.language.In in project teiid by teiid.
the class TestInCriteriaImpl method testExpansion1.
@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());
}
use of org.teiid.language.In in project teiid by teiid.
the class TeradataSQLConversionVisitor method visit.
@Override
public void visit(In obj) {
List<Expression> exprs = obj.getRightExpressions();
boolean decompose = false;
for (Expression expr : exprs) {
if (!(expr instanceof Literal)) {
decompose = true;
break;
}
}
if (decompose) {
List<Expression> literals = new ArrayList<Expression>();
Comparison.Operator opCode = obj.isNegated() ? Comparison.Operator.NE : Comparison.Operator.EQ;
if (exprs.size() > 1) {
Condition left = null;
for (Expression expr : obj.getRightExpressions()) {
if (expr instanceof Literal) {
literals.add(expr);
} else {
if (left == null) {
left = LanguageFactory.INSTANCE.createCompareCriteria(opCode, obj.getLeftExpression(), expr);
} else {
left = LanguageFactory.INSTANCE.createAndOr(obj.isNegated() ? Operator.AND : Operator.OR, left, LanguageFactory.INSTANCE.createCompareCriteria(opCode, obj.getLeftExpression(), expr));
}
}
}
if (!literals.isEmpty()) {
left = LanguageFactory.INSTANCE.createAndOr(obj.isNegated() ? Operator.AND : Operator.OR, left, new In(obj.getLeftExpression(), literals, obj.isNegated()));
}
buffer.append(Tokens.LPAREN);
super.visit((AndOr) left);
buffer.append(Tokens.RPAREN);
} else {
super.visit(LanguageFactory.INSTANCE.createCompareCriteria(opCode, obj.getLeftExpression(), exprs.get(0)));
}
} else {
super.visit(obj);
}
}
use of org.teiid.language.In in project teiid by teiid.
the class CoherenceVisitor method visit.
public void visit(In obj) {
// $NON-NLS-1$
LogManager.logTrace(LogConstants.CTX_CONNECTOR, "Parsing IN criteria.");
// isNegated = ((In) criteria).isNegated();
try {
Expression lhs = ((In) obj).getLeftExpression();
String lhsString = getExpressionString(lhs);
List<Expression> rhsList = ((In) obj).getRightExpressions();
Class type = null;
List parms = new ArrayList(rhsList.size());
Iterator iter = rhsList.iterator();
while (iter.hasNext()) {
Expression expr = (Expression) iter.next();
type = addParmFromExpression(expr, parms);
}
addInCriteria(lhsString, parms, type);
// filter = CoherenceFilterUtil.createInFilter(lhsString, parms, type);
} catch (TranslatorException t) {
exception = t;
}
}
Aggregations