literal.getParserPosition(), typeFactory.getTypeSystem()); Util.discard(values);
final BlockBuilder builder = new BlockBuilder(); final JavaTypeFactoryImpl javaTypeFactory = new JavaTypeFactoryImpl(rexBuilder.getTypeFactory().getTypeSystem());
rexBuilder.getTypeFactory().createSqlType( SqlTypeName.TIMESTAMP, rexBuilder.getTypeFactory().getTypeSystem().getDefaultPrecision(SqlTypeName.TIMESTAMP)), false); break; rexBuilder.getTypeFactory().getTypeSystem().getDefaultPrecision(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE)); break; case INTERVAL_YEAR_MONTH:
boolean startPrecisionOutOfRange = false; boolean fractionalSecondPrecisionOutOfRange = false; final RelDataTypeSystem typeSystem = typeFactory.getTypeSystem();
UnknownSqlType(RelDataTypeFactory typeFactory) { super(typeFactory.getTypeSystem(), SqlTypeName.NULL); }
UnknownSqlType(RelDataTypeFactory typeFactory) { super(typeFactory.getTypeSystem(), SqlTypeName.NULL); }
/** * Calculates a power of ten, as a long value */ protected long powerOfTen(int scale) { assert scale >= 0; assert scale < builder.getTypeFactory().getTypeSystem().getMaxNumericPrecision(); return BigInteger.TEN.pow(scale).longValue(); }
/** * Calculates a power of ten, as a long value */ protected long powerOfTen(int scale) { assert scale >= 0; assert scale < builder.getTypeFactory().getTypeSystem().getMaxNumericPrecision(); return BigInteger.TEN.pow(scale).longValue(); }
/** * Makes sure that field names are unique. */ public Builder uniquify() { final List<String> uniqueNames = SqlValidatorUtil.uniquify(names, typeFactory.getTypeSystem().isSchemaCaseSensitive()); if (uniqueNames != names) { names.clear(); names.addAll(uniqueNames); } return this; }
/** * Makes sure that field names are unique. */ public Builder uniquify() { final List<String> uniqueNames = SqlValidatorUtil.uniquify(names, typeFactory.getTypeSystem().isSchemaCaseSensitive()); if (uniqueNames != names) { names.clear(); names.addAll(uniqueNames); } return this; }
/** * Makes an exact numeric literal to be used for scaling * * @param scale a scale from one to max precision - 1 * @return 10^scale as an exact numeric value */ protected RexNode makeScaleFactor(int scale) { assert scale > 0; assert scale < builder.getTypeFactory().getTypeSystem().getMaxNumericPrecision(); return makeExactLiteral(powerOfTen(scale)); }
/** * Makes an exact numeric literal to be used for scaling * * @param scale a scale from one to max precision - 1 * @return 10^scale as an exact numeric value */ protected RexNode makeScaleFactor(int scale) { assert scale > 0; assert scale < builder.getTypeFactory().getTypeSystem().getMaxNumericPrecision(); return makeExactLiteral(powerOfTen(scale)); }
/** * Makes an exact numeric value to be used for rounding. * * @param scale a scale from 1 to max precision - 1 * @return 10^scale / 2 as an exact numeric value */ protected RexNode makeRoundFactor(int scale) { assert scale > 0; assert scale < builder.getTypeFactory().getTypeSystem().getMaxNumericPrecision(); return makeExactLiteral(powerOfTen(scale) / 2); }
/** * Makes an exact numeric value to be used for rounding. * * @param scale a scale from 1 to max precision - 1 * @return 10^scale / 2 as an exact numeric value */ protected RexNode makeRoundFactor(int scale) { assert scale > 0; assert scale < builder.getTypeFactory().getTypeSystem().getMaxNumericPrecision(); return makeExactLiteral(powerOfTen(scale) / 2); }
/** * Scales up a decimal value and returns the scaled value as an exact * number. * * @param value the integer representation of a decimal * @param scale a value from zero to max precision - 1 * @return value * 10^scale as an exact numeric value */ protected RexNode scaleUp(RexNode value, int scale) { assert scale >= 0; assert scale < builder.getTypeFactory().getTypeSystem().getMaxNumericPrecision(); if (scale == 0) { return value; } return builder.makeCall( SqlStdOperatorTable.MULTIPLY, value, makeScaleFactor(scale)); }
/** * Scales up a decimal value and returns the scaled value as an exact * number. * * @param value the integer representation of a decimal * @param scale a value from zero to max precision - 1 * @return value * 10^scale as an exact numeric value */ protected RexNode scaleUp(RexNode value, int scale) { assert scale >= 0; assert scale < builder.getTypeFactory().getTypeSystem().getMaxNumericPrecision(); if (scale == 0) { return value; } return builder.makeCall( SqlStdOperatorTable.MULTIPLY, value, makeScaleFactor(scale)); }
/** * Creates an {@link RexExecutable} that allows to apply the * generated code during query processing (filter, projection). * * @param rexBuilder Rex builder * @param exps Expressions * @param rowType describes the structure of the input row. */ public RexExecutable getExecutable(RexBuilder rexBuilder, List<RexNode> exps, RelDataType rowType) { final JavaTypeFactoryImpl typeFactory = new JavaTypeFactoryImpl(rexBuilder.getTypeFactory().getTypeSystem()); final InputGetter getter = new DataContextInputGetter(rowType, typeFactory); final String code = compile(rexBuilder, exps, getter, rowType); return new RexExecutable(code, "generated Rex code"); }
/** * Creates an {@link RexExecutable} that allows to apply the * generated code during query processing (filter, projection). * * @param rexBuilder Rex builder * @param exps Expressions * @param rowType describes the structure of the input row. */ public RexExecutable getExecutable(RexBuilder rexBuilder, List<RexNode> exps, RelDataType rowType) { final JavaTypeFactoryImpl typeFactory = new JavaTypeFactoryImpl(rexBuilder.getTypeFactory().getTypeSystem()); final InputGetter getter = new DataContextInputGetter(rowType, typeFactory); final String code = compile(rexBuilder, exps, getter, rowType); return new RexExecutable(code, "generated Rex code"); }
@Test public void testTimestampAddFractionalSeconds() { tester.setFor(SqlStdOperatorTable.TIMESTAMP_ADD); tester.checkType( "timestampadd(SQL_TSI_FRAC_SECOND, 2, timestamp '2016-02-24 12:42:25.000000')", // "2016-02-24 12:42:25.000002", "TIMESTAMP(3) NOT NULL"); // The following test would correctly return "TIMESTAMP(6) NOT NULL" if max // precision were 6 or higher assumeTrue(tester.getValidator().getTypeFactory().getTypeSystem() .getMaxPrecision(SqlTypeName.TIMESTAMP) == 3); tester.checkType( "timestampadd(MICROSECOND, 2, timestamp '2016-02-24 12:42:25.000000')", // "2016-02-24 12:42:25.000002", "TIMESTAMP(3) NOT NULL"); }
@Test public void testTimestampAddFractionalSeconds() { tester.setFor(SqlStdOperatorTable.TIMESTAMP_ADD); tester.checkType( "timestampadd(SQL_TSI_FRAC_SECOND, 2, timestamp '2016-02-24 12:42:25.000000')", // "2016-02-24 12:42:25.000002", "TIMESTAMP(3) NOT NULL"); // The following test would correctly return "TIMESTAMP(6) NOT NULL" if max // precision were 6 or higher assumeTrue(tester.getValidator().getTypeFactory().getTypeSystem() .getMaxPrecision(SqlTypeName.TIMESTAMP) == 3); tester.checkType( "timestampadd(MICROSECOND, 2, timestamp '2016-02-24 12:42:25.000000')", // "2016-02-24 12:42:25.000002", "TIMESTAMP(3) NOT NULL"); }