Thanks for quick answer, I'll work on the CALCITE-3138 <https://issues.apache.org/jira/browse/CALCITE-3138> jira.
If I'm not wrong this collection of fields back after flatten supposed to be done like rex invocation to create new row. For example, collecting projection might look like: LogicalProject(HOME_ADDRESS=[NEW(ROW($1, $2, $3, $4)):ObjectSqlType(ADDRESS) NOT NULL]). Please let me know if I'm wrong and there is more proper way to restructure. Thanks, Igor On Fri, Jun 21, 2019 at 4:21 AM Haisheng Yuan <h.y...@alibaba-inc.com> wrote: > I have created 2 JIRA tickets to track the issues: > https://issues.apache.org/jira/browse/CALCITE-3137 > https://issues.apache.org/jira/browse/CALCITE-3138 > > - Haisheng > > ------------------------------------------------------------------ > 发件人:Haisheng Yuan<h.y...@alibaba-inc.com> > 日 期:2019年06月21日 08:54:55 > 收件人:Igor Guzenko<ihor.huzenko....@gmail.com>; Apache Calcite dev list< > dev@calcite.apache.org> > 主 题:Re: [DISCUSSION] Problem caused by flattening of struct fields > > Consider creating ObjectSqlType like Fixture.addressType, which is > STRUCTURED type. > typeFactory.createStructType() actually creates a ROW type, which is not > supported to reconstruct fields at the moment, see > method RelStructuredTypeFlattener.restructureFields. > > But even with ObjectSqlType, you will still see an assert error. The > assertion should be removed. > > - Haisheng > > ------------------------------------------------------------------ > 发件人:Igor Guzenko<ihor.huzenko....@gmail.com> > 日 期:2019年06月20日 15:14:47 > 收件人:<dev@calcite.apache.org> > 主 题:[DISCUSSION] Problem caused by flattening of struct fields > > Hello everyone, > > I've got issue while converting query with struct column. Struct's fields > are flattened while conversion to rel is performed. > But later they aren't collected back so query plan may produce incorrect > result. > > For example [1], consider table *str_table* with just one column *str* of > type STRUCT<name VARCHAR(10), age INTEGER>, > then query SELECT *str* FROM *str_table* produces plan > > LogicalProject(STR=[$0]) > LogicalProject(STR=[$0.name], STR1=[$0.age]) > LogicalTableScan(table=[[CATALOG, STRUCT, STR_TABLE]]) > > where top level project returns nested field `name` as `str` instead of > original struct column. My question is, what is the correct > way to collect back the flattened fields and produce correct result for the > query ? > > [1] - > > https://github.com/ihuzenko/calcite/commit/e24eaa22fbb5c950a0bd5290cc09ca56ea7f1e44 > > Thank you in advance, > Igor Guzenko > > >