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