[ 
https://issues.apache.org/jira/browse/CALCITE-5817?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17741497#comment-17741497
 ] 

hongyu guo commented on CALCITE-5817:
-------------------------------------

I change interval type's lead field default to maximum allowed precision in 
[SqlIntervalQualifier#checkLeadFieldInRange|https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/sql/SqlIntervalQualifier.java#L472]
 , This change will not affect other functions and will *only* take effect 
during validation

> The lead field for the interval type should not be validated
> ------------------------------------------------------------
>
>                 Key: CALCITE-5817
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5817
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.34.0
>            Reporter: hongyu guo
>            Assignee: hongyu guo
>            Priority: Minor
>              Labels: pull-request-available
>
> Calcite restricts the lead field of the interval type to a maximum of 2 
> digits as default through the 
> [SqlIntervalQualifier#checkLeadFieldInRange|https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/sql/SqlIntervalQualifier.java#L472].
> There are some example
> {code:sql}
> 0: jdbc:calcite:model=model.json> select interval '100' day;
> Error: Error while executing SQL "select interval '100' day": From line 1, 
> column 8 to line 1, column 25: Interval field value 100 exceeds precision of 
> DAY(2) field (state=,code=0)
> 0: jdbc:calcite:model=model.json> select INTERVAL '100:50' HOUR TO MINUTE;
> Error: Error while executing SQL "select INTERVAL '100:50' HOUR TO MINUTE": 
> From line 1, column 8 to line 1, column 39: Interval field value 100 exceeds 
> precision of HOUR(2) field (state=,code=0)
> {code}
>  
> So we must explicitly specify the precision of the lead field. 
> {code:sql}
> 0: jdbc:calcite:model=model.json> select interval '100' day(3);
> +--------+
> | EXPR$0 |
> +--------+
> | +100   |
> +--------+
> 1 row selected (0.016 seconds)
> 0: jdbc:calcite:model=model.json> select INTERVAL '100:50' HOUR(3) TO MINUTE;
> +---------+
> | EXPR$0  |
> +---------+
> | +100:50 |
> +---------+
> 1 row selected (0.015 seconds)
> {code}
> In mysql, postgres and spark-sql, this restriction does not exist.
> {code:sql}
> -- postgres
> postgres=# select INTERVAL '100' second;
>  interval 
> ----------
>  00:01:40
> (1 row)
> postgres=# select INTERVAL '100:5' HOUR TO MINUTE;
>  interval  
> -----------
>  100:05:00
> (1 row)
> -- mysql (In mysql, directly using the INTERVAL keyword with a string value 
> cannot be executed)
> mysql> select current_date +  INTERVAL '100' HOUR;
> +-------------------------------------+
> | current_date +  INTERVAL '100' HOUR |
> +-------------------------------------+
> | 2023-07-08 04:00:00                 |
> +-------------------------------------+
> 1 row in set (0.00 sec)
> -- spark-sql
> spark-sql> select INTERVAL '100:5' HOUR TO MINUTE;
> INTERVAL '100:05' HOUR TO MINUTE
> 4 04:05:00.000000000
> Time taken: 0.041 seconds, Fetched 1 row(s)
> {code}



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

Reply via email to