1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.binder.context.segment.select.projection.impl;
19
20 import lombok.EqualsAndHashCode;
21 import lombok.Getter;
22 import lombok.RequiredArgsConstructor;
23 import lombok.ToString;
24 import org.apache.shardingsphere.infra.binder.context.segment.select.projection.Projection;
25 import org.apache.shardingsphere.infra.binder.context.segment.select.projection.util.ProjectionUtils;
26 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
27 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
28 import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
29
30 import java.util.Optional;
31
32
33
34
35 @RequiredArgsConstructor
36 @Getter
37 @EqualsAndHashCode
38 @ToString
39 public final class ExpressionProjection implements Projection {
40
41 private final ExpressionProjectionSegment expressionSegment;
42
43 private final IdentifierValue alias;
44
45 private final DatabaseType databaseType;
46
47 @Override
48 public String getColumnName() {
49 return getColumnLabel();
50 }
51
52 @Override
53 public String getColumnLabel() {
54 return getAlias().isPresent() ? ProjectionUtils.getColumnLabelFromAlias(getAlias().get(), databaseType)
55 : ProjectionUtils.getColumnNameFromExpression(expressionSegment.getText(), databaseType);
56 }
57
58 @Override
59 public String getExpression() {
60 return expressionSegment.getText();
61 }
62
63 @Override
64 public Optional<IdentifierValue> getAlias() {
65 return Optional.ofNullable(alias);
66 }
67 }