You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/06/20 17:23:33 UTC
[shardingsphere] branch master updated: Remove EncryptAlgorithmMetaData (#26470)
This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 a26eab38e4b Remove EncryptAlgorithmMetaData (#26470)
a26eab38e4b is described below
commit a26eab38e4bb56a45eef8575ad1c4bb0451576d4
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Jun 21 01:23:27 2023 +0800
Remove EncryptAlgorithmMetaData (#26470)
* Refactor EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter
* Refactor EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter
* Refactor EncryptMergedResult
* Remove EncryptAlgorithmMetaData
* Remove EncryptAlgorithmMetaData
---
.../merge/EncryptResultDecoratorEngine.java | 3 +-
.../merge/dql/EncryptAlgorithmMetaData.java | 38 ----------------------
.../merge/dql/EncryptDQLResultDecorator.java | 12 +++++--
.../encrypt/merge/dql/EncryptMergedResult.java | 25 +++++++++-----
.../merge/dql/EncryptDQLResultDecoratorTest.java | 6 ++--
.../encrypt/merge/dql/EncryptMergedResultTest.java | 21 ++++++++----
6 files changed, 45 insertions(+), 60 deletions(-)
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
index 5fd4c0184af..ae461a6b4df 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.encrypt.merge;
import org.apache.shardingsphere.encrypt.constant.EncryptOrder;
import org.apache.shardingsphere.encrypt.merge.dal.EncryptDALResultDecorator;
-import org.apache.shardingsphere.encrypt.merge.dql.EncryptAlgorithmMetaData;
import org.apache.shardingsphere.encrypt.merge.dql.EncryptDQLResultDecorator;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
@@ -41,7 +40,7 @@ public final class EncryptResultDecoratorEngine implements ResultDecoratorEngine
public Optional<ResultDecorator<EncryptRule>> newInstance(final ShardingSphereDatabase database,
final EncryptRule encryptRule, final ConfigurationProperties props, final SQLStatementContext sqlStatementContext) {
if (sqlStatementContext instanceof SelectStatementContext) {
- return Optional.of(new EncryptDQLResultDecorator(new EncryptAlgorithmMetaData(database, encryptRule, (SelectStatementContext) sqlStatementContext)));
+ return Optional.of(new EncryptDQLResultDecorator(database, encryptRule, (SelectStatementContext) sqlStatementContext));
}
if (sqlStatementContext.getSqlStatement() instanceof DALStatement) {
return Optional.of(new EncryptDALResultDecorator());
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
deleted file mode 100644
index b18f8f79ffe..00000000000
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.encrypt.rule.EncryptRule;
-import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-
-/**
- * Encrypt algorithm meta data.
- */
-@RequiredArgsConstructor
-@Getter
-public final class EncryptAlgorithmMetaData {
-
- private final ShardingSphereDatabase database;
-
- private final EncryptRule encryptRule;
-
- private final SelectStatementContext selectStatementContext;
-}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
index b4f20a50b16..c39728e8c90 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
@@ -20,10 +20,12 @@ package org.apache.shardingsphere.encrypt.merge.dql;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.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.database.ShardingSphereDatabase;
/**
* DQL result decorator for encrypt.
@@ -31,15 +33,19 @@ import org.apache.shardingsphere.infra.merge.result.impl.transparent.Transparent
@RequiredArgsConstructor
public final class EncryptDQLResultDecorator implements ResultDecorator<EncryptRule> {
- private final EncryptAlgorithmMetaData metaData;
+ private final ShardingSphereDatabase database;
+
+ private final EncryptRule encryptRule;
+
+ private final SelectStatementContext selectStatementContext;
@Override
public MergedResult decorate(final QueryResult queryResult, final SQLStatementContext sqlStatementContext, final EncryptRule rule) {
- return new EncryptMergedResult(metaData, new TransparentMergedResult(queryResult));
+ return new EncryptMergedResult(database, encryptRule, selectStatementContext, new TransparentMergedResult(queryResult));
}
@Override
public MergedResult decorate(final MergedResult mergedResult, final SQLStatementContext sqlStatementContext, final EncryptRule rule) {
- return new EncryptMergedResult(metaData, mergedResult);
+ return new EncryptMergedResult(database, encryptRule, selectStatementContext, mergedResult);
}
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
index d07e538eb3e..62976688fc1 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
@@ -18,10 +18,13 @@
package org.apache.shardingsphere.encrypt.merge.dql;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
+import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
+import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import java.io.InputStream;
import java.io.Reader;
@@ -37,7 +40,11 @@ import java.util.Optional;
@RequiredArgsConstructor
public final class EncryptMergedResult implements MergedResult {
- private final EncryptAlgorithmMetaData metaData;
+ private final ShardingSphereDatabase database;
+
+ private final EncryptRule encryptRule;
+
+ private final SelectStatementContext selectStatementContext;
private final MergedResult mergedResult;
@@ -48,23 +55,23 @@ public final class EncryptMergedResult implements MergedResult {
@Override
public Object getValue(final int columnIndex, final Class<?> type) throws SQLException {
- Optional<ColumnProjection> columnProjection = metaData.getSelectStatementContext().findColumnProjection(columnIndex);
+ Optional<ColumnProjection> columnProjection = selectStatementContext.findColumnProjection(columnIndex);
if (!columnProjection.isPresent()) {
return mergedResult.getValue(columnIndex, type);
}
- TablesContext tablesContext = metaData.getSelectStatementContext().getTablesContext();
+ TablesContext tablesContext = selectStatementContext.getTablesContext();
String schemaName = tablesContext.getSchemaName()
- .orElseGet(() -> DatabaseTypeEngine.getDefaultSchemaName(metaData.getSelectStatementContext().getDatabaseType(), metaData.getDatabase().getName()));
- Map<String, String> expressionTableNames = tablesContext.findTableNamesByColumnProjection(Collections.singleton(columnProjection.get()), metaData.getDatabase().getSchema(schemaName));
+ .orElseGet(() -> DatabaseTypeEngine.getDefaultSchemaName(selectStatementContext.getDatabaseType(), database.getName()));
+ Map<String, String> expressionTableNames = tablesContext.findTableNamesByColumnProjection(Collections.singleton(columnProjection.get()), database.getSchema(schemaName));
Optional<String> tableName = findTableName(columnProjection.get(), expressionTableNames);
if (!tableName.isPresent()) {
return mergedResult.getValue(columnIndex, type);
}
- if (!metaData.getEncryptRule().findEncryptTable(tableName.get()).map(optional -> optional.isEncryptColumn(columnProjection.get().getName())).orElse(false)) {
+ if (!encryptRule.findEncryptTable(tableName.get()).map(optional -> optional.isEncryptColumn(columnProjection.get().getName())).orElse(false)) {
return mergedResult.getValue(columnIndex, type);
}
Object cipherValue = mergedResult.getValue(columnIndex, Object.class);
- return metaData.getEncryptRule().decrypt(metaData.getDatabase().getName(), schemaName, tableName.get(), columnProjection.get().getName(), cipherValue);
+ return encryptRule.decrypt(database.getName(), schemaName, tableName.get(), columnProjection.get().getName(), cipherValue);
}
private Optional<String> findTableName(final ColumnProjection columnProjection, final Map<String, String> columnTableNames) {
@@ -72,8 +79,8 @@ public final class EncryptMergedResult implements MergedResult {
if (null != tableName) {
return Optional.of(tableName);
}
- for (String each : metaData.getSelectStatementContext().getTablesContext().getTableNames()) {
- if (metaData.getEncryptRule().findEncryptTable(each).map(optional -> optional.isEncryptColumn(columnProjection.getName())).orElse(false)) {
+ for (String each : selectStatementContext.getTablesContext().getTableNames()) {
+ if (encryptRule.findEncryptTable(each).map(optional -> optional.isEncryptColumn(columnProjection.getName())).orElse(false)) {
return Optional.of(each);
}
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
index e477bd214da..6c46c28fa3e 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
@@ -19,8 +19,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.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
+import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.junit.jupiter.api.Test;
import java.sql.SQLException;
@@ -35,7 +37,7 @@ class EncryptDQLResultDecoratorTest {
void assertDecorateQueryResult() throws SQLException {
QueryResult queryResult = mock(QueryResult.class);
when(queryResult.next()).thenReturn(true);
- EncryptDQLResultDecorator decorator = new EncryptDQLResultDecorator(mock(EncryptAlgorithmMetaData.class));
+ EncryptDQLResultDecorator decorator = new EncryptDQLResultDecorator(mock(ShardingSphereDatabase.class), mock(EncryptRule.class), mock(SelectStatementContext.class));
MergedResult actual = decorator.decorate(queryResult, mock(SQLStatementContext.class), mock(EncryptRule.class));
assertTrue(actual.next());
}
@@ -44,7 +46,7 @@ class EncryptDQLResultDecoratorTest {
void assertDecorateMergedResult() throws SQLException {
MergedResult mergedResult = mock(MergedResult.class);
when(mergedResult.next()).thenReturn(true);
- EncryptDQLResultDecorator decorator = new EncryptDQLResultDecorator(mock(EncryptAlgorithmMetaData.class));
+ EncryptDQLResultDecorator decorator = new EncryptDQLResultDecorator(mock(ShardingSphereDatabase.class), mock(EncryptRule.class), mock(SelectStatementContext.class));
MergedResult actual = decorator.decorate(mergedResult, mock(SQLStatementContext.class), mock(EncryptRule.class));
assertTrue(actual.next());
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java
index 10a351de55c..965e0026ca7 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java
@@ -17,7 +17,10 @@
package org.apache.shardingsphere.encrypt.merge.dql;
+import org.apache.shardingsphere.encrypt.rule.EncryptRule;
+import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
+import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
@@ -39,39 +42,45 @@ import static org.mockito.Mockito.when;
class EncryptMergedResultTest {
@Mock
- private EncryptAlgorithmMetaData metaData;
+ private ShardingSphereDatabase database;
+
+ @Mock
+ private EncryptRule encryptRule;
+
+ @Mock
+ private SelectStatementContext selectStatementContext;
@Mock
private MergedResult mergedResult;
@Test
void assertNext() throws SQLException {
- assertFalse(new EncryptMergedResult(metaData, mergedResult).next());
+ assertFalse(new EncryptMergedResult(database, encryptRule, selectStatementContext, mergedResult).next());
}
@Test
void assertGetCalendarValue() throws SQLException {
Calendar calendar = Calendar.getInstance();
when(mergedResult.getCalendarValue(1, Date.class, calendar)).thenReturn(new Date(0L));
- assertThat(new EncryptMergedResult(metaData, mergedResult).getCalendarValue(1, Date.class, calendar), is(new Date(0L)));
+ assertThat(new EncryptMergedResult(database, encryptRule, selectStatementContext, mergedResult).getCalendarValue(1, Date.class, calendar), is(new Date(0L)));
}
@Test
void assertGetInputStream() throws SQLException {
InputStream inputStream = mock(InputStream.class);
when(mergedResult.getInputStream(1, "asc")).thenReturn(inputStream);
- assertThat(new EncryptMergedResult(metaData, mergedResult).getInputStream(1, "asc"), is(inputStream));
+ assertThat(new EncryptMergedResult(database, encryptRule, selectStatementContext, mergedResult).getInputStream(1, "asc"), is(inputStream));
}
@Test
void assertGetCharacterStream() throws SQLException {
Reader reader = mock(Reader.class);
when(mergedResult.getCharacterStream(1)).thenReturn(reader);
- assertThat(new EncryptMergedResult(metaData, mergedResult).getCharacterStream(1), is(reader));
+ assertThat(new EncryptMergedResult(database, encryptRule, selectStatementContext, mergedResult).getCharacterStream(1), is(reader));
}
@Test
void assertWasNull() throws SQLException {
- assertFalse(new EncryptMergedResult(metaData, mergedResult).wasNull());
+ assertFalse(new EncryptMergedResult(database, encryptRule, selectStatementContext, mergedResult).wasNull());
}
}