Calcite gives you hooks to change these limits.
For example:
public static final RelDataTypeSystem TYPE_SYSTEM = new RelDataTypeSystemImpl()
{
@Override
public int getMaxNumericPrecision() {
return MAX_PRECISION;
}
@Override
public int getMaxNumericScale() {
return MAX_SCALE;
}
@Override
public boolean shouldConvertRaggedUnionTypesToVarying() { return true; }
};
this.typeFactory = new SqlTypeFactoryImpl(TYPE_SYSTEM);
Then you can use this type factory in other structures you build, like the
CatalogReader, the Validator, and the Cluster.
-----Original Message-----
From: Ran Tao
Sent: Sunday, August 06, 2023 7:58 PM
To: [email protected]
Subject: [DISCUSS] Increase the default maximum precision and scale of the
number type
Hi, devs. I have noticed that currently calcite default maximum precision and
scale is 19.
If we set Decimal(50,2), it will reduce to Decimal(19,2).
while other mature database systems or bigdata engines have more bigger value.
For consistency and to give calcite users a standard value that meets most
engines, can we adjust the value of calcite to 38?
Besides, the sql standard defines the meaning of precision and scale, letting
each system customize the maximum precision and scale. (sql1999, page 125)
engine precision range scale range
calcite [1,19] [1,19]
oracle [1,38] [-84,127]
sqlserver [1,38] [0,38]
mysql [1,65] [0,30]
spark [1,38] [0,38]
hive [1,38] [0,38]
flink [1,38] [0,38]
We can see many systems or engines follow the sql standard to make maximum
precision and scale to be 38, except oracle and mysql.
If anyone can share some history or reasons why calcite set 19, i will
appreciate it.
[1]
https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlqr/Data-Types.html#GUID-DCCC6F18-15A0-4ECC-BA48-16F73F844844
[2]
https://learn.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql?view=sql-server-ver15
[3]
https://dev.mysql.com/doc/refman/8.0/en/precision-math-decimal-characteristics.html
[4]
https://spark.apache.org/docs/3.2.0/api/java/org/apache/spark/sql/types/DecimalType.html
[5]
https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=82706456#LanguageManualTypes-decimal
[6]
https://nightlies.apache.org/flink/flink-docs-master/api/java/org/apache/flink/table/api/DataTypes.html
Best Regards,
Ran Tao
https://github.com/chucheng92