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)

Reply via email to