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 > >> > >> > >