[ https://issues.apache.org/jira/browse/FLINK-11067?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16770765#comment-16770765 ]
sunjincheng commented on FLINK-11067: ------------------------------------- Hi [~twalthr] thanks for redefining the current JIRA.'s goals! So, Currently we only extract the tableEnvironment interfaces, and do not unified the environment, right? If so, i want share my thoughts as follows: We can split the API from implementation with three TableEnvironment interfaces. * BaseTableEnvironment - will define java and scala public methods that are independent of type extraction * java.TableEnvironment - Method of extracting types in java mode. * scala.TableEnvironment - Method of extracting types in scala mode. All implementations are moved into the TableEnvironmentImpl classes. The definition as follows: * BaseTableEnviroment(api-java) BaseTableEnvironment will define JAVA and SCALA public methods that are independent of type extraction. {code:java} public interface BaseTableEnvironment { ... void registerFunction(String name, ScalarFunction function); void registerTable(String name, Table table); void registerTableSource(String name, TableSource<?> tableSource); void registerTableSink(String name, TableSink<?> tableSink); ... }{code} * TableEnviroment(api-java) - Method of extracting types in java mode. {code:java} public interface TableEnvironment extends BaseTableEnvironment { … <T> void registerFunction(String name, TableFunction<T> function); <T, ACC> void registerFunction( String name, AggregateFunction<T, ACC> aggregateFunc); ... }{code} * TableEnviroment(api-scala) - Method of extracting types in scala mode. {code:java} public interface TableEnvironment extends BaseTableEnvironment { … def registerFunction[T: TypeInformation](name: String, tf: TableFunction[T]): Unit def registerFunction[T: TypeInformation, ACC: TypeInformation]( name: String,f: AggregateFunction[T, ACC]): Unit ... }{code} All implementations are moved into the TableEnvironmentImpl classes. For a specific Environment, such as scala.StreamTableEnvironment, it extends api.StreamTableEnvironmentImpl and implements scala.TableEnvironment. The code looks like as follows: {code:java} // scala.StreamTableEnvironment class StreamTableEnvironment( execEnv: StreamExecutionEnvironment, config: TableConfig) extends org.apache.flink.table.api.StreamTableEnvironmentImpl( execEnv.getWrappedStreamExecutionEnvironment, config) with org.apache.flink.table.api.scala.TableEnvironment { ... }{code} What do you think? > Convert TableEnvironments to interfaces > --------------------------------------- > > Key: FLINK-11067 > URL: https://issues.apache.org/jira/browse/FLINK-11067 > Project: Flink > Issue Type: New Feature > Components: Table API & SQL > Reporter: Timo Walther > 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]. > This task includes porting {{TableEnvironment}}, {{StreamTableEnvironment}}, > {{BatchTableEnvironment}} to Java interfaces. API-breaking changes should not > be necessary anymore as they should have been resolved by sibling issues. > Some refactoring and clean up might be necessary. -- This message was sent by Atlassian JIRA (v7.6.3#76005)