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);
}