You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Rui Wang (Jira)" <ji...@apache.org> on 2019/12/24 20:50:00 UTC

[jira] [Updated] (CALCITE-3629) Table-valued function implementor interface

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