[ https://issues.apache.org/jira/browse/FLINK-31494?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17701546#comment-17701546 ]
xzw0223 commented on FLINK-31494: --------------------------------- [~jark] [~luoyuxia] Is this the expected effect? I don’t know if there is any problem with my understanding. Please point it out. > Introduce OperationExecutor for SqlToOperationConverter > ------------------------------------------------------- > > Key: FLINK-31494 > URL: https://issues.apache.org/jira/browse/FLINK-31494 > Project: Flink > Issue Type: Sub-task > Components: Table SQL / Planner > Reporter: xzw0223 > Priority: Major > > Introduce OperationExecutor for SqlToOperationConverter, following Timo's > idea in FLINK-31368 > class like: > {code:java} > public interface OperationExecutor{ > // The Operation supported by the current OperationExecutor > Class<? extends Operation> supportedOperation(); > // The SqlNode type supported by the current OperationExecutor > Class<? extends SqlNode> supportedSqlNode(); > // OperationExecutor is used to convert the validated sqlNode into Operation > Operation execute(SqlNode validated); > } {code} > > Add an OperationExecutors to manage all OperationExecutors and be responsible > for performing conversion sqlNode. > > {code:java} > public class OperationExecutors{ > private static Map<Class<? extends SqlNode>,OperationExecutor > executors = > new HashMap<>(); > static{ > addExecutor(SqlCreateCatalog.class,CreateCatalogExecutor.class); > // ..... > } > private static void addExecutor(sqlnodeClass,operationExecutorsClass){ > executors.put(sqlnodeClass,operationExecutorsClass.newInstance); > } > public OperationExecutor getExecutor(sqlnodeClass){ > return executors.get(validated.getClass()); > } > public Operation execute(SqlNode validated){ > return executors.get(validated.getClass()).executor(validated); > } > } {code} > > This can be used in SqlToOperationConverter.java > {code:java} > private static Optional<Operation> convertValidatedSqlNode( > FlinkPlannerImpl flinkPlanner, CatalogManager catalogManager, SqlNode > validated) { > OperationExecutor<?> executor = OperationExecutors.getExecutor(validated); > if (executor == null){ > return Optional.empty(); > } > Operation operation = executor.execute(validated); > if (operation!=null){ > return Optional.of(operation); > } > } > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)