boyjoy1127 commented on code in PR #21172:
URL: https://github.com/apache/shardingsphere/pull/21172#discussion_r1006847056


##########
kernel/sql-federation/executor/advanced/src/main/java/org/apache/shardingsphere/sqlfederation/advanced/AdvancedSQLFederationExecutor.java:
##########
@@ -136,17 +141,23 @@ private AbstractSchema createSQLFederationSchema(final 
DriverExecutionPrepareEng
     
     @SuppressWarnings("unchecked")
     private ResultSet execute(final SelectStatementContext 
selectStatementContext, final ShardingSphereSchema schema, final AbstractSchema 
sqlFederationSchema, final Map<String, Object> parameters) {
+        initializePlanManagement(sqlFederationSchema);
+        SqlNode sqlNode = 
SQLNodeConverterEngine.convert(selectStatementContext.getSqlStatement());
+        SQLOptimizeContext optimizeContext = planManagement.get(sqlNode, 
parameters);
+        Bindable<Object> executablePlan = 
EnumerableInterpretable.toBindable(Collections.emptyMap(), null, 
(EnumerableRel) optimizeContext.getBestPlan(), EnumerableRel.Prefer.ARRAY);
+        Enumerator<Object> enumerator = executablePlan.bind(new 
SQLFederationDataContext(planManagement.getValidator(), 
planManagement.getConverter(), parameters)).enumerator();
+        return new SQLFederationResultSet(enumerator, schema, 
sqlFederationSchema, selectStatementContext, 
optimizeContext.getValidatedNodeType());
+    }
+    
+    private void initializePlanManagement(final AbstractSchema 
sqlFederationSchema) {
         OptimizerParserContext parserContext = 
optimizerContext.getParserContexts().get(databaseName);
         CalciteConnectionConfig connectionConfig = new 
CalciteConnectionConfigImpl(parserContext.getDialectProps());
         CalciteCatalogReader catalogReader = 
SQLFederationPlannerUtil.createCatalogReader(schemaName, sqlFederationSchema, 
JAVA_TYPE_FACTORY, connectionConfig);
         SqlValidator validator = 
SQLFederationPlannerUtil.createSqlValidator(catalogReader, JAVA_TYPE_FACTORY, 
parserContext.getDatabaseType(), connectionConfig);
         SqlToRelConverter converter = 
SQLFederationPlannerUtil.createSqlToRelConverter(catalogReader, validator,
                 
SQLFederationPlannerUtil.createRelOptCluster(JAVA_TYPE_FACTORY), 
optimizerContext.getSqlParserRule(), parserContext.getDatabaseType(), true);
-        SQLOptimizeContext optimizeContext =
-                new SQLOptimizeEngine(converter, 
SQLFederationPlannerUtil.createHepPlanner()).optimize(selectStatementContext.getSqlStatement());
-        Bindable<Object> executablePlan = 
EnumerableInterpretable.toBindable(Collections.emptyMap(), null, 
(EnumerableRel) optimizeContext.getBestPlan(), EnumerableRel.Prefer.ARRAY);
-        Enumerator<Object> enumerator = executablePlan.bind(new 
SQLFederationDataContext(validator, converter, parameters)).enumerator();
-        return new SQLFederationResultSet(enumerator, schema, 
sqlFederationSchema, selectStatementContext, 
optimizeContext.getValidatedNodeType());
+        SQLOptimizeEngine optimizer = new SQLOptimizeEngine(converter, 
SQLFederationPlannerUtil.createHepPlanner());
+        planManagement = new OptimizedPlanManagement(optimizer, validator, 
converter);

Review Comment:
   May be we could enhance this later.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to