You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ch...@apache.org on 2023/06/01 01:06:20 UTC

[shardingsphere] branch master updated: Fix sonar issue on OpenGaussDDLStatementVisitor (#25972)

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

chengzhang 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 77026585ba1 Fix sonar issue on OpenGaussDDLStatementVisitor (#25972)
77026585ba1 is described below

commit 77026585ba16d4a0440af1ac50d3af1ab78942f8
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Thu Jun 1 09:06:12 2023 +0800

    Fix sonar issue on OpenGaussDDLStatementVisitor (#25972)
    
    * Fix sonar issue on OpenGaussDDLStatementVisitor
    
    * Fix sonar issue on OpenGaussStatementVisitor
    
    * Fix sonar issue on MySQLDDLStatementVisitor
    
    * Fix sonar issue on MySQLDDLStatementVisitor
    
    * Fix sonar issue on MySQLStatementVisitor
    
    * Fix sonar issue on ComputeNodeStateChangedWatcher
    
    * Fix sonar issue on PostgreSQLColumnPropertiesAppender
    
    * Add PostgreSQLColumnTypeTest
    
    * Fix sonar issue on DataConsistencyCheckUtils
---
 .../consistency/DataConsistencyCheckUtils.java     |  27 ++--
 .../PostgreSQLColumnPropertiesAppender.java        | 141 ++++++++++-----------
 .../ddlgenerator/PostgreSQLColumnType.java         |  57 +++++++++
 .../ddlgenerator/PostgreSQLColumnTypeTest.java     |  41 ++++++
 .../watcher/ComputeNodeStateChangedWatcher.java    |  26 ++--
 .../visitor/statement/MySQLStatementVisitor.java   |  14 +-
 .../statement/type/MySQLDDLStatementVisitor.java   | 105 ++++++++-------
 .../statement/OpenGaussStatementVisitor.java       |  75 ++++++-----
 .../type/OpenGaussDDLStatementVisitor.java         |  56 ++++----
 9 files changed, 333 insertions(+), 209 deletions(-)

diff --git a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/check/consistency/DataConsistencyCheckUtils.java b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/check/consistency/DataConsistencyCheckUtils.java
index 6ac7331ccb3..3131eac0c12 100644
--- a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/check/consistency/DataConsistencyCheckUtils.java
+++ b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/check/consistency/DataConsistencyCheckUtils.java
@@ -55,25 +55,28 @@ public final class DataConsistencyCheckUtils {
             ++columnIndex;
             Object thisColumnValue = thisRecordIterator.next();
             Object thatColumnValue = thatRecordIterator.next();
-            boolean matched;
-            if (thisColumnValue instanceof SQLXML && thatColumnValue instanceof SQLXML) {
-                matched = ((SQLXML) thisColumnValue).getString().equals(((SQLXML) thatColumnValue).getString());
-            } else if (thisColumnValue instanceof BigDecimal && thatColumnValue instanceof BigDecimal) {
-                matched = isBigDecimalEquals((BigDecimal) thisColumnValue, (BigDecimal) thatColumnValue);
-            } else if (thisColumnValue instanceof Array && thatColumnValue instanceof Array) {
-                matched = Objects.deepEquals(((Array) thisColumnValue).getArray(), ((Array) thatColumnValue).getArray());
-            } else {
-                matched = equalsBuilder.append(thisColumnValue, thatColumnValue).isEquals();
-            }
-            if (!matched) {
+            if (!isMatched(equalsBuilder, thisColumnValue, thatColumnValue)) {
                 log.warn("Record column value not match, columnIndex={}, value1={}, value2={}, value1.class={}, value2.class={}.", columnIndex, thisColumnValue, thatColumnValue,
-                        null != thisColumnValue ? thisColumnValue.getClass().getName() : "", null != thatColumnValue ? thatColumnValue.getClass().getName() : "");
+                        null != thisColumnValue ? thisColumnValue.getClass().getName() : "", null == thatColumnValue ? "" : thatColumnValue.getClass().getName());
                 return false;
             }
         }
         return true;
     }
     
+    private static boolean isMatched(final EqualsBuilder equalsBuilder, final Object thisColumnValue, final Object thatColumnValue) throws SQLException {
+        if (thisColumnValue instanceof SQLXML && thatColumnValue instanceof SQLXML) {
+            return ((SQLXML) thisColumnValue).getString().equals(((SQLXML) thatColumnValue).getString());
+        }
+        if (thisColumnValue instanceof BigDecimal && thatColumnValue instanceof BigDecimal) {
+            return isBigDecimalEquals((BigDecimal) thisColumnValue, (BigDecimal) thatColumnValue);
+        }
+        if (thisColumnValue instanceof Array && thatColumnValue instanceof Array) {
+            return Objects.deepEquals(((Array) thisColumnValue).getArray(), ((Array) thatColumnValue).getArray());
+        }
+        return equalsBuilder.append(thisColumnValue, thatColumnValue).isEquals();
+    }
+    
     /**
      * Check two BigDecimal whether equals or not.
      *
diff --git a/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/ddlgenerator/PostgreSQLColumnPropertiesAppender.java b/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/ddlgenerator/PostgreSQLColumnPropertiesAppender.java
index 921682d057c..b66f9e8158d 100644
--- a/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/ddlgenerator/PostgreSQLColumnPropertiesAppender.java
+++ b/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/ddlgenerator/PostgreSQLColumnPropertiesAppender.java
@@ -52,7 +52,7 @@ public final class PostgreSQLColumnPropertiesAppender extends AbstractPostgreSQL
     /**
      * Append column properties.
      *
-     * @param context create table sql context
+     * @param context create table SQL context
      */
     @SneakyThrows(SQLException.class)
     public void append(final Map<String, Object> context) {
@@ -78,14 +78,22 @@ public final class PostgreSQLColumnPropertiesAppender extends AbstractPostgreSQL
         if (null != context.get("typoid")) {
             return getColumnFromType(context);
         }
-        if (null != context.get("coll_inherits")) {
-            Collection<String> collInherits = convertPgArrayToList(context.get("coll_inherits"));
-            context.put("coll_inherits", collInherits);
-            if (!collInherits.isEmpty()) {
-                return getColumnFromInherits(collInherits);
-            }
+        if (null == context.get("coll_inherits")) {
+            return Collections.emptyList();
         }
-        return Collections.emptyList();
+        Collection<String> collInherits = toCollection((Array) context.get("coll_inherits"));
+        context.put("coll_inherits", collInherits);
+        return collInherits.isEmpty() ? Collections.emptyList() : getColumnFromInherits(collInherits);
+    }
+    
+    private Collection<Map<String, Object>> getColumnFromType(final Map<String, Object> context) {
+        Map<String, Object> params = new LinkedHashMap<>();
+        params.put("tid", context.get("typoid"));
+        return executeByTemplate(params, "component/table/%s/get_columns_for_table.ftl");
+    }
+    
+    private Collection<String> toCollection(final Array array) throws SQLException {
+        return Arrays.stream((String[]) array.getArray()).collect(Collectors.toList());
     }
     
     private Collection<Map<String, Object>> getColumnFromInherits(final Collection<String> collInherits) {
@@ -100,12 +108,6 @@ public final class PostgreSQLColumnPropertiesAppender extends AbstractPostgreSQL
         return result;
     }
     
-    private Collection<Map<String, Object>> getColumnFromType(final Map<String, Object> context) {
-        Map<String, Object> params = new LinkedHashMap<>();
-        params.put("tid", context.get("typoid"));
-        return executeByTemplate(params, "component/table/%s/get_columns_for_table.ftl");
-    }
-    
     @SuppressWarnings("unchecked")
     private String getInheritedFromTableOrType(final Map<String, Object> context) {
         String result = "inheritedfrom";
@@ -117,22 +119,18 @@ public final class PostgreSQLColumnPropertiesAppender extends AbstractPostgreSQL
         return result;
     }
     
-    private Collection<String> convertPgArrayToList(final Object array) throws SQLException {
-        return Arrays.stream((String[]) ((Array) array).getArray()).collect(Collectors.toList());
-    }
-    
     private Map<String, Collection<String>> getEditTypes(final Collection<Map<String, Object>> allColumns) throws SQLException {
         Map<String, Collection<String>> result = new LinkedHashMap<>();
         Map<String, Object> params = new LinkedHashMap<>();
         params.put("type_ids", allColumns.stream().map(each -> each.get("atttypid").toString()).collect(Collectors.joining(",")));
         for (Map<String, Object> each : executeByTemplate(params, "component/columns/%s/edit_mode_types_multi.ftl")) {
-            result.put(each.get("main_oid").toString(), covertPgArrayAndSort(each.get("edit_types")));
+            result.put(each.get("main_oid").toString(), toCollectionAndSort((Array) each.get("edit_types")));
         }
         return result;
     }
     
-    private Collection<String> covertPgArrayAndSort(final Object editTypes) throws SQLException {
-        return Arrays.stream((String[]) ((Array) editTypes).getArray()).sorted(String::compareTo).collect(Collectors.toList());
+    private Collection<String> toCollectionAndSort(final Array editTypes) throws SQLException {
+        return Arrays.stream((String[]) editTypes.getArray()).sorted(String::compareTo).collect(Collectors.toList());
     }
     
     private void columnFormatter(final Map<String, Object> column, final Collection<String> editTypes) throws SQLException {
@@ -146,14 +144,15 @@ public final class PostgreSQLColumnPropertiesAppender extends AbstractPostgreSQL
     }
     
     private void handlePrimaryColumn(final Map<String, Object> column) {
-        if (null != column.get("attnum") && null != column.get("indkey")) {
-            if (Arrays.stream(column.get("indkey").toString().split(" ")).collect(Collectors.toList()).contains(column.get("attnum").toString())) {
-                column.put("is_pk", true);
-                column.put("is_primary_key", true);
-            } else {
-                column.put("is_pk", false);
-                column.put("is_primary_key", false);
-            }
+        if (null == column.get("attnum") || null == column.get("indkey")) {
+            return;
+        }
+        if (Arrays.stream(column.get("indkey").toString().split(" ")).collect(Collectors.toList()).contains(column.get("attnum").toString())) {
+            column.put("is_pk", true);
+            column.put("is_primary_key", true);
+        } else {
+            column.put("is_pk", false);
+            column.put("is_primary_key", false);
         }
     }
     
@@ -165,58 +164,33 @@ public final class PostgreSQLColumnPropertiesAppender extends AbstractPostgreSQL
     }
     
     private void handleLengthPrecision(final Long elemoid, final Map<String, Object> column, final String fullType) {
-        boolean precision = false;
-        boolean length = false;
-        String typeval = "";
-        Long[] lTypes = {1560L, 1561L, 1562L, 1563L, 1042L, 1043L, 1014L, 1015L};
-        Long[] dTypes = {1083L, 1114L, 1115L, 1183L, 1184L, 1185L, 1186L, 1187L, 1266L, 1270L};
-        Long[] pTypes = {1231L, 1700L};
-        if (0 != elemoid) {
-            if (Arrays.asList(lTypes).contains(elemoid)) {
-                typeval = "L";
-            } else if (Arrays.asList(dTypes).contains(elemoid)) {
-                typeval = "D";
-            } else if (Arrays.asList(pTypes).contains(elemoid)) {
-                typeval = "P";
-            } else {
-                typeval = " ";
-            }
-        }
-        if ("P".equals(typeval)) {
-            precision = true;
-        }
-        if (precision || "L".equals(typeval) || "D".equals(typeval)) {
-            length = true;
-        }
-        
-        if (length && precision) {
-            Matcher matcher = LENGTH_PRECISION_PATTERN.matcher(fullType);
-            if (matcher.find()) {
-                column.put("attlen", matcher.group(1));
-                column.put("attprecision", matcher.group(2));
-            }
-        } else if (length) {
-            Matcher matcher = LENGTH_PATTERN.matcher(fullType);
-            if (matcher.find()) {
-                column.put("attlen", matcher.group(1));
-                column.put("attprecision", null);
-            }
+        switch (PostgreSQLColumnType.valueOf(elemoid)) {
+            case NUMERIC:
+                setColumnPrecision(column, fullType);
+                break;
+            case DATE:
+            case VARCHAR:
+                setColumnLength(column, fullType);
+                break;
+            default:
+                break;
         }
     }
     
-    private void formatColumnVariables(final Map<String, Object> column) throws SQLException {
-        if (null == column.get("attoptions")) {
-            return;
+    private void setColumnPrecision(final Map<String, Object> column, final String fullType) {
+        Matcher matcher = LENGTH_PRECISION_PATTERN.matcher(fullType);
+        if (matcher.find()) {
+            column.put("attlen", matcher.group(1));
+            column.put("attprecision", matcher.group(2));
         }
-        Collection<Map<String, String>> attOptions = new LinkedList<>();
-        Collection<String> columnVariables = Arrays.stream((String[]) ((Array) column.get("attoptions")).getArray()).collect(Collectors.toList());
-        for (String each : columnVariables) {
-            Map<String, String> columnVariable = new LinkedHashMap<>();
-            columnVariable.put("name", each.substring(0, each.indexOf(ATT_OPTION_SPLIT)));
-            columnVariable.put("value", each.substring(each.indexOf(ATT_OPTION_SPLIT) + 1));
-            attOptions.add(columnVariable);
+    }
+    
+    private static void setColumnLength(final Map<String, Object> column, final String fullType) {
+        Matcher matcher = LENGTH_PATTERN.matcher(fullType);
+        if (matcher.find()) {
+            column.put("attlen", matcher.group(1));
+            column.put("attprecision", null);
         }
-        column.put("attoptions", attOptions);
     }
     
     private String getFullDataType(final Map<String, Object> column) {
@@ -308,6 +282,21 @@ public final class PostgreSQLColumnPropertiesAppender extends AbstractPostgreSQL
         return result;
     }
     
+    private void formatColumnVariables(final Map<String, Object> column) throws SQLException {
+        if (null == column.get("attoptions")) {
+            return;
+        }
+        Collection<Map<String, String>> attOptions = new LinkedList<>();
+        Collection<String> columnVariables = Arrays.stream((String[]) ((Array) column.get("attoptions")).getArray()).collect(Collectors.toList());
+        for (String each : columnVariables) {
+            Map<String, String> columnVariable = new LinkedHashMap<>();
+            columnVariable.put("name", each.substring(0, each.indexOf(ATT_OPTION_SPLIT)));
+            columnVariable.put("value", each.substring(each.indexOf(ATT_OPTION_SPLIT) + 1));
+            attOptions.add(columnVariable);
+        }
+        column.put("attoptions", attOptions);
+    }
+    
     private String parseTypeName(final String name) {
         String result = name;
         boolean isArray = false;
diff --git a/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/ddlgenerator/PostgreSQLColumnType.java b/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/ddlgenerator/PostgreSQLColumnType.java
new file mode 100644
index 00000000000..3266e468f8b
--- /dev/null
+++ b/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/ddlgenerator/PostgreSQLColumnType.java
@@ -0,0 +1,57 @@
+/*
+ * 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.data.pipeline.postgresql.ddlgenerator;
+
+import lombok.RequiredArgsConstructor;
+
+import java.util.Arrays;
+
+/**
+ * Column type for PostgreSQL.
+ */
+@RequiredArgsConstructor
+public enum PostgreSQLColumnType {
+    
+    NUMERIC(new Long[] {1231L, 1700L}),
+    
+    DATE(new Long[] {1083L, 1114L, 1115L, 1183L, 1184L, 1185L, 1186L, 1187L, 1266L, 1270L}),
+    
+    VARCHAR(new Long[] {1560L, 1561L, 1562L, 1563L, 1042L, 1043L, 1014L, 1015L}),
+    
+    UNKNOWN(new Long[] {});
+    
+    private final Long[] values;
+    
+    /**
+     * Get value of column type.
+     * 
+     * @param elemoid elemoid
+     * @return value of column type
+     */
+    public static PostgreSQLColumnType valueOf(final Long elemoid) {
+        if (0 == elemoid) {
+            return UNKNOWN;
+        }
+        for (PostgreSQLColumnType each : values()) {
+            if (Arrays.asList(each.values).contains(elemoid)) {
+                return each;
+            }
+        }
+        return UNKNOWN;
+    }
+}
diff --git a/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/ddlgenerator/PostgreSQLColumnTypeTest.java b/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/ddlgenerator/PostgreSQLColumnTypeTest.java
new file mode 100644
index 00000000000..1dd355f361e
--- /dev/null
+++ b/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/ddlgenerator/PostgreSQLColumnTypeTest.java
@@ -0,0 +1,41 @@
+/*
+ * 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.data.pipeline.postgresql.ddlgenerator;
+
+import org.junit.jupiter.api.Test;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+class PostgreSQLColumnTypeTest {
+    
+    @Test
+    void assertValueOfZeroValue() {
+        assertThat(PostgreSQLColumnType.valueOf(0L), is(PostgreSQLColumnType.UNKNOWN));
+    }
+    
+    @Test
+    void assertValueOfFoundValue() {
+        assertThat(PostgreSQLColumnType.valueOf(1231L), is(PostgreSQLColumnType.NUMERIC));
+    }
+    
+    @Test
+    void assertValueOfNotExistedValue() {
+        assertThat(PostgreSQLColumnType.valueOf(1L), is(PostgreSQLColumnType.UNKNOWN));
+    }
+}
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/compute/watcher/ComputeNodeStateChangedWatcher.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/compute/watcher/ComputeNodeStateChangedWatcher.java
index bcaa8b1cd77..5661801e3c6 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/compute/watcher/ComputeNodeStateChangedWatcher.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/status/compute/watcher/ComputeNodeStateChangedWatcher.java
@@ -61,19 +61,13 @@ public final class ComputeNodeStateChangedWatcher implements GovernanceWatcher<G
         return Arrays.asList(Type.ADDED, Type.UPDATED, Type.DELETED);
     }
     
-    @SuppressWarnings("unchecked")
     @Override
     public Optional<GovernanceEvent> createGovernanceEvent(final DataChangedEvent event) {
         String instanceId = ComputeNode.getInstanceIdByComputeNode(event.getKey());
         if (!Strings.isNullOrEmpty(instanceId)) {
-            if (event.getKey().equals(ComputeNode.getInstanceStatusNodePath(instanceId)) && Type.DELETED != event.getType()) {
-                return Optional.of(new StateEvent(instanceId, event.getValue()));
-            }
-            if (event.getKey().equals(ComputeNode.getInstanceLabelsNodePath(instanceId)) && Type.DELETED != event.getType()) {
-                return Optional.of(new LabelsEvent(instanceId, Strings.isNullOrEmpty(event.getValue()) ? new ArrayList<>() : YamlEngine.unmarshal(event.getValue(), Collection.class)));
-            }
-            if (event.getKey().equals(ComputeNode.getInstanceWorkerIdNodePath(instanceId))) {
-                return Optional.of(new WorkerIdEvent(instanceId, Strings.isNullOrEmpty(event.getValue()) ? null : Integer.valueOf(event.getValue())));
+            Optional<GovernanceEvent> result = createInstanceGovernanceEvent(event, instanceId);
+            if (result.isPresent()) {
+                return result;
             }
         }
         if (event.getKey().startsWith(ComputeNode.getOnlineInstanceNodePath())) {
@@ -88,6 +82,20 @@ public final class ComputeNodeStateChangedWatcher implements GovernanceWatcher<G
         return Optional.empty();
     }
     
+    @SuppressWarnings("unchecked")
+    private Optional<GovernanceEvent> createInstanceGovernanceEvent(final DataChangedEvent event, final String instanceId) {
+        if (event.getKey().equals(ComputeNode.getInstanceStatusNodePath(instanceId)) && Type.DELETED != event.getType()) {
+            return Optional.of(new StateEvent(instanceId, event.getValue()));
+        }
+        if (event.getKey().equals(ComputeNode.getInstanceLabelsNodePath(instanceId)) && Type.DELETED != event.getType()) {
+            return Optional.of(new LabelsEvent(instanceId, Strings.isNullOrEmpty(event.getValue()) ? new ArrayList<>() : YamlEngine.unmarshal(event.getValue(), Collection.class)));
+        }
+        if (event.getKey().equals(ComputeNode.getInstanceWorkerIdNodePath(instanceId))) {
+            return Optional.of(new WorkerIdEvent(instanceId, Strings.isNullOrEmpty(event.getValue()) ? null : Integer.valueOf(event.getValue())));
+        }
+        return Optional.empty();
+    }
+    
     private Optional<GovernanceEvent> createInstanceEvent(final DataChangedEvent event) {
         Matcher matcher = getInstanceOnlinePathMatcher(event.getKey());
         if (matcher.find()) {
diff --git a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
index adfa5a982fd..27be666640d 100644
--- a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
+++ b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
@@ -576,16 +576,13 @@ public abstract class MySQLStatementVisitor extends MySQLStatementBaseVisitor<AS
         int stopIndex = ctx.stop.getStopIndex();
         if (null != ctx.subquery()) {
             SubquerySegment subquerySegment = new SubquerySegment(ctx.subquery().getStart().getStartIndex(), ctx.subquery().getStop().getStopIndex(), (MySQLSelectStatement) visit(ctx.subquery()));
-            if (null != ctx.EXISTS()) {
-                return new ExistsSubqueryExpression(startIndex, stopIndex, subquerySegment);
-            }
-            return new SubqueryExpressionSegment(subquerySegment);
+            return null == ctx.EXISTS() ? new SubqueryExpressionSegment(subquerySegment) : new ExistsSubqueryExpression(startIndex, stopIndex, subquerySegment);
         }
         if (null != ctx.parameterMarker()) {
             ParameterMarkerValue parameterMarker = (ParameterMarkerValue) visit(ctx.parameterMarker());
-            ParameterMarkerExpressionSegment segment = new ParameterMarkerExpressionSegment(startIndex, stopIndex, parameterMarker.getValue(), parameterMarker.getType());
-            parameterMarkerSegments.add(segment);
-            return segment;
+            ParameterMarkerExpressionSegment result = new ParameterMarkerExpressionSegment(startIndex, stopIndex, parameterMarker.getValue(), parameterMarker.getType());
+            parameterMarkerSegments.add(result);
+            return result;
         }
         if (null != ctx.literals()) {
             return SQLUtils.createLiteralExpression(visit(ctx.literals()), startIndex, stopIndex, ctx.literals().start.getInputStream().getText(new Interval(startIndex, stopIndex)));
@@ -597,8 +594,7 @@ public abstract class MySQLStatementVisitor extends MySQLStatementBaseVisitor<AS
             return visit(ctx.functionCall());
         }
         if (null != ctx.collateClause()) {
-            SimpleExpressionSegment collateValueSegment = (SimpleExpressionSegment) visit(ctx.collateClause());
-            return new CollateExpression(startIndex, stopIndex, collateValueSegment);
+            return new CollateExpression(startIndex, stopIndex, (SimpleExpressionSegment) visit(ctx.collateClause()));
         }
         if (null != ctx.columnRef()) {
             return visit(ctx.columnRef());
diff --git a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
index 846b1e8b2ba..3104bf4485b 100644
--- a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
+++ b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
@@ -279,35 +279,36 @@ public final class MySQLDDLStatementVisitor extends MySQLStatementVisitor implem
     public ASTNode visitAlterTable(final AlterTableContext ctx) {
         MySQLAlterTableStatement result = new MySQLAlterTableStatement();
         result.setTable((SimpleTableSegment) visit(ctx.tableName()));
-        if (null != ctx.alterTableActions() && null != ctx.alterTableActions().alterCommandList() && null != ctx.alterTableActions().alterCommandList().alterList()) {
-            for (AlterDefinitionSegment each : ((CollectionValue<AlterDefinitionSegment>) visit(ctx.alterTableActions().alterCommandList().alterList())).getValue()) {
-                if (each instanceof AddColumnDefinitionSegment) {
-                    result.getAddColumnDefinitions().add((AddColumnDefinitionSegment) each);
-                } else if (each instanceof ModifyColumnDefinitionSegment) {
-                    result.getModifyColumnDefinitions().add((ModifyColumnDefinitionSegment) each);
-                } else if (each instanceof ChangeColumnDefinitionSegment) {
-                    result.getChangeColumnDefinitions().add((ChangeColumnDefinitionSegment) each);
-                } else if (each instanceof DropColumnDefinitionSegment) {
-                    result.getDropColumnDefinitions().add((DropColumnDefinitionSegment) each);
-                } else if (each instanceof AddConstraintDefinitionSegment) {
-                    result.getAddConstraintDefinitions().add((AddConstraintDefinitionSegment) each);
-                } else if (each instanceof DropConstraintDefinitionSegment) {
-                    result.getDropConstraintDefinitions().add((DropConstraintDefinitionSegment) each);
-                } else if (each instanceof RenameTableDefinitionSegment) {
-                    result.setRenameTable(((RenameTableDefinitionSegment) each).getRenameTable());
-                } else if (each instanceof ConvertTableDefinitionSegment) {
-                    result.setConvertTableDefinition((ConvertTableDefinitionSegment) each);
-                } else if (each instanceof DropIndexDefinitionSegment) {
-                    result.getDropIndexDefinitions().add((DropIndexDefinitionSegment) each);
-                } else if (each instanceof RenameIndexDefinitionSegment) {
-                    result.getRenameIndexDefinitions().add((RenameIndexDefinitionSegment) each);
-                } else if (each instanceof RenameColumnSegment) {
-                    result.getRenameColumnDefinitions().add((RenameColumnSegment) each);
-                } else if (each instanceof AlgorithmTypeSegment) {
-                    result.setAlgorithmSegment((AlgorithmTypeSegment) each);
-                } else if (each instanceof LockTableSegment) {
-                    result.setLockTableSegment((LockTableSegment) each);
-                }
+        if (null == ctx.alterTableActions() || null == ctx.alterTableActions().alterCommandList() || null == ctx.alterTableActions().alterCommandList().alterList()) {
+            return result;
+        }
+        for (AlterDefinitionSegment each : ((CollectionValue<AlterDefinitionSegment>) visit(ctx.alterTableActions().alterCommandList().alterList())).getValue()) {
+            if (each instanceof AddColumnDefinitionSegment) {
+                result.getAddColumnDefinitions().add((AddColumnDefinitionSegment) each);
+            } else if (each instanceof ModifyColumnDefinitionSegment) {
+                result.getModifyColumnDefinitions().add((ModifyColumnDefinitionSegment) each);
+            } else if (each instanceof ChangeColumnDefinitionSegment) {
+                result.getChangeColumnDefinitions().add((ChangeColumnDefinitionSegment) each);
+            } else if (each instanceof DropColumnDefinitionSegment) {
+                result.getDropColumnDefinitions().add((DropColumnDefinitionSegment) each);
+            } else if (each instanceof AddConstraintDefinitionSegment) {
+                result.getAddConstraintDefinitions().add((AddConstraintDefinitionSegment) each);
+            } else if (each instanceof DropConstraintDefinitionSegment) {
+                result.getDropConstraintDefinitions().add((DropConstraintDefinitionSegment) each);
+            } else if (each instanceof RenameTableDefinitionSegment) {
+                result.setRenameTable(((RenameTableDefinitionSegment) each).getRenameTable());
+            } else if (each instanceof ConvertTableDefinitionSegment) {
+                result.setConvertTableDefinition((ConvertTableDefinitionSegment) each);
+            } else if (each instanceof DropIndexDefinitionSegment) {
+                result.getDropIndexDefinitions().add((DropIndexDefinitionSegment) each);
+            } else if (each instanceof RenameIndexDefinitionSegment) {
+                result.getRenameIndexDefinitions().add((RenameIndexDefinitionSegment) each);
+            } else if (each instanceof RenameColumnSegment) {
+                result.getRenameColumnDefinitions().add((RenameColumnSegment) each);
+            } else if (each instanceof AlgorithmTypeSegment) {
+                result.setAlgorithmSegment((AlgorithmTypeSegment) each);
+            } else if (each instanceof LockTableSegment) {
+                result.setLockTableSegment((LockTableSegment) each);
             }
         }
         return result;
@@ -331,53 +332,59 @@ public final class MySQLDDLStatementVisitor extends MySQLStatementVisitor implem
         if (ctx.alterListItem().isEmpty()) {
             return result;
         }
+        result.getValue().addAll(getAlterDefinitionSegments(ctx));
+        for (AlterCommandsModifierContext each : ctx.alterCommandsModifier()) {
+            if (null != each.alterAlgorithmOption()) {
+                result.getValue().add((AlgorithmTypeSegment) visit(each));
+            } else if (null != each.alterLockOption()) {
+                result.getValue().add((LockTableSegment) visit(each));
+            }
+        }
+        return result;
+    }
+    
+    private Collection<AlterDefinitionSegment> getAlterDefinitionSegments(final AlterListContext ctx) {
+        Collection<AlterDefinitionSegment> result = new LinkedList<>();
         for (AlterListItemContext each : ctx.alterListItem()) {
             if (each instanceof AddColumnContext) {
-                result.getValue().add((AddColumnDefinitionSegment) visit(each));
+                result.add((AddColumnDefinitionSegment) visit(each));
             }
             if (each instanceof AlterConstraintContext || each instanceof AlterCheckContext) {
-                result.getValue().add((AlterDefinitionSegment) visit(each));
+                result.add((AlterDefinitionSegment) visit(each));
             }
             if (each instanceof ChangeColumnContext) {
-                result.getValue().add(generateModifyColumnDefinitionSegment((ChangeColumnContext) each));
+                result.add(generateModifyColumnDefinitionSegment((ChangeColumnContext) each));
             }
             if (each instanceof ModifyColumnContext) {
-                result.getValue().add(generateModifyColumnDefinitionSegment((ModifyColumnContext) each));
+                result.add(generateModifyColumnDefinitionSegment((ModifyColumnContext) each));
             }
             if (each instanceof AlterTableDropContext) {
                 AlterTableDropContext alterTableDrop = (AlterTableDropContext) each;
                 if (null != alterTableDrop.CHECK() || null != alterTableDrop.CONSTRAINT()) {
                     ConstraintSegment constraintSegment = new ConstraintSegment(alterTableDrop.identifier().getStart().getStartIndex(), alterTableDrop.identifier().getStop().getStopIndex(),
                             (IdentifierValue) visit(alterTableDrop.identifier()));
-                    result.getValue().add(new DropConstraintDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), constraintSegment));
+                    result.add(new DropConstraintDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), constraintSegment));
                 } else if (null == alterTableDrop.KEY() && null == alterTableDrop.keyOrIndex()) {
-                    result.getValue().add(generateDropColumnDefinitionSegment(alterTableDrop));
+                    result.add(generateDropColumnDefinitionSegment(alterTableDrop));
                 } else if (null != alterTableDrop.keyOrIndex()) {
                     IndexSegment indexSegment = (IndexSegment) visit(alterTableDrop.indexName());
-                    result.getValue().add(new DropIndexDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), indexSegment));
+                    result.add(new DropIndexDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), indexSegment));
                 }
             }
             if (each instanceof AddTableConstraintContext) {
-                result.getValue().add((AddConstraintDefinitionSegment) visit(each));
+                result.add((AddConstraintDefinitionSegment) visit(each));
             }
             if (each instanceof AlterRenameTableContext) {
-                result.getValue().add((RenameTableDefinitionSegment) visit(each));
+                result.add((RenameTableDefinitionSegment) visit(each));
             }
             if (each instanceof AlterConvertContext) {
-                result.getValue().add((ConvertTableDefinitionSegment) visit(each));
+                result.add((ConvertTableDefinitionSegment) visit(each));
             }
             if (each instanceof RenameColumnContext) {
-                result.getValue().add((RenameColumnSegment) visit(each));
+                result.add((RenameColumnSegment) visit(each));
             }
             if (each instanceof RenameIndexContext) {
-                result.getValue().add((RenameIndexDefinitionSegment) visit(each));
-            }
-        }
-        for (AlterCommandsModifierContext each : ctx.alterCommandsModifier()) {
-            if (null != each.alterAlgorithmOption()) {
-                result.getValue().add((AlgorithmTypeSegment) visit(each));
-            } else if (null != each.alterLockOption()) {
-                result.getValue().add((LockTableSegment) visit(each));
+                result.add((RenameIndexDefinitionSegment) visit(each));
             }
         }
         return result;
@@ -535,6 +542,7 @@ public final class MySQLDDLStatementVisitor extends MySQLStatementVisitor implem
         return result;
     }
     
+    @SuppressWarnings({"unchecked", "rawtypes"})
     @Override
     public ASTNode visitTableConstraintDef(final TableConstraintDefContext ctx) {
         ConstraintDefinitionSegment result = new ConstraintDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex());
@@ -608,6 +616,7 @@ public final class MySQLDDLStatementVisitor extends MySQLStatementVisitor implem
         return result;
     }
     
+    @SuppressWarnings({"unchecked", "rawtypes"})
     @Override
     public ASTNode visitCreateIndex(final CreateIndexContext ctx) {
         MySQLCreateIndexStatement result = new MySQLCreateIndexStatement();
diff --git a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/OpenGaussStatementVisitor.java b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/OpenGaussStatementVisitor.java
index 9b2f5e44286..f4a9c098527 100644
--- a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/OpenGaussStatementVisitor.java
+++ b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/OpenGaussStatementVisitor.java
@@ -702,6 +702,7 @@ public abstract class OpenGaussStatementVisitor extends OpenGaussStatementBaseVi
         return result;
     }
     
+    @SuppressWarnings({"unchecked", "rawtypes"})
     @Override
     public ASTNode visitQualifiedNameList(final QualifiedNameListContext ctx) {
         CollectionValue<SimpleTableSegment> result = new CollectionValue<>();
@@ -733,6 +734,7 @@ public abstract class OpenGaussStatementVisitor extends OpenGaussStatementBaseVi
         return result;
     }
     
+    @SuppressWarnings("unchecked")
     @Override
     public ASTNode visitInsertRest(final InsertRestContext ctx) {
         OpenGaussInsertStatement result = new OpenGaussInsertStatement();
@@ -781,6 +783,7 @@ public abstract class OpenGaussStatementVisitor extends OpenGaussStatementBaseVi
         return new ColumnAssignmentSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), columnSegments, expressionSegment);
     }
     
+    @SuppressWarnings("unchecked")
     @Override
     public ASTNode visitInsertColumnList(final InsertColumnListContext ctx) {
         CollectionValue<ColumnSegment> result = new CollectionValue<>();
@@ -1124,41 +1127,53 @@ public abstract class OpenGaussStatementVisitor extends OpenGaussStatementBaseVi
     @Override
     public ASTNode visitTableReference(final TableReferenceContext ctx) {
         if (null != ctx.relationExpr()) {
-            SimpleTableSegment result = (SimpleTableSegment) visit(ctx.relationExpr().qualifiedName());
-            if (null != ctx.aliasClause()) {
-                result.setAlias((AliasSegment) visit(ctx.aliasClause()));
-            }
-            return result;
+            return getSimpleTableSegment(ctx);
         }
         if (null != ctx.selectWithParens()) {
-            OpenGaussSelectStatement select = (OpenGaussSelectStatement) visit(ctx.selectWithParens());
-            SubquerySegment subquery = new SubquerySegment(ctx.selectWithParens().start.getStartIndex(), ctx.selectWithParens().stop.getStopIndex(), select);
-            AliasSegment alias = null != ctx.aliasClause() ? (AliasSegment) visit(ctx.aliasClause()) : null;
-            SubqueryTableSegment result = new SubqueryTableSegment(subquery);
-            result.setAlias(alias);
-            return result;
+            return getSubqueryTableSegment(ctx);
         }
         if (null != ctx.tableReference()) {
-            JoinTableSegment result = new JoinTableSegment();
-            result.setLeft((TableSegment) visit(ctx.tableReference()));
-            int startIndex = null != ctx.LP_() ? ctx.LP_().getSymbol().getStartIndex() : ctx.tableReference().start.getStartIndex();
-            int stopIndex = 0;
-            AliasSegment alias = null;
-            if (null != ctx.aliasClause()) {
-                alias = (AliasSegment) visit(ctx.aliasClause());
-                startIndex = null != ctx.RP_() ? ctx.RP_().getSymbol().getStopIndex() : ctx.joinedTable().stop.getStopIndex();
-            } else {
-                stopIndex = null != ctx.RP_() ? ctx.RP_().getSymbol().getStopIndex() : ctx.tableReference().start.getStopIndex();
-            }
-            result.setStartIndex(startIndex);
-            result.setStopIndex(stopIndex);
-            visitJoinedTable(ctx.joinedTable(), result);
-            result.setAlias(alias);
-            return result;
+            return getJoinTableSegment(ctx);
         }
         // TODO deal with functionTable and xmlTable
-        TableNameSegment tableName = new TableNameSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), new IdentifierValue("not support"));
-        return new SimpleTableSegment(tableName);
+        return new SimpleTableSegment(new TableNameSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), new IdentifierValue("not support")));
+    }
+    
+    private SimpleTableSegment getSimpleTableSegment(final TableReferenceContext ctx) {
+        SimpleTableSegment result = (SimpleTableSegment) visit(ctx.relationExpr().qualifiedName());
+        if (null != ctx.aliasClause()) {
+            result.setAlias((AliasSegment) visit(ctx.aliasClause()));
+        }
+        return result;
+    }
+    
+    private SubqueryTableSegment getSubqueryTableSegment(final TableReferenceContext ctx) {
+        OpenGaussSelectStatement select = (OpenGaussSelectStatement) visit(ctx.selectWithParens());
+        SubquerySegment subquery = new SubquerySegment(ctx.selectWithParens().start.getStartIndex(), ctx.selectWithParens().stop.getStopIndex(), select);
+        SubqueryTableSegment result = new SubqueryTableSegment(subquery);
+        if (null != ctx.aliasClause()) {
+            result.setAlias((AliasSegment) visit(ctx.aliasClause()));
+        }
+        return result;
+    }
+    
+    private JoinTableSegment getJoinTableSegment(final TableReferenceContext ctx) {
+        JoinTableSegment result = new JoinTableSegment();
+        result.setLeft((TableSegment) visit(ctx.tableReference()));
+        int startIndex = null != ctx.LP_() ? ctx.LP_().getSymbol().getStartIndex() : ctx.tableReference().start.getStartIndex();
+        int stopIndex = 0;
+        AliasSegment alias = null;
+        if (null != ctx.aliasClause()) {
+            alias = (AliasSegment) visit(ctx.aliasClause());
+            startIndex = null == ctx.RP_() ? ctx.joinedTable().stop.getStopIndex() : ctx.RP_().getSymbol().getStopIndex();
+        } else {
+            stopIndex = null == ctx.RP_() ? ctx.tableReference().start.getStopIndex() : ctx.RP_().getSymbol().getStopIndex();
+        }
+        result.setStartIndex(startIndex);
+        result.setStopIndex(stopIndex);
+        visitJoinedTable(ctx.joinedTable(), result);
+        result.setAlias(alias);
+        return result;
     }
     
     private JoinTableSegment visitJoinedTable(final JoinedTableContext ctx, final JoinTableSegment tableSegment) {
@@ -1189,7 +1204,7 @@ public abstract class OpenGaussStatementVisitor extends OpenGaussStatementBaseVi
         if (null != ctx.FULL()) {
             return JoinType.FULL.name();
         }
-        return null != ctx.LEFT() ? JoinType.LEFT.name() : JoinType.RIGHT.name();
+        return null == ctx.LEFT() ? JoinType.RIGHT.name() : JoinType.LEFT.name();
     }
     
     private String getNaturalJoinType(final NaturalJoinTypeContext ctx) {
diff --git a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
index 09b7e48b567..41e550f64e6 100644
--- a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
+++ b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
@@ -324,35 +324,11 @@ public final class OpenGaussDDLStatementVisitor extends OpenGaussStatementVisito
         return new OpenGaussAlterDefaultPrivilegesStatement();
     }
     
-    @SuppressWarnings("unchecked")
     @Override
     public ASTNode visitAlterDefinitionClause(final AlterDefinitionClauseContext ctx) {
         CollectionValue<AlterDefinitionSegment> result = new CollectionValue<>();
         if (null != ctx.alterTableActions()) {
-            for (AlterTableActionContext each : ctx.alterTableActions().alterTableAction()) {
-                AddColumnSpecificationContext addColumnSpecification = each.addColumnSpecification();
-                if (null != addColumnSpecification) {
-                    result.getValue().addAll(((CollectionValue<AddColumnDefinitionSegment>) visit(addColumnSpecification)).getValue());
-                }
-                if (null != each.addConstraintSpecification() && null != each.addConstraintSpecification().tableConstraint()) {
-                    result.getValue().add((AddConstraintDefinitionSegment) visit(each.addConstraintSpecification()));
-                }
-                if (null != each.validateConstraintSpecification()) {
-                    result.getValue().add((ValidateConstraintDefinitionSegment) visit(each.validateConstraintSpecification()));
-                }
-                if (null != each.modifyColumnSpecification()) {
-                    result.getValue().add((ModifyColumnDefinitionSegment) visit(each.modifyColumnSpecification()));
-                }
-                if (null != each.modifyConstraintSpecification()) {
-                    result.getValue().add((ModifyConstraintDefinitionSegment) visit(each.modifyConstraintSpecification()));
-                }
-                if (null != each.dropColumnSpecification()) {
-                    result.getValue().add((DropColumnDefinitionSegment) visit(each.dropColumnSpecification()));
-                }
-                if (null != each.dropConstraintSpecification()) {
-                    result.getValue().add((DropConstraintDefinitionSegment) visit(each.dropConstraintSpecification()));
-                }
-            }
+            result.getValue().addAll(getAlterDefinitionSegments(ctx));
         }
         if (null != ctx.renameTableSpecification()) {
             result.getValue().add((RenameTableDefinitionSegment) visit(ctx.renameTableSpecification()));
@@ -360,6 +336,35 @@ public final class OpenGaussDDLStatementVisitor extends OpenGaussStatementVisito
         return result;
     }
     
+    @SuppressWarnings("unchecked")
+    private Collection<AlterDefinitionSegment> getAlterDefinitionSegments(final AlterDefinitionClauseContext ctx) {
+        Collection<AlterDefinitionSegment> result = new LinkedList<>();
+        for (AlterTableActionContext each : ctx.alterTableActions().alterTableAction()) {
+            if (null != each.addColumnSpecification()) {
+                result.addAll(((CollectionValue<AddColumnDefinitionSegment>) visit(each.addColumnSpecification())).getValue());
+            }
+            if (null != each.addConstraintSpecification() && null != each.addConstraintSpecification().tableConstraint()) {
+                result.add((AddConstraintDefinitionSegment) visit(each.addConstraintSpecification()));
+            }
+            if (null != each.validateConstraintSpecification()) {
+                result.add((ValidateConstraintDefinitionSegment) visit(each.validateConstraintSpecification()));
+            }
+            if (null != each.modifyColumnSpecification()) {
+                result.add((ModifyColumnDefinitionSegment) visit(each.modifyColumnSpecification()));
+            }
+            if (null != each.modifyConstraintSpecification()) {
+                result.add((ModifyConstraintDefinitionSegment) visit(each.modifyConstraintSpecification()));
+            }
+            if (null != each.dropColumnSpecification()) {
+                result.add((DropColumnDefinitionSegment) visit(each.dropColumnSpecification()));
+            }
+            if (null != each.dropConstraintSpecification()) {
+                result.add((DropConstraintDefinitionSegment) visit(each.dropConstraintSpecification()));
+            }
+        }
+        return result;
+    }
+    
     @Override
     public ASTNode visitAlterForeignTable(final AlterForeignTableContext ctx) {
         return new OpenGaussAlterForeignTableStatement();
@@ -695,6 +700,7 @@ public final class OpenGaussDDLStatementVisitor extends OpenGaussStatementVisito
         return result;
     }
     
+    @SuppressWarnings({"unchecked", "rawtypes"})
     @Override
     public ASTNode visitDropSequence(final DropSequenceContext ctx) {
         OpenGaussDropSequenceStatement result = new OpenGaussDropSequenceStatement();