Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
5ecf56a0
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,发现更多精彩内容 >>
未验证
提交
5ecf56a0
编写于
3月 08, 2020
作者:
L
Liang Zhang
提交者:
GitHub
3月 08, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use ProjectionsContext to process encrypt ResultSetMetaData (#4653)
上级
2c1753d4
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
21 addition
and
72 deletion
+21
-72
sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/resultset/EncryptResultSet.java
...re/shardingjdbc/jdbc/core/resultset/EncryptResultSet.java
+3
-30
sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/resultset/EncryptResultSetMetaData.java
...ingjdbc/jdbc/core/resultset/EncryptResultSetMetaData.java
+18
-42
未找到文件。
sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/resultset/EncryptResultSet.java
浏览文件 @
5ecf56a0
...
...
@@ -17,16 +17,14 @@
package
org.apache.shardingsphere.shardingjdbc.jdbc.core.resultset
;
import
org.apache.shardingsphere.underlying.merge.MergeEntry
;
import
org.apache.shardingsphere.encrypt.rule.EncryptRule
;
import
org.apache.shardingsphere.sharding.execute.sql.execute.result.StreamQueryResult
;
import
org.apache.shardingsphere.shardingjdbc.jdbc.core.context.EncryptRuntimeContext
;
import
org.apache.shardingsphere.shardingjdbc.jdbc.unsupported.AbstractUnsupportedOperationResultSet
;
import
org.apache.shardingsphere.shardingjdbc.merge.JDBCEncryptResultDecoratorEngine
;
import
org.apache.shardingsphere.sql.parser.relation.statement.SQLStatementContext
;
import
org.apache.shardingsphere.underlying.common.constant.properties.PropertiesConstant
;
import
org.apache.shardingsphere.underlying.common.rule.BaseRule
;
import
org.apache.shardingsphere.underlying.
executor.QueryResult
;
import
org.apache.shardingsphere.underlying.
merge.MergeEntry
;
import
org.apache.shardingsphere.underlying.merge.engine.ResultProcessEngine
;
import
org.apache.shardingsphere.underlying.merge.result.MergedResult
;
...
...
@@ -48,7 +46,6 @@ import java.sql.Timestamp;
import
java.util.Calendar
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
java.util.TreeMap
;
...
...
@@ -67,8 +64,6 @@ public final class EncryptResultSet extends AbstractUnsupportedOperationResultSe
private
final
MergedResult
mergedResult
;
private
final
Map
<
String
,
String
>
logicAndActualColumns
;
private
final
Map
<
String
,
Integer
>
columnLabelAndIndexMap
;
public
EncryptResultSet
(
final
EncryptRuntimeContext
encryptRuntimeContext
,
...
...
@@ -78,8 +73,6 @@ public final class EncryptResultSet extends AbstractUnsupportedOperationResultSe
this
.
encryptStatement
=
encryptStatement
;
originalResultSet
=
resultSet
;
mergedResult
=
createMergedResult
(
encryptRuntimeContext
,
resultSet
);
boolean
queryWithCipherColumn
=
encryptRuntimeContext
.
getProperties
().<
Boolean
>
getValue
(
PropertiesConstant
.
QUERY_WITH_CIPHER_COLUMN
);
logicAndActualColumns
=
createLogicAndActualColumns
(
queryWithCipherColumn
);
columnLabelAndIndexMap
=
createColumnLabelAndIndexMap
(
originalResultSet
.
getMetaData
());
}
...
...
@@ -87,27 +80,7 @@ public final class EncryptResultSet extends AbstractUnsupportedOperationResultSe
Map
<
BaseRule
,
ResultProcessEngine
>
engines
=
new
HashMap
<>(
1
,
1
);
engines
.
put
(
encryptRule
,
new
JDBCEncryptResultDecoratorEngine
(
resultSet
.
getMetaData
()));
MergeEntry
mergeEntry
=
new
MergeEntry
(
encryptRuntimeContext
.
getDatabaseType
(),
null
,
encryptRuntimeContext
.
getProperties
(),
engines
);
return
mergeEntry
.
process
(
Collections
.<
QueryResult
>
singletonList
(
new
StreamQueryResult
(
resultSet
)),
sqlStatementContext
);
}
private
Map
<
String
,
String
>
createLogicAndActualColumns
(
final
boolean
isQueryWithCipherColumn
)
{
return
isQueryWithCipherColumn
?
createLogicAndCipherColumns
()
:
createLogicAndPlainColumns
();
}
private
Map
<
String
,
String
>
createLogicAndCipherColumns
()
{
Map
<
String
,
String
>
result
=
new
LinkedHashMap
<>();
for
(
String
each
:
sqlStatementContext
.
getTablesContext
().
getTableNames
())
{
result
.
putAll
(
encryptRule
.
getLogicAndCipherColumns
(
each
));
}
return
result
;
}
private
Map
<
String
,
String
>
createLogicAndPlainColumns
()
{
Map
<
String
,
String
>
result
=
new
LinkedHashMap
<>();
for
(
String
each
:
sqlStatementContext
.
getTablesContext
().
getTableNames
())
{
result
.
putAll
(
encryptRule
.
getLogicAndPlainColumns
(
each
));
}
return
result
;
return
mergeEntry
.
process
(
Collections
.
singletonList
(
new
StreamQueryResult
(
resultSet
)),
sqlStatementContext
);
}
private
Map
<
String
,
Integer
>
createColumnLabelAndIndexMap
(
final
ResultSetMetaData
resultSetMetaData
)
throws
SQLException
{
...
...
@@ -420,7 +393,7 @@ public final class EncryptResultSet extends AbstractUnsupportedOperationResultSe
@Override
public
ResultSetMetaData
getMetaData
()
throws
SQLException
{
return
new
EncryptResultSetMetaData
(
originalResultSet
.
getMetaData
(),
encryptRule
,
sqlStatementContext
,
logicAndActualColumns
);
return
new
EncryptResultSetMetaData
(
originalResultSet
.
getMetaData
(),
sqlStatementContext
);
}
@Override
...
...
sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/resultset/EncryptResultSetMetaData.java
浏览文件 @
5ecf56a0
...
...
@@ -18,17 +18,16 @@
package
org.apache.shardingsphere.shardingjdbc.jdbc.core.resultset
;
import
lombok.RequiredArgsConstructor
;
import
org.apache.shardingsphere.underlying.common.constant.ShardingConstant
;
import
org.apache.shardingsphere.sql.parser.relation.statement.SQLStatementContext
;
import
org.apache.shardingsphere.encrypt.rule.EncryptRule
;
import
org.apache.shardingsphere.shardingjdbc.jdbc.adapter.WrapperAdapter
;
import
org.apache.shardingsphere.sql.parser.relation.segment.select.projection.Projection
;
import
org.apache.shardingsphere.sql.parser.relation.segment.select.projection.impl.ColumnProjection
;
import
org.apache.shardingsphere.sql.parser.relation.statement.SQLStatementContext
;
import
org.apache.shardingsphere.sql.parser.relation.statement.dml.SelectStatementContext
;
import
org.apache.shardingsphere.underlying.common.constant.ShardingConstant
;
import
java.sql.ResultSetMetaData
;
import
java.sql.SQLException
;
import
java.util.Collection
;
import
java.util.LinkedList
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.List
;
/**
* Encrypt result set meta data.
...
...
@@ -38,35 +37,11 @@ public final class EncryptResultSetMetaData extends WrapperAdapter implements Re
private
final
ResultSetMetaData
resultSetMetaData
;
private
final
EncryptRule
encryptRule
;
private
final
SQLStatementContext
sqlStatementContext
;
private
final
Map
<
String
,
String
>
logicAndActualColumns
;
@Override
public
int
getColumnCount
()
throws
SQLException
{
return
resultSetMetaData
.
getColumnCount
()
-
getDerivedColumnCount
();
}
private
int
getDerivedColumnCount
()
throws
SQLException
{
int
result
=
0
;
Collection
<
String
>
assistedQueryColumns
=
getAssistedQueryColumns
();
for
(
int
columnIndex
=
1
;
columnIndex
<=
resultSetMetaData
.
getColumnCount
();
columnIndex
++)
{
String
columnLabel
=
resultSetMetaData
.
getColumnLabel
(
columnIndex
);
if
(
assistedQueryColumns
.
contains
(
columnLabel
))
{
result
++;
}
}
return
result
;
}
private
Collection
<
String
>
getAssistedQueryColumns
()
{
Collection
<
String
>
result
=
new
LinkedList
<>();
for
(
String
each
:
sqlStatementContext
.
getTablesContext
().
getTableNames
())
{
result
.
addAll
(
encryptRule
.
getAssistedQueryColumns
(
each
));
}
return
result
;
public
int
getColumnCount
()
{
return
sqlStatementContext
instanceof
SelectStatementContext
?
((
SelectStatementContext
)
sqlStatementContext
).
getProjectionsContext
().
getExpandProjections
().
size
()
:
0
;
}
@Override
...
...
@@ -111,17 +86,18 @@ public final class EncryptResultSetMetaData extends WrapperAdapter implements Re
@Override
public
String
getColumnName
(
final
int
column
)
throws
SQLException
{
String
result
=
resultSetMetaData
.
getColumnName
(
column
);
return
logicAndActualColumns
.
values
().
contains
(
result
)
?
getLogicColumn
(
result
)
:
result
;
}
private
String
getLogicColumn
(
final
String
actualColumn
)
throws
SQLException
{
for
(
Entry
<
String
,
String
>
entry
:
logicAndActualColumns
.
entrySet
())
{
if
(
entry
.
getValue
().
equals
(
actualColumn
))
{
return
entry
.
getKey
();
if
(
sqlStatementContext
instanceof
SelectStatementContext
)
{
List
<
Projection
>
actualProjections
=
((
SelectStatementContext
)
sqlStatementContext
).
getProjectionsContext
().
getExpandProjections
();
if
(
column
>
actualProjections
.
size
())
{
// TODO fill correct SQL state
throw
new
SQLException
(
String
.
format
(
"Out of index of projection %s"
,
column
));
}
Projection
projection
=
((
SelectStatementContext
)
sqlStatementContext
).
getProjectionsContext
().
getExpandProjections
().
get
(
column
-
1
);
if
(
projection
instanceof
ColumnProjection
)
{
return
((
ColumnProjection
)
projection
).
getName
();
}
}
throw
new
SQLException
(
String
.
format
(
"Can not get logic column by %s."
,
actualColumn
)
);
return
resultSetMetaData
.
getColumnName
(
column
);
}
@Override
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录