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 3f40090c282 Add DistSQL ALTER SQL_TRANSLATOR RULE (#29109)
3f40090c282 is described below

commit 3f40090c282fed195dc702fb18e1d30788e67d9b
Author: ChenJiaHao <[email protected]>
AuthorDate: Wed Nov 22 12:07:02 2023 +0800

    Add DistSQL ALTER SQL_TRANSLATOR RULE (#29109)
    
    * Add DistSQL ALTER SQL_TRANSLATOR RULE
    
    * Fix UT
    
    * Fix code style
    
    * Format code with spotless
    
    * Update UT
---
 .../infra/props/PropertiesConverter.java           | 11 ++---
 kernel/sql-translator/distsql/handler/pom.xml      |  7 +++
 .../{ => query}/ShowSQLTranslatorRuleExecutor.java | 10 ++--
 .../AlterSQLTranslatorRuleStatementUpdater.java    | 55 ++++++++++++++++++++++
 ....distsql.handler.ral.query.QueryableRALExecutor |  2 +-
 ...istsql.handler.ral.update.GlobalRuleRALUpdater} |  2 +-
 .../ShowSQLTranslatorRuleExecutorTest.java         | 10 ++--
 ...AlterSQLTranslatorRuleStatementUpdaterTest.java | 51 ++++++++++++++++++++
 .../sqltranslator/{Keyword.g4 => BaseRule.g4}      | 20 ++++----
 .../main/antlr4/imports/sqltranslator/Keyword.g4   | 36 ++++++++++++++
 .../sqltranslator/{Keyword.g4 => Literals.g4}      | 22 ++++-----
 .../antlr4/imports/sqltranslator/RALStatement.g4   | 26 +++++++++-
 .../autogen/SQLTranslatorDistSQLStatement.g4       |  4 +-
 .../core/SQLTranslatorDistSQLStatementVisitor.java | 32 ++++++++++++-
 .../ShowSQLTranslatorRuleStatement.java            |  2 +-
 .../AlterSQLTranslatorRuleStatement.java}          | 20 ++++++--
 .../ral/impl/QueryableRALStatementAssert.java      |  2 +-
 17 files changed, 264 insertions(+), 48 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/props/PropertiesConverter.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/props/PropertiesConverter.java
index fb356f00517..ed49c35ef07 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/props/PropertiesConverter.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/props/PropertiesConverter.java
@@ -22,8 +22,8 @@ import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.infra.util.json.JsonUtils;
 
 import java.util.LinkedHashMap;
-import java.util.Map;
 import java.util.Properties;
+import java.util.stream.Collectors;
 
 /**
  * Properties converter.
@@ -38,11 +38,8 @@ public final class PropertiesConverter {
      * @return converted string content
      */
     public static String convert(final Properties props) {
-        if (null == props) {
-            return "";
-        }
-        Map<Object, Object> sortedProps = new LinkedHashMap<>();
-        props.keySet().stream().map(Object::toString).sorted().forEach(each -> 
sortedProps.put(each, props.get(each)));
-        return sortedProps.isEmpty() ? "" : 
JsonUtils.toJsonString(sortedProps);
+        return null == props || props.isEmpty() ? ""
+                : 
JsonUtils.toJsonString(props.keySet().stream().map(Object::toString).sorted()
+                        .collect(Collectors.toMap(each -> each, props::get, 
(oldValue, currentValue) -> oldValue, LinkedHashMap::new)));
     }
 }
diff --git a/kernel/sql-translator/distsql/handler/pom.xml 
b/kernel/sql-translator/distsql/handler/pom.xml
index ccc63eb8510..2b8eb936261 100644
--- a/kernel/sql-translator/distsql/handler/pom.xml
+++ b/kernel/sql-translator/distsql/handler/pom.xml
@@ -47,5 +47,12 @@
             
<artifactId>shardingsphere-sql-translator-distsql-parser</artifactId>
             <version>${project.version}</version>
         </dependency>
+        
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-test-util</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git 
a/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutor.java
 
b/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/query/ShowSQLTranslatorRuleExecutor.java
similarity index 82%
rename from 
kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutor.java
rename to 
kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/query/ShowSQLTranslatorRuleExecutor.java
index d42a473e9b4..7b1fbac8d25 100644
--- 
a/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutor.java
+++ 
b/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/query/ShowSQLTranslatorRuleExecutor.java
@@ -15,13 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sqltranslator.distsql.handler;
+package org.apache.shardingsphere.sqltranslator.distsql.handler.query;
 
 import 
