[ 
https://issues.apache.org/jira/browse/FLINK-11449?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16760010#comment-16760010
 ] 

Timo Walther commented on FLINK-11449:
--------------------------------------

Thanks for working on this [~sunjincheng121]. I think most of the changes 
should be clearly defined now. Feel free to start developing. I will summarize 
the approach again here:

In {{flink-table-api-common}}, because we can even put those expression classes 
into flink-table-common for FilterableTableSources in the future:
{code}
public class FunctionDefinition {
        public String name;
}

public class ScalarFunctionDefinition extends FunctionDefinition {
        // the name is ignored for now

        public UserDefinedFunction f;
}

public class TableFunctionDefinition extends FunctionDefinition {
        // the name is ignored for now

        public UserDefinedFunction f;
}

public class AggregateFunctionDefinition extends FunctionDefinition {
        // the name is ignored for now

        public UserDefinedFunction f;
}

public class Expression {
        
        abstract List<Expression> getChildren();

        abstract <R> R accept(ExpressionVisitor<R> visitor);

        // do we need more methods here?
}

public final class FunctionDefinitions {
        // implement just a basic definition (only name) for know
        // we can extend this functionality in the future with type inference 
logic etc.
        public static final FunctionDefinition TRIM = new 
FunctionDefinition("trim");
        public static final FunctionDefinition CAST = new 
FunctionDefinition("cast");

        public static List<FunctionDefinitions> getDefinitions() {
                // use reflection for all definitions similar to Calcite's 
SqlStdOperatorTable
        }
}

CallExpression(FunctionDefinition, Expression*) extends Expression
SymbolExpression(TableSymbol ???) extends Expression
FieldReferenceExpression(String) extends Expression
TypeLiteralExpression(TypeInformation) extends Expression
ValueLiteralExpression(Object) extends Expression
{code}

In {{flink-table-api-java}}:
{code}
TableReferenceExpression(String, Table) extends Expression
{code}

In {{flink-table-planner}}:
{code}
+ visitor pattern in the planner to translate (can be in Scala)
in Flink: to Flink's case classes

in Blink: to Blink's case classes

visit(call Call) match {
        case TRIM => ....
}
{code}

expressionDsl.scala and ExpressionParser.scala can still remain implemented in 
Scala.

> Uncouple the Expression class from RexNodes
> -------------------------------------------
>
>                 Key: FLINK-11449
>                 URL: https://issues.apache.org/jira/browse/FLINK-11449
>             Project: Flink
>          Issue Type: New Feature
>          Components: Table API &amp; SQL
>            Reporter: Timo Walther
>            Assignee: sunjincheng
>            Priority: Major
>
> A more detailed description can be found in 
> [FLIP-32|https://cwiki.apache.org/confluence/display/FLINK/FLIP-32%3A+Restructure+flink-table+for+future+contributions].
> Calcite will not be part of any API module anymore. Therefore, RexNode 
> translation must happen in a different layer. This issue will require a new 
> design document.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to