package org.opencloudb.route.handler;
import java.sql.SQLNonTransientException;
import org.apache.log4j.Logger;
import org.opencloudb.cache.LayerCachePool;
import org.opencloudb.config.model.SchemaConfig;
import org.opencloudb.config.model.SystemConfig;
import org.opencloudb.net.FrontSession;
import org.opencloudb.route.RouteResultset;
import org.opencloudb.route.RouteStrategy;
import org.opencloudb.route.factory.RouteStrategyFactory;
import org.opencloudb.sqlengine.EngineCtx;
import org.opencloudb.sqlengine.demo.MyHellowJoin;
/**
* 处理注释中类型为catlet 的情况,每个catlet为一个用户自定义Java代码类,用于进行复杂查询SQL(只能是查询SQL)的自定义执行过程,
* 目前主要用于跨分片Join的人工智能编码
*/
public class HintCatletHandler implements HintHandler {
private static final Logger LOGGER = Logger
.getLogger(HintCatletHandler.class);
private RouteStrategy routeStrategy;
public HintCatletHandler() {
this.routeStrategy = RouteStrategyFactory.getRouteStrategy();
}
/**
* 从全局的schema列表中查询指定的schema是否存在, 如果存在则替换connection属性中原有的schema,
* 如果不存在,则throws SQLNonTransientException,表示指定的schema 不存在
*
* @param sysConfig
* @param schema
* @param sqlType
* @param realSQL
* @param charset
* @param info
* @param cachePool
* @param hintSQLValue
* @return
* @throws SQLNonTransientException
*/
@Override
public RouteResultset route(SystemConfig sysConfig, SchemaConfig schema,
int sqlType, String realSQL, String charset, FrontSession session,
LayerCachePool cachePool, String hintSQLValue)
throws SQLNonTransientException {
// sc.setEngineCtx ctx
new MyHellowJoin().processSQL(realSQL, new EngineCtx(session));
return null;
// schema = MycatServer.getInstance().getConfig().getSchemas()
// .get(hintSQLValue);
// if (schema != null) {
// RouteResultset rrs = routeStrategy.route(sysConfig, schema,
// sqlType, realSQL, charset, sc, cachePool);
// return rrs;
// } else {
// String msg = "can't find schema:" + schema.getName();
// LOGGER.warn(msg);
// throw new SQLNonTransientException(msg);
// }
}
}