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

tuichenchuxin 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 77c234b198a Revise pr 21768 (#22348)
77c234b198a is described below

commit 77c234b198ae3bae382f6ecf4d99b734567e754d
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Wed Nov 23 10:27:22 2022 +0800

    Revise pr 21768 (#22348)
    
    * Revise pr 21768
    
    * optimize code style
---
 .../generator/EncryptProjectionTokenGenerator.java | 14 ++++----
 .../select/projection/ProjectionsContext.java      |  6 ++--
 .../select/projection/engine/ProjectionEngine.java |  9 +++--
 .../engine/ProjectionsContextEngine.java           |  2 +-
 .../projection/impl/ShorthandProjection.java       | 26 +++++++-------
 .../projection/engine/ProjectionEngineTest.java    | 42 ++++++++++++----------
 6 files changed, 52 insertions(+), 47 deletions(-)

diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
index a99f7d3f358..887533bac60 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
@@ -19,8 +19,8 @@ package 
org.apache.shardingsphere.encrypt.rewrite.token.generator;
 
 import com.google.common.base.Preconditions;
 import lombok.Setter;
-import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
+import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import 
org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
 import 
org.apache.shardingsphere.infra.binder.segment.select.projection.ProjectionsContext;
 import 
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
@@ -92,9 +92,9 @@ public final class EncryptProjectionTokenGenerator implements 
CollectionSQLToken
             }
             if (projection instanceof ShorthandProjectionSegment) {
                 ShorthandProjectionSegment shorthandSegment = 
(ShorthandProjectionSegment) projection;
-                Collection<ColumnProjection> actualColumns = 
getShorthandProjection(shorthandSegment, 
selectStatementContext.getProjectionsContext()).getActualColumns().values();
-                if (!actualColumns.isEmpty()) {
-                    result.add(generateSQLToken(shorthandSegment, 
actualColumns, selectStatementContext.getDatabaseType(), subqueryType, 
columnTableNames));
+                Collection<ColumnProjection> columnProjections = 
getShorthandProjection(shorthandSegment, 
selectStatementContext.getProjectionsContext()).getColumnProjections();
+                if (!columnProjections.isEmpty()) {
+                    result.add(generateSQLToken(shorthandSegment, 
columnProjections, selectStatementContext.getDatabaseType(), subqueryType, 
columnTableNames));
                 }
             }
         }
@@ -108,10 +108,10 @@ public final class EncryptProjectionTokenGenerator 
implements CollectionSQLToken
         return new SubstitutableColumnNameToken(startIndex, stopIndex, 
projections);
     }
     
