public final CaseWhenStatContext caseWhenStat() throws RecognitionException { CaseWhenStatContext _localctx = new CaseWhenStatContext(_ctx, getState()); enterRule(_localctx, 36, RULE_caseWhenStat); try { enterOuterAlt(_localctx, 1); { setState(274); match(When); setState(275); ((CaseWhenStatContext)_localctx).e1 = expression(); setState(276); match(Then); setState(277); ((CaseWhenStatContext)_localctx).e2 = expression(); ((CaseWhenStatContext)_localctx).e = new IfExpression.IfCondition(((CaseWhenStatContext)_localctx).e1.e, ((CaseWhenStatContext)_localctx).e2.e); } } catch (RecognitionException re) { _localctx.exception = re; _errHandler.reportError(this, re); _errHandler.recover(this, re); } finally { exitRule(); } return _localctx; }
public final IfStatContext ifStat() throws RecognitionException { IfStatContext _localctx = new IfStatContext(_ctx, getState()); enterRule(_localctx, 30, RULE_ifStat); try { enterOuterAlt(_localctx, 1); { setState(249); match(If); setState(250); ((IfStatContext)_localctx).e1 = expression(); setState(251); match(Then); setState(252); ((IfStatContext)_localctx).e2 = expression(); ((IfStatContext)_localctx).i = new IfExpression.IfCondition(((IfStatContext)_localctx).e1.e, ((IfStatContext)_localctx).e2.e); } } catch (RecognitionException re) { _localctx.exception = re; _errHandler.reportError(this, re); _errHandler.recover(this, re); } finally { exitRule(); } return _localctx; }
public final ElseIfStatContext elseIfStat() throws RecognitionException { ElseIfStatContext _localctx = new ElseIfStatContext(_ctx, getState()); enterRule(_localctx, 32, RULE_elseIfStat); try { enterOuterAlt(_localctx, 1); { setState(255); match(Else); setState(256); match(If); setState(257); ((ElseIfStatContext)_localctx).e1 = expression(); setState(258); match(Then); setState(259); ((ElseIfStatContext)_localctx).e2 = expression(); ((ElseIfStatContext)_localctx).i = new IfExpression.IfCondition(((ElseIfStatContext)_localctx).e1.e, ((ElseIfStatContext)_localctx).e2.e); } } catch (RecognitionException re) { _localctx.exception = re; _errHandler.reportError(this, re); _errHandler.recover(this, re); } finally { exitRule(); } return _localctx; }
conditions = new IfExpression.IfCondition(newCondition, newExpr); conditions = new IfExpression.IfCondition(newCondition, addCastExpression(conditions.expression, outputType, functionLookupContext, errorCollector, false)); newElseExpr = addCastExpression(newElseExpr, outputType, functionLookupContext, errorCollector, false); if (leastRestrictive != thenType) { conditions = new IfExpression.IfCondition(newCondition, addCastExpression(conditions.expression, newElseExpr.getMajorType(), functionLookupContext, errorCollector)); } else if (leastRestrictive != elseType) { conditions = new IfExpression.IfCondition(conditions.condition, rewriteNullExpression(conditions.expression, type)); IfExpression.IfCondition condition = conditions; if (condition.expression.getMajorType().getMode() != DataMode.OPTIONAL) { conditions = new IfExpression.IfCondition(condition.condition, getConvertToNullableExpr(ImmutableList.of(condition.expression), condition.expression.getMajorType().getMinorType(), functionLookupContext));
elseExpression = IfExpression.newBuilder() .setElse(elseExpression) .setIfCondition(new IfCondition(caseArgs.get(i + 1), caseArgs.get(i))).build();
IfExpression.IfCondition condition = new IfCondition(ifCondition, thenExpression); ifConditions.add(condition);
public final ElseIfStatContext elseIfStat() throws RecognitionException { ElseIfStatContext _localctx = new ElseIfStatContext(_ctx, getState()); enterRule(_localctx, 32, RULE_elseIfStat); try { enterOuterAlt(_localctx, 1); { setState(255); match(Else); setState(256); match(If); setState(257); ((ElseIfStatContext)_localctx).e1 = expression(); setState(258); match(Then); setState(259); ((ElseIfStatContext)_localctx).e2 = expression(); ((ElseIfStatContext)_localctx).i = new IfExpression.IfCondition(((ElseIfStatContext)_localctx).e1.e, ((ElseIfStatContext)_localctx).e2.e); } } catch (RecognitionException re) { _localctx.exception = re; _errHandler.reportError(this, re); _errHandler.recover(this, re); } finally { exitRule(); } return _localctx; }
public final IfStatContext ifStat() throws RecognitionException { IfStatContext _localctx = new IfStatContext(_ctx, getState()); enterRule(_localctx, 30, RULE_ifStat); try { enterOuterAlt(_localctx, 1); { setState(249); match(If); setState(250); ((IfStatContext)_localctx).e1 = expression(); setState(251); match(Then); setState(252); ((IfStatContext)_localctx).e2 = expression(); ((IfStatContext)_localctx).i = new IfExpression.IfCondition(((IfStatContext)_localctx).e1.e, ((IfStatContext)_localctx).e2.e); } } catch (RecognitionException re) { _localctx.exception = re; _errHandler.reportError(this, re); _errHandler.recover(this, re); } finally { exitRule(); } return _localctx; }
public final CaseWhenStatContext caseWhenStat() throws RecognitionException { CaseWhenStatContext _localctx = new CaseWhenStatContext(_ctx, getState()); enterRule(_localctx, 36, RULE_caseWhenStat); try { enterOuterAlt(_localctx, 1); { setState(274); match(When); setState(275); ((CaseWhenStatContext)_localctx).e1 = expression(); setState(276); match(Then); setState(277); ((CaseWhenStatContext)_localctx).e2 = expression(); ((CaseWhenStatContext)_localctx).e = new IfExpression.IfCondition(((CaseWhenStatContext)_localctx).e1.e, ((CaseWhenStatContext)_localctx).e2.e); } } catch (RecognitionException re) { _localctx.exception = re; _errHandler.reportError(this, re); _errHandler.recover(this, re); } finally { exitRule(); } return _localctx; }
/** * Wraps the comparison function in an If-statement which compares the types first, evaluating the comaprison function only * if the types are equivialent * * @param comparisonFunction * @param args * @return */ private static LogicalExpression getTypeComparisonFunction(LogicalExpression comparisonFunction, HoldingContainer... args) { List<LogicalExpression> argExpressions = Lists.newArrayList(); List<MajorType> argTypes = Lists.newArrayList(); for(HoldingContainer c : args) { argTypes.add(c.getMajorType()); argExpressions.add(new HoldingContainerExpression(c)); } FunctionCall call = new FunctionCall("compareType", argExpressions, ExpressionPosition.UNKNOWN); List<LogicalExpression> newArgs = Lists.newArrayList(); newArgs.add(call); newArgs.add(new IntExpression(0, ExpressionPosition.UNKNOWN)); FunctionCall notEqual = new FunctionCall("not_equal", newArgs, ExpressionPosition.UNKNOWN); IfExpression.IfCondition ifCondition = new IfCondition(notEqual, call); IfExpression ifExpression = IfExpression.newBuilder().setIfCondition(ifCondition).setElse(comparisonFunction).build(); return ifExpression; }
@Override public LogicalExpression visitIfExpression(IfExpression ifExpr, Void value) throws RuntimeException{ LogicalExpression newElseExpr = ifExpr.elseExpression.accept(this, value); IfCondition conditions = ifExpr.ifCondition; LogicalExpression newCondition = conditions.condition.accept(this, value); LogicalExpression newExpr = conditions.expression.accept(this, value); conditions = new IfExpression.IfCondition(newCondition, newExpr); return IfExpression.newBuilder().setElse(newElseExpr).setIfCondition(conditions).build(); }
@Override public LogicalExpression visitIfExpression(IfExpression ifExpr, Void value) throws RuntimeException { LogicalExpression ifCondition = ifExpr.ifCondition.condition.accept(this, null); LogicalExpression ifExpression = ifExpr.ifCondition.expression.accept(this, null); LogicalExpression elseExpression = ifExpr.elseExpression.accept(this, null); IfExpression.IfCondition condition = new IfCondition(ifCondition, ifExpression); return IfExpression.newBuilder().setIfCondition(condition).setElse(elseExpression).build(); }
@Override public LogicalExpression visitIfExpression(IfExpression ifExpr, Void value) throws RuntimeException{ LogicalExpression newElseExpr = ifExpr.elseExpression.accept(this, value); IfCondition conditions = ifExpr.ifCondition; LogicalExpression newCondition = conditions.condition.accept(this, value); LogicalExpression newExpr = conditions.expression.accept(this, value); conditions = new IfExpression.IfCondition(newCondition, newExpr); return IfExpression.newBuilder().setElse(newElseExpr).setIfCondition(conditions).build(); }