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

zhangliang 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 0125816ba18 Refactor ClickHouseStatementVisitor (#37606)
0125816ba18 is described below

commit 0125816ba18fc2630aeb00a1cb8cf60822b4d964
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jan 1 17:22:53 2026 +0800

    Refactor ClickHouseStatementVisitor (#37606)
    
    * Refactor ClickHouseStatementVisitor
    
    * Refactor ClickHouseStatementVisitor
---
 .../statement/ClickHouseStatementVisitor.java      | 72 +++++++---------------
 .../type/ClickHouseDMLStatementVisitor.java        | 65 +++++++------------
 2 files changed, 42 insertions(+), 95 deletions(-)

diff --git 
a/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/ClickHouseStatementVisitor.java
 
b/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/ClickHouseStatementVisitor.java
index ed76d914fab..76e7bbdeb9c 100644
--- 
a/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/ClickHouseStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/ClickHouseStatementVisitor.java
@@ -74,6 +74,7 @@ import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 /**
  * ClickHouse Statement visitor.
@@ -138,7 +139,6 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
     
     @Override
     public final ASTNode visitBooleanLiterals(final 
ClickHouseStatementParser.BooleanLiteralsContext ctx) {
-        
         return new BooleanLiteralValue(ctx.getText());
     }
     
@@ -258,12 +258,7 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
     
     private ASTNode createCompareSegment(final 
ClickHouseStatementParser.BooleanPrimaryContext ctx) {
         ExpressionSegment left = (ExpressionSegment) 
visit(ctx.booleanPrimary());
-        ExpressionSegment right;
-        if (null != ctx.predicate()) {
-            right = (ExpressionSegment) visit(ctx.predicate());
-        } else {
-            right = (ExpressionSegment) visit(ctx.subquery());
-        }
+        ExpressionSegment right = null != ctx.predicate() ? 
(ExpressionSegment) visit(ctx.predicate()) : (ExpressionSegment) 
visit(ctx.subquery());
         String operator = null == ctx.SAFE_EQ_() ? 
ctx.comparisonOperator().getText() : ctx.SAFE_EQ_().getText();
         String text = ctx.start.getInputStream().getText(new 
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
         return new BinaryOperationExpression(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(), left, right, operator, text);
@@ -298,8 +293,8 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
         ExpressionSegment left = (ExpressionSegment) visit(ctx.bitExpr(0));
         ExpressionSegment right;
         if (null != ctx.subquery()) {
-            right = new SubqueryExpressionSegment(new 
SubquerySegment(ctx.subquery().start.getStartIndex(), 
ctx.subquery().stop.getStopIndex(), (SelectStatement) visit(ctx.subquery()),
-                    getOriginalText(ctx.subquery())));
+            right = new SubqueryExpressionSegment(
+                    new SubquerySegment(ctx.subquery().start.getStartIndex(), 
ctx.subquery().stop.getStopIndex(), (SelectStatement) visit(ctx.subquery()), 
getOriginalText(ctx.subquery())));
         } else {
             ListExpression listExpression = new 
ListExpression(ctx.LP_().getSymbol().getStartIndex(), 
ctx.RP_().getSymbol().getStopIndex());
             for (ClickHouseStatementParser.ExprContext each : ctx.expr()) {
@@ -315,8 +310,7 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
         ExpressionSegment left = (ExpressionSegment) visit(ctx.bitExpr(0));
         ExpressionSegment between = (ExpressionSegment) visit(ctx.bitExpr(1));
         ExpressionSegment and = (ExpressionSegment) visit(ctx.predicate());
-        boolean not = null != ctx.NOT();
-        return new BetweenExpression(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(), left, between, and, not);
+        return new BetweenExpression(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(), left, between, and, null != ctx.NOT());
     }
     
     @Override
@@ -343,8 +337,8 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
         }
         if (astNode instanceof ParameterMarkerValue) {
             ParameterMarkerValue parameterMarker = (ParameterMarkerValue) 
astNode;
-            ParameterMarkerExpressionSegment segment = new 
ParameterMarkerExpressionSegment(context.start.getStartIndex(), 
context.stop.getStopIndex(),
-                    parameterMarker.getValue(), parameterMarker.getType());
+            ParameterMarkerExpressionSegment segment = new 
ParameterMarkerExpressionSegment(
+                    context.start.getStartIndex(), 
context.stop.getStopIndex(), parameterMarker.getValue(), 
parameterMarker.getType());
             parameterMarkerSegments.add(segment);
             return segment;
         }
@@ -413,8 +407,8 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
     private ASTNode createAggregationSegment(final 
ClickHouseStatementParser.AggregationFunctionContext ctx, final String 
aggregationType) {
         AggregationType type = 
AggregationType.valueOf(aggregationType.toUpperCase());
         if (null != ctx.distinct()) {
-            AggregationDistinctProjectionSegment result =
-                    new 
AggregationDistinctProjectionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), type, getOriginalText(ctx), 
getDistinctExpression(ctx));
+            AggregationDistinctProjectionSegment result = new 
AggregationDistinctProjectionSegment(
+                    ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), type, getOriginalText(ctx), 
getDistinctExpression(ctx));
             result.getParameters().addAll(getExpressions(ctx));
             return result;
         }
@@ -424,30 +418,18 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
     }
     
     private Collection<ExpressionSegment> getExpressions(final 
ClickHouseStatementParser.AggregationFunctionContext ctx) {
-        if (null == ctx.expr()) {
-            return Collections.emptyList();
-        }
-        Collection<ExpressionSegment> result = new LinkedList<>();
-        for (ClickHouseStatementParser.ExprContext each : ctx.expr()) {
-            result.add((ExpressionSegment) visit(each));
-        }
-        return result;
+        return null == ctx.expr() ? Collections.emptyList() : 
ctx.expr().stream().map(each -> (ExpressionSegment) 
visit(each)).collect(Collectors.toList());
     }
     
     private String getDistinctExpression(final 
ClickHouseStatementParser.AggregationFunctionContext ctx) {
-        StringBuilder result = new StringBuilder();
-        for (int i = 3; i < ctx.getChildCount() - 1; i++) {
-            result.append(ctx.getChild(i).getText());
-        }
-        return result.toString();
+        return IntStream.range(3, ctx.getChildCount() - 1).mapToObj(i -> 
ctx.getChild(i).getText()).collect(Collectors.joining());
     }
     
     @Override
     public final ASTNode visitSpecialFunction(final 
ClickHouseStatementParser.SpecialFunctionContext ctx) {
-        if (null != ctx.castFunction()) {
-            return visit(ctx.castFunction());
-        }
-        return new FunctionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.getChild(0).getChild(0).getText(), 
getOriginalText(ctx));
+        return null != ctx.castFunction()
+                ? visit(ctx.castFunction())
+                : new FunctionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.getChild(0).getChild(0).getText(), 
getOriginalText(ctx));
     }
     
     @Override
@@ -467,18 +449,13 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
     @Override
     public final ASTNode visitRegularFunction(final 
ClickHouseStatementParser.RegularFunctionContext ctx) {
         FunctionSegment result = new 
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.regularFunctionName().getText(), getOriginalText(ctx));
-        Collection<ExpressionSegment> expressionSegments = 
ctx.expr().stream().map(each -> (ExpressionSegment) 
visit(each)).collect(Collectors.toList());
-        result.getParameters().addAll(expressionSegments);
+        result.getParameters().addAll(ctx.expr().stream().map(each -> 
(ExpressionSegment) visit(each)).collect(Collectors.toList()));
         return result;
     }
     
     @Override
     public final ASTNode visitDataTypeName(final 
ClickHouseStatementParser.DataTypeNameContext ctx) {
-        Collection<String> dataTypeNames = new LinkedList<>();
-        for (int i = 0; i < ctx.getChildCount(); i++) {
-            dataTypeNames.add(ctx.getChild(i).getText());
-        }
-        return new KeywordValue(String.join(" ", dataTypeNames));
+        return new KeywordValue(IntStream.range(0, 
ctx.getChildCount()).mapToObj(i -> 
ctx.getChild(i).getText()).collect(Collectors.joining(" ")));
     }
     
     // TODO :FIXME, sql case id: insert_with_str_to_date
@@ -490,19 +467,14 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
     
     @Override
     public final ASTNode visitOrderByClause(final 
ClickHouseStatementParser.OrderByClauseContext ctx) {
-        Collection<OrderByItemSegment> items = new LinkedList<>();
-        for (ClickHouseStatementParser.OrderByItemContext each : 
ctx.orderByItem()) {
-            items.add((OrderByItemSegment) visit(each));
-        }
-        return new OrderBySegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), items);
+        return new OrderBySegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.orderByItem().stream().map(each -> 
(OrderByItemSegment) visit(each)).collect(Collectors.toList()));
     }
     
     @Override
     public final ASTNode visitOrderByItem(final 
ClickHouseStatementParser.OrderByItemContext ctx) {
         OrderDirection orderDirection = null == ctx.DESC() ? 
OrderDirection.ASC : OrderDirection.DESC;
         if (null != ctx.columnName()) {
-            ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
-            return new ColumnOrderByItemSegment(column, orderDirection, null);
+            return new ColumnOrderByItemSegment((ColumnSegment) 
visit(ctx.columnName()), orderDirection, null);
         }
         return new 
IndexOrderByItemSegment(ctx.numberLiterals().getStart().getStartIndex(), 
ctx.numberLiterals().getStop().getStopIndex(),
                 SQLUtils.getExactlyNumber(ctx.numberLiterals().getText(), 
10).intValue(), orderDirection, null);
@@ -515,8 +487,7 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
         result.setStartIndex(ctx.start.getStartIndex());
         result.setStopIndex(ctx.stop.getStopIndex());
         if (null != ctx.dataTypeLength()) {
-            DataTypeLengthSegment dataTypeLengthSegment = 
(DataTypeLengthSegment) visit(ctx.dataTypeLength());
-            result.setDataLength(dataTypeLengthSegment);
+            result.setDataLength((DataTypeLengthSegment) 
visit(ctx.dataTypeLength()));
         }
         return result;
     }
@@ -527,10 +498,10 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
         result.setStartIndex(ctx.start.getStartIndex());
         result.setStopIndex(ctx.stop.getStartIndex());
         List<TerminalNode> numbers = ctx.NUMBER_();
-        if (numbers.size() == 1) {
+        if (1 == numbers.size()) {
             result.setPrecision(Integer.parseInt(numbers.get(0).getText()));
         }
-        if (numbers.size() == 2) {
+        if (2 == numbers.size()) {
             result.setPrecision(Integer.parseInt(numbers.get(0).getText()));
             result.setScale(Integer.parseInt(numbers.get(1).getText()));
         }
@@ -546,5 +517,4 @@ public abstract class ClickHouseStatementVisitor extends 
ClickHouseStatementBase
     protected String getOriginalText(final ParserRuleContext ctx) {
         return ctx.start.getInputStream().getText(new 
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
     }
-    
 }
diff --git 
a/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/type/ClickHouseDMLStatementVisitor.java
 
b/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/type/ClickHouseDMLStatementVisitor.java
index 270f4ec14a4..2581a8bcfd9 100644
--- 
a/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/type/ClickHouseDMLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/type/ClickHouseDMLStatementVisitor.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.sql.parser.autogen.ClickHouseStatementParser;
 import 
org.apache.shardingsphere.sql.parser.autogen.ClickHouseStatementParser.AssignmentValuesContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.ClickHouseStatementParser.ColumnNamesContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.ClickHouseStatementParser.DeleteContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.ClickHouseStatementParser.ExprContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.ClickHouseStatementParser.InsertContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.ClickHouseStatementParser.InsertValuesClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.ClickHouseStatementParser.SelectClauseContext;
@@ -72,7 +73,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.value.literal.impl.Bo
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
-import java.util.List;
 import java.util.stream.Collectors;
 
 /**
@@ -103,15 +103,7 @@ public final class ClickHouseDMLStatementVisitor extends 
ClickHouseStatementVisi
         } else {
             result.setInsertColumns(new 
InsertColumnsSegment(ctx.start.getStartIndex() - 1, ctx.start.getStartIndex() - 
1, Collections.emptyList()));
         }
-        
result.getValues().addAll(createInsertValuesSegments(ctx.assignmentValues()));
-        return result;
-    }
-    
-    private Collection<InsertValuesSegment> createInsertValuesSegments(final 
Collection<AssignmentValuesContext> assignmentValuesContexts) {
-        Collection<InsertValuesSegment> result = new LinkedList<>();
-        for (ClickHouseStatementParser.AssignmentValuesContext each : 
assignmentValuesContexts) {
-            result.add((InsertValuesSegment) visit(each));
-        }
+        result.getValues().addAll(ctx.assignmentValues().stream().map(each -> 
(InsertValuesSegment) visit(each)).collect(Collectors.toList()));
         return result;
     }
     
@@ -129,40 +121,29 @@ public final class ClickHouseDMLStatementVisitor extends 
ClickHouseStatementVisi
     
     @Override
     public ASTNode visitSetAssignmentsClause(final 
ClickHouseStatementParser.SetAssignmentsClauseContext ctx) {
-        Collection<ColumnAssignmentSegment> assignments = new LinkedList<>();
-        for (ClickHouseStatementParser.AssignmentContext each : 
ctx.assignment()) {
-            assignments.add((ColumnAssignmentSegment) visit(each));
-        }
-        return new SetAssignmentSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), assignments);
+        return new SetAssignmentSegment(
+                ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.assignment().stream().map(each -> (ColumnAssignmentSegment) 
visit(each)).collect(Collectors.toList()));
     }
     
     @Override
     public ASTNode visitAssignmentValues(final AssignmentValuesContext ctx) {
-        List<ExpressionSegment> segments = new LinkedList<>();
-        for (ClickHouseStatementParser.AssignmentValueContext each : 
ctx.assignmentValue()) {
-            segments.add((ExpressionSegment) visit(each));
-        }
-        return new InsertValuesSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), segments);
+        return new InsertValuesSegment(
+                ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
ctx.assignmentValue().stream().map(each -> (ExpressionSegment) 
visit(each)).collect(Collectors.toList()));
     }
     
     @Override
     public ASTNode visitAssignment(final 
ClickHouseStatementParser.AssignmentContext ctx) {
         ColumnSegment column = (ColumnSegment) 
visitColumnName(ctx.columnName());
-        List<ColumnSegment> columnSegments = new LinkedList<>();
-        columnSegments.add(column);
         ExpressionSegment value = (ExpressionSegment) 
visit(ctx.assignmentValue());
-        ColumnAssignmentSegment result = new 
ColumnAssignmentSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), columnSegments, value);
+        ColumnAssignmentSegment result = new 
ColumnAssignmentSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), new 
LinkedList<>(Collections.singletonList(column)), value);
         result.getColumns().add(column);
         return result;
     }
     
     @Override
     public ASTNode visitAssignmentValue(final 
ClickHouseStatementParser.AssignmentValueContext ctx) {
-        ClickHouseStatementParser.ExprContext expr = ctx.expr();
-        if (null != expr) {
-            return visit(expr);
-        }
-        return new CommonExpressionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.getText());
+        ExprContext expr = ctx.expr();
+        return null == expr ? new 
CommonExpressionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.getText()) : visit(expr);
     }
     
     @Override
@@ -227,8 +208,7 @@ public final class ClickHouseDMLStatementVisitor extends 
ClickHouseStatementVisi
     
     @Override
     public ASTNode visitHavingClause(final 
ClickHouseStatementParser.HavingClauseContext ctx) {
-        ExpressionSegment expr = (ExpressionSegment) visit(ctx.expr());
-        return new HavingSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), expr);
+        return new HavingSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), (ExpressionSegment) visit(ctx.expr()));
     }
     
     private boolean isDistinct(final 
ClickHouseStatementParser.SelectSpecificationContext ctx) {
@@ -276,7 +256,8 @@ public final class ClickHouseDMLStatementVisitor extends 
ClickHouseStatementVisi
     
     @Override
     public ASTNode visitAlias(final ClickHouseStatementParser.AliasContext 
ctx) {
-        return null == ctx.identifier() ? new 
AliasSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), new 
IdentifierValue(ctx.STRING_().getText()))
+        return null == ctx.identifier()
+                ? new AliasSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(), new IdentifierValue(ctx.STRING_().getText()))
                 : new AliasSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(), (IdentifierValue) visit(ctx.identifier()));
     }
     
@@ -418,11 +399,14 @@ public final class ClickHouseDMLStatementVisitor extends 
ClickHouseStatementVisi
     private String getJoinType(final 
ClickHouseStatementParser.JoinedTableContext ctx) {
         if (null != ctx.LEFT()) {
             return JoinType.LEFT.name();
-        } else if (null != ctx.RIGHT()) {
+        }
+        if (null != ctx.RIGHT()) {
             return JoinType.RIGHT.name();
-        } else if (null != ctx.INNER()) {
+        }
+        if (null != ctx.INNER()) {
             return JoinType.INNER.name();
-        } else if (null != ctx.CROSS()) {
+        }
+        if (null != ctx.CROSS()) {
             return JoinType.CROSS.name();
         }
         return JoinType.INNER.name();
@@ -430,8 +414,7 @@ public final class ClickHouseDMLStatementVisitor extends 
ClickHouseStatementVisi
     
     private void visitJoinSpecification(final 
ClickHouseStatementParser.JoinSpecificationContext ctx, final JoinTableSegment 
joinTableSource) {
         if (null != ctx.expr()) {
-            ExpressionSegment condition = (ExpressionSegment) 
visit(ctx.expr());
-            joinTableSource.setCondition(condition);
+            joinTableSource.setCondition((ExpressionSegment) 
visit(ctx.expr()));
         }
         if (null != ctx.USING()) {
             
joinTableSource.setUsing(ctx.columnNames().columnName().stream().map(each -> 
(ColumnSegment) visit(each)).collect(Collectors.toList()));
@@ -440,22 +423,16 @@ public final class ClickHouseDMLStatementVisitor extends 
ClickHouseStatementVisi
     
     @Override
     public ASTNode visitWhereClause(final 
ClickHouseStatementParser.WhereClauseContext ctx) {
-        ExpressionSegment segment = (ExpressionSegment) visit(ctx.expr());
-        return new WhereSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), segment);
+        return new WhereSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), (ExpressionSegment) visit(ctx.expr()));
     }
     
     @Override
     public ASTNode visitGroupByClause(final 
ClickHouseStatementParser.GroupByClauseContext ctx) {
-        Collection<OrderByItemSegment> items = new LinkedList<>();
-        for (ClickHouseStatementParser.OrderByItemContext each : 
ctx.orderByItem()) {
-            items.add((OrderByItemSegment) visit(each));
-        }
-        return new GroupBySegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), items);
+        return new GroupBySegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.orderByItem().stream().map(each -> 
(OrderByItemSegment) visit(each)).collect(Collectors.toList()));
     }
     
     @Override
     public ASTNode visitSubquery(final SubqueryContext ctx) {
         return visit(ctx.combineClause());
     }
-    
 }

Reply via email to