org.apache.shardingsphere.distsql.handler.ral.query.MetaDataRequiredQueryableRALExecutor;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.props.PropertiesConverter;
 import 
org.apache.shardingsphere.sqltranslator.api.config.SQLTranslatorRuleConfiguration;
-import 
org.apache.shardingsphere.sqltranslator.distsql.statement.ShowSQLTranslatorRuleStatement;
+import 
org.apache.shardingsphere.sqltranslator.distsql.statement.queryable.ShowSQLTranslatorRuleStatement;
 import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
 
 import java.util.Arrays;
@@ -40,12 +41,13 @@ public final class ShowSQLTranslatorRuleExecutor implements 
MetaDataRequiredQuer
     }
     
     private Collection<LocalDataQueryResultRow> buildData(final 
SQLTranslatorRuleConfiguration ruleConfig) {
-        return Collections.singleton(new LocalDataQueryResultRow(null != 
ruleConfig.getType() ? ruleConfig.getType() : "", 
String.valueOf(ruleConfig.isUseOriginalSQLWhenTranslatingFailed())));
+        return Collections.singleton(new LocalDataQueryResultRow(null == 
ruleConfig.getType() ? "" : ruleConfig.getType(),
+                PropertiesConverter.convert(ruleConfig.getProps()), 
String.valueOf(ruleConfig.isUseOriginalSQLWhenTranslatingFailed())));
     }
     
     @Override
     public Collection<String> getColumnNames() {
-        return Arrays.asList("type", 
"use_original_sql_when_translating_failed");
+        return Arrays.asList("type", "props", 
"use_original_sql_when_translating_failed");
     }
     
     @Override
diff --git 
a/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleStatementUpdater.java
 
b/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleStatementUpdater.java
new file mode 100644
index 00000000000..d7ecee7eae9
--- /dev/null
+++ 
b/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleStatementUpdater.java
@@ -0,0 +1,55 @@
+/*
+ * 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.sqltranslator.distsql.handler.update;
+
+import 
org.apache.shardingsphere.distsql.handler.ral.update.GlobalRuleRALUpdater;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import 
org.apache.shardingsphere.sqltranslator.api.config.SQLTranslatorRuleConfiguration;
+import 
org.apache.shardingsphere.sqltranslator.distsql.statement.updateable.AlterSQLTranslatorRuleStatement;
+import org.apache.shardingsphere.sqltranslator.spi.SQLTranslator;
+
+/**
+ * Alter SQL translator rule statement handler.
+ */
+public final class AlterSQLTranslatorRuleStatementUpdater implements 
GlobalRuleRALUpdater<AlterSQLTranslatorRuleStatement, 
SQLTranslatorRuleConfiguration> {
+    
+    @Override
+    public void checkSQLStatement(final SQLTranslatorRuleConfiguration 
currentRuleConfig, final AlterSQLTranslatorRuleStatement sqlStatement) {
+        checkProvider(sqlStatement);
+    }
+    
+    private void checkProvider(final AlterSQLTranslatorRuleStatement 
sqlStatement) {
+        TypedSPILoader.checkService(SQLTranslator.class, 
sqlStatement.getType(), sqlStatement.getProps());
+    }
+    
+    @Override
+    public SQLTranslatorRuleConfiguration buildAlteredRuleConfiguration(final 
SQLTranslatorRuleConfiguration currentRuleConfig, final 
AlterSQLTranslatorRuleStatement sqlStatement) {
+        return new SQLTranslatorRuleConfiguration(sqlStatement.getType(), 
sqlStatement.getProps(),
+                null == sqlStatement.getUseOriginalSQLWhenTranslatingFailed() 
? currentRuleConfig.isUseOriginalSQLWhenTranslatingFailed() : 
sqlStatement.getUseOriginalSQLWhenTranslatingFailed());
+    }
+    
+    @Override
+    public Class<SQLTranslatorRuleConfiguration> getRuleConfigurationClass() {
+        return SQLTranslatorRuleConfiguration.class;
+    }
+    
+    @Override
+    public Class<AlterSQLTranslatorRuleStatement> getType() {
+        return AlterSQLTranslatorRuleStatement.class;
+    }
+}
diff --git 
a/kernel/sql-translator/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor
 
