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 <[email protected]>
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();