You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by yx...@apache.org on 2022/11/26 03:30:12 UTC

[shardingsphere] branch master updated: Add SQLParserTestCases (#22429)

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

yx9o 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 9989bdc353c Add SQLParserTestCases (#22429)
9989bdc353c is described below

commit 9989bdc353c1bf13462231ccac75ccacd2528d22
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat Nov 26 11:30:06 2022 +0800

    Add SQLParserTestCases (#22429)
---
 .../SQLNodeConverterEngineParameterizedTest.java   |  8 +--
 ...egistryFactory.java => SQLParserTestCases.java} | 28 ++++----
 .../SQLParserTestCasesLoader.java}                 | 55 +++++++---------
 .../registry/SQLParserTestCasesRegistry.java       | 76 ++++------------------
 .../engine/InternalSQLParserParameterizedIT.java   | 10 +--
 5 files changed, 58 insertions(+), 119 deletions(-)

diff --git a/test/optimize/src/test/java/org/apache/shardingsphere/infra/federation/converter/parameterized/engine/SQLNodeConverterEngineParameterizedTest.java b/test/optimize/src/test/java/org/apache/shardingsphere/infra/federation/converter/parameterized/engine/SQLNodeConverterEngineParameterizedTest.java
index 188adb0d2ce..455a7d12efd 100644
--- a/test/optimize/src/test/java/org/apache/shardingsphere/infra/federation/converter/parameterized/engine/SQLNodeConverterEngineParameterizedTest.java
+++ b/test/optimize/src/test/java/org/apache/shardingsphere/infra/federation/converter/parameterized/engine/SQLNodeConverterEngineParameterizedTest.java
@@ -37,8 +37,8 @@ import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.sqlfederation.optimizer.context.parser.dialect.OptimizerSQLDialectBuilderFactory;
 import org.apache.shardingsphere.sqlfederation.optimizer.converter.SQLNodeConverterEngine;
+import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.SQLParserTestCases;
 import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.registry.SQLParserTestCasesRegistry;
-import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.registry.SQLParserTestCasesRegistryFactory;
 import org.apache.shardingsphere.test.sql.parser.internal.cases.sql.SQLCaseType;
 import org.apache.shardingsphere.test.sql.parser.internal.cases.sql.SQLCases;
 import org.apache.shardingsphere.test.sql.parser.internal.cases.sql.registry.SQLCasesRegistry;
@@ -62,7 +62,7 @@ public final class SQLNodeConverterEngineParameterizedTest {
     
     private static final SQLCases SQL_CASES = SQLCasesRegistry.getInstance().getCases();
     
-    private static final SQLParserTestCasesRegistry SQL_PARSER_TEST_CASES_REGISTRY = SQLParserTestCasesRegistryFactory.getInstance().getRegistry();
+    private static final SQLParserTestCases SQL_PARSER_TEST_CASES = SQLParserTestCasesRegistry.getInstance().getCases();
     
     private static final String SELECT_STATEMENT_PREFIX = "SELECT";
     
@@ -170,7 +170,7 @@ public final class SQLNodeConverterEngineParameterizedTest {
     }
     
     private static boolean isPlaceholderWithoutParameter(final Object[] sqlTestParam) {
-        return SQLCaseType.Placeholder == sqlTestParam[2] && SQL_PARSER_TEST_CASES_REGISTRY.get(sqlTestParam[0].toString()).getParameters().isEmpty();
+        return SQLCaseType.Placeholder == sqlTestParam[2] && SQL_PARSER_TEST_CASES.get(sqlTestParam[0].toString()).getParameters().isEmpty();
     }
     
     private static boolean isSupportedSQLCase(final Object[] sqlTestParam) {
@@ -181,7 +181,7 @@ public final class SQLNodeConverterEngineParameterizedTest {
     @Test
     public void assertConvert() {
         String databaseType = "H2".equals(this.databaseType) ? "MySQL" : this.databaseType;
-        String sql = SQL_CASES.getSQL(sqlCaseId, sqlCaseType, SQL_PARSER_TEST_CASES_REGISTRY.get(sqlCaseId).getParameters());
+        String sql = SQL_CASES.getSQL(sqlCaseId, sqlCaseType, SQL_PARSER_TEST_CASES.get(sqlCaseId).getParameters());
         SQLStatement sqlStatement = parseSQLStatement(databaseType, sql);
         SqlNode actual = SQLNodeConverterEngine.convert(sqlStatement);
         SqlNode expected = parseSqlNode(databaseType, sql);
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/registry/SQLParserTestCasesRegistryFactory.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/SQLParserTestCases.java
similarity index 58%
rename from test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/registry/SQLParserTestCasesRegistryFactory.java
rename to test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/SQLParserTestCases.java
index e75df20836e..bd913af8897 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/registry/SQLParserTestCasesRegistryFactory.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/SQLParserTestCases.java
@@ -15,26 +15,30 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.internal.cases.parser.registry;
+package org.apache.shardingsphere.test.sql.parser.internal.cases.parser;
 
-import lombok.Getter;
+import com.google.common.base.Preconditions;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
+
+import java.util.Map;
 
 /**
- * SQL parser test cases registry factory.
+ * SQL parser test cases.
  */
-public final class SQLParserTestCasesRegistryFactory {
-    
-    private static final SQLParserTestCasesRegistryFactory INSTANCE = new SQLParserTestCasesRegistryFactory();
+@RequiredArgsConstructor
+public final class SQLParserTestCases {
     
-    @Getter
-    private final SQLParserTestCasesRegistry registry = new SQLParserTestCasesRegistry("case/");
+    private final Map<String, SQLParserTestCase> cases;
     
     /**
-     * Get singleton instance.
+     * Get SQL parser test case.
      *
-     * @return singleton instance
+     * @param caseId SQL case ID
+     * @return got case
      */
-    public static SQLParserTestCasesRegistryFactory getInstance() {
-        return INSTANCE;
+    public SQLParserTestCase get(final String caseId) {
+        Preconditions.checkState(cases.containsKey(caseId), "Can not find SQL of ID: %s.", caseId);
+        return cases.get(caseId);
     }
 }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/registry/SQLParserTestCasesRegistry.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/load/SQLParserTestCasesLoader.java
similarity index 63%
copy from test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/registry/SQLParserTestCasesRegistry.java
copy to test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/load/SQLParserTestCasesLoader.java
index 541535e0956..bb8f97b04c4 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/registry/SQLParserTestCasesRegistry.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/load/SQLParserTestCasesLoader.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.internal.cases.parser.registry;
+package org.apache.shardingsphere.test.sql.parser.internal.cases.parser.load;
 
 import com.google.common.base.Preconditions;
 import lombok.SneakyThrows;
@@ -35,39 +35,39 @@ import java.util.HashSet;
 import java.util.Map;
 
 /**
- * SQL parser test cases registry.
+ * SQL parser test cases loader.
  */
-public final class SQLParserTestCasesRegistry {
-    
-    private final Map<String, SQLParserTestCase> sqlParserTestCases;
-    
-    public SQLParserTestCasesRegistry(final String rootDirectory) {
-        sqlParserTestCases = load(rootDirectory);
-    }
+public final class SQLParserTestCasesLoader {
     
+    /**
+     * Load SQL parser test cases.
+     * 
+     * @param rootDirection SQL parser test cases root direction
+     * @return loaded SQL parser test cases
+     */
     @SneakyThrows({JAXBException.class, IOException.class})
-    private Map<String, SQLParserTestCase> load(final String directory) {
-        File file = new File(SQLParserTestCasesRegistry.class.getProtectionDomain().getCodeSource().getLocation().getPath());
-        return file.isFile() ? loadFromJar(directory, file) : loadFromTargetDirectory(directory);
+    public Map<String, SQLParserTestCase> load(final String rootDirection) {
+        File file = new File(SQLParserTestCasesLoader.class.getProtectionDomain().getCodeSource().getLocation().getPath());
+        return file.isFile() ? loadFromJar(rootDirection, file) : loadFromDirectory(rootDirection);
     }
     
     private Map<String, SQLParserTestCase> loadFromJar(final String directory, final File file) throws JAXBException {
         Map<String, SQLParserTestCase> result = new HashMap<>(Short.MAX_VALUE, 1);
         for (String each : SQLCaseFileLoader.loadFileNamesFromJar(file, directory)) {
-            Map<String, SQLParserTestCase> sqlParserTestCaseMap = createSQLParserTestCases(SQLParserTestCasesRegistry.class.getClassLoader().getResourceAsStream(each));
-            checkDuplicate(result, sqlParserTestCaseMap);
-            result.putAll(sqlParserTestCaseMap);
+            Map<String, SQLParserTestCase> sqlParserTestCases = createSQLParserTestCases(SQLParserTestCasesLoader.class.getClassLoader().getResourceAsStream(each));
+            checkDuplicate(result, sqlParserTestCases);
+            result.putAll(sqlParserTestCases);
         }
         return result;
     }
     
-    private Map<String, SQLParserTestCase> loadFromTargetDirectory(final String directory) throws IOException, JAXBException {
+    private Map<String, SQLParserTestCase> loadFromDirectory(final String directory) throws IOException, JAXBException {
         Map<String, SQLParserTestCase> result = new HashMap<>(Short.MAX_VALUE, 1);
         for (File each : SQLCaseFileLoader.loadFilesFromDirectory(directory)) {
             try (FileInputStream fileInputStream = new FileInputStream(each)) {
-                Map<String, SQLParserTestCase> sqlParserTestCaseMap = createSQLParserTestCases(fileInputStream);
-                checkDuplicate(result, sqlParserTestCaseMap);
-                result.putAll(sqlParserTestCaseMap);
+                Map<String, SQLParserTestCase> sqlParserTestCases = createSQLParserTestCases(fileInputStream);
+                checkDuplicate(result, sqlParserTestCases);
+                result.putAll(sqlParserTestCases);
             }
         }
         return result;
@@ -77,20 +77,9 @@ public final class SQLParserTestCasesRegistry {
         return ((RootSQLParserTestCases) JAXBContext.newInstance(RootSQLParserTestCases.class).createUnmarshaller().unmarshal(inputStream)).getAllSQLParserTestCases();
     }
     
-    private void checkDuplicate(final Map<String, SQLParserTestCase> existedSQLParserTestCaseMap, final Map<String, SQLParserTestCase> newSQLParserTestCaseMap) {
-        Collection<String> existedSQLParserTestCaseIds = new HashSet<>(existedSQLParserTestCaseMap.keySet());
-        existedSQLParserTestCaseIds.retainAll(newSQLParserTestCaseMap.keySet());
+    private void checkDuplicate(final Map<String, SQLParserTestCase> existedSQLParserTestCases, final Map<String, SQLParserTestCase> newSQLParserTestCases) {
+        Collection<String> existedSQLParserTestCaseIds = new HashSet<>(existedSQLParserTestCases.keySet());
+        existedSQLParserTestCaseIds.retainAll(newSQLParserTestCases.keySet());
         Preconditions.checkState(existedSQLParserTestCaseIds.isEmpty(), "Find duplicated SQL Case IDs: %s", existedSQLParserTestCaseIds);
     }
-    
-    /**
-     * Get SQL parser test case.
-     * 
-     * @param sqlCaseId SQL case ID
-     * @return SQL parser test case
-     */
-    public SQLParserTestCase get(final String sqlCaseId) {
-        Preconditions.checkState(sqlParserTestCases.containsKey(sqlCaseId), "Can not find SQL of ID: %s", sqlCaseId);
-        return sqlParserTestCases.get(sqlCaseId);
-    }
 }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/registry/SQLParserTestCasesRegistry.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/registry/SQLParserTestCasesRegistry.java
index 541535e0956..ed3ccb70e7d 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/registry/SQLParserTestCasesRegistry.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/registry/SQLParserTestCasesRegistry.java
@@ -17,80 +17,26 @@
 
 package org.apache.shardingsphere.test.sql.parser.internal.cases.parser.registry;
 
-import com.google.common.base.Preconditions;
-import lombok.SneakyThrows;
-import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.jaxb.RootSQLParserTestCases;
-import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
-import org.apache.shardingsphere.test.sql.parser.internal.cases.sql.loader.SQLCaseFileLoader;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
+import lombok.Getter;
+import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.SQLParserTestCases;
+import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.load.SQLParserTestCasesLoader;
 
 /**
  * SQL parser test cases registry.
  */
+@Getter
 public final class SQLParserTestCasesRegistry {
     
-    private final Map<String, SQLParserTestCase> sqlParserTestCases;
-    
-    public SQLParserTestCasesRegistry(final String rootDirectory) {
-        sqlParserTestCases = load(rootDirectory);
-    }
-    
-    @SneakyThrows({JAXBException.class, IOException.class})
-    private Map<String, SQLParserTestCase> load(final String directory) {
-        File file = new File(SQLParserTestCasesRegistry.class.getProtectionDomain().getCodeSource().getLocation().getPath());
-        return file.isFile() ? loadFromJar(directory, file) : loadFromTargetDirectory(directory);
-    }
-    
-    private Map<String, SQLParserTestCase> loadFromJar(final String directory, final File file) throws JAXBException {
-        Map<String, SQLParserTestCase> result = new HashMap<>(Short.MAX_VALUE, 1);
-        for (String each : SQLCaseFileLoader.loadFileNamesFromJar(file, directory)) {
-            Map<String, SQLParserTestCase> sqlParserTestCaseMap = createSQLParserTestCases(SQLParserTestCasesRegistry.class.getClassLoader().getResourceAsStream(each));
-            checkDuplicate(result, sqlParserTestCaseMap);
-            result.putAll(sqlParserTestCaseMap);
-        }
-        return result;
-    }
-    
-    private Map<String, SQLParserTestCase> loadFromTargetDirectory(final String directory) throws IOException, JAXBException {
-        Map<String, SQLParserTestCase> result = new HashMap<>(Short.MAX_VALUE, 1);
-        for (File each : SQLCaseFileLoader.loadFilesFromDirectory(directory)) {
-            try (FileInputStream fileInputStream = new FileInputStream(each)) {
-                Map<String, SQLParserTestCase> sqlParserTestCaseMap = createSQLParserTestCases(fileInputStream);
-                checkDuplicate(result, sqlParserTestCaseMap);
-                result.putAll(sqlParserTestCaseMap);
-            }
-        }
-        return result;
-    }
+    private static final SQLParserTestCasesRegistry INSTANCE = new SQLParserTestCasesRegistry();
     
-    private Map<String, SQLParserTestCase> createSQLParserTestCases(final InputStream inputStream) throws JAXBException {
-        return ((RootSQLParserTestCases) JAXBContext.newInstance(RootSQLParserTestCases.class).createUnmarshaller().unmarshal(inputStream)).getAllSQLParserTestCases();
-    }
-    
-    private void checkDuplicate(final Map<String, SQLParserTestCase> existedSQLParserTestCaseMap, final Map<String, SQLParserTestCase> newSQLParserTestCaseMap) {
-        Collection<String> existedSQLParserTestCaseIds = new HashSet<>(existedSQLParserTestCaseMap.keySet());
-        existedSQLParserTestCaseIds.retainAll(newSQLParserTestCaseMap.keySet());
-        Preconditions.checkState(existedSQLParserTestCaseIds.isEmpty(), "Find duplicated SQL Case IDs: %s", existedSQLParserTestCaseIds);
-    }
+    private final SQLParserTestCases cases = new SQLParserTestCases(new SQLParserTestCasesLoader().load("case/"));
     
     /**
-     * Get SQL parser test case.
-     * 
-     * @param sqlCaseId SQL case ID
-     * @return SQL parser test case
+     * Get instance.
+     *
+     * @return got instance
      */
-    public SQLParserTestCase get(final String sqlCaseId) {
-        Preconditions.checkState(sqlParserTestCases.containsKey(sqlCaseId), "Can not find SQL of ID: %s", sqlCaseId);
-        return sqlParserTestCases.get(sqlCaseId);
+    public static SQLParserTestCasesRegistry getInstance() {
+        return INSTANCE;
     }
 }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/engine/InternalSQLParserParameterizedIT.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/engine/InternalSQLParserParameterizedIT.java
index 1866ded2482..2060670725f 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/engine/InternalSQLParserParameterizedIT.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/engine/InternalSQLParserParameterizedIT.java
@@ -25,9 +25,9 @@ import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.test.sql.parser.internal.asserts.SQLCaseAssertContext;
 import org.apache.shardingsphere.test.sql.parser.internal.asserts.statement.SQLStatementAssert;
+import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.SQLParserTestCases;
 import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.registry.SQLParserTestCasesRegistry;
-import org.apache.shardingsphere.test.sql.parser.internal.cases.parser.registry.SQLParserTestCasesRegistryFactory;
 import org.apache.shardingsphere.test.sql.parser.internal.cases.sql.SQLCaseType;
 import org.apache.shardingsphere.test.sql.parser.internal.cases.sql.SQLCases;
 import org.apache.shardingsphere.test.sql.parser.internal.cases.sql.registry.SQLCasesRegistry;
@@ -43,7 +43,7 @@ public abstract class InternalSQLParserParameterizedIT {
     
     private static final SQLCases SQL_CASES = SQLCasesRegistry.getInstance().getCases();
     
-    private static final SQLParserTestCasesRegistry SQL_PARSER_TEST_CASES_REGISTRY = SQLParserTestCasesRegistryFactory.getInstance().getRegistry();
+    private static final SQLParserTestCases SQL_PARSER_TEST_CASES = SQLParserTestCasesRegistry.getInstance().getCases();
     
     private final String sqlCaseId;
     
@@ -62,14 +62,14 @@ public abstract class InternalSQLParserParameterizedIT {
     }
     
     private static boolean isPlaceholderWithoutParameter(final Object[] sqlTestParam) {
-        return SQLCaseType.Placeholder == sqlTestParam[2] && SQL_PARSER_TEST_CASES_REGISTRY.get(sqlTestParam[0].toString()).getParameters().isEmpty();
+        return SQLCaseType.Placeholder == sqlTestParam[2] && SQL_PARSER_TEST_CASES.get(sqlTestParam[0].toString()).getParameters().isEmpty();
     }
     
     @Test
     public final void assertSupportedSQL() {
-        String sql = SQL_CASES.getSQL(sqlCaseId, sqlCaseType, SQL_PARSER_TEST_CASES_REGISTRY.get(sqlCaseId).getParameters());
+        String sql = SQL_CASES.getSQL(sqlCaseId, sqlCaseType, SQL_PARSER_TEST_CASES.get(sqlCaseId).getParameters());
         SQLStatement actual = parseSQLStatement("H2".equals(databaseType) ? "MySQL" : databaseType, sql);
-        SQLParserTestCase expected = SQL_PARSER_TEST_CASES_REGISTRY.get(sqlCaseId);
+        SQLParserTestCase expected = SQL_PARSER_TEST_CASES.get(sqlCaseId);
         SQLStatementAssert.assertIs(new SQLCaseAssertContext(sqlCaseId, sql, expected.getParameters(), sqlCaseType), actual, expected);
     }