[
https://issues.apache.org/jira/browse/CALCITE-6074?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17779713#comment-17779713
]
Mihai Budiu edited comment on CALCITE-6074 at 10/26/23 1:30 AM:
----------------------------------------------------------------
To make matters more confusing, in other SQL dialects FLOAT and REAL are
synonyms, e.g., Databricks.
https://docs.databricks.com/en/sql/language-manual/data-types/float-type.html
In other dialects, e.g., mysql, the size of FLOAT really depends on the
specified precision, so FLOAT can be either of them:
https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html
was (Author: JIRAUSER295926):
To make matters more confusing, in other SQL dialects FLOAT and REAL are
synonyms, e.g., Databricks.
https://docs.databricks.com/en/sql/language-manual/data-types/float-type.html
In other dialects the size of FLOAT really depends on the specified precision,
so FLOAT can be either of them:
https://docs.databricks.com/en/sql/language-manual/data-types/float-type.html
> The size of REAL, DOUBLE, and FLOAT is not consistent
> -----------------------------------------------------
>
> Key: CALCITE-6074
> URL: https://issues.apache.org/jira/browse/CALCITE-6074
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.35.0
> Reporter: Mihai Budiu
> Priority: Minor
>
> This stems from the review of CALCITE-6052
> Which one is 8 bytes and which one is 4 bytes?
> The intent seems to be that DOUBLE and FLOAT are synonyms, both using 8
> bytes, (which is very weird for Java users), and REAL is 4 bytes.
> But an audit of the code shows that:
> In AggregateNode.maxMinClass:
> {code:java}
> case FLOAT:
> return max ? MaxFloat.class : MinFloat.class;
> case DOUBLE:
> case REAL:
> return max ? MaxDouble.class : MinDouble.class;
> {code}
> In VisitorDataContext:
> {code:java}
> case DOUBLE:
> return Pair.of(index, rexLiteral.getValueAs(Double.class));
> case REAL:
> return Pair.of(index, rexLiteral.getValueAs(Float.class));
> {code}
> (no case for FLOAT)
> In RelMdSize:
> {code:java}
> case FLOAT:
> case REAL:
> ....
> return 4d;
> {code}
> in RelDataTypeFactoryImpl:
> {code:java}
> case REAL:
> return createSqlType(SqlTypeName.DECIMAL, 14, 7);
> case FLOAT:
> return createSqlType(SqlTypeName.DECIMAL, 14, 7);
> case DOUBLE:
> // the default max precision is 19, so this is actually DECIMAL(19, 15)
> // but derived system can override the max precision/scale.
> return createSqlType(SqlTypeName.DECIMAL, 30, 15);
> {code}
> The reference.md itself seems to be wrong:
> {code}
> | REAL, FLOAT | 4 byte floating point | 6 decimal digits precision.
> | DOUBLE | 8 byte floating point | 15 decimal digits precision.
> {code}
> and there are many more I haven't even checked!
--
This message was sent by Atlassian Jira
(v8.20.10#820010)