Adam Kennedy created CALCITE-6262:
-------------------------------------

             Summary: CURRENT_TIMESTAMP(P) ignores 
DataTypeSystem#getMaxPrecision
                 Key: CALCITE-6262
                 URL: https://issues.apache.org/jira/browse/CALCITE-6262
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.36.0
            Reporter: Adam Kennedy


Datetime precision parameters are incorrectly validated against the DEFAULT 
maximum date time precision (3) instead of against the maximum date time 
precision configured by the DateTimeSystem#getMaxPrecision method.

This breaks, at minimum, CURRENT_TIMESTAMP(P > 3) when precisions greater than 
3 are supported by the system.

The culprit is the following method in SqlAbstractTimeFunction

 
{code:java}
@Override public RelDataType inferReturnType(SqlOperatorBinding opBinding) {
    // REVIEW jvs 20-Feb-2005: Need to take care of time zones.
    int precision = 0;
    if (opBinding.getOperandCount() == 1) {
        RelDataType type = opBinding.getOperandType(0);
        if (SqlTypeUtil.isNumeric(type)) {
            precision = getOperandLiteralValueOrThrow(opBinding, 0, 
Integer.class);
        }
    }
    assert precision >= 0;
    if (precision > SqlTypeName.MAX_DATETIME_PRECISION) {
        throw opBinding.newError(
            RESOURCE.argumentMustBeValidPrecision(
            opBinding.getOperator().getName(), 0,
            SqlTypeName.MAX_DATETIME_PRECISION));
    }
    return opBinding.getTypeFactory().createSqlType(typeName, precision);
}{code}
 

 

The correct value is readily accessible from

 
{code:java}
opBinding.getTypeFactory().getTypeSystem().getMaxPrecision(typeName){code}




 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to