Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
01e2e827
Shardingsphere
项目概览
apache
/
Shardingsphere
通知
56
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Shardingsphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
01e2e827
编写于
6月 05, 2019
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
for #2441, add interface IgnoreForSingleRoute
上级
a58b6afd
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
48 addition
and
16 deletion
+48
-16
sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/BaseShardingEngine.java
...va/org/apache/shardingsphere/core/BaseShardingEngine.java
+1
-1
sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/SQLRewriteEngine.java
.../apache/shardingsphere/core/rewrite/SQLRewriteEngine.java
+10
-10
sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/SQLTokenGenerateEngine.java
...dingsphere/core/rewrite/token/SQLTokenGenerateEngine.java
+7
-1
sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/IgnoreForSingleRoute.java
...re/core/rewrite/token/generator/IgnoreForSingleRoute.java
+26
-0
sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/OffsetTokenGenerator.java
...re/core/rewrite/token/generator/OffsetTokenGenerator.java
+1
-1
sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/RowCountTokenGenerator.java
.../core/rewrite/token/generator/RowCountTokenGenerator.java
+1
-1
sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java
...sphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java
+2
-2
未找到文件。
sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/BaseShardingEngine.java
浏览文件 @
01e2e827
...
...
@@ -102,7 +102,7 @@ public abstract class BaseShardingEngine {
}
private
Collection
<
RouteUnit
>
rewriteAndConvert
(
final
List
<
Object
>
parameters
,
final
SQLRouteResult
sqlRouteResult
)
{
SQLRewriteEngine
rewriteEngine
=
new
SQLRewriteEngine
(
shardingRule
,
sqlRouteResult
.
getSqlStatement
(),
parameters
);
SQLRewriteEngine
rewriteEngine
=
new
SQLRewriteEngine
(
shardingRule
,
sqlRouteResult
.
getSqlStatement
(),
parameters
,
sqlRouteResult
.
getRoutingResult
().
isSingleRouting
()
);
ShardingSQLRewriter
shardingSQLRewriter
=
new
ShardingSQLRewriter
(
shardingRule
,
databaseType
,
sqlRouteResult
,
sqlRouteResult
.
getOptimizeResult
());
EncryptSQLRewriter
encryptSQLRewriter
=
new
EncryptSQLRewriter
(
shardingRule
.
getEncryptRule
().
getEncryptorEngine
(),
sqlRouteResult
.
getSqlStatement
(),
sqlRouteResult
.
getOptimizeResult
());
rewriteEngine
.
init
(
shardingSQLRewriter
,
encryptSQLRewriter
);
...
...
sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/SQLRewriteEngine.java
浏览文件 @
01e2e827
...
...
@@ -62,10 +62,10 @@ public final class SQLRewriteEngine {
private
final
BaseSQLRewriter
baseSQLRewriter
;
public
SQLRewriteEngine
(
final
ShardingRule
shardingRule
,
final
SQLStatement
sqlStatement
,
final
List
<
Object
>
parameters
)
{
public
SQLRewriteEngine
(
final
ShardingRule
shardingRule
,
final
SQLStatement
sqlStatement
,
final
List
<
Object
>
parameters
,
final
boolean
isSingleRoute
)
{
baseRule
=
shardingRule
;
this
.
sqlStatement
=
sqlStatement
;
sqlTokens
=
createSQLTokens
(
shardingRule
,
sqlStatement
);
sqlTokens
=
createSQLTokens
(
shardingRule
,
sqlStatement
,
isSingleRoute
);
sqlBuilder
=
new
SQLBuilder
();
parameterBuilder
=
new
ParameterBuilder
(
parameters
);
baseSQLRewriter
=
new
BaseSQLRewriter
(
sqlStatement
,
sqlTokens
);
...
...
@@ -74,7 +74,7 @@ public final class SQLRewriteEngine {
public
SQLRewriteEngine
(
final
EncryptRule
encryptRule
,
final
SQLStatement
sqlStatement
,
final
List
<
Object
>
parameters
)
{
baseRule
=
encryptRule
;
this
.
sqlStatement
=
sqlStatement
;
sqlTokens
=
createSQLTokens
(
encryptRule
,
sqlStatement
);
sqlTokens
=
createSQLTokens
(
encryptRule
,
sqlStatement
,
true
);
sqlBuilder
=
new
SQLBuilder
();
parameterBuilder
=
new
ParameterBuilder
(
parameters
);
baseSQLRewriter
=
new
BaseSQLRewriter
(
sqlStatement
,
sqlTokens
);
...
...
@@ -83,23 +83,23 @@ public final class SQLRewriteEngine {
public
SQLRewriteEngine
(
final
SQLStatement
sqlStatement
)
{
baseRule
=
null
;
this
.
sqlStatement
=
sqlStatement
;
sqlTokens
=
createSQLTokens
(
null
,
sqlStatement
);
sqlTokens
=
createSQLTokens
(
null
,
sqlStatement
,
true
);
sqlBuilder
=
new
SQLBuilder
();
parameterBuilder
=
new
ParameterBuilder
(
Collections
.
emptyList
());
baseSQLRewriter
=
new
BaseSQLRewriter
(
sqlStatement
,
sqlTokens
);
}
private
List
<
SQLToken
>
createSQLTokens
(
final
BaseRule
baseRule
,
final
SQLStatement
sqlStatement
)
{
private
List
<
SQLToken
>
createSQLTokens
(
final
BaseRule
baseRule
,
final
SQLStatement
sqlStatement
,
final
boolean
isSingleRoute
)
{
List
<
SQLToken
>
result
=
new
LinkedList
<>(
sqlStatement
.
getSQLTokens
());
result
.
addAll
(
new
BaseTokenGenerateEngine
().
generateSQLTokens
(
sqlStatement
,
baseRule
));
result
.
addAll
(
new
BaseTokenGenerateEngine
().
generateSQLTokens
(
sqlStatement
,
baseRule
,
isSingleRoute
));
if
(
baseRule
instanceof
ShardingRule
)
{
ShardingRule
shardingRule
=
(
ShardingRule
)
baseRule
;
result
.
addAll
(
new
ShardingTokenGenerateEngine
().
generateSQLTokens
(
sqlStatement
,
shardingRule
));
result
.
addAll
(
new
EncryptTokenGenerateEngine
().
generateSQLTokens
(
sqlStatement
,
shardingRule
.
getEncryptRule
()));
result
.
addAll
(
new
ShardingTokenGenerateEngine
().
generateSQLTokens
(
sqlStatement
,
shardingRule
,
isSingleRoute
));
result
.
addAll
(
new
EncryptTokenGenerateEngine
().
generateSQLTokens
(
sqlStatement
,
shardingRule
.
getEncryptRule
()
,
isSingleRoute
));
}
else
if
(
baseRule
instanceof
EncryptRule
)
{
result
.
addAll
(
new
EncryptTokenGenerateEngine
().
generateSQLTokens
(
sqlStatement
,
(
EncryptRule
)
baseRule
));
result
.
addAll
(
new
EncryptTokenGenerateEngine
().
generateSQLTokens
(
sqlStatement
,
(
EncryptRule
)
baseRule
,
isSingleRoute
));
}
else
{
result
.
addAll
(
new
MasterSlaveTokenGenerateEngine
().
generateSQLTokens
(
sqlStatement
,
null
));
result
.
addAll
(
new
MasterSlaveTokenGenerateEngine
().
generateSQLTokens
(
sqlStatement
,
null
,
isSingleRoute
));
}
Collections
.
sort
(
result
);
return
result
;
...
...
sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/SQLTokenGenerateEngine.java
浏览文件 @
01e2e827
...
...
@@ -21,6 +21,7 @@ import com.google.common.base.Optional;
import
org.apache.shardingsphere.core.parse.sql.statement.SQLStatement
;
import
org.apache.shardingsphere.core.parse.sql.token.SQLToken
;
import
org.apache.shardingsphere.core.rewrite.token.generator.CollectionSQLTokenGenerator
;
import
org.apache.shardingsphere.core.rewrite.token.generator.IgnoreForSingleRoute
;
import
org.apache.shardingsphere.core.rewrite.token.generator.OptionalSQLTokenGenerator
;
import
org.apache.shardingsphere.core.rewrite.token.generator.SQLTokenGenerator
;
import
org.apache.shardingsphere.core.rule.BaseRule
;
...
...
@@ -43,12 +44,16 @@ public abstract class SQLTokenGenerateEngine<T extends BaseRule> {
*
* @param sqlStatement SQL statement
* @param rule rule
* @param isSingleRoute is single route
* @return SQL tokens
*/
@SuppressWarnings
(
"unchecked"
)
public
final
List
<
SQLToken
>
generateSQLTokens
(
final
SQLStatement
sqlStatement
,
final
T
rule
)
{
public
final
List
<
SQLToken
>
generateSQLTokens
(
final
SQLStatement
sqlStatement
,
final
T
rule
,
final
boolean
isSingleRoute
)
{
List
<
SQLToken
>
result
=
new
LinkedList
<>();
for
(
SQLTokenGenerator
each
:
getSQLTokenGenerators
())
{
if
(
isSingleRoute
&&
each
instanceof
IgnoreForSingleRoute
)
{
continue
;
}
if
(
each
instanceof
OptionalSQLTokenGenerator
)
{
Optional
<?
extends
SQLToken
>
sqlToken
=
((
OptionalSQLTokenGenerator
)
each
).
generateSQLToken
(
sqlStatement
,
rule
);
if
(
sqlToken
.
isPresent
())
{
...
...
@@ -60,5 +65,6 @@ public abstract class SQLTokenGenerateEngine<T extends BaseRule> {
}
return
result
;
}
protected
abstract
Collection
<
SQLTokenGenerator
>
getSQLTokenGenerators
();
}
sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/IgnoreForSingleRoute.java
0 → 100644
浏览文件 @
01e2e827
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
package
org.apache.shardingsphere.core.rewrite.token.generator
;
/**
* Ignore for single route.
*
* @author zhangliang
*/
public
interface
IgnoreForSingleRoute
{
}
sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/OffsetTokenGenerator.java
浏览文件 @
01e2e827
...
...
@@ -30,7 +30,7 @@ import org.apache.shardingsphere.core.rule.ShardingRule;
*
* @author panjuan
*/
public
final
class
OffsetTokenGenerator
implements
OptionalSQLTokenGenerator
<
ShardingRule
>
{
public
final
class
OffsetTokenGenerator
implements
OptionalSQLTokenGenerator
<
ShardingRule
>
,
IgnoreForSingleRoute
{
@Override
public
Optional
<
OffsetToken
>
generateSQLToken
(
final
SQLStatement
sqlStatement
,
final
ShardingRule
shardingRule
)
{
...
...
sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/token/generator/RowCountTokenGenerator.java
浏览文件 @
01e2e827
...
...
@@ -30,7 +30,7 @@ import org.apache.shardingsphere.core.rule.ShardingRule;
*
* @author panjuan
*/
public
final
class
RowCountTokenGenerator
implements
OptionalSQLTokenGenerator
<
ShardingRule
>
{
public
final
class
RowCountTokenGenerator
implements
OptionalSQLTokenGenerator
<
ShardingRule
>
,
IgnoreForSingleRoute
{
@Override
public
Optional
<
RowCountToken
>
generateSQLToken
(
final
SQLStatement
sqlStatement
,
final
ShardingRule
shardingRule
)
{
...
...
sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java
浏览文件 @
01e2e827
...
...
@@ -538,7 +538,7 @@ public final class ShardingSQLRewriterTest {
routeResult
=
new
SQLRouteResult
(
selectStatement
);
routeResult
.
setRoutingResult
(
new
RoutingResult
());
selectStatement
.
setLogicSQL
(
"SELECT table_x.id, x.name FROM table_x x, table_y y WHERE table_x.id=? AND x.name=?"
);
SQLRewriteEngine
rewriteEngine
=
new
SQLRewriteEngine
(
shardingRule
,
routeResult
.
getSqlStatement
(),
parameters
);
SQLRewriteEngine
rewriteEngine
=
new
SQLRewriteEngine
(
shardingRule
,
routeResult
.
getSqlStatement
(),
parameters
,
routeResult
.
getRoutingResult
().
isSingleRouting
()
);
rewriteEngine
.
init
(
new
ShardingSQLRewriter
(
shardingRule
,
DatabaseType
.
MySQL
,
routeResult
,
null
),
new
EncryptSQLRewriter
(
shardingRule
.
getEncryptRule
().
getEncryptorEngine
(),
routeResult
.
getSqlStatement
(),
routeResult
.
getOptimizeResult
()));
...
...
@@ -901,7 +901,7 @@ public final class ShardingSQLRewriterTest {
}
private
SQLRewriteEngine
createSQLRewriteEngine
(
final
DatabaseType
databaseType
,
final
List
<
Object
>
parameters
)
{
SQLRewriteEngine
result
=
new
SQLRewriteEngine
(
shardingRule
,
routeResult
.
getSqlStatement
(),
parameters
);
SQLRewriteEngine
result
=
new
SQLRewriteEngine
(
shardingRule
,
routeResult
.
getSqlStatement
(),
parameters
,
routeResult
.
getRoutingResult
().
isSingleRouting
()
);
result
.
init
(
new
ShardingSQLRewriter
(
shardingRule
,
databaseType
,
routeResult
,
routeResult
.
getOptimizeResult
()),
new
EncryptSQLRewriter
(
shardingRule
.
getEncryptRule
().
getEncryptorEngine
(),
routeResult
.
getSqlStatement
(),
routeResult
.
getOptimizeResult
()));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录