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 <estanilovs...@gridgain.com> > 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: dev@calcite.apache.org >> 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