1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic;
19
20 import lombok.Getter;
21 import lombok.RequiredArgsConstructor;
22 import org.apache.shardingsphere.sql.parser.sql.common.enums.ParameterMarkerType;
23 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
24 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
25 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
26
27 import java.util.List;
28 import java.util.StringJoiner;
29
30
31
32
33 @RequiredArgsConstructor
34 @Getter
35 public class InsertValue {
36
37 private final List<ExpressionSegment> values;
38
39 @Override
40 public final String toString() {
41 StringJoiner result = new StringJoiner(", ", "(", ")");
42 for (int i = 0; i < values.size(); i++) {
43 result.add(getValue(i));
44 }
45 return result.toString();
46 }
47
48 private String getValue(final int index) {
49 ExpressionSegment expressionSegment = values.get(index);
50 if (expressionSegment instanceof ParameterMarkerExpressionSegment) {
51 ParameterMarkerExpressionSegment segment = (ParameterMarkerExpressionSegment) expressionSegment;
52 return ParameterMarkerType.QUESTION == segment.getParameterMarkerType() ? "?" : "$" + (segment.getParameterMarkerIndex() + 1);
53 }
54 if (expressionSegment instanceof LiteralExpressionSegment) {
55 Object literals = ((LiteralExpressionSegment) expressionSegment).getLiterals();
56 return getLiteralValue((LiteralExpressionSegment) expressionSegment, literals);
57 }
58 return expressionSegment.getText();
59 }
60
61 private String getLiteralValue(final LiteralExpressionSegment expressionSegment, final Object literals) {
62 if (null == literals) {
63 return "NULL";
64 }
65 return literals instanceof String ? "'" + expressionSegment.getLiterals() + "'" : String.valueOf(literals);
66 }
67 }