private CalciteContextException fieldExceedsPrecisionException( SqlParserPos pos, int sign, BigDecimal value, TimeUnit type, int precision) { if (sign == -1) { value = value.negate(); } return SqlUtil.newContextException(pos, RESOURCE.intervalFieldExceedsPrecision( value, type.name() + "(" + precision + ")")); } }
private CalciteContextException fieldExceedsPrecisionException( SqlParserPos pos, int sign, BigDecimal value, TimeUnit type, int precision) { if (sign == -1) { value = value.negate(); } return SqlUtil.newContextException(pos, RESOURCE.intervalFieldExceedsPrecision( value, type.name() + "(" + precision + ")")); } }
@Override public void unparseSqlIntervalQualifier(SqlWriter writer, SqlIntervalQualifier qualifier, RelDataTypeSystem typeSystem) { switch (qualifier.timeUnitRange) { case YEAR: case QUARTER: case MONTH: case WEEK: case DAY: case HOUR: case MINUTE: case SECOND: case MILLISECOND: case MICROSECOND: final String timeUnit = qualifier.timeUnitRange.startUnit.name(); writer.keyword(timeUnit); break; default: throw new AssertionError("Unsupported type: " + qualifier.timeUnitRange); } if (null != qualifier.timeUnitRange.endUnit) { throw new AssertionError("End unit is not supported now: " + qualifier.timeUnitRange.endUnit); } }
@Override public void unparseSqlIntervalQualifier(SqlWriter writer, SqlIntervalQualifier qualifier, RelDataTypeSystem typeSystem) { switch (qualifier.timeUnitRange) { case YEAR: case QUARTER: case MONTH: case WEEK: case DAY: case HOUR: case MINUTE: case SECOND: case MILLISECOND: case MICROSECOND: final String timeUnit = qualifier.timeUnitRange.startUnit.name(); writer.keyword(timeUnit); break; default: throw new AssertionError("Unsupported type: " + qualifier.timeUnitRange); } if (null != qualifier.timeUnitRange.endUnit) { throw new AssertionError("End unit is not supported now: " + qualifier.timeUnitRange.endUnit); } }
@Override public void unparseSqlIntervalQualifier(SqlWriter writer, SqlIntervalQualifier qualifier, RelDataTypeSystem typeSystem) { // DB2 supported qualifiers. Singular form of these keywords are also acceptable. // YEAR/YEARS // MONTH/MONTHS // DAY/DAYS // HOUR/HOURS // MINUTE/MINUTES // SECOND/SECONDS switch (qualifier.timeUnitRange) { case YEAR: case MONTH: case DAY: case HOUR: case MINUTE: case SECOND: case MICROSECOND: final String timeUnit = qualifier.timeUnitRange.startUnit.name(); writer.keyword(timeUnit); break; default: throw new AssertionError("Unsupported type: " + qualifier.timeUnitRange); } if (null != qualifier.timeUnitRange.endUnit) { throw new AssertionError("Unsupported end unit: " + qualifier.timeUnitRange.endUnit); } }
@Override public void unparseSqlIntervalQualifier(SqlWriter writer, SqlIntervalQualifier qualifier, RelDataTypeSystem typeSystem) { // DB2 supported qualifiers. Singular form of these keywords are also acceptable. // YEAR/YEARS // MONTH/MONTHS // DAY/DAYS // HOUR/HOURS // MINUTE/MINUTES // SECOND/SECONDS switch (qualifier.timeUnitRange) { case YEAR: case MONTH: case DAY: case HOUR: case MINUTE: case SECOND: case MICROSECOND: final String timeUnit = qualifier.timeUnitRange.startUnit.name(); writer.keyword(timeUnit); break; default: throw new AssertionError("Unsupported type: " + qualifier.timeUnitRange); } if (null != qualifier.timeUnitRange.endUnit) { throw new AssertionError("Unsupported end unit: " + qualifier.timeUnitRange.endUnit); } }
@Override public RelDataType inferReturnType(SqlOperatorBinding opBinding) { final RelDataTypeFactory factory = opBinding.getTypeFactory(); final TimeUnit timeUnit = opBinding.getOperandType(0).getIntervalQualifier().getStartUnit(); final boolean isNullable = opBinding.getOperandType(1).isNullable(); final SqlTypeName sqlTypeName = getSqlTypeNameForTimeUnit(timeUnit.name()); return createCalciteTypeWithNullability( factory, sqlTypeName, isNullable); } }
this.INTERVAL_TYPE = start.name();
this.INTERVAL_TYPE = start.name();
final String start = qualifier.timeUnitRange.startUnit.name(); final int fractionalSecondPrecision = qualifier.getFractionalSecondPrecision(typeSystem); final String end = qualifier.timeUnitRange.endUnit.name(); if ((TimeUnit.SECOND == qualifier.timeUnitRange.endUnit) && (!qualifier.useDefaultFractionalSecondPrecision())) {
final String start = qualifier.timeUnitRange.startUnit.name(); final int fractionalSecondPrecision = qualifier.getFractionalSecondPrecision(typeSystem); final String end = qualifier.timeUnitRange.endUnit.name(); if ((TimeUnit.SECOND == qualifier.timeUnitRange.endUnit) && (!qualifier.useDefaultFractionalSecondPrecision())) {