Repository: apache/incubator-shardingsphere
Pull request #3985 (2020-01-15 03:07:04)

Merge parer branch to dev
#3914 


coveralls: ## Pull Request Test Coverage Report for [Build 1376](https://coveralls.io/builds/28114544)

* **0** of **43**   **(0.0%)**  changed or added relevant lines in **9** files are covered.
* No unchanged relevant lines lost coverage.
* Overall coverage decreased (**-0.2%**) to **65.961%**

---

|  Changes Missing Coverage | Covered Lines | Changed/Added Lines | % |
| :-----|--------------|--------|---: |
| [shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorEngine.java](https://coveralls.io/builds/28114544/source?filename=shardingsphere-sql-parser%2Fshardingsphere-sql-parser-engine%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fshardingsphere%2Fsql%2Fparser%2Fcore%2Fvisitor%2FSQLVisitorEngine.java#L42) | 0 | 1 | 0.0%
| [shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/MySQLParserEntry.java](https://coveralls.io/builds/28114544/source?filename=shardingsphere-sql-parser%2Fshardingsphere-sql-parser-mysql%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fshardingsphere%2Fsql%2Fparser%2FMySQLParserEntry.java#L51) | 0 | 1 | 0.0%
| [shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/OracleParserEntry.java](https://coveralls.io/builds/28114544/source?filename=shardingsphere-sql-parser%2Fshardingsphere-sql-parser-oracle%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fshardingsphere%2Fsql%2Fparser%2FOracleParserEntry.java#L51) | 0 | 1 | 0.0%
| [shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/PostgreSQLParserEntry.java](https://coveralls.io/builds/28114544/source?filename=shardingsphere-sql-parser%2Fshardingsphere-sql-parser-postgresql%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fshardingsphere%2Fsql%2Fparser%2FPostgreSQLParserEntry.java#L51) | 0 | 1 | 0.0%
| [shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/SQL92ParserEntry.java](https://coveralls.io/builds/28114544/source?filename=shardingsphere-sql-parser%2Fshardingsphere-sql-parser-sql92%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fshardingsphere%2Fsql%2Fparser%2FSQL92ParserEntry.java#L51) | 0 | 1 | 0.0%
| [shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/SQLServerParserEntry.java](https://coveralls.io/builds/28114544/source?filename=shardingsphere-sql-parser%2Fshardingsphere-sql-parser-sqlserver%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fshardingsphere%2Fsql%2Fparser%2FSQLServerParserEntry.java#L51) | 0 | 1 | 0.0%
| [sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/visitor/VisitorSQLCasesRegistry.java](https://coveralls.io/builds/28114544/source?filename=sharding-sql-test%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fshardingsphere%2Ftest%2Fsql%2Floader%2Fvisitor%2FVisitorSQLCasesRegistry.java#L30) | 0 | 5 | 0.0%
| [shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorFactory.java](https://coveralls.io/builds/28114544/source?filename=shardingsphere-sql-parser%2Fshardingsphere-sql-parser-engine%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fshardingsphere%2Fsql%2Fparser%2Fcore%2Fvisitor%2FSQLVisitorFactory.java#L42) | 0 | 7 | 0.0%
| [shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/MySQLVisitor.java](https://coveralls.io/builds/28114544/source?filename=shardingsphere-sql-parser%2Fshardingsphere-sql-parser-mysql%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fshardingsphere%2Fsql%2Fparser%2FMySQLVisitor.java#L42) | 0 | 25 | 0.0%
<!-- | **Total:** | **0** | **43** | **0.0%** | -->


|  Totals | [![Coverage Status](https://coveralls.io/builds/28114544/badge)](https://coveralls.io/builds/28114544) |
| :-- | --: |
| Change from base [Build 686](https://coveralls.io/builds/28102358): |  -0.2% |
| Covered Lines: | 10813 |
| Relevant Lines: | 16393 |

---
##### 💛  - [Coveralls](https://coveralls.io)


Patch:
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorEngine.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorEngine.java
new file mode 100644
index 00000000000..a2541c085cf
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorEngine.java
@@ -0,0 +1,44 @@
+/*
+ * 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.core.visitor;
+
+import lombok.RequiredArgsConstructor;
+import org.antlr.v4.runtime.tree.ParseTree;
+import org.apache.shardingsphere.sql.parser.sql.ASTNode;
+
+/**
+ * SQL parser engine.
+ *
+ * @author panjuan
+ */
+@RequiredArgsConstructor
+public final class SQLVisitorEngine {
+    
+    private final String databaseTypeName;
+    
+    private final ParseTree parseTree;
+    
+    /**
+     * Parse SQL to abstract syntax tree.
+     *
+     * @return ast node
+     */
+    public ASTNode parse() {
+        return (ASTNode) SQLVisitorFactory.newInstance(databaseTypeName).visit(parseTree);
+    }
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorFactory.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorFactory.java
new file mode 100644
index 00000000000..f54bd962a71
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorFactory.java
@@ -0,0 +1,54 @@
+/*
+ * 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.core.visitor;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.SneakyThrows;
+import org.apache.shardingsphere.spi.NewInstanceServiceLoader;
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
+import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
+
+/**
+ * SQL visitor factory.
+ * 
+ * @author panjuan
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SQLVisitorFactory {
+    
+    /** 
+     * New instance of SQL visitor.
+     * 
+     * @param databaseTypeName name of database type
+     * @return SQL visitor
+     */
+    public static SQLVisitor newInstance(final String databaseTypeName) {
+        for (SQLParserEntry each : NewInstanceServiceLoader.newServiceInstances(SQLParserEntry.class)) {
+            if (each.getDatabaseTypeName().equals(databaseTypeName)) {
+                return createSQLVisitor(each);
+            }
+        }
+        throw new UnsupportedOperationException(String.format("Cannot support database type '%s'", databaseTypeName));
+    }
+    
+    @SneakyThrows
+    private static SQLVisitor createSQLVisitor(final SQLParserEntry parserEntry) {
+        return parserEntry.getVisitorClass().getConstructor().newInstance();
+    }
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/ASTNode.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/ASTNode.java
new file mode 100644
index 00000000000..60a6a5cb597
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/ASTNode.java
@@ -0,0 +1,26 @@
+/*
+ * 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.sql;
+
+/**
+ * AST note.
+ *
+ * @author panjuan
+ */
+public interface ASTNode {
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/SQLSegment.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/SQLSegment.java
index 797e81f6f46..4f88246878b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/SQLSegment.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/segment/SQLSegment.java
@@ -17,12 +17,14 @@
 
 package org.apache.shardingsphere.sql.parser.sql.segment;
 
+import org.apache.shardingsphere.sql.parser.sql.ASTNode;
+
 /**
  * SQL segment.
  * 
  * @author zhangliang
  */
-public interface SQLSegment {
+public interface SQLSegment extends ASTNode {
     
     /**
      * Get start index.
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/statement/SQLStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/statement/SQLStatement.java
index 0bae9fe5682..a071cffae0a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/statement/SQLStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/statement/SQLStatement.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.sql.parser.sql.statement;
 
 import com.google.common.base.Optional;
+import org.apache.shardingsphere.sql.parser.sql.ASTNode;
 import org.apache.shardingsphere.sql.parser.sql.segment.SQLSegment;
 
 import java.util.Collection;
@@ -27,7 +28,7 @@ import java.util.Collection;
  *
  * @author zhangliang
  */
-public interface SQLStatement {
+public interface SQLStatement extends ASTNode {
     
     /**
      * Get count of parameters.
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/value/LiteralValue.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/value/LiteralValue.java
new file mode 100644
index 00000000000..9b09aa39745
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/value/LiteralValue.java
@@ -0,0 +1,34 @@
+/*
+ * 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.sql.value;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.ASTNode;
+
+/**
+ * Literal value.
+ *
+ * @author panjuan
+ */
+@RequiredArgsConstructor
+public final class LiteralValue implements ASTNode {
+    
+    @Getter
+    private final String literal;
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/pom.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/pom.xml
index 75b5669f8ae..7338acd8e04 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/pom.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/pom.xml
@@ -50,7 +50,7 @@
                         <configuration>
                             <libDirectory>src/main/antlr4/imports/mysql/</libDirectory>
                             <listener>false</listener>
-                            <visitor>false</visitor>
+                            <visitor>true</visitor>
                         </configuration>
                         <goals>
                             <goal>antlr4</goal>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
index 66ecd0ba0bd..0bf2ecbc583 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
@@ -43,7 +43,7 @@ numberLiterals
 
 dateTimeLiterals
     : (DATE | TIME | TIMESTAMP) STRING_
-    | LBE_ identifier_ STRING_ RBE_
+    | LBE_ identifier STRING_ RBE_
     ;
 
 hexadecimalLiterals
@@ -62,12 +62,12 @@ nullValueLiterals
     : NULL
     ;
 
-identifier_
+identifier
     : IDENTIFIER_ | unreservedWord_
     ;
 
 variable_
-    : (AT_? AT_)? (GLOBAL | PERSIST | PERSIST_ONLY | SESSION)? DOT_? identifier_
+    : (AT_? AT_)? (GLOBAL | PERSIST | PERSIST_ONLY | SESSION)? DOT_? identifier
     ;
 
 scope_
@@ -112,7 +112,7 @@ unreservedWord_
     ;
 
 schemaName
-    : identifier_
+    : identifier
     ;
 
 tableName
@@ -125,42 +125,42 @@ columnName
 
 userName
     : STRING_  AT_ STRING_
-    | identifier_
+    | identifier
     | STRING_
     ;
 
 eventName
     : (STRING_ | IDENTIFIER_) AT_ (STRING_ IDENTIFIER_)
-    | identifier_
+    | identifier
     | STRING_ 
     ;
 
 serverName
-    : identifier_
+    : identifier
     | STRING_
     ; 
 
 wrapperName
-    : identifier_
+    : identifier
     | STRING_
     ;
 
 functionName
-    : identifier_
-    | (owner DOT_)? identifier_
+    : identifier
+    | (owner DOT_)? identifier
     ;
 
 viewName
-    : identifier_
-    | (owner DOT_)? identifier_
+    : identifier
+    | (owner DOT_)? identifier
     ;
 
 owner
-    : identifier_
+    : identifier
     ;
 
 name
-    : identifier_
+    : identifier
     ;
 
 columnNames
@@ -172,7 +172,7 @@ tableNames
     ;
 
 indexName
-    : identifier_
+    : identifier
     ;
 
 characterSetName_
@@ -221,7 +221,7 @@ channelName
     ;
 
 logName
-    : identifier_
+    : identifier
     ;
 
 roleName
@@ -317,13 +317,13 @@ simpleExpr
     | parameterMarker
     | literals
     | columnName
-    | simpleExpr COLLATE (STRING_ | identifier_)
+    | simpleExpr COLLATE (STRING_ | identifier)
     | variable_
     | simpleExpr OR_ simpleExpr
     | (PLUS_ | MINUS_ | TILDE_ | NOT_ | BINARY) simpleExpr
     | ROW? LP_ expr (COMMA_ expr)* RP_
     | EXISTS? subquery
-    | LBE_ identifier_ expr RBE_
+    | LBE_ identifier expr RBE_
     | matchExpression_
     | caseExpression_
     | intervalExpression_
@@ -348,11 +348,11 @@ distinct
     ;
 
 overClause_
-    : OVER (LP_ windowSpecification_ RP_ | identifier_)
+    : OVER (LP_ windowSpecification_ RP_ | identifier)
     ;
 
 windowSpecification_
-    : identifier_? partitionClause_? orderByClause? frameClause_?
+    : identifier? partitionClause_? orderByClause? frameClause_?
     ;
 
 partitionClause_
@@ -385,7 +385,7 @@ groupConcatFunction_
     ;
 
 windowFunction_
-    : identifier_ LP_ expr (COMMA_ expr)* RP_ overClause_
+    : identifier LP_ expr (COMMA_ expr)* RP_ overClause_
     ;
 
 castFunction_
@@ -394,7 +394,7 @@ castFunction_
 
 convertFunction_
     : CONVERT LP_ expr COMMA_ dataType RP_
-    | CONVERT LP_ expr USING identifier_ RP_ 
+    | CONVERT LP_ expr USING identifier RP_ 
     ;
 
 positionFunction_
@@ -406,7 +406,7 @@ substringFunction_
     ;
 
 extractFunction_
-    : EXTRACT LP_ identifier_ FROM expr RP_
+    : EXTRACT LP_ identifier FROM expr RP_
     ;
 
 charFunction_
@@ -438,7 +438,7 @@ regularFunction_
     ;
 
 regularFunctionName_
-    : identifier_ | IF | CURRENT_TIMESTAMP | UNIX_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP | NOW | REPLACE | INTERVAL | SUBSTRING | MOD
+    : identifier | IF | CURRENT_TIMESTAMP | UNIX_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP | NOW | REPLACE | INTERVAL | SUBSTRING | MOD
     | DATABASE | LEFT | RIGHT | LOWER | UPPER | DATE | DATEDIFF | DATE_FORMAT | DAY | DAYNAME | DAYOFMONTH | DAYOFWEEK | DAYOFYEAR
     | GEOMCOLLECTION | GEOMETRYCOLLECTION | LINESTRING | MULTILINESTRING | MULTIPOINT | MULTIPOLYGON | POINT | POLYGON | STR_TO_DATE
     | ST_AREA | ST_ASBINARY | ST_ASGEOJSON | ST_ASTEXT | ST_ASWKB | ST_ASWKT | ST_BUFFER | ST_BUFFER_STRATEGY | ST_CENTROID | ST_CONTAINS
@@ -503,7 +503,7 @@ dataType
     ;
 
 dataTypeName_
-    : identifier_ identifier_?
+    : identifier identifier?
     ;
 
 dataTypeLength
@@ -519,7 +519,7 @@ collateClause_
     ;
 
 ignoredIdentifier_
-    : identifier_ (DOT_ identifier_)?
+    : identifier (DOT_ identifier)?
     ;
 
 ignoredIdentifiers_
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DCLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DCLStatement.g4
index 7ba7296601e..138850a73aa 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DCLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DCLStatement.g4
@@ -102,7 +102,7 @@ objectType_
     ;
 
 privilegeLevel_
-    : ASTERISK_ | ASTERISK_ DOT_ASTERISK_ | identifier_ DOT_ASTERISK_ | tableName
+    : ASTERISK_ | ASTERISK_ DOT_ASTERISK_ | identifier DOT_ASTERISK_ | tableName
     ;
 
 createUser
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DDLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DDLStatement.g4
index 1059b41627d..f155cd89c8a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DDLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DDLStatement.g4
@@ -93,7 +93,7 @@ dropEvent
 
 createFunction
     : CREATE ownerStatement?
-      FUNCTION functionName LP_ (identifier_ dataType)? (COMMA_ identifier_ dataType)* RP_
+      FUNCTION functionName LP_ (identifier dataType)? (COMMA_ identifier dataType)* RP_
       RETURNS dataType
       routineOption_*
       routineBody
@@ -142,7 +142,7 @@ createView
       ( ALGORITHM EQ_ (UNDEFINED | MERGE | TEMPTABLE) )?
       ownerStatement?
       (SQL SECURITY (DEFINER | INVOKER))?
-      VIEW viewName (LP_ identifier_ (COMMA_ identifier_)* RP_)? 
+      VIEW viewName (LP_ identifier (COMMA_ identifier)* RP_)? 
       AS select
       (WITH (CASCADED | LOCAL)? CHECK OPTION)?
     ;
@@ -152,7 +152,7 @@ alterView
       ( ALGORITHM EQ_ (UNDEFINED | MERGE | TEMPTABLE) )?
       ownerStatement?
       (SQL SECURITY (DEFINER | INVOKER))?
-      VIEW viewName (LP_ identifier_ (COMMA_ identifier_)* RP_)? 
+      VIEW viewName (LP_ identifier (COMMA_ identifier)* RP_)? 
       AS select
       (WITH (CASCADED | LOCAL)? CHECK OPTION)?
     ;
@@ -163,7 +163,7 @@ dropView
     ;
 
 createTablespaceInnodb
-    : CREATE (UNDO)? TABLESPACE identifier_
+    : CREATE (UNDO)? TABLESPACE identifier
       ADD DATAFILE STRING_
       (FILE_BLOCK_SIZE EQ_ fileSizeLiteral_)?
       (ENCRYPTION EQ_ Y_N_ )?
@@ -171,52 +171,52 @@ createTablespaceInnodb
     ;
 
 createTablespaceNdb
-    : CREATE ( UNDO )? TABLESPACE identifier_
+    : CREATE ( UNDO )? TABLESPACE identifier
       ADD DATAFILE STRING_
-      USE LOGFILE GROUP identifier_
+      USE LOGFILE GROUP identifier
       (EXTENT_SIZE EQ_? fileSizeLiteral_)?
       (INITIAL_SIZE EQ_? fileSizeLiteral_)?
       (AUTOEXTEND_SIZE EQ_? fileSizeLiteral_)?
       (MAX_SIZE EQ_? fileSizeLiteral_)?
-      (NODEGROUP EQ_? identifier_)?
+      (NODEGROUP EQ_? identifier)?
       WAIT?
       (COMMENT EQ_? STRING_)?
-      ENGINE EQ_? identifier_
+      ENGINE EQ_? identifier
     ;
 
 alterTablespace
-    : ALTER TABLESPACE identifier_
+    : ALTER TABLESPACE identifier
       (ADD | DROP) DATAFILE STRING_
       (INITIAL_SIZE EQ_ fileSizeLiteral_)?
       WAIT?
-      ENGINE EQ_? identifier_
+      ENGINE EQ_? identifier
     ;
 
 dropTablespace
-    : DROP TABLESPACE identifier_ (ENGINE EQ_? identifier_)?
+    : DROP TABLESPACE identifier (ENGINE EQ_? identifier)?
     ;
 
 createLogfileGroup
-    : CREATE LOGFILE GROUP identifier_
+    : CREATE LOGFILE GROUP identifier
       ADD UNDOFILE STRING_
       (INITIAL_SIZE EQ_? fileSizeLiteral_)?
       (UNDO_BUFFER_SIZE EQ_? fileSizeLiteral_)?
       (REDO_BUFFER_SIZE EQ_? fileSizeLiteral_)?
-      (NODEGROUP EQ_? identifier_)?
+      (NODEGROUP EQ_? identifier)?
       WAIT?
       (COMMENT EQ_? STRING_)?
-      ENGINE EQ_? identifier_
+      ENGINE EQ_? identifier
     ;
 
 alterLogfileGroup
-    : ALTER LOGFILE GROUP identifier_
+    : ALTER LOGFILE GROUP identifier
       ADD UNDOFILE STRING_
       (INITIAL_SIZE EQ_? fileSizeLiteral_)?
-      WAIT? ENGINE EQ_? identifier_
+      WAIT? ENGINE EQ_? identifier
     ;
 
 dropLogfileGroup
-    : DROP LOGFILE GROUP identifier_ ENGINE EQ_ identifier_
+    : DROP LOGFILE GROUP identifier ENGINE EQ_ identifier
     ;
 
 createTrigger
@@ -302,7 +302,7 @@ keyPart_
 indexOption_
     : KEY_BLOCK_SIZE EQ_? NUMBER_ 
     | indexType_ 
-    | WITH PARSER identifier_ 
+    | WITH PARSER identifier 
     | COMMENT STRING_ 
     | (VISIBLE | INVISIBLE)
     ;
@@ -461,7 +461,7 @@ renameIndexSpecification
     ;
 
 renameTableSpecification_
-    : RENAME (TO | AS)? identifier_
+    : RENAME (TO | AS)? identifier
     ;
 
 partitionDefinitions_
@@ -469,7 +469,7 @@ partitionDefinitions_
     ;
 
 partitionDefinition_
-    : PARTITION identifier_ 
+    : PARTITION identifier 
     (VALUES (LESS THAN partitionLessThanValue_ | IN LP_ partitionValueList_ RP_))?
     partitionDefinitionOption_* 
     (LP_ subpartitionDefinition_ (COMMA_ subpartitionDefinition_)* RP_)?
@@ -484,17 +484,17 @@ partitionValueList_
     ;
 
 partitionDefinitionOption_
-    : STORAGE? ENGINE EQ_? identifier_
+    : STORAGE? ENGINE EQ_? identifier
     | COMMENT EQ_? STRING_
     | DATA DIRECTORY EQ_? STRING_
     | INDEX DIRECTORY EQ_? STRING_
     | MAX_ROWS EQ_? NUMBER_
     | MIN_ROWS EQ_? NUMBER_
-    | TABLESPACE EQ_? identifier_
+    | TABLESPACE EQ_? identifier
     ;
 
 subpartitionDefinition_
-    : SUBPARTITION identifier_ partitionDefinitionOption_*
+    : SUBPARTITION identifier partitionDefinitionOption_*
     ;
 
 dropTableSpecification_
@@ -547,7 +547,7 @@ routineOption_
     ;
 
 procedureParameter_
-    : ( IN | OUT | INOUT ) identifier_ dataType
+    : ( IN | OUT | INOUT ) identifier dataType
     ;
 
 fileSizeLiteral_
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DMLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
index 0505797c131..8452433a441 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
@@ -101,7 +101,7 @@ select
     ;
 
 callStatement
-    : CALL identifier_ (LP_ (identifier_ | expr)? RP_)?
+    : CALL identifier (LP_ (identifier | expr)? RP_)?
     ;
 
 doStatement
@@ -113,11 +113,11 @@ handlerStatement
     ;
 
 handlerOpenStatement
-    : HANDLER tableName OPEN (AS? identifier_)?
+    : HANDLER tableName OPEN (AS? identifier)?
     ;
 
 handlerReadIndexStatement
-    : HANDLER tableName READ identifier_ ( comparisonOperator LP_ identifier_ RP_ | (FIRST | NEXT | PREV | LAST) ) 
+    : HANDLER tableName READ identifier ( comparisonOperator LP_ identifier RP_ | (FIRST | NEXT | PREV | LAST) ) 
     (WHERE expr)? (LIMIT numberLiterals)?
     ;
 
@@ -140,12 +140,12 @@ loadDataStatement
       INFILE STRING_
       (REPLACE | IGNORE)?
       INTO TABLE tableName
-      (PARTITION LP_ identifier_ (COMMA_ identifier_)* RP_ )?
-      (CHARACTER SET identifier_)?
+      (PARTITION LP_ identifier (COMMA_ identifier)* RP_ )?
+      (CHARACTER SET identifier)?
       ( (FIELDS | COLUMNS) selectFieldsInto_+ )?
       ( LINES selectLinesInto_+ )?
       ( IGNORE numberLiterals (LINES | ROWS) )?
-      ( LP_ identifier_ (COMMA_ identifier_)* RP_ )?
+      ( LP_ identifier (COMMA_ identifier)* RP_ )?
       (setAssignmentsClause)?
     ;
 
@@ -155,10 +155,10 @@ loadXmlStatement
       INFILE STRING_
       (REPLACE | IGNORE)?
       INTO TABLE tableName
-      (CHARACTER SET identifier_)?
+      (CHARACTER SET identifier)?
       (ROWS IDENTIFIED BY LT_ STRING_ GT_)?
       ( IGNORE numberLiterals (LINES | ROWS) )?
-      ( LP_ identifier_ (COMMA_ identifier_)* RP_ )?
+      ( LP_ identifier (COMMA_ identifier)* RP_ )?
       (setAssignmentsClause)?
     ;
 
@@ -195,7 +195,7 @@ selectItem
     ;
 
 alias
-    : identifier_ | STRING_
+    : identifier | STRING_
     ;
 
 unqualifiedShorthand
@@ -203,7 +203,7 @@ unqualifiedShorthand
     ;
 
 qualifiedShorthand
-    : identifier_ DOT_ASTERISK_
+    : identifier DOT_ASTERISK_
     ;
 
 fromClause
@@ -227,7 +227,7 @@ tableFactor
     ;
 
 partitionNames_ 
-    : PARTITION LP_ identifier_ (COMMA_ identifier_)* RP_
+    : PARTITION LP_ identifier (COMMA_ identifier)* RP_
     ;
 
 indexHintList_
@@ -293,7 +293,7 @@ selectFieldsInto_
     ;
 
 selectIntoExpression_
-    : INTO identifier_ (COMMA_ identifier_ )* | INTO DUMPFILE STRING_
+    : INTO identifier (COMMA_ identifier )* | INTO DUMPFILE STRING_
     | (INTO OUTFILE STRING_ (CHARACTER SET IDENTIFIER_)?((FIELDS | COLUMNS) selectFieldsInto_+)? (LINES selectLinesInto_+)?)
     ;
 
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/MySQLParserEntry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/MySQLParserEntry.java
index 53b797cdffc..28e4eec6493 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/MySQLParserEntry.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/MySQLParserEntry.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sql.parser;
 
 import org.antlr.v4.runtime.Lexer;
 import org.apache.shardingsphere.sql.parser.api.SQLParser;
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
 import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementLexer;
 import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
 
@@ -26,6 +27,7 @@ import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
  * SQL parser entry for MySQL.
  *
  * @author zhangliang
+ * @author panjuan
  */
 public final class MySQLParserEntry implements SQLParserEntry {
     
@@ -43,4 +45,9 @@ public final class MySQLParserEntry implements SQLParserEntry {
     public Class<? extends SQLParser> getParserClass() {
         return MySQLParser.class;
     }
+    
+    @Override
+    public Class<? extends SQLVisitor> getVisitorClass() {
+        return MySQLVisitor.class;
+    }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/MySQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/MySQLVisitor.java
new file mode 100644
index 00000000000..1b353acd0cd
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/MySQLVisitor.java
@@ -0,0 +1,110 @@
+/*
+ * 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;
+
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementBaseVisitor;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.FromSchemaContext;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.IdentifierContext;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.SchemaNameContext;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowLikeContext;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowTableStatusContext;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.StringLiteralsContext;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.UnreservedWord_Context;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.UseContext;
+import org.apache.shardingsphere.sql.parser.sql.ASTNode;
+import org.apache.shardingsphere.sql.parser.sql.segment.dal.FromSchemaSegment;
+import org.apache.shardingsphere.sql.parser.sql.segment.dal.ShowLikeSegment;
+import org.apache.shardingsphere.sql.parser.sql.statement.dal.dialect.mysql.ShowTableStatusStatement;
+import org.apache.shardingsphere.sql.parser.sql.statement.dal.dialect.mysql.UseStatement;
+import org.apache.shardingsphere.sql.parser.sql.value.LiteralValue;
+
+/**
+ * MySQL visitor.
+ *
+ * @author panjuan
+ */
+public final class MySQLVisitor extends MySQLStatementBaseVisitor<ASTNode> implements SQLVisitor {
+    
+    // DALStatement.g4
+    @Override
+    public ASTNode visitUse(final UseContext ctx) {
+        LiteralValue schema = (LiteralValue) visit(ctx.schemaName());
+        UseStatement useStatement = new UseStatement();
+        useStatement.setSchema(schema.getLiteral());
+        return useStatement;
+    }
+    
+    @Override
+    public ASTNode visitShowTableStatus(final ShowTableStatusContext ctx) {
+        ShowTableStatusStatement showTableStatusStatement = new ShowTableStatusStatement();
+        FromSchemaContext fromSchemaContext = ctx.fromSchema();
+        ShowLikeContext showLikeContext = ctx.showLike();
+        if (null != fromSchemaContext) {
+            FromSchemaSegment fromSchemaSegment = (FromSchemaSegment) visit(ctx.fromSchema());
+            showTableStatusStatement.getAllSQLSegments().add(fromSchemaSegment);
+        }
+        if (null != showLikeContext) {
+            ShowLikeSegment showLikeSegment = (ShowLikeSegment) visit(ctx.showLike());
+            showTableStatusStatement.getAllSQLSegments().add(showLikeSegment);
+        }
+        return showTableStatusStatement;
+    }
+    
+    @Override
+    public ASTNode visitFromSchema(final FromSchemaContext ctx) {
+        return new FromSchemaSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex());
+    }
+    
+    @Override
+    public ASTNode visitShowLike(final ShowLikeContext ctx) {
+        LiteralValue literalValue = (LiteralValue) visit(ctx.stringLiterals());
+        return new ShowLikeSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), literalValue.getLiteral());
+    }
+    
+    // DCLStatement.g4
+    // DDLStatement.g4
+    // DMLStatement.g4
+    // TCLStatement.g4
+    // StoreProcedure.g4
+    
+    // BaseRule.g4
+    @Override
+    public ASTNode visitSchemaName(final SchemaNameContext ctx) {
+        return visit(ctx.identifier());
+    }
+    
+    @Override
+    public ASTNode visitStringLiterals(final StringLiteralsContext ctx) {
+        return new LiteralValue(ctx.STRING_().getText());
+    }
+    
+    @Override
+    public ASTNode visitIdentifier(final IdentifierContext ctx) {
+        UnreservedWord_Context unreservedWord = ctx.unreservedWord_();
+        if (null != unreservedWord) {
+            return visit(unreservedWord);
+        }
+        return new LiteralValue(ctx.getText());
+    }
+    
+    @Override
+    public ASTNode visitUnreservedWord_(final UnreservedWord_Context ctx) {
+        return new LiteralValue(ctx.getText());
+    }
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/pom.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/pom.xml
index f029e6f2ee0..0c1398e8d6a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/pom.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/pom.xml
@@ -50,7 +50,7 @@
                         <configuration>
                             <libDirectory>src/main/antlr4/imports/oracle/</libDirectory>
                             <listener>false</listener>
-                            <visitor>false</visitor>
+                            <visitor>true</visitor>
                         </configuration>
                         <goals>
                             <goal>antlr4</goal>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/BaseRule.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/BaseRule.g4
index 6d860d872fe..052a202090f 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/BaseRule.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/BaseRule.g4
@@ -43,7 +43,7 @@ numberLiterals
 
 dateTimeLiterals
     : (DATE | TIME | TIMESTAMP) STRING_
-    | LBE_ identifier_ STRING_ RBE_
+    | LBE_ identifier STRING_ RBE_
     ;
 
 hexadecimalLiterals
@@ -62,7 +62,7 @@ nullValueLiterals
     : NULL
     ;
 
-identifier_
+identifier
     : IDENTIFIER_ | unreservedWord_
     ;
 
@@ -100,7 +100,7 @@ unreservedWord_
     ;
 
 schemaName
-    : identifier_
+    : identifier
     ;
 
 tableName
@@ -112,11 +112,11 @@ columnName
     ;
 
 owner
-    : identifier_
+    : identifier
     ;
 
 name
-    : identifier_
+    : identifier
     ;
 
 columnNames
@@ -128,7 +128,7 @@ tableNames
     ;
 
 indexName
-    : identifier_
+    : identifier
     ;
 
 oracleId
@@ -218,7 +218,7 @@ simpleExpr
     | (PLUS_ | MINUS_ | TILDE_ | NOT_ | BINARY) simpleExpr
     | ROW? LP_ expr (COMMA_ expr)* RP_
     | EXISTS? subquery
-    | LBE_ identifier_ expr RBE_
+    | LBE_ identifier expr RBE_
     | caseExpression_
     | privateExprOfDb
     ;
@@ -256,7 +256,7 @@ regularFunction_
     ;
 
 regularFunctionName_
-    : identifier_ | IF | LOCALTIME | LOCALTIMESTAMP | INTERVAL
+    : identifier | IF | LOCALTIME | LOCALTIMESTAMP | INTERVAL
     ;
 
 caseExpression_
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DDLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
index 33666ac1dc9..de6c6b67a65 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
@@ -221,7 +221,7 @@ alterTableProperties
     ;
 
 renameTableSpecification_
-    : RENAME TO identifier_
+    : RENAME TO identifier
     ;
 
 columnClauses
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DMLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DMLStatement.g4
index 4a43e2d57a0..76197de2bc6 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DMLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DMLStatement.g4
@@ -125,7 +125,7 @@ selectItem
     ;
 
 alias
-    : identifier_ | STRING_
+    : identifier | STRING_
     ;
 
 unqualifiedShorthand
@@ -133,7 +133,7 @@ unqualifiedShorthand
     ;
 
 qualifiedShorthand
-    : identifier_ DOT_ASTERISK_
+    : identifier DOT_ASTERISK_
     ;
 
 fromClause
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/OracleParserEntry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/OracleParserEntry.java
index cfc87d400dc..5128a2a1a8d 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/OracleParserEntry.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/OracleParserEntry.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sql.parser;
 
 import org.antlr.v4.runtime.Lexer;
 import org.apache.shardingsphere.sql.parser.api.SQLParser;
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementLexer;
 import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
 
@@ -26,6 +27,7 @@ import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
  * SQL parser entry for Oracle.
  *
  * @author zhangliang
+ * @author panjuan
  */
 public final class OracleParserEntry implements SQLParserEntry {
     
@@ -43,4 +45,9 @@ public final class OracleParserEntry implements SQLParserEntry {
     public Class<? extends SQLParser> getParserClass() {
         return OracleParser.class;
     }
+
+    @Override
+    public Class<? extends SQLVisitor> getVisitorClass() {
+        return OracleVisitor.class;
+    }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/OracleVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/OracleVisitor.java
new file mode 100644
index 00000000000..cbf0f81867d
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/OracleVisitor.java
@@ -0,0 +1,38 @@
+/*
+ * 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;
+
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
+import org.apache.shardingsphere.sql.parser.autogen.OracleStatementBaseVisitor;
+import org.apache.shardingsphere.sql.parser.sql.ASTNode;
+
+/**
+ * Oracle visitor.
+ *
+ * @author panjuan
+ */
+public final class OracleVisitor extends OracleStatementBaseVisitor<ASTNode> implements SQLVisitor {
+    
+    // DALStatement.g4
+    // DCLStatement.g4
+    // DDLStatement.g4
+    // DMLStatement.g4
+    // TCLStatement.g4
+    // StoreProcedure.g4
+    // BaseRule.g4
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/pom.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/pom.xml
index fb91b69fa89..1b9cc162145 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/pom.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/pom.xml
@@ -50,7 +50,7 @@
                         <configuration>
                             <libDirectory>src/main/antlr4/imports/postgresql/</libDirectory>
                             <listener>false</listener>
-                            <visitor>false</visitor>
+                            <visitor>true</visitor>
                         </configuration>
                         <goals>
                             <goal>antlr4</goal>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/BaseRule.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/BaseRule.g4
index f19e31e36f0..21dc15af870 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/BaseRule.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/BaseRule.g4
@@ -60,7 +60,7 @@ literalsType_
     : COLON_ COLON_ IDENTIFIER_
     ;
 
-identifier_
+identifier
     : unicodeEscapes_? IDENTIFIER_ uescape_? |  unreservedWord_ 
     ;
 
@@ -97,7 +97,7 @@ unreservedWord_
     ;
 
 schemaName
-    : identifier_
+    : identifier
     ;
 
 tableName
@@ -109,11 +109,11 @@ columnName
     ;
 
 owner
-    : identifier_
+    : identifier
     ;
 
 name
-    : identifier_
+    : identifier
     ;
 
 tableNames
@@ -125,15 +125,15 @@ columnNames
     ;
 
 collationName
-    : STRING_ | identifier_
+    : STRING_ | identifier
     ;
 
 indexName
-    : identifier_
+    : identifier
     ;
 
 alias
-    : identifier_
+    : identifier
     ;
 
 primaryKey
@@ -196,12 +196,12 @@ simpleExpr
     | parameterMarker
     | literals
     | columnName
-    | simpleExpr COLLATE (STRING_ | identifier_)
+    | simpleExpr COLLATE (STRING_ | identifier)
     | simpleExpr OR_ simpleExpr
     | (PLUS_ | MINUS_ | TILDE_ | NOT_ | BINARY) simpleExpr
     | ROW? LP_ expr (COMMA_ expr)* RP_
     | EXISTS? subquery
-    | LBE_ identifier_ expr RBE_
+    | LBE_ identifier expr RBE_
     | caseExpression_
     ;
 
@@ -226,7 +226,7 @@ filterClause_
     ;
 
 windowFunction_
-    : identifier_ LP_ expr (COMMA_ expr)* RP_ filterClause_ OVER identifier_? windowDefinition_
+    : identifier LP_ expr (COMMA_ expr)* RP_ filterClause_ OVER identifier? windowDefinition_
     ;
 
 windowDefinition_
@@ -270,7 +270,7 @@ regularFunction_
     ;
 
 regularFunctionName_
-    : identifier_ | IF | CURRENT_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP | INTERVAL
+    : identifier | IF | CURRENT_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP | INTERVAL
     ;
 
 caseExpression_
@@ -302,7 +302,7 @@ dataType
     ;
 
 dataTypeName_
-    : identifier_ identifier_?
+    : identifier identifier?
     ;
 
 dataTypeLength
@@ -318,7 +318,7 @@ collateClause_
     ;
 
 ignoredIdentifier_
-    : identifier_ (DOT_ identifier_)?
+    : identifier (DOT_ identifier)?
     ;
 
 ignoredIdentifiers_
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DALStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DALStatement.g4
index d4b6985d54d..ee4098e9615 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DALStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DALStatement.g4
@@ -20,7 +20,7 @@ grammar DALStatement;
 import Symbol, Keyword, PostgreSQLKeyword, Literals, BaseRule;
 
 show
-    : SHOW (ALL | TRANSACTION ISOLATION LEVEL | identifier_)
+    : SHOW (ALL | TRANSACTION ISOLATION LEVEL | identifier)
     ;
 
 set
@@ -36,9 +36,9 @@ timeZoneClause_
     ;
 
 configurationParameterClause_
-    : identifier_ (TO | EQ_) (identifier_ | STRING_ | DEFAULT)
+    : identifier (TO | EQ_) (identifier | STRING_ | DEFAULT)
     ;
 
 resetParameter
-    : RESET (ALL | identifier_)
+    : RESET (ALL | identifier)
     ;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DDLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DDLStatement.g4
index 7773ad9cc41..78d1774f99b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DDLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DDLStatement.g4
@@ -295,7 +295,7 @@ renameConstraint
     ;
 
 renameTableSpecification_
-    : RENAME TO identifier_
+    : RENAME TO identifier
     ;
 
 indexExistClause_
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
index 4e9d00fdc39..e72823a49e6 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
@@ -101,7 +101,7 @@ selectItem
     ;
 
 alias
-    : identifier_ | STRING_
+    : identifier | STRING_
     ;
 
 unqualifiedShorthand
@@ -109,7 +109,7 @@ unqualifiedShorthand
     ;
 
 qualifiedShorthand
-    : identifier_ DOT_ASTERISK_
+    : identifier DOT_ASTERISK_
     ;
 
 fromClause
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/PostgreSQLParser.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/PostgreSQLParser.java
index e4a9518f487..2411929766b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/PostgreSQLParser.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/PostgreSQLParser.java
@@ -25,6 +25,7 @@ import org.apache.shardingsphere.sql.parser.api.SQLParser;
  * SQL parser for PostgreSQL.
  * 
  * @author duhongjun
+ * @author panjuan
  */
 public final class PostgreSQLParser extends PostgreSQLStatementParser implements SQLParser {
     
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/PostgreSQLParserEntry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/PostgreSQLParserEntry.java
index bd1847cde8f..cb11c443a43 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/PostgreSQLParserEntry.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/PostgreSQLParserEntry.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sql.parser;
 
 import org.antlr.v4.runtime.Lexer;
 import org.apache.shardingsphere.sql.parser.api.SQLParser;
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
 import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementLexer;
 import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
 
@@ -26,6 +27,7 @@ import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
  * SQL parser entry for PostgreSQL.
  *
  * @author zhangliang
+ * @author panjuan
  */
 public final class PostgreSQLParserEntry implements SQLParserEntry {
     
@@ -43,4 +45,9 @@ public final class PostgreSQLParserEntry implements SQLParserEntry {
     public Class<? extends SQLParser> getParserClass() {
         return PostgreSQLParser.class;
     }
+    
+    @Override
+    public Class<? extends SQLVisitor> getVisitorClass() {
+        return PostgreSQLVisitor.class;
+    }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/PostgreSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/PostgreSQLVisitor.java
new file mode 100644
index 00000000000..877d895bf2e
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/PostgreSQLVisitor.java
@@ -0,0 +1,38 @@
+/*
+ * 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;
+
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
+import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementBaseVisitor;
+import org.apache.shardingsphere.sql.parser.sql.ASTNode;
+
+/**
+ * PostgreSql visitor.
+ *
+ * @author panjuan
+ */
+public final class PostgreSQLVisitor extends PostgreSQLStatementBaseVisitor<ASTNode> implements SQLVisitor {
+    
+    // DALStatement.g4
+    // DCLStatement.g4
+    // DDLStatement.g4
+    // DMLStatement.g4
+    // TCLStatement.g4
+    // StoreProcedure.g4
+    // BaseRule.g4
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLVisitor.java
new file mode 100644
index 00000000000..a08540c5ce4
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLVisitor.java
@@ -0,0 +1,36 @@
+/*
+ * 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.api;
+
+import org.antlr.v4.runtime.tree.ParseTree;
+
+/**
+ * SQL visitor.
+ *
+ * @author panjuan
+ */
+public interface SQLVisitor<T> {
+    
+    /**
+     * Visit.
+     * 
+     * @param tree parse tree
+     * @return visited result.
+     */
+    T visit(ParseTree tree);
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLParserEntry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLParserEntry.java
index 8b6fa5986d8..36116e1394b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLParserEntry.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLParserEntry.java
@@ -19,11 +19,13 @@ package org.apache.shardingsphere.sql.parser.spi;
 
 import org.antlr.v4.runtime.Lexer;
 import org.apache.shardingsphere.sql.parser.api.SQLParser;
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
 
 /**
  * SQL parser entry.
  *
  * @author zhangliang
+ * @author panjuan
  */
 public interface SQLParserEntry {
     
@@ -47,4 +49,11 @@ public interface SQLParserEntry {
      * @return SQL parser class type
      */
     Class<? extends SQLParser> getParserClass();
+    
+    /**
+     * Get SQL visitor class type.
+     *
+     * @return SQL visitor class type
+     */
+    Class<? extends SQLVisitor> getVisitorClass();
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/pom.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/pom.xml
index bc8f1b61900..e2cb97f65bf 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/pom.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/pom.xml
@@ -50,7 +50,7 @@
                         <configuration>
                             <libDirectory>src/main/antlr4/imports/sql92/</libDirectory>
                             <listener>false</listener>
-                            <visitor>false</visitor>
+                            <visitor>true</visitor>
                         </configuration>
                         <goals>
                             <goal>antlr4</goal>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/BaseRule.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/BaseRule.g4
index 20d64c058e7..e4e133383da 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/BaseRule.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/BaseRule.g4
@@ -43,7 +43,7 @@ numberLiterals
 
 dateTimeLiterals
     : (DATE | TIME | TIMESTAMP) STRING_
-    | LBE_ identifier_ STRING_ RBE_
+    | LBE_ identifier STRING_ RBE_
     ;
 
 hexadecimalLiterals
@@ -62,12 +62,12 @@ nullValueLiterals
     : NULL
     ;
 
-identifier_
+identifier
     : IDENTIFIER_ | unreservedWord_
     ;
 
 variable_
-    : (AT_? AT_)? (GLOBAL | LOCAL)? DOT_? identifier_
+    : (AT_? AT_)? (GLOBAL | LOCAL)? DOT_? identifier
     ;
 
 unreservedWord_
@@ -89,7 +89,7 @@ unreservedWord_
     ;
 
 schemaName
-    : identifier_
+    : identifier
     ;
 
 tableName
@@ -101,16 +101,16 @@ columnName
     ;
 
 viewName
-    : identifier_
-    | (owner DOT_)? identifier_
+    : identifier
+    | (owner DOT_)? identifier
     ;
 
 owner
-    : identifier_
+    : identifier
     ;
 
 name
-    : identifier_
+    : identifier
     ;
 
 columnNames
@@ -181,12 +181,12 @@ simpleExpr
     | parameterMarker
     | literals
     | columnName
-    | simpleExpr COLLATE (STRING_ | identifier_)
+    | simpleExpr COLLATE (STRING_ | identifier)
     | variable_
     | (PLUS_ | MINUS_ | TILDE_ | NOT_) simpleExpr
     | LP_ expr (COMMA_ expr)* RP_
     | EXISTS? subquery
-    | LBE_ identifier_ expr RBE_
+    | LBE_ identifier expr RBE_
     | matchExpression_
     | caseExpression_
     | intervalExpression_
@@ -217,7 +217,7 @@ castFunction_
     ;
 
 convertFunction_
-    : CONVERT LP_ expr USING identifier_ RP_
+    : CONVERT LP_ expr USING identifier RP_
     ;
 
 positionFunction_
@@ -229,7 +229,7 @@ substringFunction_
     ;
 
 extractFunction_
-    : EXTRACT LP_ identifier_ FROM expr RP_
+    : EXTRACT LP_ identifier FROM expr RP_
     ;
 
 trimFunction_
@@ -241,7 +241,7 @@ regularFunction_
     ;
 
 regularFunctionName_
-    : identifier_ | IF | CURRENT_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP | INTERVAL
+    : identifier | IF | CURRENT_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP | INTERVAL
     ;
 
 matchExpression_
@@ -285,7 +285,7 @@ dataType
     ;
 
 dataTypeName_
-    : identifier_ identifier_?
+    : identifier identifier?
     ;
 
 dataTypeLength
@@ -301,7 +301,7 @@ collateClause_
     ;
 
 ignoredIdentifier_
-    : identifier_ (DOT_ identifier_)?
+    : identifier (DOT_ identifier)?
     ;
 
 dropBehaviour_
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/DCLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/DCLStatement.g4
index 979d7e3f01d..84be2432a5e 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/DCLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/DCLStatement.g4
@@ -46,7 +46,7 @@ privilegeType_
     ;
 
 grantee_
-    : PUBLIC | identifier_
+    : PUBLIC | identifier
     ;
 
 onObjectClause_
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/DDLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/DDLStatement.g4
index eea77ef1314..d1ce4ffeb25 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/DDLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/DDLStatement.g4
@@ -40,7 +40,7 @@ dropDatabse
     ;
 
 createView
-    : CREATE VIEW viewName (LP_ identifier_ (COMMA_ identifier_)* RP_)?
+    : CREATE VIEW viewName (LP_ identifier (COMMA_ identifier)* RP_)?
       AS select
       (WITH (CASCADED | LOCAL)? CHECK OPTION)?
     ;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/DMLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/DMLStatement.g4
index ca98ae948ad..ce98df7fc15 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/DMLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/antlr4/imports/sql92/DMLStatement.g4
@@ -93,7 +93,7 @@ selectItem
     ;
 
 alias
-    : identifier_ | STRING_
+    : identifier | STRING_
     ;
 
 unqualifiedShorthand
@@ -101,7 +101,7 @@ unqualifiedShorthand
     ;
 
 qualifiedShorthand
-    : identifier_ DOT_ASTERISK_
+    : identifier DOT_ASTERISK_
     ;
 
 fromClause
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/SQL92ParserEntry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/SQL92ParserEntry.java
index 64350e5b825..3843819e7d9 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/SQL92ParserEntry.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/SQL92ParserEntry.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sql.parser;
 
 import org.antlr.v4.runtime.Lexer;
 import org.apache.shardingsphere.sql.parser.api.SQLParser;
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
 import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementLexer;
 import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
 
@@ -26,6 +27,7 @@ import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
  * SQL parser entry for SQL92.
  *
  * @author zhangyonglun
+ * @author panjuan
  */
 public final class SQL92ParserEntry implements SQLParserEntry {
     
@@ -43,4 +45,9 @@ public final class SQL92ParserEntry implements SQLParserEntry {
     public Class<? extends SQLParser> getParserClass() {
         return SQL92Parser.class;
     }
+    
+    @Override
+    public Class<? extends SQLVisitor> getVisitorClass() {
+        return SQL92Visitor.class;
+    }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/SQL92Visitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/SQL92Visitor.java
new file mode 100644
index 00000000000..99c2c23a24f
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/SQL92Visitor.java
@@ -0,0 +1,38 @@
+/*
+ * 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;
+
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
+import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementBaseVisitor;
+import org.apache.shardingsphere.sql.parser.sql.ASTNode;
+
+/**
+ * SQL92 visitor.
+ *
+ * @author panjuan
+ */
+public final class SQL92Visitor extends SQL92StatementBaseVisitor<ASTNode> implements SQLVisitor {
+    
+    // DALStatement.g4
+    // DCLStatement.g4
+    // DDLStatement.g4
+    // DMLStatement.g4
+    // TCLStatement.g4
+    // StoreProcedure.g4
+    // BaseRule.g4
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/pom.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/pom.xml
index 0b1e8657b35..32ecf670b63 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/pom.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/pom.xml
@@ -50,7 +50,7 @@
                         <configuration>
                             <libDirectory>src/main/antlr4/imports/sqlserver/</libDirectory>
                             <listener>false</listener>
-                            <visitor>false</visitor>
+                            <visitor>true</visitor>
                         </configuration>
                         <goals>
                             <goal>antlr4</goal>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
index e3cd2031117..02b115f3046 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
@@ -43,7 +43,7 @@ numberLiterals
 
 dateTimeLiterals
     : (DATE | TIME | TIMESTAMP) STRING_
-    | LBE_ identifier_ STRING_ RBE_
+    | LBE_ identifier STRING_ RBE_
     ;
 
 hexadecimalLiterals
@@ -62,7 +62,7 @@ nullValueLiterals
     : NULL
     ;
 
-identifier_
+identifier
     : IDENTIFIER_ | unreservedWord_
     ;
 
@@ -99,7 +99,7 @@ unreservedWord_
     ;
 
 schemaName
-    : identifier_
+    : identifier
     ;
 
 tableName
@@ -111,11 +111,11 @@ columnName
     ;
 
 owner
-    : identifier_
+    : identifier
     ;
 
 name
-    : identifier_
+    : identifier
     ;
 
 columnNames
@@ -127,7 +127,7 @@ tableNames
     ;
 
 indexName
-    : identifier_
+    : identifier
     ;
 
 collationName
@@ -205,7 +205,7 @@ simpleExpr
     | (PLUS_ | MINUS_ | TILDE_ | NOT_ | BINARY) simpleExpr
     | ROW? LP_ expr (COMMA_ expr)* RP_
     | EXISTS? subquery
-    | LBE_ identifier_ expr RBE_
+    | LBE_ identifier expr RBE_
     | caseExpression_
     | privateExprOfDb
     ;
@@ -243,7 +243,7 @@ regularFunction_
     ;
 
 regularFunctionName_
-    : identifier_ | IF | LOCALTIME | LOCALTIMESTAMP | INTERVAL
+    : identifier | IF | LOCALTIME | LOCALTIMESTAMP | INTERVAL
     ;
 
 caseExpression_
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
index e0e3c169c40..25819e753ac 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
@@ -97,7 +97,7 @@ top
     ;
 
 alias
-    : identifier_ | STRING_
+    : identifier | STRING_
     ;
 
 unqualifiedShorthand
@@ -105,7 +105,7 @@ unqualifiedShorthand
     ;
 
 qualifiedShorthand
-    : identifier_ DOT_ASTERISK_
+    : identifier DOT_ASTERISK_
     ;
 
 fromClause
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/SQLServerParserEntry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/SQLServerParserEntry.java
index 17a70264b17..de2b12a92bd 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/SQLServerParserEntry.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/SQLServerParserEntry.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sql.parser;
 
 import org.antlr.v4.runtime.Lexer;
 import org.apache.shardingsphere.sql.parser.api.SQLParser;
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementLexer;
 import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
 
@@ -26,6 +27,7 @@ import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
  * SQL parser entry for SQLServer.
  *
  * @author zhangliang
+ * @author panjuan
  */
 public final class SQLServerParserEntry implements SQLParserEntry {
     
@@ -43,4 +45,9 @@ public final class SQLServerParserEntry implements SQLParserEntry {
     public Class<? extends SQLParser> getParserClass() {
         return SQLServerParser.class;
     }
+    
+    @Override
+    public Class<? extends SQLVisitor> getVisitorClass() {
+        return SQLServerVisitor.class;
+    }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/SQLServerVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/SQLServerVisitor.java
new file mode 100644
index 00000000000..24d89237766
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/SQLServerVisitor.java
@@ -0,0 +1,38 @@
+/*
+ * 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;
+
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
+import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementBaseVisitor;
+import org.apache.shardingsphere.sql.parser.sql.ASTNode;
+
+/**
+ * SQL server visitor.
+ *
+ * @author panjuan
+ */
+public final class SQLServerVisitor extends SQLServerStatementBaseVisitor<ASTNode> implements SQLVisitor {
+    
+    // DALStatement.g4
+    // DCLStatement.g4
+    // DDLStatement.g4
+    // DMLStatement.g4
+    // TCLStatement.g4
+    // StoreProcedure.g4
+    // BaseRule.g4
+}


Test patch:
diff --git a/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/visitor/VisitorSQLCasesRegistry.java b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/visitor/VisitorSQLCasesRegistry.java
new file mode 100644
index 00000000000..2ea36a04652
--- /dev/null
+++ b/sharding-sql-test/src/main/java/org/apache/shardingsphere/test/sql/loader/visitor/VisitorSQLCasesRegistry.java
@@ -0,0 +1,47 @@
+/*
+ * 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.loader.visitor;
+
+import lombok.Getter;
+import org.apache.shardingsphere.test.sql.loader.SQLCasesLoader;
+
+/**
+ * SQL cases registry for visitor.
+ * 
+ * @author panjuan 
+ */
+public final class VisitorSQLCasesRegistry {
+    
+    private static final VisitorSQLCasesRegistry INSTANCE = new VisitorSQLCasesRegistry();
+    
+    @Getter
+    private SQLCasesLoader sqlCasesLoader;
+    
+    private VisitorSQLCasesRegistry() {
+        sqlCasesLoader = new SQLCasesLoader("sql/visitor");
+    }
+    
+    /**
+     * Get singleton instance.
+     * 
+     * @return singleton instance
+     */
+    public static VisitorSQLCasesRegistry getInstance() {
+        return INSTANCE;
+    }
+}
diff --git a/sharding-sql-test/src/main/resources/sql/visitor/ddl/show.xml b/sharding-sql-test/src/main/resources/sql/visitor/ddl/show.xml
new file mode 100644
index 00000000000..53714df413a
--- /dev/null
+++ b/sharding-sql-test/src/main/resources/sql/visitor/ddl/show.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<sql-cases>
+    <sql-case id="show_table_status" value="SHOW TABLE STATUS" db-types="MySQL" />
+</sql-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/core/rule/fixture/TestParserEntry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/core/rule/fixture/TestParserEntry.java
index 04c53c69634..1a444018177 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/core/rule/fixture/TestParserEntry.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/core/rule/fixture/TestParserEntry.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sql.parser.core.rule.fixture;
 
 import org.antlr.v4.runtime.Lexer;
 import org.apache.shardingsphere.sql.parser.api.SQLParser;
+import org.apache.shardingsphere.sql.parser.api.SQLVisitor;
 import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
 
 public final class TestParserEntry implements SQLParserEntry {
@@ -37,4 +38,9 @@ public final class TestParserEntry implements SQLParserEntry {
     public Class<? extends SQLParser> getParserClass() {
         return null;
     }
+    
+    @Override
+    public Class<? extends SQLVisitor> getVisitorClass() {
+        return null;
+    }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/java/org/apache/shardingsphere/sql/parser/integrate/engine/visitor/VisitorParameterizedParsingTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/java/org/apache/shardingsphere/sql/parser/integrate/engine/visitor/VisitorParameterizedParsingTest.java
new file mode 100644
index 00000000000..8dcd4fcf2b1
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/java/org/apache/shardingsphere/sql/parser/integrate/engine/visitor/VisitorParameterizedParsingTest.java
@@ -0,0 +1,77 @@
+/*
+ * 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.integrate.engine.visitor;
+
+import lombok.RequiredArgsConstructor;
+import org.antlr.v4.runtime.tree.ParseTree;
+import org.apache.shardingsphere.spi.NewInstanceServiceLoader;
+import org.apache.shardingsphere.sql.parser.core.parser.SQLParserFactory;
+import org.apache.shardingsphere.sql.parser.core.visitor.SQLVisitorEngine;
+import org.apache.shardingsphere.sql.parser.integrate.asserts.SQLStatementAssert;
+import org.apache.shardingsphere.sql.parser.integrate.jaxb.ParserResultSetRegistry;
+import org.apache.shardingsphere.sql.parser.integrate.jaxb.VisitorParserResultSetRegistry;
+import org.apache.shardingsphere.sql.parser.spi.SQLParserEntry;
+import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
+import org.apache.shardingsphere.test.sql.SQLCaseType;
+import org.apache.shardingsphere.test.sql.loader.SQLCasesLoader;
+import org.apache.shardingsphere.test.sql.loader.visitor.VisitorSQLCasesRegistry;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import java.util.Collection;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Parameterized.class)
+@RequiredArgsConstructor
+public final class VisitorParameterizedParsingTest {
+    
+    private static SQLCasesLoader sqlCasesLoader = VisitorSQLCasesRegistry.getInstance().getSqlCasesLoader();
+    
+    private static ParserResultSetRegistry parserResultSetRegistry = VisitorParserResultSetRegistry.getInstance().getRegistry();
+    
+    private final String sqlCaseId;
+    
+    private final String databaseType;
+    
+    private final SQLCaseType sqlCaseType;
+    
+    @Before
+    public void setUp() {
+        NewInstanceServiceLoader.register(SQLParserEntry.class);
+    }
+    
+    @Parameters(name = "{0} ({2}) -> {1}")
+    public static Collection<Object[]> getTestParameters() {
+        assertThat(sqlCasesLoader.countAllSQLCases(), is(parserResultSetRegistry.countAllTestCases()));
+        return sqlCasesLoader.getSQLTestParameters();
+    }
+    
+    @Test
+    public void assertSupportedSQL() {
+        String databaseTypeName = "H2".equals(databaseType) ? "MySQL" : databaseType;
+        String sql = sqlCasesLoader.getSQL(sqlCaseId, sqlCaseType, parserResultSetRegistry.get(sqlCaseId).getParameters());
+        ParseTree parseTree = SQLParserFactory.newInstance(databaseTypeName, sql).execute().getChild(0);
+        SQLStatement sqlStatement = (SQLStatement) new SQLVisitorEngine(databaseTypeName, parseTree).parse();
+        new SQLStatementAssert(sqlStatement, sqlCaseId, sqlCaseType).assertSQLStatement();
+    }
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/java/org/apache/shardingsphere/sql/parser/integrate/jaxb/VisitorParserResultSetRegistry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/java/org/apache/shardingsphere/sql/parser/integrate/jaxb/VisitorParserResultSetRegistry.java
new file mode 100644
index 00000000000..16bf50d8a08
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/java/org/apache/shardingsphere/sql/parser/integrate/jaxb/VisitorParserResultSetRegistry.java
@@ -0,0 +1,42 @@
+/*
+ * 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.integrate.jaxb;
+
+import lombok.Getter;
+
+/**
+ * Visitor parser result set registry.
+ *
+ * @author panjuan
+ */
+public final class VisitorParserResultSetRegistry {
+    
+    private static final VisitorParserResultSetRegistry INSTANCE = new VisitorParserResultSetRegistry();
+    
+    @Getter
+    private final ParserResultSetRegistry registry = new ParserResultSetRegistry("visitor/");
+    
+    /**
+     * Get singleton instance.
+     *
+     * @return singleton instance
+     */
+    public static VisitorParserResultSetRegistry getInstance() {
+        return INSTANCE;
+    }
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/resources/visitor/dal/show.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/resources/visitor/dal/show.xml
new file mode 100644
index 00000000000..2432e815240
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/resources/visitor/dal/show.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<parser-result-sets>
+    <parser-result sql-case-id="show_table_status" />
+</parser-result-sets>