[ https://issues.apache.org/jira/browse/CALCITE-4603?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ruben Q L resolved CALCITE-4603. -------------------------------- Resolution: Fixed > Least restrictive type considers only the last element in collections of > collections > ------------------------------------------------------------------------------------ > > Key: CALCITE-4603 > URL: https://issues.apache.org/jira/browse/CALCITE-4603 > Project: Calcite > Issue Type: Bug > Components: core > Affects Versions: 1.26.0 > Reporter: Sergey Nuyanzin > Priority: Major > Labels: pull-request-available > Fix For: 1.27.0 > > Time Spent: 3.5h > Remaining Estimate: 0h > > It seems least restrictive always returns the type of the last element from > the collection. > For instance for > {code:sql} > select array[array['hello'], array['world'], array['!']] as "array" > {code} > least restrictive gives {{CHAR(1) ARRAY ARRAY}} instead of {{CHAR(5) ARRAY > ARRAY}} > for > {code:sql} > select map[map[1.1, 2.1], map[1.1, 2.1], map[1, 1], map[1, 1]] as "map"; > {code} > least restrictive gives {{((INTEGER, INTEGER) MAP, (INTEGER, INTEGER) MAP) > MAP}} instead of {{((DECIMAL(2, 1), DECIMAL(2, 1)) MAP, (DECIMAL(2, 1), > DECIMAL(2, 1)) MAP) MAP}} > for > {code:sql} > select multiset[array['hello'], array['world'], array['!']] as "multiset"; > {code} > least restrictive gives {{CHAR(1) ARRAY MULTISET}} instead of {{CHAR(5) ARRAY > MULTISET}} > {{+ a test to reproduce}} > {code:java} > @Test > void testCALCITE4603() { > SqlTypeFixture f = new SqlTypeFixture(); > SqlTypeFactoryImpl typeFactory = new > SqlTypeFactoryImpl(RelDataTypeSystem.DEFAULT); > int maxPrecision = 10; > int minPrecision = 1; > RelDataType leastRestrictive = > f.typeFactory.leastRestrictive( > Lists.newArrayList(typeFactory.createTypeWithNullability( > > typeFactory.createArrayType(typeFactory.createTypeWithNullability( > typeFactory.createSqlType(SqlTypeName.CHAR, > maxPrecision), false), -1), false), > typeFactory.createTypeWithNullability( > > typeFactory.createArrayType(typeFactory.createTypeWithNullability( > typeFactory.createSqlType(SqlTypeName.CHAR, > minPrecision), false), -1), false))); > assertThat(leastRestrictive.getSqlTypeName(), is(SqlTypeName.ARRAY)); > assertThat(leastRestrictive.getComponentType().getPrecision(), > is(maxPrecision)); > } > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)