@Override public BigInteger visitTypeCalculation(TypeCalculationContext ctx) { return visit(ctx.expression()); }
@Override public BigInteger visitParenthesizedExpression(ParenthesizedExpressionContext ctx) { return visit(ctx.expression()); } }
@Override public boolean canCoerce(Type fromType, Type toType) { TypeCompatibility typeCompatibility = compatibility(fromType, toType); return typeCompatibility.isCoercible(); }
@Test public void testDivide() { assertFunction("INTERVAL '3' SECOND / 2", INTERVAL_DAY_TIME, new SqlIntervalDayTime(1500)); assertFunction("INTERVAL '6' SECOND / 2.5", INTERVAL_DAY_TIME, new SqlIntervalDayTime(2400)); assertFunction("INTERVAL '3' DAY / 2", INTERVAL_DAY_TIME, new SqlIntervalDayTime((long) (1.5 * 24 * 60 * 60 * 1000))); assertFunction("INTERVAL '4' DAY / 2.5", INTERVAL_DAY_TIME, new SqlIntervalDayTime((long) (1.6 * 24 * 60 * 60 * 1000))); }
/** * {@inheritDoc} * * <p>The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.</p> */ @Override public T visitBinaryFunctionName(TypeCalculationParser.BinaryFunctionNameContext ctx) { return visitChildren(ctx); } }
@Override public Optional<Type> getCommonSuperType(Type firstType, Type secondType) { TypeCompatibility compatibility = compatibility(firstType, secondType); if (!compatibility.isCompatible()) { return Optional.empty(); } return Optional.of(compatibility.getCommonSuperType()); }
@Override public SqlIntervalYearMonth getExpectedValue(int start, int length) { if (length == 0) { return null; } int sum = 0; for (int i = start; i < start + length; i++) { sum += i; } return new SqlIntervalYearMonth(sum); }
@Override public void enterRule(ParseTreeListener listener) { if ( listener instanceof TypeCalculationListener ) ((TypeCalculationListener)listener).enterBinaryFunction(this); } @Override
@Override public void enterRule(ParseTreeListener listener) { if ( listener instanceof TypeCalculationListener ) ((TypeCalculationListener)listener).enterNullLiteral(this); } @Override
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { case 1: return expression_sempred((ExpressionContext)_localctx, predIndex); } return true; } private boolean expression_sempred(ExpressionContext _localctx, int predIndex) {
@Override public void enterRule(ParseTreeListener listener) { if ( listener instanceof TypeCalculationListener ) ((TypeCalculationListener)listener).enterTypeCalculation(this); } @Override
@Override public void exitRule(ParseTreeListener listener) { if ( listener instanceof TypeCalculationListener ) ((TypeCalculationListener)listener).exitBinaryFunction(this); } @Override
@Override public void exitRule(ParseTreeListener listener) { if ( listener instanceof TypeCalculationListener ) ((TypeCalculationListener)listener).exitArithmeticUnary(this); } @Override
@Override public void enterRule(ParseTreeListener listener) { if ( listener instanceof TypeCalculationListener ) ((TypeCalculationListener)listener).enterNumericLiteral(this); } @Override
@Override public boolean equalTo(Block leftBlock, int leftPosition, Block rightBlock, int rightPosition) { return compareTo(leftBlock, leftPosition, rightBlock, rightPosition) == 0; }
/** * {@inheritDoc} * * <p>The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.</p> */ @Override public T visitTypeCalculation(TypeCalculationParser.TypeCalculationContext ctx) { return visitChildren(ctx); } /**
/** * {@inheritDoc} * * <p>The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.</p> */ @Override public T visitNumericLiteral(TypeCalculationParser.NumericLiteralContext ctx) { return visitChildren(ctx); } /**
/** * {@inheritDoc} * * <p>The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.</p> */ @Override public T visitIdentifier(TypeCalculationParser.IdentifierContext ctx) { return visitChildren(ctx); } /**
/** * {@inheritDoc} * * <p>The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.</p> */ @Override public T visitParenthesizedExpression(TypeCalculationParser.ParenthesizedExpressionContext ctx) { return visitChildren(ctx); } /**
/** * {@inheritDoc} * * <p>The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.</p> */ @Override public T visitArithmeticBinary(TypeCalculationParser.ArithmeticBinaryContext ctx) { return visitChildren(ctx); } /**