1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.binder.segment.parameter.impl;
19
20 import lombok.AccessLevel;
21 import lombok.NoArgsConstructor;
22 import org.apache.shardingsphere.infra.binder.enums.SegmentType;
23 import org.apache.shardingsphere.infra.binder.segment.expression.ExpressionSegmentBinder;
24 import org.apache.shardingsphere.infra.binder.segment.from.TableSegmentBinderContext;
25 import org.apache.shardingsphere.infra.binder.statement.SQLStatementBinderContext;
26 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
27 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
28 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
29 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.ParameterMarkerSegment;
30 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.bounded.ColumnSegmentBoundedInfo;
31
32 import java.util.Map;
33
34
35
36
37 @NoArgsConstructor(access = AccessLevel.PRIVATE)
38 public final class ParameterMarkerExpressionSegmentBinder {
39
40
41
42
43
44
45
46
47
48
49
50 public static BinaryOperationExpression bind(final BinaryOperationExpression segment, final SegmentType parentSegmentType, final SQLStatementBinderContext statementBinderContext,
51 final Map<String, TableSegmentBinderContext> tableBinderContexts, final Map<String, TableSegmentBinderContext> outerTableBinderContexts) {
52 ExpressionSegment boundedLeft = ExpressionSegmentBinder.bind(segment.getLeft(), parentSegmentType, statementBinderContext, tableBinderContexts, outerTableBinderContexts);
53 ExpressionSegment boundedRight = ExpressionSegmentBinder.bind(segment.getRight(), parentSegmentType, statementBinderContext, tableBinderContexts, outerTableBinderContexts);
54 return new BinaryOperationExpression(segment.getStartIndex(), segment.getStopIndex(), boundedLeft, boundedRight, segment.getOperator(), segment.getText());
55 }
56
57
58
59
60
61
62
63
64 public static ParameterMarkerExpressionSegment bind(final ParameterMarkerExpressionSegment segment,
65 final Map<ParameterMarkerSegment, ColumnSegmentBoundedInfo> boundedInfos) {
66 ColumnSegmentBoundedInfo boundedInfo = boundedInfos.get(segment);
67 if (null != boundedInfo) {
68 ParameterMarkerExpressionSegment result =
69 new ParameterMarkerExpressionSegment(segment.getStartIndex(), segment.getStopIndex(), segment.getParameterMarkerIndex(), segment.getParameterMarkerType());
70 segment.getAliasSegment().ifPresent(result::setAlias);
71 result.setBoundedInfo(boundedInfo);
72 return result;
73 }
74 return segment;
75 }
76 }