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

zhangliang 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 f361c515cd8 Add more test cases on ShadowExtractor (#33516)
f361c515cd8 is described below

commit f361c515cd8f9299651f891904c5d84655e48140
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Nov 3 22:15:39 2024 +0800

    Add more test cases on ShadowExtractor (#33516)
---
 .../shadow/route/engine/util/ShadowExtractor.java  | 26 +++----
 .../ColumnRegexMatchedShadowAlgorithmTest.java     |  2 +-
 .../ColumnValueMatchedShadowAlgorithmTest.java     |  2 +-
 .../route/engine/util/ShadowExtractorTest.java     | 81 ++++++++++++++++++++--
 4 files changed, 91 insertions(+), 20 deletions(-)

diff --git 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/util/ShadowExtractor.java
 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/util/ShadowExtractor.java
index ceff051be62..34a464268df 100644
--- 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/util/ShadowExtractor.java
+++ 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/util/ShadowExtractor.java
@@ -39,11 +39,11 @@ import java.util.Optional;
 public final class ShadowExtractor {
     
     /**
-     * Get values in expression segment.
+     * Extract values.
      *
      * @param expression expression segment
      * @param params parameters
-     * @return values
+     * @return extracted values
      */
     public static Optional<Collection<Comparable<?>>> extractValues(final 
ExpressionSegment expression, final List<Object> params) {
         Collection<Comparable<?>> result = new LinkedList<>();
@@ -54,33 +54,33 @@ public final class ShadowExtractor {
             extractValues(((InExpression) expression).getRight(), 
params).ifPresent(result::addAll);
         }
         if (expression instanceof ListExpression) {
-            ((ListExpression) expression).getItems().forEach(each -> 
extractValueInSimpleExpressionSegment(each, params).ifPresent(result::add));
+            ((ListExpression) expression).getItems().forEach(each -> 
extractSimpleExpressionValue(each, params).ifPresent(result::add));
         }
         if (expression instanceof SimpleExpressionSegment) {
-            extractValueInSimpleExpressionSegment(expression, 
params).ifPresent(result::add);
+            extractSimpleExpressionValue(expression, 
params).ifPresent(result::add);
         }
         return result.isEmpty() ? Optional.empty() : Optional.of(result);
     }
     
-    private static Optional<Comparable<?>> 
extractValueInSimpleExpressionSegment(final ExpressionSegment expression, final 
List<Object> params) {
+    private static Optional<Comparable<?>> extractSimpleExpressionValue(final 
ExpressionSegment expression, final List<Object> params) {
         if (expression instanceof LiteralExpressionSegment) {
-            return 
extractValueInLiteralExpressionSegment((LiteralExpressionSegment) expression);
+            return extractLiteralExpressionValue((LiteralExpressionSegment) 
expression);
         }
         if (expression instanceof ParameterMarkerExpressionSegment) {
-            return 
extractValueInParameterMarkerExpressionSegment((ParameterMarkerExpressionSegment)
 expression, params);
+            return 
extractParameterMarkerExpressionValue((ParameterMarkerExpressionSegment) 
expression, params);
         }
         return Optional.empty();
     }
     
-    private static Optional<Comparable<?>> 
extractValueInParameterMarkerExpressionSegment(final 
ParameterMarkerExpressionSegment expression, final List<Object> params) {
-        return 
castToComparable(params.get(expression.getParameterMarkerIndex()));
+    private static Optional<Comparable<?>> extractLiteralExpressionValue(final 
LiteralExpressionSegment expression) {
+        return castToComparable(expression.getLiterals());
     }
     
-    private static Optional<Comparable<?>> 
extractValueInLiteralExpressionSegment(final LiteralExpressionSegment 
expression) {
-        return castToComparable(expression.getLiterals());
+    private static Optional<Comparable<?>> 
extractParameterMarkerExpressionValue(final ParameterMarkerExpressionSegment 
expression, final List<Object> params) {
+        return 
castToComparable(params.get(expression.getParameterMarkerIndex()));
     }
     
-    private static Optional<Comparable<?>> castToComparable(final Object 
object) {
-        return object instanceof Comparable<?> ? Optional.of((Comparable<?>) 
object) : Optional.empty();
+    private static Optional<Comparable<?>> castToComparable(final Object 
value) {
+        return value instanceof Comparable<?> ? Optional.of((Comparable<?>) 
value) : Optional.empty();
     }
 }
diff --git 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/algorithm/shadow/column/ColumnRegexMatchedShadowAlgorithmTest.java
 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/algorithm/shadow/column/ColumnRegexMatchedShadowAlgorithmTest.java
index 10558298d05..ef59de6effd 100644
--- 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/algorithm/shadow/column/ColumnRegexMatchedShadowAlgorithmTest.java
+++ 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/algorithm/shadow/column/ColumnRegexMatchedShadowAlgorithmTest.java
@@ -31,7 +31,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 class ColumnRegexMatchedShadowAlgorithmTest {
     
-    private static final String SHADOW_TABLE = "t_user";
+    private static final String SHADOW_TABLE = "foo_tbl";
     
     private static final String SHADOW_COLUMN = "shadow";
     
diff --git 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/algorithm/shadow/column/ColumnValueMatchedShadowAlgorithmTest.java
 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/algorithm/shadow/column/ColumnValueMatchedShadowAlgorithmTest.java
index cc19d722cf3..d4c5c0a8a12 100644
--- 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/algorithm/shadow/column/ColumnValueMatchedShadowAlgorithmTest.java
+++ 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/algorithm/shadow/column/ColumnValueMatchedShadowAlgorithmTest.java
@@ -31,7 +31,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 class ColumnValueMatchedShadowAlgorithmTest {
     
-    private static final String SHADOW_TABLE = "t_user";
+    private static final String SHADOW_TABLE = "foo_tbl";
     
     private static final String SHADOW_COLUMN = "shadow";
     
diff --git 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/util/ShadowExtractorTest.java
 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/util/ShadowExtractorTest.java
index 9022f7ab639..da0b789234e 100644
--- 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/util/ShadowExtractorTest.java
+++ 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/util/ShadowExtractorTest.java
@@ -17,24 +17,95 @@
 
 package org.apache.shardingsphere.shadow.route.engine.util;
 
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BinaryOperationExpression;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.InExpression;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ListExpression;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.LiteralExpressionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.SimpleExpressionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.subquery.SubqueryExpressionSegment;
 import org.junit.jupiter.api.Test;
 
-import java.util.LinkedList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
+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.junit.jupiter.api.Assertions.assertTrue;
 
 class ShadowExtractorTest {
     
     @Test
-    void assertExtractValuesSimpleExpressionSegment() {
+    void assertExtractValuesWithBinaryOperationExpression() {
+        SimpleExpressionSegment leftSegment = new LiteralExpressionSegment(1, 
2, "left");
+        SimpleExpressionSegment rightSegment = new LiteralExpressionSegment(1, 
2, "right");
+        ExpressionSegment expressionSegment = new BinaryOperationExpression(1, 
2, leftSegment, rightSegment, "=", "text");
+        Optional<Collection<Comparable<?>>> actual = 
ShadowExtractor.extractValues(expressionSegment, Collections.emptyList());
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().iterator().next(), is("right"));
+    }
+    
+    @Test
+    void assertExtractValuesWithInExpression() {
+        SimpleExpressionSegment leftSegment = new LiteralExpressionSegment(1, 
2, "left");
+        SimpleExpressionSegment rightSegment = new LiteralExpressionSegment(1, 
2, "right");
+        ExpressionSegment expressionSegment = new InExpression(1, 2, 
leftSegment, rightSegment, false);
+        Optional<Collection<Comparable<?>>> actual = 
ShadowExtractor.extractValues(expressionSegment, Collections.emptyList());
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().iterator().next(), is("right"));
+    }
+    
+    @Test
+    void assertExtractValuesWithListExpression() {
+        SimpleExpressionSegment segment0 = new LiteralExpressionSegment(1, 2, 
"expect0");
+        SimpleExpressionSegment segment1 = new LiteralExpressionSegment(1, 2, 
"expect1");
+        ListExpression expressionSegment = new ListExpression(1, 2);
+        expressionSegment.getItems().add(segment0);
+        expressionSegment.getItems().add(segment1);
+        Optional<Collection<Comparable<?>>> actual = 
ShadowExtractor.extractValues(expressionSegment, Collections.emptyList());
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().iterator().next(), is("expect0"));
+    }
+    
+    @Test
+    void assertExtractValuesWithLiteralExpressionSegment() {
         SimpleExpressionSegment simpleExpressionSegment = new 
LiteralExpressionSegment(1, 2, "expected");
-        List<Object> params = new LinkedList<>();
-        assertTrue(ShadowExtractor.extractValues(simpleExpressionSegment, 
params).isPresent());
-        assertThat(ShadowExtractor.extractValues(simpleExpressionSegment, 
params).get().iterator().next(), is("expected"));
+        Optional<Collection<Comparable<?>>> actual = 
ShadowExtractor.extractValues(simpleExpressionSegment, Collections.emptyList());
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().iterator().next(), is("expected"));
+    }
+    
+    @Test
+    void assertExtractValuesWithInvalidLiteralExpressionSegment() {
+        SimpleExpressionSegment simpleExpressionSegment = new 
LiteralExpressionSegment(1, 2, new Object());
+        Optional<Collection<Comparable<?>>> actual = 
ShadowExtractor.extractValues(simpleExpressionSegment, Collections.emptyList());
+        assertFalse(actual.isPresent());
+    }
+    
+    @Test
+    void assertExtractValuesWithParameterMarkerExpressionSegment() {
+        SimpleExpressionSegment simpleExpressionSegment = new 
ParameterMarkerExpressionSegment(1, 2, 0);
+        Optional<Collection<Comparable<?>>> actual = 
ShadowExtractor.extractValues(simpleExpressionSegment, 
Collections.singletonList(10));
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().iterator().next(), is(10));
+    }
+    
+    @Test
+    void assertExtractValuesWithInvalidParameterMarkerExpressionSegment() {
+        SimpleExpressionSegment simpleExpressionSegment = new 
ParameterMarkerExpressionSegment(1, 2, 0);
+        Optional<Collection<Comparable<?>>> actual = 
ShadowExtractor.extractValues(simpleExpressionSegment, 
Collections.singletonList(new Object()));
+        assertFalse(actual.isPresent());
+    }
+    
+    @Test
+    void assertExtractValuesWithSubqueryExpressionSegment() {
+        SimpleExpressionSegment simpleExpressionSegment = new 
SubqueryExpressionSegment(null);
+        List<Object> params = Collections.singletonList(new Object());
+        Optional<Collection<Comparable<?>>> actual = 
ShadowExtractor.extractValues(simpleExpressionSegment, params);
+        assertFalse(actual.isPresent());
     }
 }

Reply via email to