[ https://issues.apache.org/jira/browse/CALCITE-3629?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Rui Wang updated CALCITE-3629: ------------------------------ Description: The current implementation of TUMBLE is the following: {code:java} if (isTumble()) { // create expressions and blockstatement } else { // other table function scan enumerable implementation. } {code} This style is less extensible. We will add more builtin table-valued function implementation and we shouldn't add more if-else with complicated implementation. A better practice is in RexImpTable, each operator register its implementor, and then the code will be becomes: {code:java} if (implementor defined) { return implementor.implement(...) } else { // default table function scan enumerable implementation for those that does not have implementor. } {code} The current implementor[1] or [2] is not enough for table-valued function as table-valued function need both inputPhysType and outPhysType, and potential other params to implement itself. Another condition is we might need more table-valued function implementations to abstract a common interface. [1]: https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/adapter/enumerable/CallImplementor.java#L38 [2]: https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/adapter/enumerable/NotNullImplementor.java was: The current implementation of TUMBLE is the following: {code:java} if (isTumble()) { // create expressions and blockstatement } else { // other table function scan enumerable implementation. } {code} This style is less extensible. We will add more builtin table-valued function implementation and we shouldn't add more if-else with complicated implementation. A better practice is in RexImpTable, each operator register its implementor, and then the code will be becomes: {code:java} if (implementor defined) { return implementor.implement(...) } else { // default table function scan enumerable implementation for those that does not have implementor. } {code} The current implementor[1] is not enough for table-valued function as table-valued function need both inputPhysType and outPhysType, and potential other params to implement itself. Another condition is we might need more table-valued function implementations to abstract a common interface. [1]: https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/adapter/enumerable/CallImplementor.java#L38 > Table-valued function implementor interface > ------------------------------------------- > > Key: CALCITE-3629 > URL: https://issues.apache.org/jira/browse/CALCITE-3629 > Project: Calcite > Issue Type: Sub-task > Reporter: Rui Wang > Assignee: Rui Wang > Priority: Major > > The current implementation of TUMBLE is the following: > {code:java} > if (isTumble()) { > // create expressions and blockstatement > } else { > // other table function scan enumerable implementation. > } > {code} > This style is less extensible. We will add more builtin table-valued function > implementation and we shouldn't add more if-else with complicated > implementation. > A better practice is in RexImpTable, each operator register its implementor, > and then the code will be becomes: > {code:java} > if (implementor defined) { > return implementor.implement(...) > } else { > // default table function scan enumerable implementation for those that does > not have implementor. > } > {code} > The current implementor[1] or [2] is not enough for table-valued function as > table-valued function need both inputPhysType and outPhysType, and potential > other params to implement itself. > Another condition is we might need more table-valued function implementations > to abstract a common interface. > [1]: > https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/adapter/enumerable/CallImplementor.java#L38 > [2]: > https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/adapter/enumerable/NotNullImplementor.java -- This message was sent by Atlassian Jira (v8.3.4#803005)