[
https://issues.apache.org/jira/browse/CALCITE-5817?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17741497#comment-17741497
]
hongyu guo edited comment on CALCITE-5817 at 7/10/23 8:05 AM:
--------------------------------------------------------------
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 modules and will *only* take effect during
validation
[Github Pull Request|https://github.com/apache/calcite/pull/3305]
was (Author: JIRAUSER300840):
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 modules 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)