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