[ https://issues.apache.org/jira/browse/IGNITE-20311?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Maksim Zhuravkov updated IGNITE-20311: -------------------------------------- Description: The return type for ROUND(N)/ROUND(N, s) is equal to the type of `N`, which causes issues when reading data from a `BinaryTuple` because this way ROUND(DECIMAL(2,1)) has return type DECIMAL(2,1): {code} SELECT ROUND(1.7) # Although the implementation of the round function produces 2, RowSchema has NativeType (precision=2, scale=1). # Because of that this query returns 2.0 {code} Implementation we agreed upon: - For `ROUND(N)` return DECIMAL(p, 0) where p is precision of N's type. - For `ROUND(N, s)` return DECIMAL(p, derived_s) where where p is precision of N's type, and derived_s is scale of N's type. Examples: {code} # ROUND(N): SELECT ROUND(1.1) # Returns 1. Type: DECIMAL(p, 0) # ROUND(N, s): SELECT ROUND(1.123, s) FROM (VALUES (0), (1), (2), (3), (4) ) t(s) # Returns # 1.000 # 1.100 # 1.120 # 1.123 # 1.1230 {code} was: The return type for ROUND(N)/ROUND(N, s) is equal to the type of `N`, which causes issues when reading data from a `BinaryTuple` because this way ROUND(DECIMAL(2,1)) has return type DECIMAL(2,1): {code} SELECT ROUND(1.7) # Although the implementation of the round function produces 2, RowSchema has NativeType (precision=2, scale=1). # Because of that this query returns 2.0 {code} > Sql. Fix behaviour of ROUND function. > ------------------------------------- > > Key: IGNITE-20311 > URL: https://issues.apache.org/jira/browse/IGNITE-20311 > Project: Ignite > Issue Type: Bug > Components: sql > Reporter: Maksim Zhuravkov > Priority: Minor > Labels: ignite-3 > Fix For: 3.0.0-beta2 > > > The return type for ROUND(N)/ROUND(N, s) is equal to the type of `N`, which > causes issues when reading data from a `BinaryTuple` because this way > ROUND(DECIMAL(2,1)) has return type DECIMAL(2,1): > {code} > SELECT ROUND(1.7) > # Although the implementation of the round function produces 2, RowSchema > has NativeType (precision=2, scale=1). > # Because of that this query returns 2.0 > {code} > Implementation we agreed upon: > - For `ROUND(N)` return DECIMAL(p, 0) where p is precision of N's type. > - For `ROUND(N, s)` return DECIMAL(p, derived_s) where where p is precision > of N's type, and derived_s is scale of N's type. > Examples: > {code} > # ROUND(N): > SELECT ROUND(1.1) > # Returns 1. Type: DECIMAL(p, 0) > # ROUND(N, s): > SELECT ROUND(1.123, s) FROM (VALUES (0), (1), (2), (3), (4) ) t(s) > # Returns > # 1.000 > # 1.100 > # 1.120 > # 1.123 > # 1.1230 > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)