This is an automated email from the ASF dual-hosted git repository.

sunnianjun 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 2b38d67330a Remove MaskAlgorithmMetaData (#30550)
2b38d67330a is described below

commit 2b38d67330a7e2bf73eaa2efc930f35f4a2e4de2
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Tue Mar 19 23:01:23 2024 +0800

    Remove MaskAlgorithmMetaData (#30550)
---
 .../mask/merge/MaskResultDecoratorEngine.java      |  5 +-
 .../mask/merge/dql/MaskAlgorithmMetaData.java      | 60 --------------------
 .../mask/merge/dql/MaskDQLResultDecorator.java     |  9 ++-
 .../mask/merge/dql/MaskMergedResult.java           | 13 ++++-
 .../mask/merge/dql/MaskAlgorithmMetaDataTest.java  | 64 ----------------------
 .../mask/merge/dql/MaskDQLResultDecoratorTest.java |  5 +-
 .../mask/merge/dql/MaskMergedResultTest.java       | 36 ++++++++----
 .../select/projection/ProjectionsContext.java      | 14 +++++
 8 files changed, 61 insertions(+), 145 deletions(-)

diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
index a49a6236520..ff182069649 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
@@ -24,7 +24,6 @@ import 
org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
 import 
org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecoratorEngine;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mask.constant.MaskOrder;
-import org.apache.shardingsphere.mask.merge.dql.MaskAlgorithmMetaData;
 import org.apache.shardingsphere.mask.merge.dql.MaskDQLResultDecorator;
 import org.apache.shardingsphere.mask.rule.MaskRule;
 
@@ -38,9 +37,7 @@ public final class MaskResultDecoratorEngine implements 
ResultDecoratorEngine<Ma
     @Override
     public Optional<ResultDecorator<MaskRule>> newInstance(final 
ShardingSphereDatabase database,
                                                            final MaskRule 
maskRule, final ConfigurationProperties props, final SQLStatementContext 
sqlStatementContext) {
-        return sqlStatementContext instanceof SelectStatementContext
-                ? Optional.of(new MaskDQLResultDecorator(new 
MaskAlgorithmMetaData(maskRule, (SelectStatementContext) sqlStatementContext)))
-                : Optional.empty();
+        return sqlStatementContext instanceof SelectStatementContext ? 
Optional.of(new MaskDQLResultDecorator(maskRule, (SelectStatementContext) 
sqlStatementContext)) : Optional.empty();
     }
     
     @Override
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
deleted file mode 100644
index 129756092cf..00000000000
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
+++ /dev/null
@@ -1,60 +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.mask.merge.dql;
-
-import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.Projection;
-import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.impl.ColumnProjection;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.mask.rule.MaskRule;
-import org.apache.shardingsphere.mask.spi.MaskAlgorithm;
-
-import java.util.List;
-import java.util.Optional;
-
-/**
- * Mask algorithm meta data.
- */
-@RequiredArgsConstructor
-public final class MaskAlgorithmMetaData {
-    
-    private final MaskRule maskRule;
-    
-    private final SelectStatementContext selectStatementContext;
-    
-    /**
-     * Find mask algorithm.
-     *
-     * @param columnIndex column index
-     * @return found mask algorithm
-     */
-    @SuppressWarnings("rawtypes")
-    public Optional<MaskAlgorithm> findMaskAlgorithm(final int columnIndex) {
-        Optional<ColumnProjection> columnProjection = 
findColumnProjection(columnIndex);
-        return columnProjection.isPresent() ? 
maskRule.findAlgorithm(columnProjection.get().getOriginalTable().getValue(), 
columnProjection.get().getName().getValue()) : Optional.empty();
-    }
-    
-    private Optional<ColumnProjection> findColumnProjection(final int 
columnIndex) {
-        List<Projection> expandProjections = 
selectStatementContext.getProjectionsContext().getExpandProjections();
-        if (expandProjections.size() < columnIndex) {
-            return Optional.empty();
-        }
-        Projection projection = expandProjections.get(columnIndex - 1);
-        return projection instanceof ColumnProjection ? 
Optional.of((ColumnProjection) projection) : Optional.empty();
-    }
-}
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecorator.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecorator.java
index aa76c145926..ecb55cd2680 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecorator.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecorator.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mask.merge.dql;
 
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.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;
@@ -31,15 +32,17 @@ import org.apache.shardingsphere.mask.rule.MaskRule;
 @RequiredArgsConstructor
 public final class MaskDQLResultDecorator implements ResultDecorator<MaskRule> 
{
     
-    private final MaskAlgorithmMetaData metaData;
+    private final MaskRule maskRule;
+    
+    private final SelectStatementContext selectStatementContext;
     
     @Override
     public MergedResult decorate(final QueryResult queryResult, final 
SQLStatementContext sqlStatementContext, final MaskRule rule) {
-        return new MaskMergedResult(metaData, new 
TransparentMergedResult(queryResult));
+        return new MaskMergedResult(maskRule, selectStatementContext, new 
TransparentMergedResult(queryResult));
     }
     
     @Override
     public MergedResult decorate(final MergedResult mergedResult, final 
SQLStatementContext sqlStatementContext, final MaskRule rule) {
-        return new MaskMergedResult(metaData, mergedResult);
+        return new MaskMergedResult(maskRule, selectStatementContext, 
mergedResult);
     }
 }
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResult.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResult.java
index 80b8c753c95..882294053bb 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResult.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResult.java
@@ -18,7 +18,10 @@
 package org.apache.shardingsphere.mask.merge.dql;
 
 import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.impl.ColumnProjection;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
+import org.apache.shardingsphere.mask.rule.MaskRule;
 import org.apache.shardingsphere.mask.spi.MaskAlgorithm;
 
 import java.io.InputStream;
@@ -33,7 +36,9 @@ import java.util.Optional;
 @RequiredArgsConstructor
 public final class MaskMergedResult implements MergedResult {
     
-    private final MaskAlgorithmMetaData metaData;
+    private final MaskRule maskRule;
+    
+    private final SelectStatementContext selectStatementContext;
     
     private final MergedResult mergedResult;
     
@@ -45,7 +50,11 @@ public final class MaskMergedResult implements MergedResult {
     @SuppressWarnings({"rawtypes", "unchecked"})
     @Override
     public Object getValue(final int columnIndex, final Class<?> type) throws 
SQLException {
-        Optional<MaskAlgorithm> maskAlgorithm = 
metaData.findMaskAlgorithm(columnIndex);
+        Optional<ColumnProjection> columnProjection = 
selectStatementContext.getProjectionsContext().findColumnProjection(columnIndex);
+        if (!columnProjection.isPresent()) {
+            return mergedResult.getValue(columnIndex, type);
+        }
+        Optional<MaskAlgorithm> maskAlgorithm = 
maskRule.findAlgorithm(columnProjection.get().getOriginalTable().getValue(), 
columnProjection.get().getName().getValue());
         if (!maskAlgorithm.isPresent()) {
             return mergedResult.getValue(columnIndex, type);
         }
diff --git 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
deleted file mode 100644
index e094d83c979..00000000000
--- 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
+++ /dev/null
@@ -1,64 +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.mask.merge.dql;
-
-import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.impl.ColumnProjection;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mask.rule.MaskRule;
-import org.apache.shardingsphere.mask.spi.MaskAlgorithm;
-import 
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-
-import java.util.Collections;
-import java.util.Optional;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(MockitoExtension.class)
-class MaskAlgorithmMetaDataTest {
-    
-    @Mock
-    private MaskRule maskRule;
-    
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private SelectStatementContext selectStatementContext;
-    
-    @SuppressWarnings("rawtypes")
-    @Test
-    void assertFindAlgorithmByColumnIndex() {
-        when(maskRule.findAlgorithm("t_order", 
"order_id")).thenReturn(Optional.of(TypedSPILoader.getService(MaskAlgorithm.class,
 "MD5")));
-        ColumnProjection columnProjection = new ColumnProjection(null, 
"order_id", null, mock(DatabaseType.class));
-        columnProjection.setOriginalColumn(new IdentifierValue("order_id"));
-        columnProjection.setOriginalTable(new IdentifierValue("t_order"));
-        
when(selectStatementContext.getProjectionsContext().getExpandProjections()).thenReturn(Collections.singletonList(columnProjection));
-        
when(selectStatementContext.getTablesContext().getTableNames()).thenReturn(Collections.singleton("t_order"));
-        Optional<MaskAlgorithm> actual = new MaskAlgorithmMetaData(maskRule, 
selectStatementContext).findMaskAlgorithm(1);
-        assertTrue(actual.isPresent());
-        assertThat(actual.get().getType(), is("MD5"));
-    }
-}
diff --git 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecoratorTest.java
 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecoratorTest.java
index c7de0b87622..943f15db615 100644
--- 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecoratorTest.java
+++ 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecoratorTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.mask.merge.dql;
 
+import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.mask.rule.MaskRule;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
@@ -35,7 +36,7 @@ class MaskDQLResultDecoratorTest {
     void assertDecorateQueryResult() throws SQLException {
         QueryResult queryResult = mock(QueryResult.class);
         when(queryResult.next()).thenReturn(true);
-        MaskDQLResultDecorator decorator = new 
MaskDQLResultDecorator(mock(MaskAlgorithmMetaData.class));
+        MaskDQLResultDecorator decorator = new 
MaskDQLResultDecorator(mock(MaskRule.class), 
mock(SelectStatementContext.class));
         MergedResult actual = decorator.decorate(queryResult, 
mock(SQLStatementContext.class), mock(MaskRule.class));
         assertTrue(actual.next());
     }
@@ -44,7 +45,7 @@ class MaskDQLResultDecoratorTest {
     void assertDecorateMergedResult() throws SQLException {
         MergedResult mergedResult = mock(MergedResult.class);
         when(mergedResult.next()).thenReturn(true);
-        MaskDQLResultDecorator decorator = new 
MaskDQLResultDecorator(mock(MaskAlgorithmMetaData.class));
+        MaskDQLResultDecorator decorator = new 
MaskDQLResultDecorator(mock(MaskRule.class), 
mock(SelectStatementContext.class));
         MergedResult actual = decorator.decorate(mergedResult, 
mock(SQLStatementContext.class), mock(MaskRule.class));
         assertTrue(actual.next());
     }
diff --git 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResultTest.java
 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResultTest.java
index 3b62020b27e..a891b2c9f0c 100644
--- 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResultTest.java
+++ 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResultTest.java
@@ -17,7 +17,10 @@
 
 package org.apache.shardingsphere.mask.merge.dql;
 
+import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.impl.ColumnProjection;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
+import org.apache.shardingsphere.mask.rule.MaskRule;
 import org.apache.shardingsphere.mask.spi.MaskAlgorithm;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -34,55 +37,68 @@ import java.util.Optional;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
 class MaskMergedResultTest {
     
-    @Mock
-    private MaskAlgorithmMetaData metaData;
-    
     @Mock
     private MergedResult mergedResult;
     
     @Test
     void assertNext() throws SQLException {
-        assertFalse(new MaskMergedResult(metaData, mergedResult).next());
+        assertFalse(new MaskMergedResult(mock(MaskRule.class), 
mock(SelectStatementContext.class), mergedResult).next());
     }
     
     @Test
     void assertGetValue() throws SQLException {
         when(mergedResult.getValue(1, Object.class)).thenReturn("VALUE");
+        assertThat(new MaskMergedResult(mockMaskRule(), 
mockSelectStatementContext(), mergedResult).getValue(1, String.class), 
is("MASK_VALUE"));
+    }
+    
+    @SuppressWarnings("unchecked")
+    private MaskRule mockMaskRule() {
         MaskAlgorithm<String, String> maskAlgorithm = 
mock(MaskAlgorithm.class);
         when(maskAlgorithm.mask("VALUE")).thenReturn("MASK_VALUE");
-        
when(metaData.findMaskAlgorithm(1)).thenReturn(Optional.of(maskAlgorithm));
-        assertThat(new MaskMergedResult(metaData, mergedResult).getValue(1, 
String.class), is("MASK_VALUE"));
+        MaskRule result = mock(MaskRule.class);
+        when(result.findAlgorithm("tbl", 
"col")).thenReturn(Optional.of(maskAlgorithm));
+        return result;
+    }
+    
+    private SelectStatementContext mockSelectStatementContext() {
+        ColumnProjection columnProjection = mock(ColumnProjection.class, 
RETURNS_DEEP_STUBS);
+        when(columnProjection.getOriginalTable().getValue()).thenReturn("tbl");
+        when(columnProjection.getName().getValue()).thenReturn("col");
+        SelectStatementContext result = mock(SelectStatementContext.class, 
RETURNS_DEEP_STUBS);
+        
when(result.getProjectionsContext().findColumnProjection(1)).thenReturn(Optional.of(columnProjection));
+        return result;
     }
     
     @Test
     void assertGetCalendarValue() throws SQLException {
         Calendar calendar = Calendar.getInstance();
         when(mergedResult.getCalendarValue(1, Date.class, 
calendar)).thenReturn(new Date(0L));
-        assertThat(new MaskMergedResult(metaData, 
mergedResult).getCalendarValue(1, Date.class, calendar), is(new Date(0L)));
+        assertThat(new MaskMergedResult(mock(MaskRule.class), 
mock(SelectStatementContext.class), 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 MaskMergedResult(metaData, 
mergedResult).getInputStream(1, "asc"), is(inputStream));
+        assertThat(new MaskMergedResult(mock(MaskRule.class), 
mock(SelectStatementContext.class), mergedResult).getInputStream(1, "asc"), 
is(inputStream));
     }
     
     @Test
     void assertGetCharacterStream() throws SQLException {
         Reader reader = mock(Reader.class);
         when(mergedResult.getCharacterStream(1)).thenReturn(reader);
-        assertThat(new MaskMergedResult(metaData, 
mergedResult).getCharacterStream(1), is(reader));
+        assertThat(new MaskMergedResult(mock(MaskRule.class), 
mock(SelectStatementContext.class), mergedResult).getCharacterStream(1), 
is(reader));
     }
     
     @Test
     void assertWasNull() throws SQLException {
-        assertFalse(new MaskMergedResult(metaData, mergedResult).wasNull());
+        assertFalse(new MaskMergedResult(mock(MaskRule.class), 
mock(SelectStatementContext.class), mergedResult).wasNull());
     }
 }
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/ProjectionsContext.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/ProjectionsContext.java
index 63594e4d669..c630bbf7624 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/ProjectionsContext.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/ProjectionsContext.java
@@ -169,4 +169,18 @@ public final class ProjectionsContext {
         }
         return false;
     }
+    
+    /**
+     * Find column projection.
+     * 
+     * @param columnIndex column index
+     * @return found column projection
+     */
+    public Optional<ColumnProjection> findColumnProjection(final int 
columnIndex) {
+        if (expandProjections.size() < columnIndex) {
+            return Optional.empty();
+        }
+        Projection projection = expandProjections.get(columnIndex - 1);
+        return projection instanceof ColumnProjection ? 
Optional.of((ColumnProjection) projection) : Optional.empty();
+    }
 }

Reply via email to