I would say that type checks for precision/scale etc would fit better inside the RelDataTypeFactory and its respective type system.
Best, Stamatis On Mon, Aug 7, 2023 at 12:39 AM <[email protected]> wrote: > > I found this documentation for Oracle DECIMAL data type: > https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/Data-Types.html#GUID-75209AF6-476D-4C44-A5DC-5FA70D701B78, > which explains what a SCALE > PRECISION should mean. > > > Scale can be greater than precision, most commonly when e notation is used. > > When scale is greater than precision, the precision specifies the maximum > > number of significant digits to the right of the decimal point. For > > example, a column defined as NUMBER(4,5) requires a zero for the first > > digit after the decimal point and rounds all values past the fifth digit > > after the decimal point. > > Let me ask a related question: in my backend I want to reject such numbers. > What is the right way to do it? > Should this be done in a SqlShuttle? Or should some Validator class be > extended? > > Thank you, > Mihai > > -----Original Message----- > From: Julian Hyde > Sent: Sunday, August 06, 2023 2:19 PM > To: [email protected] > Subject: Re: DECIMAL(2, 3) meaning > > As I commented in https://issues.apache.org/jira/browse/CALCITE-5901, I don’t > think it’s a bug to support behavior beyond what the standard requires. Which > Calcite does, intentionally. > > Julian > > > On Aug 6, 2023, at 08:35, stanilovsky evgeny <[email protected]> > > wrote: > > > > Ok, seems like a bug. > > Feel free to fill the issue. > > > >> I have added this test to SqlOperatorTest: > >> > >> f.checkScalar("cast(0.012 as DECIMAL(2, 5))", new BigDecimal("0.012"), > >> "DECIMAL(2, 5) NOT NULL"); > >> > >> and it has passed. That's why I am asking. It should fail, but it doesn't. > >> > >> Mihai > >> > >> -----Original Message----- > >> From: stanilovsky evgeny > >> Sent: Friday, August 04, 2023 7:00 AM > >> To: [email protected] > >> Subject: Re: DECIMAL(2, 3) meaning > >> > >> Hello Mihai. > >> A bit older standard describes Precision as : Precision of decimal > >> floating-point values is a positive value that specifies the number of > >> significant decimal digits in the mantissa. > >> > >> Thus: > >> cast(0.012 as DECIMAL(3, 3)) - ok > >> cast(0.012 as DECIMAL(2, 3)) - fail > >> cast(0.012 as DECIMAL(1, 3)) - fail > >> cast(0.012 as DECIMAL(2, 5)) - fail > >> > >> > >>> Hello, > >>> > >>> > >>> I notice that Calcite happily accepts decimal type specifications > >>> where the scale is greater than the precision. > >>> > >>> There are quite a few tests with such types. > >>> > >>> > >>> What is the meaning of such types? > >>> > >>> > >>> The SQL 92 standard has this statement on page 109: > >>> > >>> > >>> 15)The <scale> of an <exact numeric type> shall not be greater than > >>> > >>> the <precision> of the <exact numeric type>. > >>> > >>> > >>> Thank you, > >>> > >>> Mihai >
