未验证 提交 b6af93eb 编写于 作者: L Liang Zhang 提交者: GitHub

Add getType for OrderAware (#5011)

* add OrderAware.getType()

* add generic type for decorator

* add cast
上级 e330c7b5
......@@ -54,4 +54,9 @@ public final class EncryptResultDecoratorEngine implements ResultDecoratorEngine
public int getOrder() {
return 20;
}
@Override
public Class<EncryptRule> getType() {
return EncryptRule.class;
}
}
......@@ -20,8 +20,8 @@ package org.apache.shardingsphere.encrypt.rewrite.context;
import org.apache.shardingsphere.encrypt.rewrite.parameter.EncryptParameterRewriterBuilder;
import org.apache.shardingsphere.encrypt.rewrite.token.EncryptTokenGenerateBuilder;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.underlying.rewrite.context.SQLRewriteContext;
import org.apache.shardingsphere.underlying.rewrite.context.SQLRewriteContextDecorator;
import org.apache.shardingsphere.underlying.rewrite.parameter.rewriter.ParameterRewriter;
......@@ -47,4 +47,9 @@ public final class EncryptSQLRewriteContextDecorator implements SQLRewriteContex
public int getOrder() {
return 20;
}
@Override
public Class<EncryptRule> getType() {
return EncryptRule.class;
}
}
......@@ -62,4 +62,9 @@ public final class MasterSlaveRouteDecorator implements RouteDecorator<MasterSla
public int getOrder() {
return 10;
}
@Override
public Class<MasterSlaveRule> getType() {
return MasterSlaveRule.class;
}
}
......@@ -45,4 +45,9 @@ public final class ShadowSQLRewriteContextDecorator implements SQLRewriteContext
public int getOrder() {
return 30;
}
@Override
public Class<ShadowRule> getType() {
return ShadowRule.class;
}
}
......@@ -26,8 +26,8 @@ import org.apache.shardingsphere.sql.parser.binder.statement.dml.SelectStatement
import org.apache.shardingsphere.sql.parser.sql.statement.dal.DALStatement;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.underlying.merge.engine.merger.ResultMerger;
import org.apache.shardingsphere.underlying.merge.engine.merger.impl.TransparentResultMerger;
import org.apache.shardingsphere.underlying.merge.engine.merger.ResultMergerEngine;
import org.apache.shardingsphere.underlying.merge.engine.merger.impl.TransparentResultMerger;
/**
* Result merger engine for sharding.
......@@ -49,4 +49,9 @@ public final class ShardingResultMergerEngine implements ResultMergerEngine<Shar
public int getOrder() {
return 0;
}
@Override
public Class<ShardingRule> getType() {
return ShardingRule.class;
}
}
......@@ -19,13 +19,13 @@ package org.apache.shardingsphere.sharding.rewrite.context;
import lombok.Setter;
import org.apache.shardingsphere.core.rule.ShardingRule;
import org.apache.shardingsphere.underlying.rewrite.sql.token.generator.aware.RouteContextAware;
import org.apache.shardingsphere.sharding.rewrite.parameter.ShardingParameterRewriterBuilder;
import org.apache.shardingsphere.sharding.rewrite.token.pojo.ShardingTokenGenerateBuilder;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.underlying.rewrite.context.SQLRewriteContext;
import org.apache.shardingsphere.underlying.rewrite.context.SQLRewriteContextDecorator;
import org.apache.shardingsphere.underlying.rewrite.parameter.rewriter.ParameterRewriter;
import org.apache.shardingsphere.underlying.rewrite.sql.token.generator.aware.RouteContextAware;
import org.apache.shardingsphere.underlying.route.context.RouteContext;
/**
......@@ -51,4 +51,9 @@ public final class ShardingSQLRewriteContextDecorator implements SQLRewriteConte
public int getOrder() {
return 0;
}
@Override
public Class<ShardingRule> getType() {
return ShardingRule.class;
}
}
......@@ -156,4 +156,9 @@ public final class ShardingRouteDecorator implements RouteDecorator<ShardingRule
public int getOrder() {
return 0;
}
@Override
public Class<ShardingRule> getType() {
return ShardingRule.class;
}
}
......@@ -19,8 +19,10 @@ package org.apache.shardingsphere.spi.order;
/**
* Order aware.
*
* @param <T> type
*/
public interface OrderAware {
public interface OrderAware<T> {
/**
* Get order of load.
......@@ -28,4 +30,11 @@ public interface OrderAware {
* @return load order
*/
int getOrder();
/**
* Get type.
*
* @return type
*/
T getType();
}
......@@ -18,9 +18,12 @@
package org.apache.shardingsphere.underlying.merge.engine;
import org.apache.shardingsphere.spi.order.OrderAware;
import org.apache.shardingsphere.underlying.common.rule.BaseRule;
/**
* Result process engine.
*
* @param <T> type of rule
*/
public interface ResultProcessEngine extends OrderAware {
public interface ResultProcessEngine<T extends BaseRule> extends OrderAware<Class<T>> {
}
......@@ -27,9 +27,9 @@ import org.apache.shardingsphere.underlying.merge.engine.ResultProcessEngine;
/**
* Result decorator engine.
*
* @param <T> type of base rule
* @param <T> type of rule
*/
public interface ResultDecoratorEngine<T extends BaseRule> extends ResultProcessEngine {
public interface ResultDecoratorEngine<T extends BaseRule> extends ResultProcessEngine<T> {
/**
* Create new instance of result decorator.
......
......@@ -26,9 +26,9 @@ import org.apache.shardingsphere.underlying.merge.engine.ResultProcessEngine;
/**
* Result merger engine.
*
* @param <T> type of base rule
* @param <T> type of rule
*/
public interface ResultMergerEngine<T extends BaseRule> extends ResultProcessEngine {
public interface ResultMergerEngine<T extends BaseRule> extends ResultProcessEngine<T> {
/**
* Create new instance of result merger engine.
......
......@@ -18,7 +18,6 @@
package org.apache.shardingsphere.underlying.pluggble.merge;
import org.apache.shardingsphere.spi.database.type.DatabaseType;
import org.apache.shardingsphere.spi.order.OrderAware;
import org.apache.shardingsphere.spi.order.OrderedRegistry;
import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData;
import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
......@@ -30,7 +29,6 @@ import org.apache.shardingsphere.underlying.merge.MergeEntry;
import org.apache.shardingsphere.underlying.merge.engine.ResultProcessEngine;
import org.apache.shardingsphere.underlying.merge.result.MergedResult;
import java.lang.reflect.ParameterizedType;
import java.sql.SQLException;
import java.util.Collection;
import java.util.List;
......@@ -65,17 +63,14 @@ public final class MergeEngine {
private void registerMergeDecorator() {
for (Class<? extends ResultProcessEngine> each : OrderedRegistry.getRegisteredClasses(ResultProcessEngine.class)) {
Class<?> ruleClass = getRuleClass(each);
ResultProcessEngine processEngine = createProcessEngine(each);
Class<?> ruleClass = (Class<?>) processEngine.getType();
// FIXME rule.getClass().getSuperclass() == ruleClass for orchestration, should decouple extend between orchestration rule and sharding rule
rules.stream().filter(rule -> rule.getClass() == ruleClass || rule.getClass().getSuperclass() == ruleClass).collect(Collectors.toList())
.forEach(rule -> merger.registerProcessEngine(rule, createProcessEngine(each)));
.forEach(rule -> merger.registerProcessEngine(rule, processEngine));
}
}
private Class<?> getRuleClass(final Class<? extends OrderAware> decoratorClass) {
return (Class<?>) ((ParameterizedType) decoratorClass.getGenericInterfaces()[0]).getActualTypeArguments()[0];
}
private ResultProcessEngine createProcessEngine(final Class<? extends ResultProcessEngine> processEngine) {
try {
return processEngine.newInstance();
......
......@@ -18,7 +18,6 @@
package org.apache.shardingsphere.underlying.pluggble.prepare;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.spi.order.OrderAware;
import org.apache.shardingsphere.spi.order.OrderedRegistry;
import org.apache.shardingsphere.sql.parser.SQLParserEngine;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationProperties;
......@@ -41,7 +40,6 @@ import org.apache.shardingsphere.underlying.route.context.RouteContext;
import org.apache.shardingsphere.underlying.route.context.RouteUnit;
import org.apache.shardingsphere.underlying.route.decorator.RouteDecorator;
import java.lang.reflect.ParameterizedType;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
......@@ -100,10 +98,11 @@ public abstract class BasePrepareEngine {
private void registerRouteDecorator() {
for (Class<? extends RouteDecorator> each : OrderedRegistry.getRegisteredClasses(RouteDecorator.class)) {
Class<?> ruleClass = getRuleClass(each);
RouteDecorator routeDecorator = createRouteDecorator(each);
Class<?> ruleClass = (Class<?>) routeDecorator.getType();
// FIXME rule.getClass().getSuperclass() == ruleClass for orchestration, should decouple extend between orchestration rule and sharding rule
rules.stream().filter(rule -> rule.getClass() == ruleClass || rule.getClass().getSuperclass() == ruleClass).collect(Collectors.toList())
.forEach(rule -> router.registerDecorator(rule, createRouteDecorator(each)));
.forEach(rule -> router.registerDecorator(rule, routeDecorator));
}
}
......@@ -125,10 +124,11 @@ public abstract class BasePrepareEngine {
private void registerRewriteDecorator() {
for (Class<? extends SQLRewriteContextDecorator> each : OrderedRegistry.getRegisteredClasses(SQLRewriteContextDecorator.class)) {
Class<?> ruleClass = getRuleClass(each);
SQLRewriteContextDecorator rewriteContextDecorator = createRewriteDecorator(each);
Class<?> ruleClass = (Class<?>) rewriteContextDecorator.getType();
// FIXME rule.getClass().getSuperclass() == ruleClass for orchestration, should decouple extend between orchestration rule and sharding rule
rules.stream().filter(rule -> rule.getClass() == ruleClass || rule.getClass().getSuperclass() == ruleClass).collect(Collectors.toList())
.forEach(rule -> rewriter.registerDecorator(rule, createRewriteDecorator(each)));
.forEach(rule -> rewriter.registerDecorator(rule, rewriteContextDecorator));
}
}
......@@ -153,8 +153,4 @@ public abstract class BasePrepareEngine {
}
return result;
}
private Class<?> getRuleClass(final Class<? extends OrderAware> decoratorClass) {
return (Class<?>) ((ParameterizedType) decoratorClass.getGenericInterfaces()[0]).getActualTypeArguments()[0];
}
}
......@@ -26,7 +26,7 @@ import org.apache.shardingsphere.underlying.common.rule.BaseRule;
*
* @param <T> type of rule
*/
public interface SQLRewriteContextDecorator<T extends BaseRule> extends OrderAware {
public interface SQLRewriteContextDecorator<T extends BaseRule> extends OrderAware<Class<T>> {
/**
* Decorate SQL rewrite context.
......
......@@ -28,7 +28,7 @@ import org.apache.shardingsphere.underlying.route.context.RouteContext;
*
* @param <T> type of rule
*/
public interface RouteDecorator<T extends BaseRule> extends OrderAware {
public interface RouteDecorator<T extends BaseRule> extends OrderAware<Class<T>> {
/**
* Decorate route context.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册