Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
ab325a0f
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,体验更适合开发者的 AI 搜索 >>
未验证
提交
ab325a0f
编写于
11月 12, 2020
作者:
L
Liang Zhang
提交者:
GitHub
11月 12, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove EncryptColumnMetaData (#8140)
* Decouple EncryptColumnMetaData * Remove EncryptColumnMetaData
上级
84c641c2
变更
19
隐藏空白更改
内联
并排
Showing
19 changed file
with
136 addition
and
294 deletion
+136
-294
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-common/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptTableMetaDataBuilder.java
...gsphere/encrypt/metadata/EncryptTableMetaDataBuilder.java
+2
-5
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
...ngsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
+7
-7
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/impl/DecoratedEncryptColumnsMergedResult.java
...t/merge/dal/impl/DecoratedEncryptColumnsMergedResult.java
+3
-3
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/impl/EncryptColumnsMergedResult.java
...re/encrypt/merge/dal/impl/EncryptColumnsMergedResult.java
+15
-47
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/impl/MergedEncryptColumnsMergedResult.java
...rypt/merge/dal/impl/MergedEncryptColumnsMergedResult.java
+3
-3
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
...ngsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
+4
-4
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
...here/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
+14
-10
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/MergedEncryptColumnsMergedResultTest.java
...crypt/merge/dal/MergedEncryptColumnsMergedResultTest.java
+25
-37
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/impl/DecoratedEncryptColumnsMergedResultTest.java
...rge/dal/impl/DecoratedEncryptColumnsMergedResultTest.java
+2
-2
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
...here/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
+8
-12
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/fixture/EncryptColumnsMergedResultFixture.java
.../merge/dql/fixture/EncryptColumnsMergedResultFixture.java
+3
-3
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/impl/EncryptColumnsMergedResultTest.java
...ncrypt/merge/dql/impl/EncryptColumnsMergedResultTest.java
+0
-137
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/model/ColumnMetaData.java
...ingsphere/infra/metadata/schema/model/ColumnMetaData.java
+1
-1
shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
...va/org/apache/shardingsphere/infra/merge/MergeEngine.java
+2
-2
shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecorator.java
...gsphere/infra/merge/engine/decorator/ResultDecorator.java
+9
-7
shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecorator.java
...rge/engine/decorator/impl/TransparentResultDecorator.java
+4
-5
shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentRule.java
...re/infra/merge/engine/decorator/impl/TransparentRule.java
+26
-0
shardingsphere-infra/shardingsphere-infra-merge/src/test/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecoratorTest.java
...engine/decorator/impl/TransparentResultDecoratorTest.java
+3
-4
shardingsphere-infra/shardingsphere-infra-merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorFixture.java
...infra/merge/fixture/decorator/ResultDecoratorFixture.java
+5
-5
未找到文件。
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-common/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptTableMetaDataBuilder.java
浏览文件 @
ab325a0f
...
...
@@ -67,11 +67,8 @@ public final class EncryptTableMetaDataBuilder implements RuleBasedTableMetaData
return
originalColumnMetaData
;
}
String
logicColumnName
=
encryptRule
.
getLogicColumnOfCipher
(
tableName
,
originalColumnMetaData
.
getName
());
String
plainColumnName
=
encryptRule
.
findPlainColumn
(
tableName
,
logicColumnName
).
orElse
(
null
);
String
assistedQueryColumnName
=
encryptRule
.
findAssistedQueryColumn
(
tableName
,
logicColumnName
).
orElse
(
null
);
return
new
EncryptColumnMetaData
(
logicColumnName
,
originalColumnMetaData
.
getDataType
(),
originalColumnMetaData
.
getDataTypeName
(),
originalColumnMetaData
.
isPrimaryKey
(),
originalColumnMetaData
.
getName
(),
plainColumnName
,
assistedQueryColumnName
);
return
new
ColumnMetaData
(
logicColumnName
,
originalColumnMetaData
.
getDataType
(),
originalColumnMetaData
.
getDataTypeName
(),
originalColumnMetaData
.
isPrimaryKey
(),
originalColumnMetaData
.
isGenerated
(),
originalColumnMetaData
.
isCaseSensitive
());
}
@Override
...
...
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
浏览文件 @
ab325a0f
...
...
@@ -19,12 +19,12 @@ package org.apache.shardingsphere.encrypt.merge.dal;
import
org.apache.shardingsphere.encrypt.merge.dal.impl.DecoratedEncryptColumnsMergedResult
;
import
org.apache.shardingsphere.encrypt.merge.dal.impl.MergedEncryptColumnsMergedResult
;
import
org.apache.shardingsphere.encrypt.rule.EncryptRule
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.executor.sql.QueryResult
;
import
org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator
;
import
org.apache.shardingsphere.infra.merge.result.MergedResult
;
import
org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult
;
import
org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement
;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLDescribeStatement
;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowColumnsStatement
;
...
...
@@ -32,17 +32,17 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQ
/**
* DAL result decorator for encrypt.
*/
public
final
class
EncryptDALResultDecorator
implements
ResultDecorator
{
public
final
class
EncryptDALResultDecorator
implements
ResultDecorator
<
EncryptRule
>
{
@Override
public
MergedResult
decorate
(
final
QueryResult
queryResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
ShardingSphereSchema
schema
)
{
public
MergedResult
decorate
(
final
QueryResult
queryResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
EncryptRule
rule
)
{
return
isNeedMergeEncryptColumns
(
sqlStatementContext
.
getSqlStatement
())
?
new
MergedEncryptColumnsMergedResult
(
queryResult
,
sqlStatementContext
,
schema
)
:
new
TransparentMergedResult
(
queryResult
);
?
new
MergedEncryptColumnsMergedResult
(
queryResult
,
sqlStatementContext
,
rule
)
:
new
TransparentMergedResult
(
queryResult
);
}
@Override
public
MergedResult
decorate
(
final
MergedResult
mergedResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
ShardingSphereSchema
schema
)
{
return
isNeedMergeEncryptColumns
(
sqlStatementContext
.
getSqlStatement
())
?
new
DecoratedEncryptColumnsMergedResult
(
mergedResult
,
sqlStatementContext
,
schema
)
:
mergedResult
;
public
MergedResult
decorate
(
final
MergedResult
mergedResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
EncryptRule
rule
)
{
return
isNeedMergeEncryptColumns
(
sqlStatementContext
.
getSqlStatement
())
?
new
DecoratedEncryptColumnsMergedResult
(
mergedResult
,
sqlStatementContext
,
rule
)
:
mergedResult
;
}
private
boolean
isNeedMergeEncryptColumns
(
final
SQLStatement
sqlStatement
)
{
...
...
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/impl/DecoratedEncryptColumnsMergedResult.java
浏览文件 @
ab325a0f
...
...
@@ -17,7 +17,7 @@
package
org.apache.shardingsphere.encrypt.merge.dal.impl
;
import
org.apache.shardingsphere.
infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.
encrypt.rule.EncryptRule
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.merge.result.MergedResult
;
...
...
@@ -30,8 +30,8 @@ public final class DecoratedEncryptColumnsMergedResult extends EncryptColumnsMer
private
final
MergedResult
mergedResult
;
public
DecoratedEncryptColumnsMergedResult
(
final
MergedResult
mergedResult
,
final
SQLStatementContext
sqlStatementContext
,
final
ShardingSphereSchema
schema
)
{
super
(
sqlStatementContext
,
schema
);
public
DecoratedEncryptColumnsMergedResult
(
final
MergedResult
mergedResult
,
final
SQLStatementContext
sqlStatementContext
,
final
EncryptRule
encryptRule
)
{
super
(
sqlStatementContext
,
encryptRule
);
this
.
mergedResult
=
mergedResult
;
}
...
...
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/impl/EncryptColumnsMergedResult.java
浏览文件 @
ab325a0f
...
...
@@ -18,9 +18,8 @@
package
org.apache.shardingsphere.encrypt.merge.dal.impl
;
import
com.google.common.base.Preconditions
;
import
org.apache.shardingsphere.encrypt.metadata.EncryptColumnMetaData
;
import
org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData
;
import
org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.encrypt.rule.EncryptRule
;
import
org.apache.shardingsphere.encrypt.rule.EncryptTable
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.binder.type.TableAvailable
;
import
org.apache.shardingsphere.infra.merge.result.MergedResult
;
...
...
@@ -29,38 +28,35 @@ import java.io.InputStream;
import
java.sql.SQLException
;
import
java.sql.SQLFeatureNotSupportedException
;
import
java.util.Calendar
;
import
java.util.Collection
;
import
java.util.LinkedList
;
import
java.util.Map.Entry
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
/**
* Encrypt column merged result.
*/
public
abstract
class
EncryptColumnsMergedResult
implements
MergedResult
{
private
final
ShardingSphereSchema
schema
;
private
final
String
tableName
;
protected
EncryptColumnsMergedResult
(
final
SQLStatementContext
sqlStatementContext
,
final
ShardingSphereSchema
schema
)
{
this
.
schema
=
schema
;
private
final
EncryptRule
encryptRule
;
protected
EncryptColumnsMergedResult
(
final
SQLStatementContext
sqlStatementContext
,
final
EncryptRule
encryptRule
)
{
Preconditions
.
checkState
(
sqlStatementContext
instanceof
TableAvailable
&&
1
==
((
TableAvailable
)
sqlStatementContext
).
getAllTables
().
size
());
tableName
=
((
TableAvailable
)
sqlStatementContext
).
getAllTables
().
iterator
().
next
().
getTableName
().
getIdentifier
().
getValue
();
this
.
encryptRule
=
encryptRule
;
}
@Override
public
final
boolean
next
()
throws
SQLException
{
boolean
hasNext
=
nextValue
();
if
(
hasNext
&&
getTableEncryptColumnMetaDataList
().
isEmpty
())
{
Optional
<
EncryptTable
>
encryptTable
=
encryptRule
.
findEncryptTable
(
tableName
);
if
(
hasNext
&&
!
encryptTable
.
isPresent
())
{
return
true
;
}
if
(!
hasNext
)
{
return
false
;
}
String
columnName
=
getOriginalValue
(
1
,
String
.
class
).
toString
();
while
(
getAssistedQueryColumns
().
contains
(
columnName
)
||
getPlainColumns
().
contains
(
columnName
))
{
while
(
encryptTable
.
get
().
getAssistedQueryColumns
().
contains
(
columnName
)
||
encryptTable
.
get
().
getPlainColumns
().
contains
(
columnName
))
{
hasNext
=
nextValue
();
if
(!
hasNext
)
{
return
false
;
...
...
@@ -70,48 +66,20 @@ public abstract class EncryptColumnsMergedResult implements MergedResult {
return
true
;
}
private
Collection
<
String
>
getAssistedQueryColumns
()
{
return
getTableEncryptColumnMetaDataList
().
stream
().
map
(
EncryptColumnMetaData:
:
getAssistedQueryColumnName
)
.
collect
(
Collectors
.
toList
());
}
private
Collection
<
String
>
getPlainColumns
()
{
return
getTableEncryptColumnMetaDataList
().
stream
().
map
(
EncryptColumnMetaData:
:
getPlainColumnName
)
.
collect
(
Collectors
.
toList
());
}
private
Collection
<
EncryptColumnMetaData
>
getTableEncryptColumnMetaDataList
()
{
Collection
<
EncryptColumnMetaData
>
result
=
new
LinkedList
<>();
for
(
Entry
<
String
,
ColumnMetaData
>
entry
:
schema
.
get
(
tableName
).
getColumns
().
entrySet
())
{
if
(
entry
.
getValue
()
instanceof
EncryptColumnMetaData
)
{
result
.
add
((
EncryptColumnMetaData
)
entry
.
getValue
());
}
}
return
result
;
}
@Override
public
final
Object
getValue
(
final
int
columnIndex
,
final
Class
<?>
type
)
throws
SQLException
{
if
(
1
==
columnIndex
)
{
String
columnName
=
getOriginalValue
(
1
,
type
).
toString
();
Optional
<
String
>
logicColumn
=
getLogicColumnOfCipher
(
columnName
);
Optional
<
EncryptTable
>
encryptTable
=
encryptRule
.
findEncryptTable
(
tableName
);
if
(!
encryptTable
.
isPresent
())
{
return
columnName
;
}
Optional
<
String
>
logicColumn
=
encryptTable
.
get
().
isCipherColumn
(
columnName
)
?
Optional
.
of
(
encryptTable
.
get
().
getLogicColumn
(
columnName
))
:
Optional
.
empty
();
return
logicColumn
.
orElse
(
columnName
);
}
return
getOriginalValue
(
columnIndex
,
type
);
}
private
Optional
<
String
>
getLogicColumnOfCipher
(
final
String
cipherColumn
)
{
for
(
Entry
<
String
,
ColumnMetaData
>
entry
:
schema
.
get
(
tableName
).
getColumns
().
entrySet
())
{
if
(
entry
.
getValue
()
instanceof
EncryptColumnMetaData
)
{
EncryptColumnMetaData
encryptColumnMetaData
=
(
EncryptColumnMetaData
)
entry
.
getValue
();
if
(
encryptColumnMetaData
.
getCipherColumnName
().
equalsIgnoreCase
(
cipherColumn
))
{
return
Optional
.
of
(
entry
.
getKey
());
}
}
}
return
Optional
.
empty
();
}
@Override
public
final
Object
getCalendarValue
(
final
int
columnIndex
,
final
Class
<?>
type
,
final
Calendar
calendar
)
throws
SQLException
{
throw
new
SQLFeatureNotSupportedException
(
""
);
...
...
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/impl/MergedEncryptColumnsMergedResult.java
浏览文件 @
ab325a0f
...
...
@@ -17,7 +17,7 @@
package
org.apache.shardingsphere.encrypt.merge.dal.impl
;
import
org.apache.shardingsphere.
infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.
encrypt.rule.EncryptRule
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.executor.sql.QueryResult
;
...
...
@@ -30,8 +30,8 @@ public final class MergedEncryptColumnsMergedResult extends EncryptColumnsMerged
private
final
QueryResult
queryResult
;
public
MergedEncryptColumnsMergedResult
(
final
QueryResult
queryResult
,
final
SQLStatementContext
sqlStatementContext
,
final
ShardingSphereSchema
schema
)
{
super
(
sqlStatementContext
,
schema
);
public
MergedEncryptColumnsMergedResult
(
final
QueryResult
queryResult
,
final
SQLStatementContext
sqlStatementContext
,
final
EncryptRule
encryptRule
)
{
super
(
sqlStatementContext
,
encryptRule
);
this
.
queryResult
=
queryResult
;
}
...
...
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
浏览文件 @
ab325a0f
...
...
@@ -18,7 +18,7 @@
package
org.apache.shardingsphere.encrypt.merge.dql
;
import
lombok.RequiredArgsConstructor
;
import
org.apache.shardingsphere.
infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.
encrypt.rule.EncryptRule
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.executor.sql.QueryResult
;
import
org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator
;
...
...
@@ -29,19 +29,19 @@ import org.apache.shardingsphere.infra.merge.result.impl.transparent.Transparent
* DQL result decorator for encrypt.
*/
@RequiredArgsConstructor
public
final
class
EncryptDQLResultDecorator
implements
ResultDecorator
{
public
final
class
EncryptDQLResultDecorator
implements
ResultDecorator
<
EncryptRule
>
{
private
final
EncryptAlgorithmMetaData
metaData
;
private
final
boolean
queryWithCipherColumn
;
@Override
public
MergedResult
decorate
(
final
QueryResult
queryResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
ShardingSphereSchema
schema
)
{
public
MergedResult
decorate
(
final
QueryResult
queryResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
EncryptRule
rule
)
{
return
new
EncryptMergedResult
(
metaData
,
new
TransparentMergedResult
(
queryResult
),
queryWithCipherColumn
);
}
@Override
public
MergedResult
decorate
(
final
MergedResult
mergedResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
ShardingSphereSchema
schema
)
{
public
MergedResult
decorate
(
final
MergedResult
mergedResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
EncryptRule
rule
)
{
return
new
EncryptMergedResult
(
metaData
,
mergedResult
,
queryWithCipherColumn
);
}
}
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
浏览文件 @
ab325a0f
...
...
@@ -19,18 +19,19 @@ package org.apache.shardingsphere.encrypt.merge.dal;
import
org.apache.shardingsphere.encrypt.merge.dal.impl.DecoratedEncryptColumnsMergedResult
;
import
org.apache.shardingsphere.encrypt.merge.dal.impl.MergedEncryptColumnsMergedResult
;
import
org.apache.shardingsphere.encrypt.rule.EncryptRule
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.binder.statement.dal.DescribeStatementContext
;
import
org.apache.shardingsphere.infra.binder.statement.dal.ShowColumnsStatementContext
;
import
org.apache.shardingsphere.infra.executor.sql.QueryResult
;
import
org.apache.shardingsphere.infra.merge.result.MergedResult
;
import
org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult
;
import
org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.binder.statement.dal.DescribeStatementContext
;
import
org.apache.shardingsphere.infra.binder.statement.dal.ShowColumnsStatementContext
;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment
;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment
;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue
;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLDescribeStatement
;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowColumnsStatement
;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mock
;
...
...
@@ -48,6 +49,9 @@ public final class EncryptDALResultDecoratorTest {
@Mock
private
ShardingSphereSchema
schema
;
@Mock
private
EncryptRule
rule
;
@Mock
private
SQLStatementContext
<?>
sqlStatementContext
;
...
...
@@ -57,8 +61,8 @@ public final class EncryptDALResultDecoratorTest {
schema
=
mock
(
ShardingSphereSchema
.
class
);
sqlStatementContext
=
getDescribeStatementContext
();
EncryptDALResultDecorator
encryptDALResultDecorator
=
new
EncryptDALResultDecorator
();
assertThat
(
encryptDALResultDecorator
.
decorate
(
mock
(
QueryResult
.
class
),
sqlStatementContext
,
schema
),
instanceOf
(
MergedEncryptColumnsMergedResult
.
class
));
assertThat
(
encryptDALResultDecorator
.
decorate
(
mock
(
MergedResult
.
class
),
sqlStatementContext
,
schema
),
instanceOf
(
DecoratedEncryptColumnsMergedResult
.
class
));
assertThat
(
encryptDALResultDecorator
.
decorate
(
mock
(
QueryResult
.
class
),
sqlStatementContext
,
rule
),
instanceOf
(
MergedEncryptColumnsMergedResult
.
class
));
assertThat
(
encryptDALResultDecorator
.
decorate
(
mock
(
MergedResult
.
class
),
sqlStatementContext
,
rule
),
instanceOf
(
DecoratedEncryptColumnsMergedResult
.
class
));
}
@Test
...
...
@@ -66,8 +70,8 @@ public final class EncryptDALResultDecoratorTest {
schema
=
mock
(
ShardingSphereSchema
.
class
);
sqlStatementContext
=
getShowColumnsStatementContext
();
EncryptDALResultDecorator
encryptDALResultDecorator
=
new
EncryptDALResultDecorator
();
assertThat
(
encryptDALResultDecorator
.
decorate
(
mock
(
QueryResult
.
class
),
sqlStatementContext
,
schema
),
instanceOf
(
MergedEncryptColumnsMergedResult
.
class
));
assertThat
(
encryptDALResultDecorator
.
decorate
(
mock
(
MergedResult
.
class
),
sqlStatementContext
,
schema
),
instanceOf
(
DecoratedEncryptColumnsMergedResult
.
class
));
assertThat
(
encryptDALResultDecorator
.
decorate
(
mock
(
QueryResult
.
class
),
sqlStatementContext
,
rule
),
instanceOf
(
MergedEncryptColumnsMergedResult
.
class
));
assertThat
(
encryptDALResultDecorator
.
decorate
(
mock
(
MergedResult
.
class
),
sqlStatementContext
,
rule
),
instanceOf
(
DecoratedEncryptColumnsMergedResult
.
class
));
}
@Test
...
...
@@ -75,8 +79,8 @@ public final class EncryptDALResultDecoratorTest {
schema
=
mock
(
ShardingSphereSchema
.
class
);
sqlStatementContext
=
mock
(
SQLStatementContext
.
class
);
EncryptDALResultDecorator
encryptDALResultDecorator
=
new
EncryptDALResultDecorator
();
assertThat
(
encryptDALResultDecorator
.
decorate
(
mock
(
QueryResult
.
class
),
sqlStatementContext
,
schema
),
instanceOf
(
TransparentMergedResult
.
class
));
assertThat
(
encryptDALResultDecorator
.
decorate
(
mock
(
MergedResult
.
class
),
sqlStatementContext
,
schema
),
instanceOf
(
MergedResult
.
class
));
assertThat
(
encryptDALResultDecorator
.
decorate
(
mock
(
QueryResult
.
class
),
sqlStatementContext
,
rule
),
instanceOf
(
TransparentMergedResult
.
class
));
assertThat
(
encryptDALResultDecorator
.
decorate
(
mock
(
MergedResult
.
class
),
sqlStatementContext
,
rule
),
instanceOf
(
MergedResult
.
class
));
}
private
SQLStatementContext
<?>
getDescribeStatementContext
()
{
...
...
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/MergedEncryptColumnsMergedResultTest.java
浏览文件 @
ab325a0f
...
...
@@ -18,11 +18,10 @@
package
org.apache.shardingsphere.encrypt.merge.dal
;
import
org.apache.shardingsphere.encrypt.merge.dal.impl.MergedEncryptColumnsMergedResult
;
import
org.apache.shardingsphere.encrypt.metadata.EncryptColumnMetaData
;
import
org.apache.shardingsphere.infra.executor.sql.QueryResult
;
import
org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData
;
import
org.apache.shardingsphere.encrypt.rule.EncryptRule
;
import
org.apache.shardingsphere.encrypt.rule.EncryptTable
;
import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext
;
import
org.apache.shardingsphere.infra.executor.sql.QueryResult
;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment
;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment
;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue
;
...
...
@@ -32,10 +31,8 @@ import org.mockito.Mock;
import
org.mockito.junit.MockitoJUnitRunner
;
import
java.sql.SQLException
;
import
java.sql.Types
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Optional
;
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
...
...
@@ -51,71 +48,62 @@ public final class MergedEncryptColumnsMergedResultTest {
private
QueryResult
queryResult
;
@Test
public
void
assertNextWithTableEncryptColumnMetaDataListEmpty
()
throws
SQLException
{
when
(
queryResult
.
next
()).
thenReturn
(
true
);
TableMetaData
tableMetaData
=
new
TableMetaData
(
Collections
.
emptyList
(),
Collections
.
emptyList
());
Map
<
String
,
TableMetaData
>
tables
=
new
HashMap
<>(
1
,
1
);
tables
.
put
(
"test"
,
tableMetaData
);
assertTrue
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
new
ShardingSphereSchema
(
tables
)).
next
());
public
void
assertNextWithNotHasNext
()
throws
SQLException
{
assertFalse
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
mock
(
EncryptRule
.
class
)).
next
());
}
@Test
public
void
assertNextWithHasNext
()
throws
SQLException
{
assertFalse
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
mock
(
ShardingSphereSchema
.
class
)).
next
());
when
(
queryResult
.
next
()).
thenReturn
(
true
);
assertTrue
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
mock
(
EncryptRule
.
class
)).
next
());
}
@Test
public
void
assertNextWithAssistedQuery
()
throws
SQLException
{
when
(
queryResult
.
next
()).
thenReturn
(
true
).
thenReturn
(
false
);
when
(
queryResult
.
getValue
(
1
,
String
.
class
)).
thenReturn
(
"assistedQuery"
);
EncryptColumnMetaData
encryptColumnMetaData
=
new
EncryptColumnMetaData
(
"id"
,
Types
.
VARCHAR
,
"varchar"
,
true
,
"cipher"
,
"plain"
,
"assistedQuery"
);
TableMetaData
tableMetaData
=
new
TableMetaData
(
Collections
.
singletonList
(
encryptColumnMetaData
),
Collections
.
emptyList
());
Map
<
String
,
TableMetaData
>
tables
=
new
HashMap
<>(
1
,
1
);
tables
.
put
(
"test"
,
tableMetaData
);
assertFalse
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
new
ShardingSphereSchema
(
tables
)).
next
());
assertFalse
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
mockEncryptRule
()).
next
());
}
@Test
public
void
assertGetValueWithCipherColumn
()
throws
SQLException
{
when
(
queryResult
.
getValue
(
1
,
String
.
class
)).
thenReturn
(
"cipher"
);
EncryptColumnMetaData
encryptColumnMetaData
=
new
EncryptColumnMetaData
(
"id"
,
Types
.
VARCHAR
,
"varchar"
,
true
,
"cipher"
,
"plain"
,
"assistedQuery"
);
TableMetaData
tableMetaData
=
new
TableMetaData
(
Collections
.
singletonList
(
encryptColumnMetaData
),
Collections
.
emptyList
());
Map
<
String
,
TableMetaData
>
tables
=
new
HashMap
<>(
1
);
tables
.
put
(
"test"
,
tableMetaData
);
assertThat
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
new
ShardingSphereSchema
(
tables
)).
getValue
(
1
,
String
.
class
),
is
(
"id"
));
assertThat
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
mockEncryptRule
()).
getValue
(
1
,
String
.
class
),
is
(
"id"
));
}
private
EncryptRule
mockEncryptRule
()
{
EncryptRule
encryptRule
=
mock
(
EncryptRule
.
class
);
EncryptTable
encryptTable
=
mock
(
EncryptTable
.
class
);
when
(
encryptRule
.
findEncryptTable
(
"test"
)).
thenReturn
(
Optional
.
of
(
encryptTable
));
when
(
encryptTable
.
getAssistedQueryColumns
()).
thenReturn
(
Collections
.
singleton
(
"assistedQuery"
));
when
(
encryptTable
.
isCipherColumn
(
"cipher"
)).
thenReturn
(
true
);
when
(
encryptTable
.
getLogicColumn
(
"cipher"
)).
thenReturn
(
"id"
);
return
encryptRule
;
}
@Test
public
void
assertGetValueWithOtherColumn
()
throws
SQLException
{
when
(
queryResult
.
getValue
(
1
,
String
.
class
)).
thenReturn
(
"assistedQuery"
);
EncryptColumnMetaData
encryptColumnMetaData
=
new
EncryptColumnMetaData
(
"id"
,
Types
.
VARCHAR
,
"varchar"
,
true
,
"cipher"
,
"plain"
,
"assistedQuery"
);
TableMetaData
tableMetaData
=
new
TableMetaData
(
Collections
.
singletonList
(
encryptColumnMetaData
),
Collections
.
emptyList
());
Map
<
String
,
TableMetaData
>
tables
=
new
HashMap
<>(
1
,
1
);
tables
.
put
(
"test"
,
tableMetaData
);
assertThat
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
new
ShardingSphereSchema
(
tables
)).
getValue
(
1
,
String
.
class
),
is
(
"assistedQuery"
));
assertThat
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
mock
(
EncryptRule
.
class
)).
getValue
(
1
,
String
.
class
),
is
(
"assistedQuery"
));
}
@Test
public
void
assertGetValueWithOtherIndex
()
throws
SQLException
{
when
(
queryResult
.
getValue
(
2
,
String
.
class
)).
thenReturn
(
"id"
);
EncryptColumnMetaData
encryptColumnMetaData
=
new
EncryptColumnMetaData
(
"id"
,
Types
.
VARCHAR
,
"varchar"
,
true
,
"cipher"
,
"plain"
,
"assistedQuery"
);
TableMetaData
tableMetaData
=
new
TableMetaData
(
Collections
.
singletonList
(
encryptColumnMetaData
),
Collections
.
emptyList
());
Map
<
String
,
TableMetaData
>
tables
=
new
HashMap
<>(
1
,
1
);
tables
.
put
(
"test"
,
tableMetaData
);
assertThat
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
new
ShardingSphereSchema
(
tables
)).
getValue
(
2
,
String
.
class
),
is
(
"id"
));
assertThat
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
mock
(
EncryptRule
.
class
)).
getValue
(
2
,
String
.
class
),
is
(
"id"
));
}
@Test
public
void
assertWasNull
()
throws
SQLException
{
assertFalse
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
mock
(
ShardingSphereSchema
.
class
)).
wasNull
());
assertFalse
(
createMergedEncryptColumnsMergedResult
(
queryResult
,
mock
(
EncryptRule
.
class
)).
wasNull
());
}
private
MergedEncryptColumnsMergedResult
createMergedEncryptColumnsMergedResult
(
final
QueryResult
queryResult
,
final
ShardingSphereSchema
schema
)
{
private
MergedEncryptColumnsMergedResult
createMergedEncryptColumnsMergedResult
(
final
QueryResult
queryResult
,
final
EncryptRule
encryptRule
)
{
SelectStatementContext
sqlStatementContext
=
mock
(
SelectStatementContext
.
class
);
IdentifierValue
identifierValue
=
new
IdentifierValue
(
"test"
);
TableNameSegment
tableNameSegment
=
new
TableNameSegment
(
1
,
4
,
identifierValue
);
SimpleTableSegment
simpleTableSegment
=
new
SimpleTableSegment
(
tableNameSegment
);
when
(
sqlStatementContext
.
getAllTables
()).
thenReturn
(
Collections
.
singletonList
(
simpleTableSegment
));
return
new
MergedEncryptColumnsMergedResult
(
queryResult
,
sqlStatementContext
,
schema
);
return
new
MergedEncryptColumnsMergedResult
(
queryResult
,
sqlStatementContext
,
encryptRule
);
}
}
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/impl/DecoratedEncryptColumnsMergedResultTest.java
浏览文件 @
ab325a0f
...
...
@@ -18,8 +18,8 @@
package
org.apache.shardingsphere.encrypt.merge.dal.impl
;
import
org.apache.shardingsphere.encrypt.merge.dal.impl.fixture.TestStatementContext
;
import
org.apache.shardingsphere.encrypt.rule.EncryptRule
;
import
org.apache.shardingsphere.infra.merge.result.MergedResult
;
import
org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment
;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment
;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue
;
...
...
@@ -52,7 +52,7 @@ public final class DecoratedEncryptColumnsMergedResultTest {
when
(
mergedResult
.
next
()).
thenReturn
(
true
);
when
(
mergedResult
.
wasNull
()).
thenReturn
(
false
);
when
(
mergedResult
.
getValue
(
eq
(
new
Integer
(
1
)),
eq
(
getClass
()))).
thenReturn
(
"test"
);
DecoratedEncryptColumnsMergedResult
actual
=
new
DecoratedEncryptColumnsMergedResult
(
mergedResult
,
testStatementContext
,
mock
(
ShardingSphereSchema
.
class
));
DecoratedEncryptColumnsMergedResult
actual
=
new
DecoratedEncryptColumnsMergedResult
(
mergedResult
,
testStatementContext
,
mock
(
EncryptRule
.
class
));
assertNotNull
(
actual
);
assertTrue
(
actual
.
nextValue
());
assertFalse
(
actual
.
wasNull
());
...
...
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
浏览文件 @
ab325a0f
...
...
@@ -17,10 +17,10 @@
package
org.apache.shardingsphere.encrypt.merge.dql
;
import
org.apache.shardingsphere.encrypt.rule.EncryptRule
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.executor.sql.QueryResult
;
import
org.apache.shardingsphere.infra.merge.result.MergedResult
;
import
org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.junit.Test
;
import
java.sql.SQLException
;
...
...
@@ -30,26 +30,22 @@ import static org.mockito.Mockito.mock;
import
static
org
.
mockito
.
Mockito
.
when
;
public
final
class
EncryptDQLResultDecoratorTest
{
private
EncryptAlgorithmMetaData
metaData
;
private
boolean
queryWithCipherColumn
;
@Test
public
void
assertDecorateQueryResult
()
throws
SQLException
{
QueryResult
queryResult
=
mock
(
QueryResult
.
class
);
when
(
queryResult
.
next
()).
thenReturn
(
true
);
EncryptDQLResultDecorator
decorator
=
new
EncryptDQLResultDecorator
(
m
etaData
,
queryWithCipherColumn
);
MergedResult
actual
=
decorator
.
decorate
(
queryResult
,
mock
(
SQLStatementContext
.
class
),
mock
(
ShardingSphereSchema
.
class
));
EncryptDQLResultDecorator
decorator
=
new
EncryptDQLResultDecorator
(
m
ock
(
EncryptAlgorithmMetaData
.
class
),
false
);
MergedResult
actual
=
decorator
.
decorate
(
queryResult
,
mock
(
SQLStatementContext
.
class
),
mock
(
EncryptRule
.
class
));
assertTrue
(
actual
.
next
());
}
@Test
public
void
assertDecorateMergedResult
()
throws
SQLException
{
MergedResult
mergedResult
=
mock
(
MergedResult
.
class
);
when
(
mergedResult
.
next
()).
thenReturn
(
true
);
EncryptDQLResultDecorator
decorator
=
new
EncryptDQLResultDecorator
(
m
etaData
,
queryWithCipherColumn
);
MergedResult
actual
=
decorator
.
decorate
(
mergedResult
,
mock
(
SQLStatementContext
.
class
),
mock
(
ShardingSphereSchema
.
class
));
EncryptDQLResultDecorator
decorator
=
new
EncryptDQLResultDecorator
(
m
ock
(
EncryptAlgorithmMetaData
.
class
),
false
);
MergedResult
actual
=
decorator
.
decorate
(
mergedResult
,
mock
(
SQLStatementContext
.
class
),
mock
(
EncryptRule
.
class
));
assertTrue
(
actual
.
next
());
}
}
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/fixture/EncryptColumnsMergedResultFixture.java
浏览文件 @
ab325a0f
...
...
@@ -18,13 +18,13 @@
package
org.apache.shardingsphere.encrypt.merge.dql.fixture
;
import
org.apache.shardingsphere.encrypt.merge.dal.impl.EncryptColumnsMergedResult
;
import
org.apache.shardingsphere.
infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.
encrypt.rule.EncryptRule
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
public
final
class
EncryptColumnsMergedResultFixture
extends
EncryptColumnsMergedResult
{
public
EncryptColumnsMergedResultFixture
(
final
SQLStatementContext
sqlStatementContext
,
final
ShardingSphereSchema
schema
)
{
super
(
sqlStatementContext
,
schema
);
public
EncryptColumnsMergedResultFixture
(
final
SQLStatementContext
sqlStatementContext
,
final
EncryptRule
encryptRule
)
{
super
(
sqlStatementContext
,
encryptRule
);
}
@Override
...
...
shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/impl/EncryptColumnsMergedResultTest.java
已删除
100644 → 0
浏览文件 @
84c641c2
/*
* 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.encrypt.merge.dql.impl
;
import
com.google.common.collect.Lists
;
import
org.apache.shardingsphere.encrypt.merge.dql.fixture.EncryptColumnsMergedResultFixture
;
import
org.apache.shardingsphere.encrypt.merge.dql.fixture.TableAvailableAndSqlStatementContextFixture
;
import
org.apache.shardingsphere.encrypt.metadata.EncryptColumnMetaData
;
import
org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData
;
import
org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData
;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment
;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment
;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mock
;
import
org.mockito.junit.MockitoJUnitRunner
;
import
java.sql.SQLException
;
import
java.sql.SQLFeatureNotSupportedException
;
import
java.util.Calendar
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.Map
;
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
junit
.
Assert
.
assertThat
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyString
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
spy
;
import
static
org
.
mockito
.
Mockito
.
when
;
@RunWith
(
MockitoJUnitRunner
.
class
)
public
final
class
EncryptColumnsMergedResultTest
{
@Mock
private
TableAvailableAndSqlStatementContextFixture
tableAvailableAndSqlStatementContextFixture
;
@Mock
private
ShardingSphereSchema
schema
;
@Mock
private
TableMetaData
tableMetaData
;
private
EncryptColumnsMergedResultFixture
encryptColumnsMergedResultFixture
;
@Before
public
void
setUp
()
{
Map
<
String
,
ColumnMetaData
>
columns
=
new
HashMap
<>(
1
,
1
);
EncryptColumnMetaData
encryptColumnMetaData
=
new
EncryptColumnMetaData
(
"order"
,
1
,
"Integer"
,
false
,
"status"
,
"status"
,
"status"
);
columns
.
put
(
""
,
encryptColumnMetaData
);
SimpleTableSegment
simpleTableSegment
=
mock
(
SimpleTableSegment
.
class
);
TableNameSegment
tableNameSegment
=
mock
(
TableNameSegment
.
class
);
IdentifierValue
identifierValue
=
mock
(
IdentifierValue
.
class
);
when
(
tableAvailableAndSqlStatementContextFixture
.
getAllTables
()).
thenReturn
(
Lists
.
newArrayList
(
simpleTableSegment
));
when
(
simpleTableSegment
.
getTableName
()).
thenReturn
(
tableNameSegment
);
when
(
tableNameSegment
.
getIdentifier
()).
thenReturn
(
identifierValue
);
String
tableName
=
"t_order"
;
when
(
identifierValue
.
getValue
()).
thenReturn
(
tableName
);
when
(
schema
.
get
(
anyString
())).
thenReturn
(
tableMetaData
);
when
(
tableMetaData
.
getColumns
()).
thenReturn
(
columns
);
encryptColumnsMergedResultFixture
=
spy
(
new
EncryptColumnsMergedResultFixture
(
tableAvailableAndSqlStatementContextFixture
,
schema
));
}
@Test
public
void
assertHasNextWithEmptyColumnMetaData
()
throws
SQLException
{
when
(
schema
.
get
(
anyString
())).
thenReturn
(
tableMetaData
);
when
(
tableMetaData
.
getColumns
()).
thenReturn
(
Collections
.
emptyMap
());
EncryptColumnsMergedResultFixture
encryptColumnsMergedResultFixture
=
spy
(
new
EncryptColumnsMergedResultFixture
(
tableAvailableAndSqlStatementContextFixture
,
schema
));
when
(
encryptColumnsMergedResultFixture
.
nextValue
()).
thenReturn
(
true
).
thenReturn
(
false
);
assertThat
(
encryptColumnsMergedResultFixture
.
next
(),
is
(
true
));
}
@Test
public
void
assertWithoutHasNext
()
throws
SQLException
{
EncryptColumnsMergedResultFixture
encryptColumnsMergedResultFixture
=
spy
(
new
EncryptColumnsMergedResultFixture
(
tableAvailableAndSqlStatementContextFixture
,
schema
));
when
(
encryptColumnsMergedResultFixture
.
nextValue
()).
thenReturn
(
false
);
assertThat
(
encryptColumnsMergedResultFixture
.
next
(),
is
(
false
));
}
@Test
public
void
assertContainerColumnName
()
throws
SQLException
{
Map
<
String
,
ColumnMetaData
>
columns
=
new
HashMap
<>(
1
,
1
);
EncryptColumnMetaData
encryptColumnMetaData
=
new
EncryptColumnMetaData
(
"order"
,
1
,
"Integer"
,
false
,
"status"
,
"status"
,
"status"
);
columns
.
put
(
""
,
encryptColumnMetaData
);
when
(
schema
.
get
(
anyString
())).
thenReturn
(
tableMetaData
);
when
(
tableMetaData
.
getColumns
()).
thenReturn
(
columns
);
EncryptColumnsMergedResultFixture
encryptColumnsMergedResultFixture
=
spy
(
new
EncryptColumnsMergedResultFixture
(
tableAvailableAndSqlStatementContextFixture
,
schema
));
when
(
encryptColumnsMergedResultFixture
.
nextValue
()).
thenReturn
(
true
).
thenReturn
(
true
);
when
(
encryptColumnsMergedResultFixture
.
getOriginalValue
(
1
,
String
.
class
)).
thenReturn
(
"status"
).
thenReturn
(
"noInThatCollection"
);
assertThat
(
encryptColumnsMergedResultFixture
.
next
(),
is
(
true
));
}
@Test
public
void
assertGetValueWithColumnIndex
()
throws
SQLException
{
Map
<
String
,
ColumnMetaData
>
columns
=
new
HashMap
<>(
1
,
1
);
EncryptColumnMetaData
encryptColumnMetaData
=
new
EncryptColumnMetaData
(
"order"
,
1
,
"Integer"
,
false
,
"status"
,
"status"
,
"status"
);
columns
.
put
(
"key"
,
encryptColumnMetaData
);
when
(
schema
.
get
(
anyString
())).
thenReturn
(
tableMetaData
);
when
(
tableMetaData
.
getColumns
()).
thenReturn
(
columns
);
when
(
encryptColumnsMergedResultFixture
.
getOriginalValue
(
1
,
String
.
class
)).
thenReturn
(
"status"
);
assertThat
(
encryptColumnsMergedResultFixture
.
getValue
(
1
,
String
.
class
),
is
(
"key"
));
}
@Test
public
void
assertGetValueWithOutColumnIndex
()
throws
SQLException
{
when
(
encryptColumnsMergedResultFixture
.
getOriginalValue
(
2
,
String
.
class
)).
thenReturn
(
"status"
);
assertThat
(
encryptColumnsMergedResultFixture
.
getValue
(
2
,
String
.
class
),
is
(
"status"
));
}
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
public
void
assertGetCalendarValue
()
throws
SQLException
{
encryptColumnsMergedResultFixture
.
getCalendarValue
(
1
,
String
.
class
,
Calendar
.
getInstance
());
}
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
public
void
assertGetInputStream
()
throws
SQLException
{
encryptColumnsMergedResultFixture
.
getInputStream
(
1
,
"whateverString"
);
}
}
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/model/ColumnMetaData.java
浏览文件 @
ab325a0f
...
...
@@ -29,7 +29,7 @@ import lombok.ToString;
@Getter
@EqualsAndHashCode
@ToString
public
class
ColumnMetaData
{
public
final
class
ColumnMetaData
{
private
final
String
name
;
...
...
shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
浏览文件 @
ab325a0f
...
...
@@ -96,7 +96,7 @@ public final class MergeEngine {
for
(
Entry
<
ShardingSphereRule
,
ResultProcessEngine
>
entry
:
engines
.
entrySet
())
{
if
(
entry
.
getValue
()
instanceof
ResultDecoratorEngine
)
{
ResultDecorator
resultDecorator
=
((
ResultDecoratorEngine
)
entry
.
getValue
()).
newInstance
(
databaseType
,
schema
,
entry
.
getKey
(),
props
,
sqlStatementContext
);
result
=
null
==
result
?
resultDecorator
.
decorate
(
mergedResult
,
sqlStatementContext
,
schema
)
:
resultDecorator
.
decorate
(
result
,
sqlStatementContext
,
schema
);
result
=
null
==
result
?
resultDecorator
.
decorate
(
mergedResult
,
sqlStatementContext
,
entry
.
getKey
())
:
resultDecorator
.
decorate
(
result
,
sqlStatementContext
,
entry
.
getKey
()
);
}
}
return
null
==
result
?
mergedResult
:
result
;
...
...
@@ -108,7 +108,7 @@ public final class MergeEngine {
for
(
Entry
<
ShardingSphereRule
,
ResultProcessEngine
>
entry
:
engines
.
entrySet
())
{
if
(
entry
.
getValue
()
instanceof
ResultDecoratorEngine
)
{
ResultDecorator
resultDecorator
=
((
ResultDecoratorEngine
)
entry
.
getValue
()).
newInstance
(
databaseType
,
schema
,
entry
.
getKey
(),
props
,
sqlStatementContext
);
result
=
null
==
result
?
resultDecorator
.
decorate
(
queryResult
,
sqlStatementContext
,
schema
)
:
resultDecorator
.
decorate
(
result
,
sqlStatementContext
,
schema
);
result
=
null
==
result
?
resultDecorator
.
decorate
(
queryResult
,
sqlStatementContext
,
entry
.
getKey
())
:
resultDecorator
.
decorate
(
result
,
sqlStatementContext
,
entry
.
getKey
()
);
}
}
return
Optional
.
ofNullable
(
result
);
...
...
shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecorator.java
浏览文件 @
ab325a0f
...
...
@@ -17,37 +17,39 @@
package
org.apache.shardingsphere.infra.merge.engine.decorator
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.executor.sql.QueryResult
;
import
org.apache.shardingsphere.infra.merge.result.MergedResult
;
import
org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.rule.ShardingSphereRule
;
import
java.sql.SQLException
;
/**
* Result decorator.
*
* @param <T> type of ShardingSphere rule
*/
public
interface
ResultDecorator
{
public
interface
ResultDecorator
<
T
extends
ShardingSphereRule
>
{
/**
* Decorate query result.
*
* @param queryResult query result
* @param sqlStatementContext SQL statement context
* @param
schema ShardingSphere schema
* @param
rule ShardingSphere rule
* @return merged result
* @throws SQLException SQL exception
*/
MergedResult
decorate
(
QueryResult
queryResult
,
SQLStatementContext
<?>
sqlStatementContext
,
ShardingSphereSchema
schema
)
throws
SQLException
;
MergedResult
decorate
(
QueryResult
queryResult
,
SQLStatementContext
<?>
sqlStatementContext
,
T
rule
)
throws
SQLException
;
/**
* Decorate merged result.
*
* @param mergedResult merged result
* @param sqlStatementContext SQL statement context
* @param
schema ShardingSphere schema
* @param
rule ShardingSphere rule
* @return merged result
* @throws SQLException SQL exception
*/
MergedResult
decorate
(
MergedResult
mergedResult
,
SQLStatementContext
<?>
sqlStatementContext
,
ShardingSphereSchema
schema
)
throws
SQLException
;
MergedResult
decorate
(
MergedResult
mergedResult
,
SQLStatementContext
<?>
sqlStatementContext
,
T
rule
)
throws
SQLException
;
}
shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecorator.java
浏览文件 @
ab325a0f
...
...
@@ -17,25 +17,24 @@
package
org.apache.shardingsphere.infra.merge.engine.decorator.impl
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.executor.sql.QueryResult
;
import
org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator
;
import
org.apache.shardingsphere.infra.merge.result.MergedResult
;
import
org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult
;
import
org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
/**
* Transparent result decorator.
*/
public
final
class
TransparentResultDecorator
implements
ResultDecorator
{
public
final
class
TransparentResultDecorator
implements
ResultDecorator
<
TransparentRule
>
{
@Override
public
MergedResult
decorate
(
final
QueryResult
queryResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
ShardingSphereSchema
schema
)
{
public
MergedResult
decorate
(
final
QueryResult
queryResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
TransparentRule
rule
)
{
return
new
TransparentMergedResult
(
queryResult
);
}
@Override
public
MergedResult
decorate
(
final
MergedResult
mergedResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
ShardingSphereSchema
schema
)
{
public
MergedResult
decorate
(
final
MergedResult
mergedResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
TransparentRule
rule
)
{
return
mergedResult
;
}
}
shardingsphere-
features/shardingsphere-encrypt/shardingsphere-encrypt-common/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptColumnMetaData
.java
→
shardingsphere-
infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentRule
.java
浏览文件 @
ab325a0f
...
...
@@ -15,32 +15,12 @@
* limitations under the License.
*/
package
org.apache.shardingsphere.
encrypt.metadata
;
package
org.apache.shardingsphere.
infra.merge.engine.decorator.impl
;
import
lombok.EqualsAndHashCode
;
import
lombok.Getter
;
import
lombok.ToString
;
import
org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData
;
import
org.apache.shardingsphere.infra.rule.ShardingSphereRule
;
/**
*
Column meta data for encrypt
.
*
Transparent rule
.
*/
@Getter
@EqualsAndHashCode
(
callSuper
=
true
)
@ToString
(
callSuper
=
true
)
public
final
class
EncryptColumnMetaData
extends
ColumnMetaData
{
private
final
String
cipherColumnName
;
private
final
String
plainColumnName
;
private
final
String
assistedQueryColumnName
;
public
EncryptColumnMetaData
(
final
String
name
,
final
int
dataType
,
final
String
dataTypeName
,
final
boolean
primaryKey
,
final
String
cipherColumnName
,
final
String
plainColumnName
,
final
String
assistedQueryColumnName
)
{
super
(
name
,
dataType
,
dataTypeName
,
primaryKey
,
false
,
false
);
this
.
cipherColumnName
=
cipherColumnName
;
this
.
plainColumnName
=
plainColumnName
;
this
.
assistedQueryColumnName
=
assistedQueryColumnName
;
}
public
final
class
TransparentRule
implements
ShardingSphereRule
{
}
shardingsphere-infra/shardingsphere-infra-merge/src/test/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecoratorTest.java
浏览文件 @
ab325a0f
...
...
@@ -17,10 +17,9 @@
package
org.apache.shardingsphere.infra.merge.engine.decorator.impl
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.executor.sql.QueryResult
;
import
org.apache.shardingsphere.infra.merge.result.MergedResult
;
import
org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.junit.Test
;
import
java.sql.SQLException
;
...
...
@@ -36,7 +35,7 @@ public final class TransparentResultDecoratorTest {
QueryResult
queryResult
=
mock
(
QueryResult
.
class
);
when
(
queryResult
.
next
()).
thenReturn
(
true
);
TransparentResultDecorator
decorator
=
new
TransparentResultDecorator
();
MergedResult
actual
=
decorator
.
decorate
(
queryResult
,
mock
(
SQLStatementContext
.
class
),
mock
(
ShardingSphereSchema
.
class
));
MergedResult
actual
=
decorator
.
decorate
(
queryResult
,
mock
(
SQLStatementContext
.
class
),
new
TransparentRule
(
));
assertTrue
(
actual
.
next
());
}
...
...
@@ -45,7 +44,7 @@ public final class TransparentResultDecoratorTest {
MergedResult
mergedResult
=
mock
(
MergedResult
.
class
);
when
(
mergedResult
.
next
()).
thenReturn
(
true
);
TransparentResultDecorator
decorator
=
new
TransparentResultDecorator
();
MergedResult
actual
=
decorator
.
decorate
(
mergedResult
,
mock
(
SQLStatementContext
.
class
),
mock
(
ShardingSphereSchema
.
class
));
MergedResult
actual
=
decorator
.
decorate
(
mergedResult
,
mock
(
SQLStatementContext
.
class
),
new
TransparentRule
(
));
assertTrue
(
actual
.
next
());
}
}
shardingsphere-infra/shardingsphere-infra-merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorFixture.java
浏览文件 @
ab325a0f
...
...
@@ -17,13 +17,13 @@
package
org.apache.shardingsphere.infra.merge.fixture.decorator
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
org.apache.shardingsphere.infra.executor.sql.QueryResult
;
import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.queryresult.StreamQueryResult
;
import
org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator
;
import
org.apache.shardingsphere.infra.merge.fixture.rule.DecoratorRuleFixture
;
import
org.apache.shardingsphere.infra.merge.result.MergedResult
;
import
org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult
;
import
org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema
;
import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
...
...
@@ -31,17 +31,17 @@ import java.sql.SQLException;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
when
;
public
final
class
ResultDecoratorFixture
implements
ResultDecorator
{
public
final
class
ResultDecoratorFixture
implements
ResultDecorator
<
DecoratorRuleFixture
>
{
@Override
public
MergedResult
decorate
(
final
QueryResult
queryResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
ShardingSphereSchema
schema
)
throws
SQLException
{
public
MergedResult
decorate
(
final
QueryResult
queryResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
DecoratorRuleFixture
rule
)
throws
SQLException
{
ResultSet
resultSet
=
mock
(
ResultSet
.
class
);
when
(
resultSet
.
getString
(
1
)).
thenReturn
(
"decorated_value"
);
return
new
TransparentMergedResult
(
new
StreamQueryResult
(
resultSet
));
}
@Override
public
MergedResult
decorate
(
final
MergedResult
mergedResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
ShardingSphereSchema
schema
)
throws
SQLException
{
public
MergedResult
decorate
(
final
MergedResult
mergedResult
,
final
SQLStatementContext
<?>
sqlStatementContext
,
final
DecoratorRuleFixture
rule
)
throws
SQLException
{
ResultSet
resultSet
=
mock
(
ResultSet
.
class
);
when
(
resultSet
.
getString
(
1
)).
thenReturn
(
"decorated_merged_value"
);
return
new
TransparentMergedResult
(
new
StreamQueryResult
(
resultSet
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录