[ 
https://issues.apache.org/jira/browse/FLINK-31494?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

xzw0223 updated FLINK-31494:
----------------------------
    Description: 
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}

  was:
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}
 

``` java

 

```

 

Add an OperationExecutors to manage all OperationExecutors and be responsible 
for performing conversion sqlNode.

```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); }

```

 

This can be used in SqlToOperationConverter.java

```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); }

}

java```


> 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)

Reply via email to