b/kernel/sql-translator/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor
index f4756663dd8..2e75a975ebb 100644
--- 
a/kernel/sql-translator/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor
+++ 
b/kernel/sql-translator/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.sqltranslator.distsql.handler.ShowSQLTranslatorRuleExecutor
+org.apache.shardingsphere.sqltranslator.distsql.handler.query.ShowSQLTranslatorRuleExecutor
diff --git 
a/kernel/sql-translator/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor
 
b/kernel/sql-translator/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.update.GlobalRuleRALUpdater
similarity index 88%
copy from 
kernel/sql-translator/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor
copy to 
kernel/sql-translator/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.update.GlobalRuleRALUpdater
index f4756663dd8..ef36ed5349e 100644
--- 
a/kernel/sql-translator/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor
+++ 
b/kernel/sql-translator/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.update.GlobalRuleRALUpdater
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.sqltranslator.distsql.handler.ShowSQLTranslatorRuleExecutor
+org.apache.shardingsphere.sqltranslator.distsql.handler.update.AlterSQLTranslatorRuleStatementUpdater
diff --git 
a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutorTest.java
 
b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/query/ShowSQLTranslatorRuleExecutorTest.java
similarity index 91%
rename from 
kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutorTest.java
rename to 
kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/query/ShowSQLTranslatorRuleExecutorTest.java
index fc28b45cd29..f37354b1bab 100644
--- 
a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/ShowSQLTranslatorRuleExecutorTest.java
+++ 
b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/query/ShowSQLTranslatorRuleExecutorTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sqltranslator.distsql.handler;
+package org.apache.shardingsphere.sqltranslator.distsql.handler.query;
 
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
@@ -23,7 +23,7 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.sqltranslator.api.config.SQLTranslatorRuleConfiguration;
-import 
org.apache.shardingsphere.sqltranslator.distsql.statement.ShowSQLTranslatorRuleStatement;
+import 
org.apache.shardingsphere.sqltranslator.distsql.statement.queryable.ShowSQLTranslatorRuleStatement;
 import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
 import org.junit.jupiter.api.Test;
 
@@ -49,16 +49,18 @@ class ShowSQLTranslatorRuleExecutorTest {
         Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
         LocalDataQueryResultRow row = iterator.next();
         assertThat(row.getCell(1), is("NATIVE"));
-        assertThat(row.getCell(2), is("true"));
+        assertThat(row.getCell(2), is(""));
+        assertThat(row.getCell(3), is("true"));
     }
     
     @Test
     void assertGetColumnNames() {
         ShowSQLTranslatorRuleExecutor executor = new 
ShowSQLTranslatorRuleExecutor();
         Collection<String> columns = executor.getColumnNames();
-        assertThat(columns.size(), is(2));
+        assertThat(columns.size(), is(3));
         Iterator<String> iterator = columns.iterator();
         assertThat(iterator.next(), is("type"));
+        assertThat(iterator.next(), is("props"));
         assertThat(iterator.next(), 
is("use_original_sql_when_translating_failed"));
     }
     
diff --git 
a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleStatementUpdaterTest.java
 
b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleStatementUpdaterTest.java
new file mode 100644
index 00000000000..ad32bb58bf4
--- /dev/null
+++ 
b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleStatementUpdaterTest.java
@@ -0,0 +1,51 @@
+/*
+ * 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.sqltranslator.distsql.handler.update;
+
+import org.apache.shardingsphere.infra.props.PropertiesConverter;
+import 
org.apache.shardingsphere.sqltranslator.api.config.SQLTranslatorRuleConfiguration;
+import 
org.apache.shardingsphere.sqltranslator.distsql.statement.updateable.AlterSQLTranslatorRuleStatement;
+import org.apache.shardingsphere.test.util.PropertiesBuilder;
+import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
+import org.junit.jupiter.api.Test;
+
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class AlterSQLTranslatorRuleStatementUpdaterTest {
+    
+    @Test
+    void assertExecute() {
+        AlterSQLTranslatorRuleStatementUpdater updater = new 
AlterSQLTranslatorRuleStatementUpdater();
+        SQLTranslatorRuleConfiguration actual = 
updater.buildAlteredRuleConfiguration(createSQLTranslatorRuleConfiguration(), 
new AlterSQLTranslatorRuleStatement("JOOQ",
+                PropertiesBuilder.build(new Property("foo", "bar")), null));
+        assertThat(actual.getType(), is("JOOQ"));
+        assertFalse(actual.getProps().isEmpty());
+        String props = PropertiesConverter.convert(actual.getProps());
+        assertThat(props, is("{\"foo\":\"bar\"}"));
+        assertTrue(actual.isUseOriginalSQLWhenTranslatingFailed());
+    }
+    
+    private SQLTranslatorRuleConfiguration 
createSQLTranslatorRuleConfiguration() {
+        return new SQLTranslatorRuleConfiguration("NATIVE", new Properties(), 
true);
+    }
+}
diff --git 
a/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Keyword.g4
 
b/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/BaseRule.g4
similarity index 76%
copy from 
kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Keyword.g4
copy to 
kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/BaseRule.g4
index 088bfbdbe1f..bbc13c59b47 100644
--- 
a/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Keyword.g4
+++ 
b/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/BaseRule.g4
@@ -15,22 +15,22 @@
  * limitations under the License.
  */
 
