package com.taobao.tddl.executor.handler;
import com.taobao.tddl.common.exception.TddlException;
import com.taobao.tddl.executor.common.ExecutionContext;
import com.taobao.tddl.executor.spi.ICommandHandler;
import com.taobao.tddl.executor.utils.ExecUtils;
import com.taobao.tddl.optimizer.OptimizerContext;
import com.taobao.tddl.optimizer.config.table.TableMeta;
import com.taobao.tddl.optimizer.core.plan.IPut;
import com.taobao.tddl.optimizer.core.plan.query.IQuery;
/**
* @author mengshi.sunmengshi 2013-12-5 上午11:04:35
* @since 5.0.0
*/
public abstract class HandlerCommon implements ICommandHandler {
protected TableMeta getTableMeta(String tableName) {
TableMeta ts = OptimizerContext.getContext().getSchemaManager().getTable(tableName);
return ts;
}
protected void buildTableAndMeta(IPut put, ExecutionContext executionContext) throws TddlException {
String indexName = put.getIndexName();
String groupDataNode = put.getDataNode();
nestBuildTableAndSchema(groupDataNode, executionContext, indexName, put.getTableName(), true);
}
protected void buildTableAndMeta(IQuery query, ExecutionContext executionContext) throws TddlException {
String indexName = query.getIndexName();
String groupDataNode = query.getDataNode();
nestBuildTableAndSchema(groupDataNode, executionContext, indexName, query.getTableName(), true);
}
/**
* 取逻辑indexKey,而非实际index
*
* @param query
* @param executionContext
* @throws Exception
*/
protected void buildTableAndMetaLogicalIndex(IQuery query, ExecutionContext executionContext) throws TddlException {
String indexName = query.getIndexName();
String groupDataNode = query.getDataNode();
nestBuildTableAndSchema(groupDataNode, executionContext, indexName, query.getTableName(), true);
}
/**
* 准备indexMeta和ITable信息
*/
protected void nestBuildTableAndSchema(String groupDataNode, ExecutionContext executionContext, String indexName,
String actualTable, boolean logicalIndex) throws TddlException {
if (indexName != null && !"".equals(indexName)) {
String tableName = ExecUtils.getLogicTableName(indexName);
TableMeta ts = getTableMeta(tableName);
executionContext.setMeta(ts.getIndexMeta(indexName));
executionContext.setTable(executionContext.getCurrentRepository().getTable(ts, groupDataNode));
}
}
public HandlerCommon(){
super();
}
}