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.Setter;
24 import lombok.ToString;
25 import org.apache.shardingsphere.infra.binder.context.segment.select.projection.DerivedColumn;
26 import org.apache.shardingsphere.infra.binder.context.segment.select.projection.Projection;
27 import org.apache.shardingsphere.infra.binder.context.segment.select.projection.util.ProjectionUtils;
28 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
29 import org.apache.shardingsphere.sql.parser.sql.common.enums.AggregationType;
30 import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
31
32 import java.util.ArrayList;
33 import java.util.List;
34 import java.util.Optional;
35
36
37
38
39 @RequiredArgsConstructor
40 @Getter
41 @EqualsAndHashCode
42 @ToString
43 public class AggregationProjection implements Projection {
44
45 private final AggregationType type;
46
47 private final String expression;
48
49 private final IdentifierValue alias;
50
51 private final DatabaseType databaseType;
52
53 private final List<AggregationProjection> derivedAggregationProjections = new ArrayList<>(2);
54
55 @Setter
56 private int index = -1;
57
58 @Override
59 public String getColumnName() {
60 return getColumnLabel();
61 }
62
63 @Override
64 public String getColumnLabel() {
65 return getAlias().isPresent() && !DerivedColumn.isDerivedColumnName(getAlias().get().getValueWithQuoteCharacters()) ? ProjectionUtils.getColumnLabelFromAlias(getAlias().get(), databaseType)
66 : ProjectionUtils.getColumnNameFromFunction(type.name(), expression, databaseType);
67 }
68
69 @Override
70 public final Optional<IdentifierValue> getAlias() {
71 return Optional.ofNullable(alias);
72 }
73 }