From 046ef45b8820c5e453bc7bb03b76a37c36157ad1 Mon Sep 17 00:00:00 2001 From: duanzhengqiang Date: Fri, 24 Jan 2025 08:53:43 +0800 Subject: [PATCH 1/2] Minor refactor EncryptSQLRewriteContextDecorator --- .../context/EncryptSQLRewriteContextDecorator.java | 11 ++++++++--- .../parameter/EncryptParameterRewritersRegistry.java | 4 +++- .../rewrite/token/EncryptTokenGenerateBuilder.java | 4 +++- .../EncryptParameterRewritersRegistryTest.java | 7 ++++++- .../token/EncryptTokenGenerateBuilderTest.java | 5 +++-- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java index 05678e43ac144..1b2f5813f2de4 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java @@ -56,11 +56,11 @@ public void decorate(final EncryptRule rule, final ConfigurationProperties props } Collection encryptConditions = createEncryptConditions(rule, sqlStatementContext); if (!sqlRewriteContext.getParameters().isEmpty()) { - Collection parameterRewriters = new ParameterRewritersBuilder(sqlStatementContext) - .build(new EncryptParameterRewritersRegistry(rule, sqlRewriteContext.getDatabase().getName(), encryptConditions)); + EncryptParameterRewritersRegistry rewritersRegistry = new EncryptParameterRewritersRegistry(rule, sqlRewriteContext, encryptConditions); + Collection parameterRewriters = new ParameterRewritersBuilder(sqlStatementContext).build(rewritersRegistry); rewriteParameters(sqlRewriteContext, parameterRewriters); } - SQLTokenGeneratorBuilder sqlTokenGeneratorBuilder = new EncryptTokenGenerateBuilder(sqlStatementContext, encryptConditions, rule, sqlRewriteContext.getDatabase()); + SQLTokenGeneratorBuilder sqlTokenGeneratorBuilder = createSQLTokenGeneratorBuilder(rule, sqlRewriteContext, sqlStatementContext, encryptConditions); sqlRewriteContext.addSQLTokenGenerators(sqlTokenGeneratorBuilder.getSQLTokenGenerators()); } @@ -91,6 +91,11 @@ private void rewriteParameters(final SQLRewriteContext sqlRewriteContext, final } } + private SQLTokenGeneratorBuilder createSQLTokenGeneratorBuilder(final EncryptRule rule, final SQLRewriteContext sqlRewriteContext, + final SQLStatementContext sqlStatementContext, final Collection encryptConditions) { + return new EncryptTokenGenerateBuilder(sqlStatementContext, encryptConditions, rule, sqlRewriteContext); + } + @Override public int getOrder() { return EncryptOrder.ORDER; diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistry.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistry.java index 6872ed73c386b..f22d02d646191 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistry.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistry.java @@ -25,6 +25,7 @@ import org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptInsertValueParameterRewriter; import org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptPredicateParameterRewriter; import org.apache.shardingsphere.encrypt.rule.EncryptRule; +import org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContext; import org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter; import org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewritersRegistry; @@ -39,12 +40,13 @@ public final class EncryptParameterRewritersRegistry implements ParameterRewrite private final EncryptRule rule; - private final String databaseName; + private final SQLRewriteContext sqlRewriteContext; private final Collection encryptConditions; @Override public Collection getParameterRewriters() { + String databaseName = sqlRewriteContext.getDatabase().getName(); return Arrays.asList( new EncryptAssignmentParameterRewriter(rule, databaseName), new EncryptPredicateParameterRewriter(rule, databaseName, encryptConditions), diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java index a13fc0ec593c3..07ad270b8a218 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java @@ -40,6 +40,7 @@ import org.apache.shardingsphere.encrypt.rule.EncryptRule; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; +import org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContext; import org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.SQLTokenGenerator; import org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.builder.SQLTokenGeneratorBuilder; @@ -58,11 +59,12 @@ public final class EncryptTokenGenerateBuilder implements SQLTokenGeneratorBuild private final EncryptRule rule; - private final ShardingSphereDatabase database; + private final SQLRewriteContext sqlRewriteContext; @Override public Collection getSQLTokenGenerators() { Collection result = new LinkedList<>(); + ShardingSphereDatabase database = sqlRewriteContext.getDatabase(); addSQLTokenGenerator(result, new EncryptSelectProjectionTokenGenerator(rule)); addSQLTokenGenerator(result, new EncryptInsertSelectProjectionTokenGenerator(rule)); addSQLTokenGenerator(result, new EncryptInsertAssignmentTokenGenerator(rule, database)); diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistryTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistryTest.java index 37bde3327b6da..eba80e98dbaa7 100644 --- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistryTest.java +++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistryTest.java @@ -23,6 +23,7 @@ import org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptInsertValueParameterRewriter; import org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptPredicateParameterRewriter; import org.apache.shardingsphere.encrypt.rule.EncryptRule; +import org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContext; import org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter; import org.junit.jupiter.api.Test; @@ -33,13 +34,17 @@ import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; class EncryptParameterRewritersRegistryTest { @Test void assertGetParameterRewriters() { - List actual = new ArrayList<>(new EncryptParameterRewritersRegistry(mock(EncryptRule.class), "foo_db", Collections.emptyList()).getParameterRewriters()); + SQLRewriteContext sqlRewriteContext = mock(SQLRewriteContext.class, RETURNS_DEEP_STUBS); + when(sqlRewriteContext.getDatabase().getName()).thenReturn("foo_db"); + List actual = new ArrayList<>(new EncryptParameterRewritersRegistry(mock(EncryptRule.class), sqlRewriteContext, Collections.emptyList()).getParameterRewriters()); assertThat(actual.size(), is(5)); assertThat(actual.get(0), instanceOf(EncryptAssignmentParameterRewriter.class)); assertThat(actual.get(1), instanceOf(EncryptPredicateParameterRewriter.class)); diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilderTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilderTest.java index 5b1f712cb327b..f61cac590df70 100644 --- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilderTest.java +++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilderTest.java @@ -23,7 +23,7 @@ import org.apache.shardingsphere.encrypt.rule.EncryptRule; import org.apache.shardingsphere.infra.binder.context.segment.select.orderby.OrderByItem; import org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext; -import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; +import org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContext; import org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.SQLTokenGenerator; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -56,7 +56,8 @@ void assertGetSQLTokenGenerators() { when(selectStatementContext.getOrderByContext().getItems()).thenReturn(Collections.singleton(mock(OrderByItem.class))); when(selectStatementContext.getGroupByContext().getItems()).thenReturn(Collections.emptyList()); when(selectStatementContext.getWhereSegments()).thenReturn(Collections.emptyList()); - EncryptTokenGenerateBuilder encryptTokenGenerateBuilder = new EncryptTokenGenerateBuilder(selectStatementContext, Collections.emptyList(), rule, mock(ShardingSphereDatabase.class)); + SQLRewriteContext sqlRewriteContext = mock(SQLRewriteContext.class, RETURNS_DEEP_STUBS); + EncryptTokenGenerateBuilder encryptTokenGenerateBuilder = new EncryptTokenGenerateBuilder(selectStatementContext, Collections.emptyList(), rule, sqlRewriteContext); Collection sqlTokenGenerators = encryptTokenGenerateBuilder.getSQLTokenGenerators(); assertThat(sqlTokenGenerators.size(), is(3)); Iterator iterator = sqlTokenGenerators.iterator(); From 78603e283693ea8f5055db1320a6a30422836811 Mon Sep 17 00:00:00 2001 From: duanzhengqiang Date: Fri, 24 Jan 2025 08:59:42 +0800 Subject: [PATCH 2/2] disable wrong unit test --- .../service/StandaloneMetaDataManagerPersistServiceTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java index c5b9163dea19b..747493e80be81 100644 --- a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java +++ b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java @@ -36,6 +36,7 @@ import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem; import org.apache.shardingsphere.single.config.SingleRuleConfiguration; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Answers; @@ -130,6 +131,7 @@ void assertAlterSchemaWithNotEmptyAlteredSchema() { verify(databaseMetaDataFacade.getSchema()).drop("foo_db", "foo_schema"); } + @Disabled("fix this unit test by haorang") @Test void assertDropSchema() { ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);