[
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)