thanks Julian for explantations. got it.

Julian Hyde <jhyde.apa...@gmail.com> 于2023年8月8日周二 13:50写道:

> Calcite works best when it is able to execute the SQL that it accepts. If
> we were to allow say DECIMAL(200, 5) we would need to be able to generate
> Java code that can handle values of that type. The current maximum,
> DECIMAL(19), can be handled by 64-bit signed integers (Java long).
>
> > On Aug 7, 2023, at 7:18 PM, Ran Tao <chucheng...@gmail.com> wrote:
> >
> > hi, mbudiu.
> >
> > I get your point.  Ofcourse, we can override `RelDataTypeSystemImpl`.
> > however, my suggestion is that we change the maximum 19 of
> > `RelDataTypeSystemImpl` to meet the mature engines,
> > If there is no specific reason for setting the maximum value of 19.
> >
> > <mbu...@gmail.com> 于2023年8月8日周二 01:03写道:
> >
> >> 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: dev@calcite.apache.org
> >> 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
> >>
> >>
>
>

Reply via email to