Search in sources :

Example 1 with In

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());
}
Also used : In(org.teiid.language.In) Literal(org.teiid.language.Literal) Test(org.junit.Test)

Example 2 with In

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());
}
Also used : In(org.teiid.language.In) SetCriteria(org.teiid.query.sql.lang.SetCriteria) AndOr(org.teiid.language.AndOr) Test(org.junit.Test)

Example 3 with In

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);
    }
}
Also used : Condition(org.teiid.language.Condition) Expression(org.teiid.language.Expression) Comparison(org.teiid.language.Comparison) In(org.teiid.language.In) Literal(org.teiid.language.Literal) ArrayList(java.util.ArrayList)

Example 4 with In

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;
    }
}
Also used : Expression(org.teiid.language.Expression) In(org.teiid.language.In) ArrayList(java.util.ArrayList) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) List(java.util.List) TranslatorException(org.teiid.translator.TranslatorException)

Aggregations

In (org.teiid.language.In)4 ArrayList (java.util.ArrayList)2 Test (org.junit.Test)2 Expression (org.teiid.language.Expression)2 Literal (org.teiid.language.Literal)2 Iterator (java.util.Iterator)1 List (java.util.List)1 AndOr (org.teiid.language.AndOr)1 Comparison (org.teiid.language.Comparison)1 Condition (org.teiid.language.Condition)1 SetCriteria (org.teiid.query.sql.lang.SetCriteria)1 TranslatorException (org.teiid.translator.TranslatorException)1