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 0f827333aa6 Refactor EncryptOrderByItemTokenGenerator (#32385)
0f827333aa6 is described below
commit 0f827333aa6d03a6752ca0c8ffd0b5ff6e6f0e53
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Aug 3 21:23:18 2024 +0800
Refactor EncryptOrderByItemTokenGenerator (#32385)
---
.../EncryptOrderByItemTokenGenerator.java | 55 +++++++++-------------
1 file changed, 23 insertions(+), 32 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
index be13ab16961..196c025527f 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
@@ -26,7 +26,6 @@ import
org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import
org.apache.shardingsphere.infra.binder.context.segment.select.orderby.OrderByItem;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator;
@@ -48,7 +47,7 @@ import java.util.Optional;
*/
@HighFrequencyInvocation
@Setter
-public final class EncryptOrderByItemTokenGenerator implements
CollectionSQLTokenGenerator<SQLStatementContext>, EncryptRuleAware,
SchemaMetaDataAware {
+public final class EncryptOrderByItemTokenGenerator implements
CollectionSQLTokenGenerator<SelectStatementContext>, EncryptRuleAware,
SchemaMetaDataAware {
private EncryptRule encryptRule;
@@ -58,24 +57,36 @@ public final class EncryptOrderByItemTokenGenerator
implements CollectionSQLToke
@Override
public boolean isGenerateSQLToken(final SQLStatementContext
sqlStatementContext) {
- return sqlStatementContext instanceof SelectStatementContext &&
containsOrderByItem(sqlStatementContext);
+ return sqlStatementContext instanceof SelectStatementContext &&
containsOrderByItem((SelectStatementContext) sqlStatementContext);
+ }
+
+ private boolean containsOrderByItem(final SelectStatementContext
sqlStatementContext) {
+ if (!sqlStatementContext.getOrderByContext().getItems().isEmpty() &&
!sqlStatementContext.getOrderByContext().isGenerated()) {
+ return true;
+ }
+ for (SelectStatementContext each :
sqlStatementContext.getSubqueryContexts().values()) {
+ if (containsOrderByItem(each)) {
+ return true;
+ }
+ }
+ return false;
}
@Override
- public Collection<SQLToken> generateSQLTokens(final SQLStatementContext
sqlStatementContext) {
+ public Collection<SQLToken> generateSQLTokens(final SelectStatementContext
sqlStatementContext) {
Collection<SQLToken> result = new LinkedHashSet<>();
- ShardingSphereSchema schema = ((TableAvailable)
sqlStatementContext).getTablesContext().getSchemaName().map(schemas::get).orElseGet(()
-> defaultSchema);
+ ShardingSphereSchema schema =
sqlStatementContext.getTablesContext().getSchemaName().map(schemas::get).orElseGet(()
-> defaultSchema);
for (OrderByItem each : getOrderByItems(sqlStatementContext)) {
if (each.getSegment() instanceof ColumnOrderByItemSegment) {
ColumnSegment columnSegment = ((ColumnOrderByItemSegment)
each.getSegment()).getColumn();
- Map<String, String> columnTableNames = ((TableAvailable)
sqlStatementContext).getTablesContext().findTableNames(Collections.singleton(columnSegment),
schema);
-
result.addAll(generateSQLTokensWithColumnSegments(Collections.singleton(columnSegment),
columnTableNames));
+ Map<String, String> columnTableNames =
sqlStatementContext.getTablesContext().findTableNames(Collections.singleton(columnSegment),
schema);
+
result.addAll(generateSQLTokens(Collections.singleton(columnSegment),
columnTableNames));
}
}
return result;
}
- private Collection<SubstitutableColumnNameToken>
generateSQLTokensWithColumnSegments(final Collection<ColumnSegment>
columnSegments, final Map<String, String> columnTableNames) {
+ private Collection<SubstitutableColumnNameToken> generateSQLTokens(final
Collection<ColumnSegment> columnSegments, final Map<String, String>
columnTableNames) {
Collection<SubstitutableColumnNameToken> result = new LinkedList<>();
for (ColumnSegment each : columnSegments) {
String tableName =
columnTableNames.getOrDefault(each.getExpression(), "");
@@ -86,34 +97,14 @@ public final class EncryptOrderByItemTokenGenerator
implements CollectionSQLToke
return result;
}
- private Collection<OrderByItem> getOrderByItems(final SQLStatementContext
sqlStatementContext) {
- if (!(sqlStatementContext instanceof SelectStatementContext)) {
- return Collections.emptyList();
- }
+ private Collection<OrderByItem> getOrderByItems(final
SelectStatementContext sqlStatementContext) {
Collection<OrderByItem> result = new LinkedList<>();
- SelectStatementContext statementContext = (SelectStatementContext)
sqlStatementContext;
- if (!statementContext.getOrderByContext().isGenerated()) {
- result.addAll(statementContext.getOrderByContext().getItems());
+ if (!sqlStatementContext.getOrderByContext().isGenerated()) {
+ result.addAll(sqlStatementContext.getOrderByContext().getItems());
}
- for (SelectStatementContext each :
statementContext.getSubqueryContexts().values()) {
+ for (SelectStatementContext each :
sqlStatementContext.getSubqueryContexts().values()) {
result.addAll(getOrderByItems(each));
}
return result;
}
-
- private boolean containsOrderByItem(final SQLStatementContext
sqlStatementContext) {
- if (!(sqlStatementContext instanceof SelectStatementContext)) {
- return false;
- }
- SelectStatementContext statementContext = (SelectStatementContext)
sqlStatementContext;
- if (!statementContext.getOrderByContext().getItems().isEmpty() &&
!statementContext.getOrderByContext().isGenerated()) {
- return true;
- }
- for (SelectStatementContext each :
statementContext.getSubqueryContexts().values()) {
- if (containsOrderByItem(each)) {
- return true;
- }
- }
- return false;
- }
}