-lexer grammar Keyword;
+grammar BaseRule;
 
-import Alphabet;
+import Symbol, Keyword, Literals;
 
-WS
-    : [ \t\r\n] + ->skip
+propertiesDefinition
+    : PROPERTIES LP_ properties? RP_
     ;
 
-SHOW
-    : S H O W
+properties
+    : property (COMMA_ property)*
     ;
 
-RULE
-    : R U L E
+property
+    : key=STRING_ EQ_ value=literal
     ;
 
-SQL_TRANSLATOR
-    : S Q L UL_ T R A N S L A T O R
+literal
+    : STRING_ | (MINUS_)? INT_ | TRUE | FALSE
     ;
diff --git 
a/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Keyword.g4
 
b/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Keyword.g4
index 088bfbdbe1f..8b1e92bf129 100644
--- 
a/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Keyword.g4
+++ 
b/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Keyword.g4
@@ -34,3 +34,39 @@ RULE
 SQL_TRANSLATOR
     : S Q L UL_ T R A N S L A T O R
     ;
+
+USE_ORIGINAL_SQL_WHEN_TRANSLATING_FAILED
+    : U S E UL_ O R I G I N A L UL_ S Q L UL_ W H E N UL_ T R A N S L A T I N 
G UL_ F A I L E D
+    ;
+
+ALTER
+    : A L T E R
+    ;
+
+TYPE
+    : T Y P E
+    ;
+
+JOOQ
+    : J O O Q
+    ;
+
+NATIVE
+    : N A T I V E
+    ;
+
+NAME
+    : N A M E
+    ;
+
+PROPERTIES
+    : P R O P E R T I E S
+    ;
+
+TRUE
+    : T R U E
+    ;
+
+FALSE
+    : F A L S E
+    ;
diff --git 
a/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Keyword.g4
 
b/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Literals.g4
similarity index 76%
copy from 
kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Keyword.g4
copy to 
kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Literals.g4
index 088bfbdbe1f..68f6a1b07ed 100644
--- 
a/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Keyword.g4
+++ 
b/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/Literals.g4
@@ -15,22 +15,20 @@
  * limitations under the License.
  */
 
-lexer grammar Keyword;
+lexer grammar Literals;
 
-import Alphabet;
+import Alphabet, Symbol;
 
-WS
-    : [ \t\r\n] + ->skip
+IDENTIFIER_
+    : [A-Za-z_$0-9]*?[A-Za-z_$]+?[A-Za-z_$0-9]*
+    | BQ_ ~'`'+ BQ_
     ;
 
-SHOW
-    : S H O W
+STRING_
+    : (DQ_ ('\\'. | '""' | ~('"' | '\\'))* DQ_)
+    | (SQ_ ('\\'. | '\'\'' | ~('\'' | '\\'))* SQ_)
     ;
 
-RULE
-    : R U L E
-    ;
-
-SQL_TRANSLATOR
-    : S Q L UL_ T R A N S L A T O R
+INT_
+    : [0-9]+
     ;
diff --git 
a/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/RALStatement.g4
 
b/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/RALStatement.g4
index 98ca33b2abe..b99b2af908c 100644
--- 
a/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/RALStatement.g4
+++ 
b/kernel/sql-translator/distsql/parser/src/main/antlr4/imports/sqltranslator/RALStatement.g4
@@ -17,8 +17,32 @@
 
 grammar RALStatement;
 
-import Keyword;
+import BaseRule;
 
 showSQLTranslatorRule
     : SHOW SQL_TRANSLATOR RULE
     ;