-    private SubstitutableColumnNameToken generateSQLToken(final 
ShorthandProjectionSegment segment, final Collection<ColumnProjection> 
actualColumns,
+    private SubstitutableColumnNameToken generateSQLToken(final 
ShorthandProjectionSegment segment, final Collection<ColumnProjection> 
columnProjections,
                                                           final DatabaseType 
databaseType, final SubqueryType subqueryType, final Map<String, String> 
columnTableNames) {
         List<ColumnProjection> projections = new LinkedList<>();
-        for (ColumnProjection each : actualColumns) {
+        for (ColumnProjection each : columnProjections) {
             String tableName = columnTableNames.get(each.getExpression());
             if (null == tableName || !encryptRule.findEncryptor(tableName, 
each.getName()).isPresent()) {
                 projections.add(new ColumnProjection(each.getOwner(), 
each.getName(), each.getAlias().orElse(null)));
@@ -136,7 +136,7 @@ public final class EncryptProjectionTokenGenerator 
implements CollectionSQLToken
                 columns.add((ColumnProjection) projection);
             }
             if (projection instanceof ShorthandProjection) {
-                columns.addAll(((ShorthandProjection) 
projection).getActualColumns().values());
+                columns.addAll(((ShorthandProjection) 
projection).getColumnProjections());
             }
         }
         String defaultSchema = 
DatabaseTypeEngine.getDefaultSchemaName(selectStatementContext.getDatabaseType(),
 databaseName);
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/ProjectionsContext.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/ProjectionsContext.java
index a5cc6c6cb4f..97784c192e6 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/ProjectionsContext.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/ProjectionsContext.java
@@ -78,7 +78,7 @@ public final class ProjectionsContext {
         List<Projection> result = new ArrayList<>();
         for (Projection each : projections) {
             if (each instanceof ShorthandProjection) {
-                result.addAll(((ShorthandProjection) 
each).getResultSetColumns().values());
+                result.addAll(((ShorthandProjection) 
each).getActualColumns().values());
             } else if (!(each instanceof DerivedProjection)) {
                 result.add(each);
             }
@@ -107,8 +107,8 @@ public final class ProjectionsContext {
      */
     public Optional<String> findAlias(final String projectionName) {
         for (Projection each : projections) {
-            if (each instanceof ShorthandProjection && ((ShorthandProjection) 
each).getResultSetColumns().containsKey(projectionName.toLowerCase())) {
-                return ((ShorthandProjection) 
each).getResultSetColumns().get(projectionName.toLowerCase()).getAlias();
+            if (each instanceof ShorthandProjection && ((ShorthandProjection) 
each).getActualColumns().containsKey(projectionName.toLowerCase())) {
+                return ((ShorthandProjection) 
each).getActualColumns().get(projectionName.toLowerCase()).getAlias();
             }
             if 
(projectionName.equalsIgnoreCase(SQLUtil.getExactlyValue(each.getExpression())))
 {
                 return each.getAlias();
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngine.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngine.java
index 3709a34a869..0b153d31721 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngine.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngine.java
@@ -101,7 +101,6 @@ public final class ProjectionEngine {
         if (projectionSegment instanceof ParameterMarkerExpressionSegment) {
             return 
Optional.of(createProjection((ParameterMarkerExpressionSegment) 
projectionSegment));
         }
-        // TODO subquery
         return Optional.empty();
     }
     
@@ -178,7 +177,7 @@ public final class ProjectionEngine {
         SelectStatement subSelectStatement = ((SubqueryTableSegment) 
table).getSubquery().getSelect();
         Collection<Projection> projections = 
subSelectStatement.getProjections().getProjections().stream().map(each -> 
createProjection(subSelectStatement.getFrom(), each).orElse(null))
                 .filter(Objects::nonNull).collect(Collectors.toList());
-        return getResultSetProjections(projections);
+        return getProjections(projections);
     }
     
     private Collection<Projection> 
getShorthandColumnsFromJoinTableSegment(final TableSegment table, final 
ProjectionSegment projectionSegment) {
@@ -188,10 +187,10 @@ public final class ProjectionEngine {
         Collection<Projection> projections = new LinkedList<>();
         createProjection(((JoinTableSegment) table).getLeft(), 
projectionSegment).ifPresent(projections::add);
         createProjection(((JoinTableSegment) table).getRight(), 
projectionSegment).ifPresent(projections::add);
-        return getResultSetProjections(projections);
+        return getProjections(projections);
     }
     
-    private Collection<Projection> getResultSetProjections(final 
Collection<Projection> projections) {
+    private Collection<Projection> getProjections(final Collection<Projection> 
projections) {
         Collection<Projection> result = new LinkedList<>();
         for (Projection each : projections) {
             if (each instanceof ColumnProjection) {
@@ -199,7 +198,7 @@ public final class ProjectionEngine {
             } else if (each instanceof ExpressionProjection) {
                 result.add(each);
             } else if (each instanceof ShorthandProjection) {
-                result.addAll(((ShorthandProjection) 
each).getResultSetColumns().values());
+                result.addAll(((ShorthandProjection) 
each).getActualColumns().values());
             }
         }
         return result;
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionsContextEngine.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionsContextEngine.java
index cd3df174e4a..c1f801f0c7e 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionsContextEngine.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionsContextEngine.java
@@ -134,7 +134,7 @@ public final class ProjectionsContextEngine {
             result.add((ColumnProjection) projection);
         }
         if (projection instanceof ShorthandProjection) {
-            result.addAll(((ShorthandProjection) 
projection).getActualColumns().values());
+            result.addAll(((ShorthandProjection) 
projection).getColumnProjections());
         }
         return result;
     }
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ShorthandProjection.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ShorthandProjection.java
index 44f70ca4a13..9b3f69564be 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ShorthandProjection.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/projection/impl/ShorthandProjection.java
@@ -25,7 +25,9 @@ import 
org.apache.shardingsphere.infra.binder.segment.select.projection.Projecti
 
 import java.util.Collection;
 import java.util.LinkedHashMap;
+import java.util.LinkedList;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Optional;
 
 /**
@@ -37,12 +39,12 @@ import java.util.Optional;
 public final class ShorthandProjection implements Projection {
     
     private final String owner;
-
-    private final Map<String, Projection> resultSetColumns = new 
LinkedHashMap<>();
-
+    
+    private final Map<String, Projection> actualColumns = new 
LinkedHashMap<>();
+    
     public ShorthandProjection(final String owner, final 
Collection<Projection> projections) {
         this.owner = owner;
-        projections.forEach(each -> 
resultSetColumns.put(each.getExpression().toLowerCase(), each));
+        projections.forEach(each -> 
actualColumns.put(each.getExpression().toLowerCase(), each));
     }
     
     @Override
@@ -68,19 +70,19 @@ public final class ShorthandProjection implements 
Projection {
     public Optional<String> getOwner() {
         return Optional.ofNullable(owner);
     }
-
+    
     /**
-     * get actualColumns, exclude ExpressionProjection.
+     * Get column projections.
      *
-     * @return actualColumns
+     * @return column projections
      */
-    public Map<String, ColumnProjection> getActualColumns() {
-        Map<String, ColumnProjection> actualColumns = new LinkedHashMap<>();
-        for (Map.Entry<String, Projection> entry : 
resultSetColumns.entrySet()) {
+    public Collection<ColumnProjection> getColumnProjections() {
+        Collection<ColumnProjection> result = new LinkedList<>();
+        for (Entry<String, Projection> entry : actualColumns.entrySet()) {
             if (entry.getValue() instanceof ColumnProjection) {
-                actualColumns.put(entry.getKey(), (ColumnProjection) 
entry.getValue());
+                result.add((ColumnProjection) entry.getValue());
             }
         }
-        return actualColumns;
+        return result;
     }
 }
diff --git 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngineTest.java
 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngineTest.java
index 8493ce69abe..526b77d8491 100644
--- 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngineTest.java
+++ 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/select/projection/engine/ProjectionEngineTest.java
@@ -54,8 +54,11 @@ import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
+import java.util.LinkedList;
 import java.util.Map;
 import java.util.Optional;
 
@@ -101,11 +104,11 @@ public final class ProjectionEngineTest {
                 Collections.singletonMap(DefaultDatabase.LOGIC_NAME, schema), 
databaseType).createProjection(table, new ShorthandProjectionSegment(0, 0));
         assertTrue(actual.isPresent());
         assertThat(actual.get(), instanceOf(ShorthandProjection.class));
-        assertThat(((ShorthandProjection) 
actual.get()).getActualColumns().size(), is(2));
-        Map<String, ColumnProjection> actualColumns = new LinkedHashMap<>();
-        actualColumns.put("t_order.order_id", new ColumnProjection("t_order", 
"order_id", null));
-        actualColumns.put("t_order.content", new ColumnProjection("t_order", 
"content", null));
-        assertThat(((ShorthandProjection) actual.get()).getActualColumns(), 
is(actualColumns));
+        assertThat(((ShorthandProjection) 
actual.get()).getColumnProjections().size(), is(2));
+        Collection<ColumnProjection> columnProjections = new LinkedList<>();
+        columnProjections.add(new ColumnProjection("t_order", "order_id", 
null));
+        columnProjections.add(new ColumnProjection("t_order", "content", 
null));
+        assertThat(((ShorthandProjection) 
actual.get()).getColumnProjections(), is(columnProjections));
     }
     
     @Test
@@ -189,11 +192,12 @@ public final class ProjectionEngineTest {
                 DefaultDatabase.LOGIC_NAME, 
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, schema), 
databaseType).createProjection(table, shorthandProjectionSegment);
         assertTrue(actual.isPresent());
         assertThat(actual.get(), instanceOf(ShorthandProjection.class));
-        Map<String, ColumnProjection> actualColumns = ((ShorthandProjection) 
actual.get()).getActualColumns();
-        assertThat(actualColumns.size(), is(3));
-        assertThat(actualColumns.get("t_order.order_id"), is(new 
ColumnProjection("t_order", "order_id", null)));
-        assertThat(actualColumns.get("t_order.customer_id"), is(new 
ColumnProjection("t_order", "customer_id", null)));
-        assertThat(actualColumns.get("t_customer.customer_id"), is(new 
ColumnProjection("t_customer", "customer_id", null)));
+        Collection<ColumnProjection> columnProjections = 
((ShorthandProjection) actual.get()).getColumnProjections();
+        assertThat(columnProjections.size(), is(3));
+        Iterator<ColumnProjection> iterator = columnProjections.iterator();
+        assertThat(iterator.next(), is(new ColumnProjection("t_order", 
"order_id", null)));
+        assertThat(iterator.next(), is(new ColumnProjection("t_order", 
"customer_id", null)));
+        assertThat(iterator.next(), is(new ColumnProjection("t_customer", 
"customer_id", null)));
     }
     
     @Test(expected = SchemaNotFoundException.class)
@@ -205,9 +209,9 @@ public final class ProjectionEngineTest {
         ShorthandProjectionSegment shorthandProjectionSegment = new 
ShorthandProjectionSegment(0, 0);
         new ProjectionEngine(DefaultDatabase.LOGIC_NAME, 
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, schema), 
databaseType).createProjection(tableSegment, shorthandProjectionSegment);
     }
-
+    
     @Test
-    public void 
assertResultSetColumnsWithColumnProjectionAndExpressionProjectionOfShorthandProjection()
 {
+    public void 
assertGetActualColumnsWhenShorthandProjectionContainsColumnProjectionAndExpressionProjection()
 {
         ProjectionsSegment subQuerySegment = new ProjectionsSegment(0, 0);
         ColumnSegment columnSegment = new ColumnSegment(0, 0, new 
IdentifierValue("name"));
         subQuerySegment.getProjections().add(new 
ColumnProjectionSegment(columnSegment));
@@ -223,14 +227,14 @@ public final class ProjectionEngineTest {
                 .createProjection(subqueryTableSegment, 
shorthandProjectionSegment);
         assertTrue(actual.isPresent());
         assertThat(actual.get(), instanceOf(ShorthandProjection.class));
-        assertThat(((ShorthandProjection) 
actual.get()).getActualColumns().size(), is(1));
-        assertThat(((ShorthandProjection) 
actual.get()).getResultSetColumns().size(), is(2));
-        Map<String, ColumnProjection> actualColumns = new LinkedHashMap<>();
+        assertThat(((ShorthandProjection) 
actual.get()).getColumnProjections().size(), is(1));
+        assertThat(((ShorthandProjection) 
actual.get()).getActualColumns().size(), is(2));
+        Collection<ColumnProjection> columnProjections = new LinkedList<>();
+        columnProjections.add(new ColumnProjection(null, "name", null));
+        assertThat(((ShorthandProjection) 
actual.get()).getColumnProjections(), is(columnProjections));
+        Map<String, Projection> actualColumns = new LinkedHashMap<>();
         actualColumns.put("name", new ColumnProjection(null, "name", null));
+        actualColumns.put("nvl(leave_date, '20991231')", new 
ExpressionProjection("nvl(leave_date, '20991231')", "leave_date"));
         assertThat(((ShorthandProjection) actual.get()).getActualColumns(), 
is(actualColumns));
-        Map<String, Projection> resultSetColumns = new LinkedHashMap<>();
-        resultSetColumns.put("name", new ColumnProjection(null, "name", null));
-        resultSetColumns.put("nvl(leave_date, '20991231')", new 
ExpressionProjection("nvl(leave_date, '20991231')", "leave_date"));
-        assertThat(((ShorthandProjection) actual.get()).getResultSetColumns(), 
is(resultSetColumns));
     }
 }

Reply via email to