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 2022/11/26 13:33:25 UTC

[shardingsphere] branch master updated: Refactor RootSQLParserTestCases.getAllCases() (#22446)

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 9953c39a09f Refactor RootSQLParserTestCases.getAllCases() (#22446)
9953c39a09f is described below

commit 9953c39a09f3674f704ac54b9a9f5e0e86660fd3
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat Nov 26 21:33:19 2022 +0800

    Refactor RootSQLParserTestCases.getAllCases() (#22446)
    
    * Remove useless RootSQLCases.databaseTypes
    
    * Refactor RootSQLParserTestCases.getAllCases()
    
    * Refactor LiteralSQLBuilder
---
 .../cases/parser/jaxb/RootSQLParserTestCases.java  | 55 ++++++++++++----------
 .../loader/SQLParserTestCaseLoaderCallback.java    |  2 +-
 .../cases/sql/type/impl/LiteralSQLBuilder.java     |  3 +-
 3 files changed, 32 insertions(+), 28 deletions(-)

diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
index 2d4aef14513..26512a42c32 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
@@ -1659,46 +1659,49 @@ public final class RootSQLParserTestCases {
     /**
      * Get all SQL parser test cases.
      *
-     * @return all SQL parser test cases
+     * @return got test cases
      */
     @SuppressWarnings("unchecked")
     @SneakyThrows(IllegalAccessException.class)
-    public Map<String, SQLParserTestCase> getAllSQLParserTestCases() {
+    public Map<String, SQLParserTestCase> getAllCases() {
         Map<String, SQLParserTestCase> result = new HashMap<>();
         for (Field each : RootSQLParserTestCases.class.getDeclaredFields()) {
-            if (isSQLParserTestCasesField(each)) {
-                each.setAccessible(true);
-                List<? extends SQLParserTestCase> testCases = (List<? extends SQLParserTestCase>) each.get(this);
-                if (!testCases.isEmpty()) {
-                    putAll(testCases, result);
-                }
+            if (!isXmlElementField(each)) {
+                continue;
             }
+            each.setAccessible(true);
+            List<? extends SQLParserTestCase> cases = (List<? extends SQLParserTestCase>) each.get(this);
+            if (cases.isEmpty()) {
+                continue;
+            }
+            Map<String, SQLParserTestCase> caseMap = getTestCaseMap(cases);
+            checkDuplicatedTestCases(caseMap, result);
+            result.putAll(caseMap);
         }
         return result;
     }
     
-    private boolean isSQLParserTestCasesField(final Field field) {
-        if (field.isAnnotationPresent(XmlElement.class) && List.class == field.getType() && field.getGenericType() instanceof ParameterizedType) {
-            Class<?> actualTypeArgument = (Class<?>) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0];
-            return SQLParserTestCase.class.isAssignableFrom(actualTypeArgument);
-        }
-        return false;
-    }
-    
-    private void putAll(final List<? extends SQLParserTestCase> sqlParserTestCases, final Map<String, SQLParserTestCase> target) {
-        Map<String, SQLParserTestCase> sqlParserTestCaseMap = getSQLParserTestCases(sqlParserTestCases);
-        Collection<String> sqlParserTestCaseIds = new HashSet<>(sqlParserTestCaseMap.keySet());
-        sqlParserTestCaseIds.retainAll(target.keySet());
-        Preconditions.checkState(sqlParserTestCaseIds.isEmpty(), "Find duplicated SQL Case IDs: %s", sqlParserTestCaseIds);
-        target.putAll(sqlParserTestCaseMap);
+    private boolean isXmlElementField(final Field field) {
+        return field.isAnnotationPresent(XmlElement.class) && List.class == field.getType() && field.getGenericType() instanceof ParameterizedType
+                && SQLParserTestCase.class.isAssignableFrom((Class<?>) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]);
     }
     
-    private Map<String, SQLParserTestCase> getSQLParserTestCases(final List<? extends SQLParserTestCase> sqlParserTestCases) {
-        Map<String, SQLParserTestCase> result = new HashMap<>(sqlParserTestCases.size(), 1);
-        for (SQLParserTestCase each : sqlParserTestCases) {
-            Preconditions.checkState(!result.containsKey(each.getSqlCaseId()), "Find duplicated SQL Case ID: %s", each.getSqlCaseId());
+    private Map<String, SQLParserTestCase> getTestCaseMap(final List<? extends SQLParserTestCase> cases) {
+        Map<String, SQLParserTestCase> result = new HashMap<>(cases.size(), 1);
+        for (SQLParserTestCase each : cases) {
+            checkDuplicatedTestCase(result, each);
             result.put(each.getSqlCaseId(), each);
         }
         return result;
     }
+    
+    private void checkDuplicatedTestCase(final Map<String, SQLParserTestCase> sources, final SQLParserTestCase target) {
+        Preconditions.checkState(!sources.containsKey(target.getSqlCaseId()), "Find duplicated SQL Case ID: %s.", target.getSqlCaseId());
+    }
+    
+    private void checkDuplicatedTestCases(final Map<String, SQLParserTestCase> source, final Map<String, SQLParserTestCase> target) {
+        Collection<String> caseIds = new HashSet<>(source.keySet());
+        caseIds.retainAll(target.keySet());
+        Preconditions.checkState(caseIds.isEmpty(), "Find duplicated SQL Case IDs: %s.", caseIds);
+    }
 }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/loader/SQLParserTestCaseLoaderCallback.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/loader/SQLParserTestCaseLoaderCallback.java
index 0b0e9229f9f..55ae3875ed3 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/loader/SQLParserTestCaseLoaderCallback.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/loader/SQLParserTestCaseLoaderCallback.java
@@ -64,7 +64,7 @@ public final class SQLParserTestCaseLoaderCallback implements CaseLoaderCallback
     }
     
     private Map<String, SQLParserTestCase> createSQLParserTestCases(final InputStream inputStream) throws JAXBException {
-        return ((RootSQLParserTestCases) JAXBContext.newInstance(RootSQLParserTestCases.class).createUnmarshaller().unmarshal(inputStream)).getAllSQLParserTestCases();
+        return ((RootSQLParserTestCases) JAXBContext.newInstance(RootSQLParserTestCases.class).createUnmarshaller().unmarshal(inputStream)).getAllCases();
     }
     
     private void checkDuplicate(final Map<String, SQLParserTestCase> existedSQLParserTestCases, final Map<String, SQLParserTestCase> newSQLParserTestCases) {
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/sql/type/impl/LiteralSQLBuilder.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/sql/type/impl/LiteralSQLBuilder.java
index 7b32c1133b7..a1c8e79f1e1 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/sql/type/impl/LiteralSQLBuilder.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/sql/type/impl/LiteralSQLBuilder.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.test.sql.parser.internal.cases.sql.type.impl;
 
+import org.apache.shardingsphere.sql.parser.sql.common.enums.ParameterMarkerType;
 import org.apache.shardingsphere.test.sql.parser.internal.cases.sql.type.CaseTypedSQLBuilder;
 
 import java.util.List;
@@ -31,7 +32,7 @@ public final class LiteralSQLBuilder implements CaseTypedSQLBuilder {
         StringBuilder result = new StringBuilder(sql);
         int currentCharIndex = 0;
         for (Object each : params) {
-            currentCharIndex = result.indexOf("?", currentCharIndex);
+            currentCharIndex = result.indexOf(ParameterMarkerType.QUESTION.getMarker(), currentCharIndex);
             result.replace(currentCharIndex, ++currentCharIndex, each.toString());
         }
         return result.toString();