/** * @see java.lang.Object#clone() */ public Object clone() { int whenCount = getWhenCount(); ArrayList whenCopy = new ArrayList(whenCount); ArrayList thenCopy = new ArrayList(whenCount); for(int i = 0; i < whenCount; i++) { whenCopy.add(getWhenCriteria(i).clone()); thenCopy.add(getThenExpression(i).clone()); } Expression elseExpr = getElseExpression(); if (elseExpr != null) { elseExpr = (Expression)getElseExpression().clone(); } SearchedCaseExpression copy = new SearchedCaseExpression(whenCopy, thenCopy); copy.setType(getType()); copy.setElseExpression(elseExpr); return copy; }
public void visit(SearchedCaseExpression obj) { int whenCount = obj.getWhenCount(); ArrayList<Expression> thens = new ArrayList<Expression>(whenCount); ArrayList<Criteria> whens = new ArrayList<Criteria>(whenCount); for (int i = 0; i < whenCount; i++) { thens.add(replaceExpression(obj.getThenExpression(i))); Expression ex = replaceExpression(obj.getWhenCriteria(i)); if (!(ex instanceof Criteria)) { whens.add(new ExpressionCriteria(ex)); } else { whens.add((Criteria)ex); } } obj.setWhen(whens, thens); if (obj.getElseExpression() != null) { obj.setElseExpression(replaceExpression(obj.getElseExpression())); } }
private Object evaluate(SearchedCaseExpression expr, List<?> tuple) throws ExpressionEvaluationException, BlockedException, TeiidComponentException { for (int i = 0; i < expr.getWhenCount(); i++) { if (evaluate(expr.getWhenCriteria(i), tuple)) { return internalEvaluate(expr.getThenExpression(i), tuple); } } if (expr.getElseExpression() != null) { return internalEvaluate(expr.getElseExpression(), tuple); } return null; }
/** * @param limitNode * @param child * @throws TeiidComponentException * @throws BlockedException * @throws ExpressionEvaluationException */ static Expression getMinValue(Expression expr1, Expression expr2) { if (expr1 == null) { return expr2; } if (expr2 == null) { return expr1; } Criteria crit = new CompareCriteria(expr1, CompareCriteria.LT, expr2); SearchedCaseExpression sce = new SearchedCaseExpression(Arrays.asList(new Object[] {crit}), Arrays.asList(new Object[] {expr1})); sce.setElseExpression(expr2); sce.setType(expr1.getType()); return evaluateIfPossible(sce); }
void resolveSearchedCaseExpression(SearchedCaseExpression obj) throws QueryResolverException { if (obj.getType() != null) { return; final int whenCount = obj.getWhenCount(); thenType = obj.getThenExpression(i).getType(); Expression elseExpr = obj.getElseExpression(); if (elseExpr != null) { if (thenType == null) { then = obj.getThenExpression(i); setDesiredType(then, thenType, obj); thenTypeNames.add(DataTypeManager.getDataTypeName(then.getType())); thens.add(ResolverUtil.convertExpression(obj.getThenExpression(i), thenTypeName, metadata)); obj.setWhen(obj.getWhen(), thens); if (elseExpr != null) { obj.setElseExpression(ResolverUtil.convertExpression(elseExpr, thenTypeName, metadata)); obj.setType(DataTypeManager.getDataTypeClass(thenTypeName));
private org.teiid.query.sql.symbol.Expression addOne( org.teiid.query.sql.symbol.Expression expr) { org.teiid.query.sql.symbol.Expression when = new CompareCriteria(expr, CompareCriteria.LT, new Constant(0)); SearchedCaseExpression caseExpr = new SearchedCaseExpression(Arrays.asList(when), Arrays.asList(expr)); caseExpr.setElseExpression(new Function("+", new org.teiid.query.sql.symbol.Expression[] { expr, new Constant(1) })); return caseExpr; }
caseExpr.setWhen(null, null); fail("Setting WHEN and THEN to null should have failed."); //$NON-NLS-1$ } catch (IllegalArgumentException e) { caseExpr.setWhen(getWhenCriteria(2), null); fail("Setting THEN to null should have failed."); //$NON-NLS-1$ } catch (IllegalArgumentException e) { caseExpr.setWhen(null, TestCaseExpression.getThenExpressions(2)); fail("Setting WHEN to null should have failed."); //$NON-NLS-1$ } catch (IllegalArgumentException e) { caseExpr.setWhen(getWhenCriteria(0), TestCaseExpression.getThenExpressions(0)); fail("Setting WHEN and THEN to empty lists should have failed."); //$NON-NLS-1$ } catch (IllegalArgumentException e) { caseExpr.setWhen(TestCaseExpression.getWhenExpressions(3), TestCaseExpression.getThenExpressions(3)); fail("Setting WHEN non Criteria types should have failed."); //$NON-NLS-1$ } catch (IllegalArgumentException e) { caseExpr.setWhen(getWhenCriteria(3), getWhenCriteria(3)); ArrayList whens = new ArrayList(); whens.add(new CompareCriteria(new ElementSymbol("abc"), CompareCriteria.EQ, new Constant(new Integer(20000)))); //$NON-NLS-1$ thens.add(new Constant(new Integer(20000))); thens.add(new Constant(new Integer(30000))); caseExpr.setWhen(whens, thens); assertEquals(2, caseExpr.getWhenCount()); assertEquals(new CompareCriteria(new ElementSymbol("abc"), CompareCriteria.EQ, new Constant(new Integer(20000))), caseExpr.getWhenCriteria(0)); //$NON-NLS-1$
cond = new ExpressionCriteria(cond); SearchedCaseExpression sce = new SearchedCaseExpression(Arrays.asList(cond), Arrays.asList(ex)); sce.setType(ex.getType()); expression.setCondition(null); expression.setArgs(new Expression[] {sce});
@Test public void testExpressionCriteria() throws Exception { SearchedCaseExpression sce = new SearchedCaseExpression(Arrays.asList(new ExpressionCriteria(new ElementSymbol("x"))), Arrays.asList(new ElementSymbol("y"))); helpTestExpression("case when x then y end", "CASE WHEN x THEN y END", sce); }
public void testSetElseExpression() { SearchedCaseExpression expr = example(3); expr.setElseExpression(new Constant(new Integer(1000))); assertEquals(new Constant(new Integer(1000)), expr.getElseExpression()); expr.setElseExpression(null); assertNull(expr.getElseExpression()); }
public void testEquals() { SearchedCaseExpression sc1 = example(3); assertTrue(sc1.equals(sc1)); assertTrue(sc1.equals(sc1.clone())); assertTrue(sc1.clone().equals(sc1)); assertTrue(sc1.equals(example(3))); SearchedCaseExpression sc2 = example(4); assertFalse(sc1.equals(sc2)); assertFalse(sc2.equals(sc1)); SearchedCaseExpression sc3 = example(3); sc3.setElseExpression(new ElementSymbol("y")); //$NON-NLS-1$ assertFalse(sc1.equals(sc3)); assertFalse(sc3.equals(sc1)); } }
public static void helpTestWhenCriteria(SearchedCaseExpression caseExpr, int expectedWhens) { assertEquals(expectedWhens, caseExpr.getWhenCount()); ElementSymbol x = new ElementSymbol("x"); //$NON-NLS-1$ for (int i = 0; i < expectedWhens; i++) { assertEquals(new CompareCriteria(x, CompareCriteria.EQ, new Constant(new Integer(i))), caseExpr.getWhenCriteria(i)); } }
@Test public void testSearchedCaseExpression2() { SearchedCaseExpression example = TestSearchedCaseExpression.example(2); example.setElseExpression(null); helpTest(example, "CASE WHEN x = 0 THEN 0 WHEN x = 1 THEN 1 END"); //$NON-NLS-1$ }
/** * Constructor for SearchedCaseExpression objects * @param when a non-null List containing at least one Criteria * @param then a non-null List containing at least one Expression */ public SearchedCaseExpression(List when, List then) { setWhen(when, then); }
public void visit(SearchedCaseExpression obj) { if (obj.getType() == null){ this.unresolvedSymbols.add(obj); } }
public void testGetWhenCount() { assertEquals(1, example(1).getWhenCount()); assertEquals(2, example(2).getWhenCount()); assertEquals(3, example(3).getWhenCount()); assertEquals(4, example(4).getWhenCount()); }
public void testGetElseExpression() { SearchedCaseExpression expr = example(3); assertEquals(new Constant(new Integer(9999)), expr.getElseExpression()); }
private Object evaluate(SearchedCaseExpression expr, List<?> tuple) throws ExpressionEvaluationException, BlockedException, TeiidComponentException { for (int i = 0; i < expr.getWhenCount(); i++) { if (evaluate(expr.getWhenCriteria(i), tuple)) { return internalEvaluate(expr.getThenExpression(i), tuple); } } if (expr.getElseExpression() != null) { return internalEvaluate(expr.getElseExpression(), tuple); } return null; }