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/05 16:06:38 UTC

[shardingsphere] branch master updated: Add openGauss for DynamicLoadingSQLParserParameterizedTest (#21969)

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

zhangliang 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 fbc143b7c6c Add openGauss for DynamicLoadingSQLParserParameterizedTest (#21969)
fbc143b7c6c is described below

commit fbc143b7c6c97c4252921d7a148772e2bba0f04a
Author: Junfeng <71...@qq.com>
AuthorDate: Sun Nov 6 00:06:27 2022 +0800

    Add openGauss for DynamicLoadingSQLParserParameterizedTest (#21969)
    
    * feat: add json-path
    
    * feat: remove duplicate cases
    
    * feat: using json-path for read response
    
    * fix: modify code
    
    * fix: rename casesGitHubApoContent to casesGitHubApiContent
    
    * fix: add test scope to json-path
    
    * fix: update unsupported.xml
    
    * fix: remove z-pre tag
    
    * fix: recovery DynamicLoadingSQLParserParameterizedTest.java
    
    * fix: move json-path from root to test/parser
    
    * fix: rm blank line
    
    * feat: use log.warn && catch 403 && recurse directory of url
    
    * fix: modify
    
    * feat: add end line
    
    * feat: add DynamicLoadingOpenGaussParserParameterizedTest
    
    * fix: correct name
    
    * fix: abandon test when IOException
    
    * fix: return null-valued params when rate limited
    
    * fix: modify
    
    * feat: add logback.xml
    
    * fix: change root to error & change logger to warn
    
    * fix: change root to info & change additivity to true
    
    * fix: add end line
    
    Co-authored-by: Jacob953 <ja...@csu.edu.cn>
---
 ...DynamicLoadingMySQLParserParameterizedTest.java |  4 +--
 ...icLoadingOpenGaussParserParameterizedTest.java} | 16 +++++-----
 ...icLoadingPostgreSQLParserParameterizedTest.java |  4 +--
 .../DynamicLoadingSQLParserParameterizedTest.java  | 36 +++++++++++++++++-----
 test/parser/src/main/resources/logback.xml         | 33 ++++++++++++++++++++
 5 files changed, 70 insertions(+), 23 deletions(-)

diff --git a/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/mysql/DynamicLoadingMySQLParserParameterizedTest.java b/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/mysql/DynamicLoadingMySQLParserParameterizedTest.java
index 4034fb003c3..56fdd499761 100644
--- a/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/mysql/DynamicLoadingMySQLParserParameterizedTest.java
+++ b/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/mysql/DynamicLoadingMySQLParserParameterizedTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.sql.parser.mysql;
 
-import java.io.IOException;
 import java.util.Collection;
 import java.util.Collections;
 
@@ -32,10 +31,9 @@ public final class DynamicLoadingMySQLParserParameterizedTest {
      * Get test parameters.
      *
      * @return Test cases from github.
-     * @throws IOException IOException
      */
     // @Parameters(name = "{0} (MySQL) -> {1}")
-    public static Collection<Object[]> getTestParameters() throws IOException {
+    public static Collection<Object[]> getTestParameters() {
         return Collections.emptyList();
         // return DynamicLoadingSQLParserParameterizedTest.getTestParameters("https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t");
     }
diff --git a/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/mysql/DynamicLoadingMySQLParserParameterizedTest.java b/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/opengauss/DynamicLoadingOpenGaussParserParameterizedTest.java
similarity index 67%
copy from test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/mysql/DynamicLoadingMySQLParserParameterizedTest.java
copy to test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/opengauss/DynamicLoadingOpenGaussParserParameterizedTest.java
index 4034fb003c3..b57f99f5db1 100644
--- a/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/mysql/DynamicLoadingMySQLParserParameterizedTest.java
+++ b/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/opengauss/DynamicLoadingOpenGaussParserParameterizedTest.java
@@ -15,28 +15,26 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.mysql;
+package org.apache.shardingsphere.sql.parser.opengauss;
 
-import java.io.IOException;
 import java.util.Collection;
 import java.util.Collections;
 
 //@RunWith(ShardingSphereParallelTestParameterized.class)
-public final class DynamicLoadingMySQLParserParameterizedTest {
+public final class DynamicLoadingOpenGaussParserParameterizedTest {
     
-    // public DynamicLoadingMySQLParserParameterizedTest(final String sqlCaseId, final String sqlCaseValue) {
-    // super(sqlCaseId, sqlCaseValue, "MySQL");
+    // public DynamicLoadingOpenGaussParserParameterizedTest(final String sqlCaseId, final String sqlCaseValue) {
+    // super(sqlCaseId, sqlCaseValue, "openGauss");
     // }
     
     /**
      * Get test parameters.
      *
      * @return Test cases from github.
-     * @throws IOException IOException
      */
-    // @Parameters(name = "{0} (MySQL) -> {1}")
-    public static Collection<Object[]> getTestParameters() throws IOException {
+    // @Parameters(name = "{0} (openGauss) -> {1}")
+    public static Collection<Object[]> getTestParameters() {
         return Collections.emptyList();
-        // return DynamicLoadingSQLParserParameterizedTest.getTestParameters("https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t");
+        // return DynamicLoadingSQLParserParameterizedTest.getTestParameters("https://github.com/opengauss-mirror/Yat/tree/master/openGaussBase/testcase");
     }
 }
diff --git a/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/DynamicLoadingPostgreSQLParserParameterizedTest.java b/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/DynamicLoadingPostgreSQLParserParameterizedTest.java
index ef9586d5299..a1ba806e09c 100644
--- a/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/DynamicLoadingPostgreSQLParserParameterizedTest.java
+++ b/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/DynamicLoadingPostgreSQLParserParameterizedTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.sql.parser.postgresql;
 
-import java.io.IOException;
 import java.util.Collection;
 import java.util.Collections;
 
@@ -32,10 +31,9 @@ public final class DynamicLoadingPostgreSQLParserParameterizedTest {
      * Get test parameters.
      *
      * @return Test cases from github.
-     * @throws IOException IOException
      **/
     // @Parameters(name = "{0} (PostgreSQL) -> {1}")
-    public static Collection<Object[]> getTestParameters() throws IOException {
+    public static Collection<Object[]> getTestParameters() {
         return Collections.emptyList();
         // return DynamicLoadingSQLParserParameterizedTest.getTestParameters("https://github.com/postgres/postgres/tree/master/src/test/regress/sql");
     }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/DynamicLoadingSQLParserParameterizedTest.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/DynamicLoadingSQLParserParameterizedTest.java
index 33ac95708c8..6454edf2aa6 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/DynamicLoadingSQLParserParameterizedTest.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/DynamicLoadingSQLParserParameterizedTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.engine;
 import com.google.common.collect.ImmutableMap;
 import com.jayway.jsonpath.JsonPath;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
 import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
@@ -41,6 +42,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
+@Slf4j
 @RequiredArgsConstructor
 public abstract class DynamicLoadingSQLParserParameterizedTest {
     
@@ -50,7 +52,7 @@ public abstract class DynamicLoadingSQLParserParameterizedTest {
     
     private final String databaseType;
     
-    protected static Collection<Object[]> getTestParameters(final String sqlCaseURL) throws IOException {
+    protected static Collection<Object[]> getTestParameters(final String sqlCaseURL) {
         Collection<Object[]> result = new LinkedList<>();
         for (Map<String, String> each : getResponse(sqlCaseURL)) {
             result.addAll(getSQLCases(each));
@@ -58,7 +60,7 @@ public abstract class DynamicLoadingSQLParserParameterizedTest {
         return result;
     }
     
-    private static Collection<Map<String, String>> getResponse(final String sqlCaseURL) throws IOException {
+    private static Collection<Map<String, String>> getResponse(final String sqlCaseURL) {
         Collection<Map<String, String>> result = new LinkedList<>();
         String[] patches = sqlCaseURL.split("/", 8);
         String casesOwner = patches[3];
@@ -66,19 +68,37 @@ public abstract class DynamicLoadingSQLParserParameterizedTest {
         String casesDirectory = patches[7];
         String casesGitHubApiURL = "https://api.github.com/repos/" + casesOwner + "/" + casesRepo + "/contents/" + casesDirectory;
         String casesGitHubApiContent = getContent(casesGitHubApiURL);
+        if (casesGitHubApiContent.isEmpty()) {
+            result.add(ImmutableMap.of("name", "null", "download_url", "null"));
+            return result;
+        }
         List<String> casesName = JsonPath.parse(casesGitHubApiContent).read("$..name");
         List<String> casesDownloadURL = JsonPath.parse(casesGitHubApiContent).read("$..download_url");
+        List<String> casesHtmlURL = JsonPath.parse(casesGitHubApiContent).read("$..html_url");
         IntStream.range(0, JsonPath.parse(casesGitHubApiContent).read("$.length()"))
-                .forEach(each -> result.add(ImmutableMap.of("name", casesName.get(each), "download_url", casesDownloadURL.get(each))));
+                .forEach(each -> {
+                    String eachName = casesName.get(each);
+                    if (eachName.endsWith(".sql") || eachName.endsWith(".test")) {
+                        result.add(ImmutableMap.of("name", eachName, "download_url", casesDownloadURL.get(each)));
+                    } else if (!eachName.contains(".")) {
+                        result.addAll(getResponse(casesHtmlURL.get(each)));
+                    }
+                });
         return result;
     }
     
-    private static String getContent(final String url) throws IOException {
-        InputStreamReader in = new InputStreamReader(new URL(url).openStream());
-        return new BufferedReader(in).lines().collect(Collectors.joining(System.lineSeparator()));
+    private static String getContent(final String url) {
+        String result = "";
+        try {
+            InputStreamReader in = new InputStreamReader(new URL(url).openStream());
+            result = new BufferedReader(in).lines().collect(Collectors.joining(System.lineSeparator()));
+        } catch (IOException ingore) {
+            log.warn("Error: GitHub API rate limit exceeded");
+        }
+        return result;
     }
     
-    private static Collection<Object[]> getSQLCases(final Map<String, String> elements) throws IOException {
+    private static Collection<Object[]> getSQLCases(final Map<String, String> elements) {
         Collection<Object[]> result = new LinkedList<>();
         String sqlCaseFileName = elements.get("name");
         String[] lines = getContent(elements.get("download_url")).split("\n");
@@ -100,7 +120,7 @@ public abstract class DynamicLoadingSQLParserParameterizedTest {
             ParseASTNode parseASTNode = new SQLParserEngine(databaseType, new CacheOption(128, 1024L)).parse(sql, false);
             new SQLVisitorEngine(databaseType, "STATEMENT", true, new Properties()).visit(parseASTNode);
         } catch (final SQLParsingException | ClassCastException | NullPointerException | SQLASTVisitorException | NumberFormatException | StringIndexOutOfBoundsException ignore) {
-            System.out.println("ParserError: " + sqlCaseId + " value: " + sql + " db-type: " + databaseType);
+            log.warn("ParserError: " + sqlCaseId + " value: " + sql + " db-type: " + databaseType);
         }
     }
 }
diff --git a/test/parser/src/main/resources/logback.xml b/test/parser/src/main/resources/logback.xml
new file mode 100644
index 00000000000..b9a61330834
--- /dev/null
+++ b/test/parser/src/main/resources/logback.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!--
+  ~ 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.
+  -->
+
+<configuration>
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
+    <logger name="org.apache.shardingsphere" level="warn" additivity="true">
+        <appender-ref ref="console" />
+    </logger>
+
+    <root>
+        <level value="info" />
+        <appender-ref ref="console" />
+    </root>
+</configuration>