You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by to...@apache.org on 2022/05/14 05:43:33 UTC

[shardingsphere] branch master updated: Support useOriginalSQLWhenTranslatingFailed (#17647)

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

totalo 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 22943f03e9c Support useOriginalSQLWhenTranslatingFailed (#17647)
22943f03e9c is described below

commit 22943f03e9cfa3a79e9a1940a544c3c1b3440356
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat May 14 13:43:27 2022 +0800

    Support useOriginalSQLWhenTranslatingFailed (#17647)
    
    * Add SQLTranslatorRuleConfiguration.useOriginalSQLWhenTranslatingFailed
    
    * Use useOriginalSQLWhenTranslatingFailed
---
 .../config/SQLTranslatorRuleConfiguration.java     | 25 +++++++---------------
 .../SQLTranslationException.java}                  | 20 ++++++-----------
 .../sqltranslator/rule/SQLTranslatorRule.java      | 17 +++++++++------
 .../sqltranslator/spi/SQLTranslator.java           |  4 +++-
 .../spi/type/NativeSQLTranslator.java              |  3 ++-
 .../config/YamlSQLTranslatorRuleConfiguration.java |  2 ++
 .../SQLTranslatorRuleConfigurationYamlSwapper.java |  4 ++--
 7 files changed, 34 insertions(+), 41 deletions(-)

diff --git a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-api/src/main/java/org/apache/shardingsphere/sqltranslator/config/SQLTranslatorRuleConfiguration.java b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-api/src/main/java/org/apache/shardingsphere/sqltranslator/config/SQLTranslatorRuleConfiguration.java
index 263ba60d28c..dcf780f1759 100644
--- a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-api/src/main/java/org/apache/shardingsphere/sqltranslator/config/SQLTranslatorRuleConfiguration.java
+++ b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-api/src/main/java/org/apache/shardingsphere/sqltranslator/config/SQLTranslatorRuleConfiguration.java
@@ -17,31 +17,22 @@
 
 package org.apache.shardingsphere.sqltranslator.config;
 
-import lombok.AllArgsConstructor;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.config.scope.GlobalRuleConfiguration;
 
-import java.util.Optional;
-
 /**
  * SQL translator rule configuration.
  */
-@AllArgsConstructor
-@NoArgsConstructor
-@Setter
+@RequiredArgsConstructor
+@Getter
 public final class SQLTranslatorRuleConfiguration implements GlobalRuleConfiguration {
     
-    private String type;
+    private final String type;
     
-    // TODO is ignore translate fail
+    private final boolean useOriginalSQLWhenTranslatingFailed;
     
-    /**
-     * Get type.
-     * 
-     * @return type
-     */
-    public Optional<String> getType() {
-        return Optional.ofNullable(type);
+    public SQLTranslatorRuleConfiguration() {
+        this(null, true);
     }
 }
diff --git a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/config/YamlSQLTranslatorRuleConfiguration.java b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/exception/SQLTranslationException.java
similarity index 58%
copy from shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/config/YamlSQLTranslatorRuleConfiguration.java
copy to shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/exception/SQLTranslationException.java
index ff3bf225f4f..b4978de0b72 100644
--- a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/config/YamlSQLTranslatorRuleConfiguration.java
+++ b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/exception/SQLTranslationException.java
@@ -15,24 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sqltranslator.yaml.config;
-
-import lombok.Getter;
-import lombok.Setter;
-import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRuleConfiguration;
-import org.apache.shardingsphere.sqltranslator.config.SQLTranslatorRuleConfiguration;
+package org.apache.shardingsphere.sqltranslator.exception;
 
 /**
- * SQL translator configuration for YAML.
+ * SQL translation exception.
  */
-@Getter
-@Setter
-public final class YamlSQLTranslatorRuleConfiguration implements YamlRuleConfiguration {
+public final class SQLTranslationException extends Exception {
     
-    private String type;
+    private static final String ERROR_MESSAGE = "SQL `%s` translation error.";
     
-    @Override
-    public Class<SQLTranslatorRuleConfiguration> getRuleConfigurationType() {
-        return SQLTranslatorRuleConfiguration.class;
+    public SQLTranslationException(final String sql, final Exception cause) {
+        super(String.format(ERROR_MESSAGE, sql), cause);
     }
 }
diff --git a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRule.java b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRule.java
index 7f2f1706ec6..818ff9963ff 100644
--- a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRule.java
+++ b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRule.java
@@ -18,9 +18,11 @@
 package org.apache.shardingsphere.sqltranslator.rule;
 
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.exception.ShardingSphereException;
 import org.apache.shardingsphere.infra.rule.identifier.scope.GlobalRule;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.sqltranslator.config.SQLTranslatorRuleConfiguration;
+import org.apache.shardingsphere.sqltranslator.exception.SQLTranslationException;
 import org.apache.shardingsphere.sqltranslator.spi.SQLTranslator;
 import org.apache.shardingsphere.sqltranslator.spi.SQLTranslatorFactory;
 
@@ -31,8 +33,11 @@ public final class SQLTranslatorRule implements GlobalRule {
     
     private final SQLTranslator translator;
     
+    private final boolean useOriginalSQLWhenTranslatingFailed;
+    
     public SQLTranslatorRule(final SQLTranslatorRuleConfiguration ruleConfig) {
-        translator = SQLTranslatorFactory.getInstance(ruleConfig.getType().orElse(""));
+        translator = SQLTranslatorFactory.getInstance(ruleConfig.getType());
+        useOriginalSQLWhenTranslatingFailed = ruleConfig.isUseOriginalSQLWhenTranslatingFailed();
     }
     
     /**
@@ -50,11 +55,11 @@ public final class SQLTranslatorRule implements GlobalRule {
         }
         try {
             return translator.translate(sql, sqlStatement, frontendDatabaseType, backendDatabaseType);
-            // CHECKSTYLE:OFF
-            // TODO catch TranslationException
-        } catch (final Exception ex) {
-            // CHECKSTYLE:ON
-            return sql;
+        } catch (final SQLTranslationException ex) {
+            if (useOriginalSQLWhenTranslatingFailed) {
+                return sql;
+            }
+            throw new ShardingSphereException(ex);
         }
     }
     
diff --git a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/spi/SQLTranslator.java b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/spi/SQLTranslator.java
index cedb0cff097..1d492b6fc11 100644
--- a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/spi/SQLTranslator.java
+++ b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/spi/SQLTranslator.java
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.spi.annotation.SingletonSPI;
 import org.apache.shardingsphere.spi.type.required.RequiredSPI;
 import org.apache.shardingsphere.spi.type.typed.TypedSPI;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import org.apache.shardingsphere.sqltranslator.exception.SQLTranslationException;
 
 /**
  * SQL translator.
@@ -37,6 +38,7 @@ public interface SQLTranslator extends TypedSPI, RequiredSPI {
      * @param frontendDatabaseType frontend database type
      * @param backendDatabaseType backend database type
      * @return translated SQL
+     * @throws SQLTranslationException SQL translation exception
      */
-    String translate(String sql, SQLStatement sqlStatement, DatabaseType frontendDatabaseType, DatabaseType backendDatabaseType);
+    String translate(String sql, SQLStatement sqlStatement, DatabaseType frontendDatabaseType, DatabaseType backendDatabaseType) throws SQLTranslationException;
 }
diff --git a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/spi/type/NativeSQLTranslator.java b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/spi/type/NativeSQLTranslator.java
index 3cbbae5c4ed..36e195330f8 100644
--- a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/spi/type/NativeSQLTranslator.java
+++ b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/spi/type/NativeSQLTranslator.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sqltranslator.spi.type;
 
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import org.apache.shardingsphere.sqltranslator.exception.SQLTranslationException;
 import org.apache.shardingsphere.sqltranslator.spi.SQLTranslator;
 
 /**
@@ -27,7 +28,7 @@ import org.apache.shardingsphere.sqltranslator.spi.SQLTranslator;
 public final class NativeSQLTranslator implements SQLTranslator {
     
     @Override
-    public String translate(final String sql, final SQLStatement statement, final DatabaseType frontendDatabaseType, final DatabaseType backendDatabaseType) {
+    public String translate(final String sql, final SQLStatement statement, final DatabaseType frontendDatabaseType, final DatabaseType backendDatabaseType) throws SQLTranslationException {
         // TODO
         return sql;
     }
diff --git a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/config/YamlSQLTranslatorRuleConfiguration.java b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/config/YamlSQLTranslatorRuleConfiguration.java
index ff3bf225f4f..d3b561c5085 100644
--- a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/config/YamlSQLTranslatorRuleConfiguration.java
+++ b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/config/YamlSQLTranslatorRuleConfiguration.java
@@ -31,6 +31,8 @@ public final class YamlSQLTranslatorRuleConfiguration implements YamlRuleConfigu
     
     private String type;
     
+    private boolean useOriginalSQLWhenTranslatingFailed = true;
+    
     @Override
     public Class<SQLTranslatorRuleConfiguration> getRuleConfigurationType() {
         return SQLTranslatorRuleConfiguration.class;
diff --git a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/swapper/SQLTranslatorRuleConfigurationYamlSwapper.java b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/swapper/SQLTranslatorRuleConfigurationYamlSwapper.java
index f5218ebbfd8..7aa39b08c54 100644
--- a/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/swapper/SQLTranslatorRuleConfigurationYamlSwapper.java
+++ b/shardingsphere-kernel/shardingsphere-sql-translator/shardingsphere-sql-translator-core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/swapper/SQLTranslatorRuleConfigurationYamlSwapper.java
@@ -30,13 +30,13 @@ public final class SQLTranslatorRuleConfigurationYamlSwapper implements YamlRule
     @Override
     public YamlSQLTranslatorRuleConfiguration swapToYamlConfiguration(final SQLTranslatorRuleConfiguration data) {
         YamlSQLTranslatorRuleConfiguration result = new YamlSQLTranslatorRuleConfiguration();
-        result.setType(data.getType().orElse(null));
+        result.setType(data.getType());
         return result;
     }
     
     @Override
     public SQLTranslatorRuleConfiguration swapToObject(final YamlSQLTranslatorRuleConfiguration yamlConfig) {
-        return new SQLTranslatorRuleConfiguration(yamlConfig.getType());
+        return new SQLTranslatorRuleConfiguration(yamlConfig.getType(), yamlConfig.isUseOriginalSQLWhenTranslatingFailed());
     }
     
     @Override