+
+alterSQLTranslatorRule
+    : ALTER SQL_TRANSLATOR RULE LP_ sqlTranslatorRuleDefinition RP_
+    ;
+
+sqlTranslatorRuleDefinition
+    : TYPE LP_ NAME EQ_ providerName (COMMA_ propertiesDefinition)? RP_ 
(COMMA_ useOriginalSQLDefinition)?
+    ;
+
+useOriginalSQLDefinition
+    : USE_ORIGINAL_SQL_WHEN_TRANSLATING_FAILED EQ_ useOriginalSQL
+    ;
+
+providerName
+    : STRING_ | buildInProviderTypeName
+    ;
+
+buildInProviderTypeName
+    : JOOQ | NATIVE
+    ;
+
+useOriginalSQL
+    : TRUE | FALSE
+    ;
diff --git 
a/kernel/sql-translator/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/SQLTranslatorDistSQLStatement.g4
 
b/kernel/sql-translator/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/SQLTranslatorDistSQLStatement.g4
index dff20ae98bd..aa3bbbd8413 100644
--- 
a/kernel/sql-translator/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/SQLTranslatorDistSQLStatement.g4
+++ 
b/kernel/sql-translator/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/SQLTranslatorDistSQLStatement.g4
@@ -20,5 +20,7 @@ grammar SQLTranslatorDistSQLStatement;
 import Symbol, RALStatement;
 
 execute
-    : (showSQLTranslatorRule) SEMI_? EOF
+    : (showSQLTranslatorRule
+    | alterSQLTranslatorRule
+    ) SEMI_? EOF
     ;
diff --git 
a/kernel/sql-translator/distsql/parser/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/parser/core/SQLTranslatorDistSQLStatementVisitor.java
 
b/kernel/sql-translator/distsql/parser/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/parser/core/SQLTranslatorDistSQLStatementVisitor.java
index 37037fd4f5f..5225d943805 100644
--- 
a/kernel/sql-translator/distsql/parser/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/parser/core/SQLTranslatorDistSQLStatementVisitor.java
+++ 
b/kernel/sql-translator/distsql/parser/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/parser/core/SQLTranslatorDistSQLStatementVisitor.java
@@ -17,11 +17,19 @@
 
 package org.apache.shardingsphere.sqltranslator.distsql.parser.core;
 
+import org.antlr.v4.runtime.tree.ParseTree;
 import 
org.apache.shardingsphere.distsql.parser.autogen.SQLTranslatorDistSQLStatementBaseVisitor;
+import 
org.apache.shardingsphere.distsql.parser.autogen.SQLTranslatorDistSQLStatementParser.AlterSQLTranslatorRuleContext;
+import 
org.apache.shardingsphere.distsql.parser.autogen.SQLTranslatorDistSQLStatementParser.PropertiesDefinitionContext;
+import 
org.apache.shardingsphere.distsql.parser.autogen.SQLTranslatorDistSQLStatementParser.PropertyContext;
 import 
