package com.taobao.tddl.optimizer;
import java.util.Map;
import com.taobao.tddl.common.jdbc.ParameterContext;
import com.taobao.tddl.common.model.lifecycle.Lifecycle;
import com.taobao.tddl.optimizer.core.ast.ASTNode;
import com.taobao.tddl.optimizer.core.plan.IDataNodeExecutor;
import com.taobao.tddl.optimizer.exceptions.QueryException;
import com.taobao.tddl.optimizer.exceptions.SqlParserException;
/**
* 优化器执行接口
*
* @since 5.0.0
*/
public interface Optimizer extends Lifecycle {
/**
* 根据自定义查询树生成执行计划,不做缓存处理
*
* @param node 查询树
* @param parameterSettings 参数
* @param extraCmd 额外的优化参数,控制优化行为
* @return
* @throws QueryException
*/
IDataNodeExecutor optimizeAndAssignment(ASTNode node, Map<Integer, ParameterContext> parameterSettings,
Map<String, Object> extraCmd) throws QueryException;
/**
* 根据sql生成执行计划,根据cached参数判断是否进行缓存处理
*
* @param sql 原始sql
* @param parameterSettings 参数
* @param extraCmd 额外的优化参数,控制优化行为
* @param cached 是否缓存
* @return
* @throws QueryException
*/
IDataNodeExecutor optimizeAndAssignment(String sql, Map<Integer, ParameterContext> parameterSettings,
Map<String, Object> extraCmd, boolean cached) throws SqlParserException,
QueryException;
}