This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 0ea667aed40 Add shorthand projection isNeedRewrite judgement (#33758)
0ea667aed40 is described below
commit 0ea667aed4072ebb5625a02c7330ac9b6b48a8ea
Author: ZhangCheng <[email protected]>
AuthorDate: Thu Nov 21 17:28:24 2024 +0800
Add shorthand projection isNeedRewrite judgement (#33758)
---
.../generator/projection/EncryptProjectionTokenGenerator.java | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
index f1b23f9ed65..dc2dc317113 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
@@ -123,7 +123,7 @@ public final class EncryptProjectionTokenGenerator {
ColumnProjection columnProjection = (ColumnProjection) each;
boolean newAddedColumn =
existColumnNames.add(columnProjection.getOriginalTable().getValue() + "." +
columnProjection.getOriginalColumn().getValue());
Optional<EncryptTable> encryptTable =
encryptRule.findEncryptTable(columnProjection.getOriginalTable().getValue());
- if (encryptTable.isPresent() &&
encryptTable.get().isEncryptColumn(columnProjection.getOriginalColumn().getValue())
&& !selectStatementContext.containsTableSubquery()) {
+ if (encryptTable.isPresent() &&
encryptTable.get().isEncryptColumn(columnProjection.getOriginalColumn().getValue())
&& isNeedRewrite(selectStatementContext, subqueryType)) {
EncryptColumn encryptColumn =
encryptTable.get().getEncryptColumn(columnProjection.getOriginalColumn().getValue());
projections.addAll(generateProjections(encryptColumn,
columnProjection, subqueryType, newAddedColumn));
continue;
@@ -137,6 +137,13 @@ public final class EncryptProjectionTokenGenerator {
return new SubstitutableColumnNameToken(startIndex,
segment.getStopIndex(), projections, selectStatementContext.getDatabaseType());
}
+ private boolean isNeedRewrite(final SelectStatementContext
selectStatementContext, final SubqueryType subqueryType) {
+ if (SubqueryType.TABLE == subqueryType) {
+ return true;
+ }
+ return !selectStatementContext.containsTableSubquery();
+ }
+
private boolean isNeedRewrite(final SelectStatementContext
selectStatementContext, final ColumnProjectionSegment columnSegment) {
SelectStatement sqlStatement =
selectStatementContext.getSqlStatement();
if (sqlStatement.getWithSegment().isPresent() &&
!(sqlStatement.getFrom().isPresent() && sqlStatement.getFrom().get() instanceof
SubqueryTableSegment)