[ https://issues.apache.org/jira/browse/CALCITE-2489?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16594109#comment-16594109 ]
Enrico Olivelli commented on CALCITE-2489: ------------------------------------------ Totally agree with Julian > Order of fields in JavaTypeFactoryImpl#createStructType is unstable > ------------------------------------------------------------------- > > Key: CALCITE-2489 > URL: https://issues.apache.org/jira/browse/CALCITE-2489 > Project: Calcite > Issue Type: Bug > Components: core > Affects Versions: 1.17.0 > Reporter: Vladimir Sitnikov > Assignee: Julian Hyde > Priority: Major > > {{JavaTypeFactoryImpl#createStructType}} relies on > {{java.lang.Class#getFields}} to get public fields, however it does not sort > elements. > That might produce confusing results since Calcite relies on field order. > That might result in flaky tests as well (as execution plans rely on field > order). > There are other {{#getFields}} usages. > For instance: > {{org.apache.calcite.rel.type.RelDataTypeFactoryImpl#fieldsOf}}, > {{org.apache.calcite.interpreter.TableScanNode#createQueryable}}, etc. > It looks like we should implement Calcite-specific sort of the fields, and > avoid adding new usages {{getFields}} to Calcite code. > For instance: > a) We might want to sort the fields from the super class to derived class. > That is derived fields should come after the fields of a base class. > b) When annotation is missing, we might want to sort fields on field > names/field types (so the order is consistent) > c) Add field-level annotation {{@CalciteField(int order)}} > d) We might want to exclude certain fields by flagging with annotation as > well (e.g. {{@CalciteField(exclude=true)}} > Note: {{a}} and {{b}} are enough to get consistent field order. -- This message was sent by Atlassian JIRA (v7.6.3#76005)