godfrey he created FLINK-20719:
----------------------------------
Summary: Change BatchExecNode & StreamExecNode to interface and make each node extended from ExecNodeBase directly
Key: FLINK-20719
URL:
https://issues.apache.org/jira/browse/FLINK-20719 Project: Flink
Issue Type: Sub-task
Components: Table SQL / Planner
Reporter: godfrey he
Fix For: 1.13.0
Currently the inheritance structure of exec nodes is:
{code:java}
ExecNode (interface)
|_ ExecNodeBase (abstract class)
|_ BatchExecNode (abstract class)
|_ BatchExecCalc
|_ ...
|_ StreamExecNode (abstract class)
|_ StreamExecCalc
|_ ...
{code}
the advantage is: each specific node only needs to inherit one base class, and BatchExecNode and StreamExecNode can provide some default implementation
the disadvantage is: common class of specific batch node and stream node must be interface which only can provide some utility method through default implementation and its sub-classes also have some deduplicate code. if the common class can be abstract class, its sub-classes is cleaner. such as: Calc classes
the structure after adjustment is:
{code:java}
ExecNode (interface)
|_ ExecNodeBase (abstract class)
|_ BatchExecNode (interface)
|_ StreamExecNode (interface)
class BatchExecCalc extends ExecNodeBase implements BatchExecNode
...
class StreamExecCalc extends ExecNodeBase implements StreamExecNode
...
{code}
the advantage is: common class can be abstract class, its sub-classes will be cleaner; we can add some specific method definition in BatchExecNode and StreamExecNode, which is more extendable.
the disadvantage is: each specific node must extend from ExecNodeBase and Batch(/Stream)ExecNode.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)