This is an automated email from the ASF dual-hosted git repository.
jianglongtao 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 d6c047f9c73 Use DatabaseType class instead of String (#22578)
d6c047f9c73 is described below
commit d6c047f9c73af87cc0d7f63999c8f792ddabbbba
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Dec 2 00:00:23 2022 +0800
Use DatabaseType class instead of String (#22578)
---
.../ExternalMySQLParserParameterizedIT.java | 3 +-
.../ExternalPostgreSQLParserParameterizedIT.java | 3 +-
.../sql92/fixture/SQL92FixtureDatabaseType.java | 61 ++++++++++++++++++++++
...shardingsphere.infra.database.type.DatabaseType | 18 +++++++
.../SQLNodeConverterEngineParameterizedTest.java | 8 +--
.../sql/parser/SQLParserParameterizedArray.java | 3 +-
.../engine/ExternalSQLParserParameterizedIT.java | 7 +--
.../param/ExternalSQLParserParameterizedArray.java | 5 +-
.../sql/parser/external/loader/SQLCaseLoader.java | 5 +-
.../external/result/SQLParseResultReporter.java | 4 +-
.../result/SQLParseResultReporterCreator.java | 3 +-
.../result/type/csv/CsvSQLParseResultReporter.java | 9 ++--
.../type/csv/CsvSQLParseResultReporterCreator.java | 3 +-
.../result/type/log/LogSQLParseResultReporter.java | 5 +-
.../type/log/LogSQLParseResultReporterCreator.java | 3 +-
.../sql/parser/internal/cases/sql/SQLCases.java | 23 +++++---
.../engine/InternalSQLParserParameterizedIT.java | 10 ++--
...nternalUnsupportedSQLParserParameterizedIT.java | 9 ++--
.../param/InternalSQLParserParameterizedArray.java | 5 +-
.../fixture/DistSQLFixtureDatabaseType.java | 61 ++++++++++++++++++++++
...shardingsphere.infra.database.type.DatabaseType | 18 +++++++
21 files changed, 229 insertions(+), 37 deletions(-)
diff --git
a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/external/ExternalMySQLParserParameterizedIT.java
b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/external/ExternalMySQLParserParameterizedIT.java
index aabeef45bba..a97b349ac2d 100644
---
a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/external/ExternalMySQLParserParameterizedIT.java
+++
b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/external/ExternalMySQLParserParameterizedIT.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.sql.parser.mysql.external;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
import org.apache.shardingsphere.test.runner.ParallelParameterized;
import
org.apache.shardingsphere.test.sql.parser.external.engine.ExternalSQLParserParameterizedIT;
import
org.apache.shardingsphere.test.sql.parser.external.engine.param.ExternalSQLParserParameterizedArray;
@@ -39,6 +40,6 @@ public final class ExternalMySQLParserParameterizedIT extends
ExternalSQLParserP
public static Collection<ExternalSQLParserParameterizedArray>
getTestParameters() {
String caseURL =
"https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t";
String resultURL =
"https://github.com/mysql/mysql-server/tree/8.0/mysql-test/r";
- return new SQLCaseLoader(new
GitHubSQLCaseLoadStrategy()).load(URI.create(caseURL), URI.create(resultURL),
"MySQL", "CSV");
+ return new SQLCaseLoader(new
GitHubSQLCaseLoadStrategy()).load(URI.create(caseURL), URI.create(resultURL),
DatabaseTypeFactory.getInstance("MySQL"), "CSV");
}
}
diff --git
a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/external/ExternalPostgreSQLParserParameterizedIT.java
b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/external/ExternalPostgreSQLParserParameterizedIT.java
index 9dae91eb08c..6f552b5f446 100644
---
a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/external/ExternalPostgreSQLParserParameterizedIT.java
+++
b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/external/ExternalPostgreSQLParserParameterizedIT.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.sql.parser.postgresql.external;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
import org.apache.shardingsphere.test.runner.ParallelParameterized;
import
org.apache.shardingsphere.test.sql.parser.external.engine.ExternalSQLParserParameterizedIT;
import
org.apache.shardingsphere.test.sql.parser.external.engine.param.ExternalSQLParserParameterizedArray;
@@ -39,6 +40,6 @@ public final class ExternalPostgreSQLParserParameterizedIT
extends ExternalSQLPa
public static Collection<ExternalSQLParserParameterizedArray>
getTestParameters() {
String caseURL =
"https://github.com/postgres/postgres/tree/master/src/test/regress/sql";
String resultURL =
"https://github.com/postgres/postgres/tree/master/src/test/regress/expected";
- return new SQLCaseLoader(new
GitHubSQLCaseLoadStrategy()).load(URI.create(caseURL), URI.create(resultURL),
"PostgreSQL", "CSV");
+ return new SQLCaseLoader(new
GitHubSQLCaseLoadStrategy()).load(URI.create(caseURL), URI.create(resultURL),
DatabaseTypeFactory.getInstance("PostgreSQL"), "CSV");
}
}
diff --git
a/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/sql/parser/sql92/fixture/SQL92FixtureDatabaseType.java
b/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/sql/parser/sql92/fixture/SQL92FixtureDatabaseType.java
new file mode 100644
index 00000000000..fa532cefee4
--- /dev/null
+++
b/sql-parser/dialect/sql92/src/test/java/org/apache/shardingsphere/sql/parser/sql92/fixture/SQL92FixtureDatabaseType.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.sql.parser.sql92.fixture;
+
+import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.sql.parser.sql.common.enums.QuoteCharacter;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+
+import static org.mockito.Mockito.mock;
+
+public final class SQL92FixtureDatabaseType implements DatabaseType {
+
+ @Override
+ public QuoteCharacter getQuoteCharacter() {
+ return QuoteCharacter.NONE;
+ }
+
+ @Override
+ public Collection<String> getJdbcUrlPrefixes() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public DataSourceMetaData getDataSourceMetaData(final String url, final
String username) {
+ return mock(DataSourceMetaData.class);
+ }
+
+ @Override
+ public Map<String, Collection<String>> getSystemDatabaseSchemaMap() {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public Collection<String> getSystemSchemas() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public String getType() {
+ return "SQL92";
+ }
+}
diff --git
a/sql-parser/dialect/sql92/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.database.type.DatabaseType
b/sql-parser/dialect/sql92/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.database.type.DatabaseType
new file mode 100644
index 00000000000..1f9eadd77cf
--- /dev/null
+++
b/sql-parser/dialect/sql92/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.database.type.DatabaseType
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.shardingsphere.sql.parser.sql92.fixture.SQL92FixtureDatabaseType
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 387c6fa6d98..e6885fed3e3 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
@@ -28,6 +28,7 @@ import org.apache.calcite.sql.parser.SqlParser;
import org.apache.calcite.sql.parser.SqlParser.Config;
import org.apache.calcite.sql.parser.impl.SqlParserImpl;
import org.apache.calcite.util.Litmus;
+import org.apache.shardingsphere.infra.database.type.BranchDatabaseType;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
@@ -53,6 +54,7 @@ import java.util.HashSet;
import java.util.LinkedList;
import java.util.Properties;
import java.util.Set;
+import java.util.stream.Collectors;
import static org.junit.Assert.assertTrue;
@@ -151,7 +153,7 @@ public final class SQLNodeConverterEngineParameterizedTest {
private final String sqlCaseId;
- private final String databaseType;
+ private final DatabaseType databaseType;
private final SQLCaseType sqlCaseType;
@@ -168,7 +170,7 @@ public final class SQLNodeConverterEngineParameterizedTest {
private static Collection<InternalSQLParserParameterizedArray>
getTestParameters(final String... databaseTypes) {
Collection<InternalSQLParserParameterizedArray> result = new
LinkedList<>();
- for (InternalSQLParserParameterizedArray each :
SQL_CASES.generateTestParameters(Arrays.asList(databaseTypes))) {
+ for (InternalSQLParserParameterizedArray each :
SQL_CASES.generateTestParameters(Arrays.stream(databaseTypes).map(DatabaseTypeFactory::getInstance).collect(Collectors.toSet())))
{
if (!isPlaceholderWithoutParameter(each) &&
isSupportedSQLCase(each)) {
result.add(each);
}
@@ -186,7 +188,7 @@ public final class SQLNodeConverterEngineParameterizedTest {
@Test
public void assertConvert() {
- String databaseType = "H2".equals(this.databaseType) ? "MySQL" :
this.databaseType;
+ String databaseType = (this.databaseType instanceof BranchDatabaseType
? ((BranchDatabaseType) this.databaseType).getTrunkDatabaseType() :
this.databaseType).getType();
String sql = SQL_CASES.getSQL(sqlCaseId, sqlCaseType,
SQL_PARSER_TEST_CASES.get(sqlCaseId).getParameters());
SQLStatement sqlStatement = parseSQLStatement(databaseType, sql);
SqlNode actual = SQLNodeConverterEngine.convert(sqlStatement);
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/SQLParserParameterizedArray.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/SQLParserParameterizedArray.java
index 2da1184adff..7732a698a89 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/SQLParserParameterizedArray.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/SQLParserParameterizedArray.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.test.sql.parser;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.test.runner.param.ParameterizedArray;
/**
@@ -36,5 +37,5 @@ public interface SQLParserParameterizedArray extends
ParameterizedArray {
*
* @return database type
*/
- String getDatabaseType();
+ DatabaseType getDatabaseType();
}
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/engine/ExternalSQLParserParameterizedIT.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/engine/ExternalSQLParserParameterizedIT.java
index 3974c069b5f..f6357c32699 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/engine/ExternalSQLParserParameterizedIT.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/engine/ExternalSQLParserParameterizedIT.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.test.sql.parser.external.engine;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.util.exception.external.ShardingSphereExternalException;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
@@ -35,7 +36,7 @@ public abstract class ExternalSQLParserParameterizedIT {
private final String sql;
- private final String databaseType;
+ private final DatabaseType databaseType;
private final SQLParseResultReporter resultReporter;
@@ -50,8 +51,8 @@ public abstract class ExternalSQLParserParameterizedIT {
public final void assertParseSQL() {
boolean isSuccess = true;
try {
- ParseASTNode parseASTNode = new SQLParserEngine(databaseType, new
CacheOption(128, 1024L)).parse(sql, false);
- new SQLVisitorEngine(databaseType, "STATEMENT", true, new
Properties()).visit(parseASTNode);
+ ParseASTNode parseASTNode = new
SQLParserEngine(databaseType.getType(), new CacheOption(128, 1024L)).parse(sql,
false);
+ new SQLVisitorEngine(databaseType.getType(), "STATEMENT", true,
new Properties()).visit(parseASTNode);
} catch (final ShardingSphereExternalException | ClassCastException |
NullPointerException | IllegalArgumentException | IndexOutOfBoundsException
ignore) {
isSuccess = false;
}
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/engine/param/ExternalSQLParserParameterizedArray.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/engine/param/ExternalSQLParserParameterizedArray.java
index 8c8dd26e567..d4fecf3119c 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/engine/param/ExternalSQLParserParameterizedArray.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/engine/param/ExternalSQLParserParameterizedArray.java
@@ -19,6 +19,7 @@ package
org.apache.shardingsphere.test.sql.parser.external.engine.param;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.test.sql.parser.SQLParserParameterizedArray;
/**
@@ -30,7 +31,7 @@ public final class ExternalSQLParserParameterizedArray
implements SQLParserParam
private final String sqlCaseId;
- private final String databaseType;
+ private final DatabaseType databaseType;
private final String sql;
@@ -38,6 +39,6 @@ public final class ExternalSQLParserParameterizedArray
implements SQLParserParam
@Override
public String toString() {
- return String.format("%s (%s) -> %s", sqlCaseId, databaseType, sql);
+ return String.format("%s (%s) -> %s", sqlCaseId,
databaseType.getType(), sql);
}
}
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/loader/SQLCaseLoader.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/loader/SQLCaseLoader.java
index 8fbf63a3091..7c98eb49ed7 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/loader/SQLCaseLoader.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/loader/SQLCaseLoader.java
@@ -19,6 +19,7 @@ package
org.apache.shardingsphere.test.sql.parser.external.loader;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.test.sql.parser.external.engine.param.ExternalSQLParserParameterizedArray;
import
org.apache.shardingsphere.test.sql.parser.external.env.SQLParserExternalITEnvironment;
import
org.apache.shardingsphere.test.sql.parser.external.loader.strategy.SQLCaseLoadStrategy;
@@ -54,7 +55,7 @@ public final class SQLCaseLoader {
*
* @return loaded SQL cases
*/
- public Collection<ExternalSQLParserParameterizedArray> load(final URI
sqlCaseURI, final URI resultURI, final String databaseType, final String
reportType) {
+ public Collection<ExternalSQLParserParameterizedArray> load(final URI
sqlCaseURI, final URI resultURI, final DatabaseType databaseType, final String
reportType) {
if
(!SQLParserExternalITEnvironment.getInstance().isSqlParserITEnabled()) {
return Collections.emptyList();
}
@@ -85,7 +86,7 @@ public final class SQLCaseLoader {
}
private Collection<ExternalSQLParserParameterizedArray>
createSQLCases(final String sqlCaseFileName,
-
final String sqlCaseFileContent, final String resultFileContent, final String
databaseType, final String reportType) {
+
final String sqlCaseFileContent, final String resultFileContent, final
DatabaseType databaseType, final String reportType) {
Collection<ExternalSQLParserParameterizedArray> result = new
LinkedList<>();
String[] rawCaseLines = sqlCaseFileContent.split("\n");
String[] rawResultLines = resultFileContent.split("\n");
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/SQLParseResultReporter.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/SQLParseResultReporter.java
index daca36b1157..c6d66c71d86 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/SQLParseResultReporter.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/SQLParseResultReporter.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.test.sql.parser.external.result;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+
/**
* SQL parse result reporter.
*/
@@ -30,5 +32,5 @@ public interface SQLParseResultReporter {
* @param sql SQL
* @param isSuccess whether success
*/
- void printResult(String sqlCaseId, String databaseType, boolean isSuccess,
String sql);
+ void printResult(String sqlCaseId, DatabaseType databaseType, boolean
isSuccess, String sql);
}
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/SQLParseResultReporterCreator.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/SQLParseResultReporterCreator.java
index f0e62efbf7c..d42db055ffe 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/SQLParseResultReporterCreator.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/SQLParseResultReporterCreator.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.test.sql.parser.external.result;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPI;
/**
@@ -30,5 +31,5 @@ public interface SQLParseResultReporterCreator extends
TypedSPI {
* @param databaseType database type
* @return created SQL parse result reporter
*/
- SQLParseResultReporter create(String databaseType);
+ SQLParseResultReporter create(DatabaseType databaseType);
}
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/csv/CsvSQLParseResultReporter.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/csv/CsvSQLParseResultReporter.java
index b1d62ab86d1..1eec8a2fb9d 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/csv/CsvSQLParseResultReporter.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/csv/CsvSQLParseResultReporter.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.test.sql.parser.external.result.type.csv;
import lombok.SneakyThrows;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.test.sql.parser.external.env.SQLParserExternalITEnvironment;
import
org.apache.shardingsphere.test.sql.parser.external.result.SQLParseResultReporter;
@@ -34,8 +35,8 @@ public final class CsvSQLParseResultReporter implements
SQLParseResultReporter {
private final CSVPrinter printer;
@SneakyThrows
- public CsvSQLParseResultReporter(final String databaseType) {
- File csvFile = new
File(SQLParserExternalITEnvironment.getInstance().getResultPath() +
databaseType + "-result.csv");
+ public CsvSQLParseResultReporter(final DatabaseType databaseType) {
+ File csvFile = new
File(SQLParserExternalITEnvironment.getInstance().getResultPath() +
databaseType.getType() + "-result.csv");
printHeader(csvFile);
printer = new CSVPrinter(new FileWriter(csvFile, true),
CSVFormat.DEFAULT.builder().setSkipHeaderRecord(true).build());
}
@@ -53,8 +54,8 @@ public final class CsvSQLParseResultReporter implements
SQLParseResultReporter {
@SneakyThrows
@Override
- public void printResult(final String sqlCaseId, final String databaseType,
final boolean isSuccess, final String sql) {
- printer.printRecord(sqlCaseId, databaseType, isSuccess ? "success" :
"failed", sql);
+ public void printResult(final String sqlCaseId, final DatabaseType
databaseType, final boolean isSuccess, final String sql) {
+ printer.printRecord(sqlCaseId, databaseType.getType(), isSuccess ?
"success" : "failed", sql);
printer.flush();
}
}
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/csv/CsvSQLParseResultReporterCreator.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/csv/CsvSQLParseResultReporterCreator.java
index 9b940a5b7b7..13171548df3 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/csv/CsvSQLParseResultReporterCreator.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/csv/CsvSQLParseResultReporterCreator.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.test.sql.parser.external.result.type.csv;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.test.sql.parser.external.result.SQLParseResultReporter;
import
org.apache.shardingsphere.test.sql.parser.external.result.SQLParseResultReporterCreator;
@@ -26,7 +27,7 @@ import
org.apache.shardingsphere.test.sql.parser.external.result.SQLParseResultR
public final class CsvSQLParseResultReporterCreator implements
SQLParseResultReporterCreator {
@Override
- public SQLParseResultReporter create(final String databaseType) {
+ public SQLParseResultReporter create(final DatabaseType databaseType) {
return new CsvSQLParseResultReporter(databaseType);
}
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/log/LogSQLParseResultReporter.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/log/LogSQLParseResultReporter.java
index f6fb5f9e720..2228e053fee 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/log/LogSQLParseResultReporter.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/log/LogSQLParseResultReporter.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.test.sql.parser.external.result.type.log;
import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.test.sql.parser.external.result.SQLParseResultReporter;
/**
@@ -27,9 +28,9 @@ import
org.apache.shardingsphere.test.sql.parser.external.result.SQLParseResultR
public final class LogSQLParseResultReporter implements SQLParseResultReporter
{
@Override
- public void printResult(final String sqlCaseId, final String databaseType,
final boolean isSuccess, final String sql) {
+ public void printResult(final String sqlCaseId, final DatabaseType
databaseType, final boolean isSuccess, final String sql) {
if (!isSuccess) {
- log.warn("SQL parse failed. SQL Case ID is: {}, database type is:
{}, SQL is: {}", sqlCaseId, databaseType, sql);
+ log.warn("SQL parse failed. SQL Case ID is: {}, database type is:
{}, SQL is: {}", sqlCaseId, databaseType.getType(), sql);
}
}
}
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/log/LogSQLParseResultReporterCreator.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/log/LogSQLParseResultReporterCreator.java
index 86d49571137..467cf314630 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/log/LogSQLParseResultReporterCreator.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/external/result/type/log/LogSQLParseResultReporterCreator.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.test.sql.parser.external.result.type.log;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.test.sql.parser.external.result.SQLParseResultReporter;
import
org.apache.shardingsphere.test.sql.parser.external.result.SQLParseResultReporterCreator;
@@ -26,7 +27,7 @@ import
org.apache.shardingsphere.test.sql.parser.external.result.SQLParseResultR
public final class LogSQLParseResultReporterCreator implements
SQLParseResultReporterCreator {
@Override
- public SQLParseResultReporter create(final String databaseType) {
+ public SQLParseResultReporter create(final DatabaseType databaseType) {
return new LogSQLParseResultReporter();
}
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/sql/SQLCases.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/sql/SQLCases.java
index 9ad1964d3c2..c7148763b81 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/sql/SQLCases.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/sql/SQLCases.java
@@ -20,6 +20,9 @@ package
org.apache.shardingsphere.test.sql.parser.internal.cases.sql;
import com.google.common.base.Preconditions;
import com.google.common.base.Splitter;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
+import
org.apache.shardingsphere.infra.util.spi.exception.ServiceProviderNotFoundServerException;
import
org.apache.shardingsphere.test.sql.parser.internal.cases.sql.jaxb.SQLCase;
import
org.apache.shardingsphere.test.sql.parser.internal.cases.sql.type.CaseTypedSQLBuilderFactory;
import
org.apache.shardingsphere.test.sql.parser.internal.cases.sql.type.SQLCaseType;
@@ -27,6 +30,7 @@ import
org.apache.shardingsphere.test.sql.parser.internal.engine.param.InternalS
import java.util.Arrays;
import java.util.Collection;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -45,7 +49,7 @@ public final class SQLCases {
* @param databaseTypes database types to be generated
* @return generated test parameters
*/
- public Collection<InternalSQLParserParameterizedArray>
generateTestParameters(final Collection<String> databaseTypes) {
+ public Collection<InternalSQLParserParameterizedArray>
generateTestParameters(final Collection<DatabaseType> databaseTypes) {
Collection<InternalSQLParserParameterizedArray> result = new
LinkedList<>();
for (SQLCase each : cases.values()) {
result.addAll(generateTestParameters(databaseTypes, each));
@@ -53,7 +57,7 @@ public final class SQLCases {
return result;
}
- private Collection<InternalSQLParserParameterizedArray>
generateTestParameters(final Collection<String> databaseTypes, final SQLCase
sqlCase) {
+ private Collection<InternalSQLParserParameterizedArray>
generateTestParameters(final Collection<DatabaseType> databaseTypes, final
SQLCase sqlCase) {
Collection<InternalSQLParserParameterizedArray> result = new
LinkedList<>();
for (SQLCaseType each : SQLCaseType.values()) {
result.addAll(generateTestParameters(databaseTypes, sqlCase,
each));
@@ -61,9 +65,9 @@ public final class SQLCases {
return result;
}
- private Collection<InternalSQLParserParameterizedArray>
generateTestParameters(final Collection<String> databaseTypes, final SQLCase
sqlCase, final SQLCaseType caseType) {
+ private Collection<InternalSQLParserParameterizedArray>
generateTestParameters(final Collection<DatabaseType> databaseTypes, final
SQLCase sqlCase, final SQLCaseType caseType) {
Collection<InternalSQLParserParameterizedArray> result = new
LinkedList<>();
- for (String each : getDatabaseTypes(sqlCase.getDatabaseTypes())) {
+ for (DatabaseType each : getDatabaseTypes(sqlCase.getDatabaseTypes()))
{
if (databaseTypes.contains(each) && containsSQLCaseType(sqlCase,
caseType)) {
result.add(new
InternalSQLParserParameterizedArray(sqlCase.getId(), each, caseType));
}
@@ -71,8 +75,15 @@ public final class SQLCases {
return result;
}
- private Collection<String> getDatabaseTypes(final String databaseTypes) {
- return null == databaseTypes ? getAllDatabaseTypes() :
Splitter.on(',').trimResults().splitToList(databaseTypes);
+ private Collection<DatabaseType> getDatabaseTypes(final String
databaseTypes) {
+ Collection<DatabaseType> result = new HashSet<>();
+ for (String each : null == databaseTypes ? getAllDatabaseTypes() :
Splitter.on(',').trimResults().splitToList(databaseTypes)) {
+ try {
+ result.add(DatabaseTypeFactory.getInstance(each));
+ } catch (final ServiceProviderNotFoundServerException ignored) {
+ }
+ }
+ return result;
}
private Collection<String> getAllDatabaseTypes() {
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 4f89dd06441..b73d356d772 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
@@ -18,6 +18,9 @@
package org.apache.shardingsphere.test.sql.parser.internal.engine;
import
org.apache.shardingsphere.distsql.parser.engine.api.DistSQLStatementParserEngine;
+import org.apache.shardingsphere.infra.database.type.BranchDatabaseType;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
@@ -37,6 +40,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Properties;
+import java.util.stream.Collectors;
public abstract class InternalSQLParserParameterizedIT {
@@ -46,7 +50,7 @@ public abstract class InternalSQLParserParameterizedIT {
private final String sqlCaseId;
- private final String databaseType;
+ private final DatabaseType databaseType;
private final SQLCaseType sqlCaseType;
@@ -58,7 +62,7 @@ public abstract class InternalSQLParserParameterizedIT {
protected static Collection<InternalSQLParserParameterizedArray>
getTestParameters(final String... databaseTypes) {
Collection<InternalSQLParserParameterizedArray> result = new
LinkedList<>();
- for (InternalSQLParserParameterizedArray each :
SQL_CASES.generateTestParameters(Arrays.asList(databaseTypes))) {
+ for (InternalSQLParserParameterizedArray each :
SQL_CASES.generateTestParameters(Arrays.stream(databaseTypes).map(DatabaseTypeFactory::getInstance).collect(Collectors.toSet())))
{
if (!isPlaceholderWithoutParameter(each)) {
result.add(each);
}
@@ -73,7 +77,7 @@ public abstract class InternalSQLParserParameterizedIT {
@Test
public final void assertSupportedSQL() {
String sql = SQL_CASES.getSQL(sqlCaseId, sqlCaseType,
SQL_PARSER_TEST_CASES.get(sqlCaseId).getParameters());
- SQLStatement actual = parseSQLStatement("H2".equals(databaseType) ?
"MySQL" : databaseType, sql);
+ SQLStatement actual = parseSQLStatement((databaseType instanceof
BranchDatabaseType ? ((BranchDatabaseType) databaseType).getTrunkDatabaseType()
: databaseType).getType(), sql);
SQLParserTestCase expected = SQL_PARSER_TEST_CASES.get(sqlCaseId);
SQLStatementAssert.assertIs(new SQLCaseAssertContext(sqlCaseId, sql,
expected.getParameters(), sqlCaseType), actual, expected);
}
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/engine/InternalUnsupportedSQLParserParameterizedIT.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/engine/InternalUnsupportedSQLParserParameterizedIT.java
index a3d0e226e9d..d2b6149ac6a 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/engine/InternalUnsupportedSQLParserParameterizedIT.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/engine/InternalUnsupportedSQLParserParameterizedIT.java
@@ -17,6 +17,9 @@
package org.apache.shardingsphere.test.sql.parser.internal.engine;
+import org.apache.shardingsphere.infra.database.type.BranchDatabaseType;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
@@ -38,7 +41,7 @@ public abstract class
InternalUnsupportedSQLParserParameterizedIT {
private final String sqlCaseId;
- private final String databaseType;
+ private final DatabaseType databaseType;
private final SQLCaseType sqlCaseType;
@@ -49,14 +52,14 @@ public abstract class
InternalUnsupportedSQLParserParameterizedIT {
}
protected static Collection<InternalSQLParserParameterizedArray>
getTestParameters(final String databaseType) {
- return
SQL_CASES.generateTestParameters(Collections.singleton(databaseType));
+ return
SQL_CASES.generateTestParameters(Collections.singleton(DatabaseTypeFactory.getInstance(databaseType)));
}
@Test(expected = Exception.class)
// TODO should expect SQLParsingException only
public final void assertUnsupportedSQL() {
String sql = SQL_CASES.getSQL(sqlCaseId, sqlCaseType,
Collections.emptyList());
- String databaseType = "H2".equals(this.databaseType) ? "MySQL" :
this.databaseType;
+ String databaseType = (this.databaseType instanceof BranchDatabaseType
? ((BranchDatabaseType) this.databaseType).getTrunkDatabaseType() :
this.databaseType).getType();
CacheOption cacheOption = new CacheOption(128, 1024L);
ParseASTNode parseContext = new SQLParserEngine(databaseType,
cacheOption).parse(sql, false);
// TODO remove SQLStatement sqlStatement =
diff --git
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/engine/param/InternalSQLParserParameterizedArray.java
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/engine/param/InternalSQLParserParameterizedArray.java
index 55039e04e37..5134b9dc99c 100644
---
a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/engine/param/InternalSQLParserParameterizedArray.java
+++
b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/engine/param/InternalSQLParserParameterizedArray.java
@@ -19,6 +19,7 @@ package
org.apache.shardingsphere.test.sql.parser.internal.engine.param;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.test.sql.parser.SQLParserParameterizedArray;
import
org.apache.shardingsphere.test.sql.parser.internal.cases.sql.type.SQLCaseType;
@@ -31,12 +32,12 @@ public final class InternalSQLParserParameterizedArray
implements SQLParserParam
private final String sqlCaseId;
- private final String databaseType;
+ private final DatabaseType databaseType;
private final SQLCaseType sqlCaseType;
@Override
public String toString() {
- return String.format("%s (%s) -> %s", sqlCaseId, sqlCaseType,
databaseType);
+ return String.format("%s (%s) -> %s", sqlCaseId, sqlCaseType,
databaseType.getType());
}
}
diff --git
a/test/parser/src/test/java/org/apache/shardingsphere/test/sql/parser/internal/fixture/DistSQLFixtureDatabaseType.java
b/test/parser/src/test/java/org/apache/shardingsphere/test/sql/parser/internal/fixture/DistSQLFixtureDatabaseType.java
new file mode 100644
index 00000000000..f04d7eee0df
--- /dev/null
+++
b/test/parser/src/test/java/org/apache/shardingsphere/test/sql/parser/internal/fixture/DistSQLFixtureDatabaseType.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.test.sql.parser.internal.fixture;
+
+import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.sql.parser.sql.common.enums.QuoteCharacter;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+
+import static org.mockito.Mockito.mock;
+
+public final class DistSQLFixtureDatabaseType implements DatabaseType {
+
+ @Override
+ public QuoteCharacter getQuoteCharacter() {
+ return QuoteCharacter.NONE;
+ }
+
+ @Override
+ public Collection<String> getJdbcUrlPrefixes() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public DataSourceMetaData getDataSourceMetaData(final String url, final
String username) {
+ return mock(DataSourceMetaData.class);
+ }
+
+ @Override
+ public Map<String, Collection<String>> getSystemDatabaseSchemaMap() {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public Collection<String> getSystemSchemas() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public String getType() {
+ return "ShardingSphere";
+ }
+}
diff --git
a/test/parser/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.database.type.DatabaseType
b/test/parser/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.database.type.DatabaseType
new file mode 100644
index 00000000000..4ade3b83581
--- /dev/null
+++
b/test/parser/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.database.type.DatabaseType
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.shardingsphere.test.sql.parser.internal.fixture.DistSQLFixtureDatabaseType