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());
}
-
}