Commit c6e3bb70 authored by terrymanu's avatar terrymanu
Browse files

refactor router module for engine

parent e1c4ed14
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -18,8 +18,8 @@
package com.dangdang.ddframe.rdb.sharding.jdbc;

import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.executor.ExecutorEngine;
import com.dangdang.ddframe.rdb.sharding.router.RouteEngine;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@@ -34,7 +34,7 @@ public final class ShardingContext {
    
    private final ShardingRule shardingRule;
    
    private final RouteEngine routeEngine;
    private final DatabaseType databaseType;
    
    private final ExecutorEngine executorEngine;
}
+1 −2
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import com.dangdang.ddframe.rdb.sharding.exception.ShardingJdbcException;
import com.dangdang.ddframe.rdb.sharding.executor.ExecutorEngine;
import com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractDataSourceAdapter;
import com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext;
import com.dangdang.ddframe.rdb.sharding.router.RouteEngine;
import com.google.common.base.Preconditions;

import javax.sql.DataSource;
@@ -55,7 +54,7 @@ public class ShardingDataSource extends AbstractDataSourceAdapter {
        shardingProperties = new ShardingProperties(props);
        executorEngine = new ExecutorEngine(shardingProperties);
        try {
            shardingContext = new ShardingContext(shardingRule, new RouteEngine(shardingRule, DatabaseType.valueFrom(getDatabaseProductName(shardingRule))), executorEngine);
            shardingContext = new ShardingContext(shardingRule, DatabaseType.valueFrom(getDatabaseProductName(shardingRule)), executorEngine);
        } catch (final SQLException ex) {
            throw new ShardingJdbcException(ex);
        }
+4 −2
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingContext;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.InsertSQLContext;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.SQLContext;
import com.dangdang.ddframe.rdb.sharding.rewrite.GenerateKeysUtils;
import com.dangdang.ddframe.rdb.sharding.router.engine.RouteEngine;
import com.dangdang.ddframe.rdb.sharding.router.engine.RouteEngineFactory;

import java.util.List;

@@ -42,7 +44,7 @@ public final class PreparedSQLRouter {
    
    public PreparedSQLRouter(final String logicSQL, final ShardingContext shardingContext) {
        this.logicSQL = logicSQL;
        routeEngine = shardingContext.getRouteEngine();
        routeEngine = RouteEngineFactory.createRouteEngine(shardingContext);
        shardingRule = shardingContext.getShardingRule();
    }
    
@@ -59,6 +61,6 @@ public final class PreparedSQLRouter {
        } else if (sqlContext instanceof InsertSQLContext) {
            parameters.addAll(GenerateKeysUtils.generateKeys(shardingRule, (InsertSQLContext) sqlContext));
        }
        return routeEngine.route(logicSQL, sqlContext, parameters);
        return routeEngine.route(logicSQL, parameters, sqlContext);
    }
}
+4 −2
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package com.dangdang.ddframe.rdb.sharding.router;

import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingContext;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.SQLContext;
import com.dangdang.ddframe.rdb.sharding.router.engine.RouteEngine;
import com.dangdang.ddframe.rdb.sharding.router.engine.RouteEngineFactory;

import java.util.Collections;

@@ -32,7 +34,7 @@ public final class SQLRouter {
    private final RouteEngine routeEngine;
    
    public SQLRouter(final ShardingContext shardingContext) {
        routeEngine = shardingContext.getRouteEngine();
        routeEngine = RouteEngineFactory.createRouteEngine(shardingContext);
    }
    
    /**
@@ -43,6 +45,6 @@ public final class SQLRouter {
     */
    public SQLRouteResult route(final String logicSQL) {
        SQLContext sqlContext = routeEngine.parse(logicSQL, Collections.emptyList());
        return routeEngine.route(logicSQL, sqlContext, Collections.emptyList());
        return routeEngine.route(logicSQL, Collections.emptyList(), sqlContext);
    }
}
+50 −0
Original line number Diff line number Diff line
/*
 * Copyright 1999-2015 dangdang.com.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * </p>
 */

package com.dangdang.ddframe.rdb.sharding.router.engine;

import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.SQLContext;
import com.dangdang.ddframe.rdb.sharding.router.SQLRouteResult;

import java.util.List;

/**
 * 路由引擎.
 * 
 * @author zhangiang
 */
public interface RouteEngine {
    
    /**
     * SQL解析.
     * 
     * @param logicSQL 逻辑SQL
     * @param parameters 参数
     * @return 解析结果
     */
    SQLContext parse(final String logicSQL, final List<Object> parameters);
    
    /**
     * SQL路由.
     * 
     * @param logicSQL 逻辑SQL
     * @param sqlContext 解析结果
     * @param parameters 参数
     * @return 路由结果
     */
    SQLRouteResult route(final String logicSQL, final List<Object> parameters, final SQLContext sqlContext);
}
Loading