org.apache.shardingsphere.distsql.parser.autogen.SQLTranslatorDistSQLStatementParser.ShowSQLTranslatorRuleContext;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
-import 
org.apache.shardingsphere.sqltranslator.distsql.statement.ShowSQLTranslatorRuleStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
+import 
org.apache.shardingsphere.sqltranslator.distsql.statement.queryable.ShowSQLTranslatorRuleStatement;
+import 
org.apache.shardingsphere.sqltranslator.distsql.statement.updateable.AlterSQLTranslatorRuleStatement;
+
+import java.util.Properties;
 
 /**
  * SQL statement visitor for SQL translator DistSQL.
@@ -32,4 +40,26 @@ public final class SQLTranslatorDistSQLStatementVisitor 
extends SQLTranslatorDis
     public ASTNode visitShowSQLTranslatorRule(final 
ShowSQLTranslatorRuleContext ctx) {
         return new ShowSQLTranslatorRuleStatement();
     }
+    
+    @Override
+    public ASTNode visitAlterSQLTranslatorRule(final 
AlterSQLTranslatorRuleContext ctx) {
+        return new 
AlterSQLTranslatorRuleStatement(getIdentifierValue(ctx.sqlTranslatorRuleDefinition().providerName()),
 getProperties(ctx.sqlTranslatorRuleDefinition().propertiesDefinition()),
+                null == 
ctx.sqlTranslatorRuleDefinition().useOriginalSQLDefinition().useOriginalSQL() ? 
null
+                        : 
Boolean.valueOf(getIdentifierValue(ctx.sqlTranslatorRuleDefinition().useOriginalSQLDefinition().useOriginalSQL())));
+    }
+    
+    private Properties getProperties(final PropertiesDefinitionContext ctx) {
+        Properties result = new Properties();
+        if (null == ctx || null == ctx.properties()) {
+            return result;
+        }
+        for (PropertyContext each : ctx.properties().property()) {
+            
result.setProperty(IdentifierValue.getQuotedContent(each.key.getText()), 
IdentifierValue.getQuotedContent(each.value.getText()));
+        }
+        return result;
+    }
+    
+    private String getIdentifierValue(final ParseTree context) {
+        return null == context ? null : new 
IdentifierValue(context.getText()).getValue();
+    }
 }
diff --git 
a/kernel/sql-translator/distsql/statement/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/statement/ShowSQLTranslatorRuleStatement.java
 
b/kernel/sql-translator/distsql/statement/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/statement/queryable/ShowSQLTranslatorRuleStatement.java
similarity index 98%
copy from 
kernel/sql-translator/distsql/statement/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/statement/ShowSQLTranslatorRuleStatement.java
copy to 
kernel/sql-translator/distsql/statement/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/statement/queryable/ShowSQLTranslatorRuleStatement.java
index 583e6667915..81b611a67a8 100644
--- 
a/kernel/sql-translator/distsql/statement/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/statement/ShowSQLTranslatorRuleStatement.java
+++ 
b/kernel/sql-translator/distsql/statement/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/statement/queryable/ShowSQLTranslatorRuleStatement.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sqltranslator.distsql.statement;
+package org.apache.shardingsphere.sqltranslator.distsql.statement.queryable;
 
 import org.apache.shardingsphere.distsql.statement.ral.QueryableRALStatement;
 
diff --git 
a/kernel/sql-translator/distsql/statement/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/statement/ShowSQLTranslatorRuleStatement.java
 
b/kernel/sql-translator/distsql/statement/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/statement/updateable/AlterSQLTranslatorRuleStatement.java
similarity index 63%
rename from 
kernel/sql-translator/distsql/statement/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/statement/ShowSQLTranslatorRuleStatement.java
rename to 
kernel/sql-translator/distsql/statement/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/statement/updateable/AlterSQLTranslatorRuleStatement.java
index 583e6667915..f404cde243e 100644
--- 
a/kernel/sql-translator/distsql/statement/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/statement/ShowSQLTranslatorRuleStatement.java
+++ 
b/kernel/sql-translator/distsql/statement/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/statement/updateable/AlterSQLTranslatorRuleStatement.java
@@ -15,12 +15,24 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sqltranslator.distsql.statement;
+package org.apache.shardingsphere.sqltranslator.distsql.statement.updateable;
 
-import org.apache.shardingsphere.distsql.statement.ral.QueryableRALStatement;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.distsql.statement.ral.UpdatableGlobalRuleRALStatement;
+
+import java.util.Properties;
 
 /**
- * Show SQL translator rule statement.
+ * Alter SQL translator rule statement.
  */
-public final class ShowSQLTranslatorRuleStatement extends 
QueryableRALStatement {
+@RequiredArgsConstructor
+@Getter
+public final class AlterSQLTranslatorRuleStatement extends 
UpdatableGlobalRuleRALStatement {
+    
+    private final String type;
+    
+    private final Properties props;
+    
+    private final Boolean useOriginalSQLWhenTranslatingFailed;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/impl/QueryableRALStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/impl/QueryableRALStatementAssert.java
index d149c6dae72..fff02ac1ec1 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/impl/QueryableRALStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/impl/QueryableRALStatementAssert.java
@@ -33,7 +33,7 @@ import 
org.apache.shardingsphere.distsql.statement.ral.queryable.ShowDistVariabl
 import 
org.apache.shardingsphere.distsql.statement.ral.queryable.ShowTableMetaDataStatement;
 import 
org.apache.shardingsphere.parser.distsql.statement.queryable.ShowSQLParserRuleStatement;
 import 
org.apache.shardingsphere.readwritesplitting.distsql.statement.ShowStatusFromReadwriteSplittingRulesStatement;
-import 
org.apache.shardingsphere.sqltranslator.distsql.statement.ShowSQLTranslatorRuleStatement;
+import 
org.apache.shardingsphere.sqltranslator.distsql.statement.queryable.ShowSQLTranslatorRuleStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.ExistingAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.ral.impl.queryable.ConvertYamlConfigurationStatementAssert;

Reply via email to