1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.data.pipeline.core.metadata.model;
19
20 import lombok.AccessLevel;
21 import lombok.EqualsAndHashCode;
22 import lombok.Getter;
23 import lombok.NonNull;
24 import lombok.RequiredArgsConstructor;
25 import lombok.ToString;
26 import lombok.extern.slf4j.Slf4j;
27 import org.apache.shardingsphere.infra.metadata.caseinsensitive.CaseInsensitiveIdentifier;
28
29 import java.util.ArrayList;
30 import java.util.Collection;
31 import java.util.Collections;
32 import java.util.List;
33 import java.util.Map;
34 import java.util.stream.Collectors;
35
36
37
38
39 @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
40 @Slf4j
41 @EqualsAndHashCode(of = "name")
42 @ToString
43 public final class PipelineTableMetaData {
44
45 @NonNull
46 private final String name;
47
48 private final Map<CaseInsensitiveIdentifier, PipelineColumnMetaData> columnMetaDataMap;
49
50 @Getter
51 private final List<String> columnNames;
52
53 @Getter
54 private final List<String> primaryKeyColumns;
55
56 @Getter
57 private final Collection<PipelineIndexMetaData> uniqueIndexes;
58
59 public PipelineTableMetaData(final String name, final Map<CaseInsensitiveIdentifier, PipelineColumnMetaData> columnMetaDataMap, final Collection<PipelineIndexMetaData> uniqueIndexes) {
60 this.name = name;
61 this.columnMetaDataMap = columnMetaDataMap;
62 List<PipelineColumnMetaData> columnMetaDataList = new ArrayList<>(columnMetaDataMap.values());
63 Collections.sort(columnMetaDataList);
64 columnNames = Collections.unmodifiableList(columnMetaDataList.stream().map(PipelineColumnMetaData::getName).collect(Collectors.toList()));
65 primaryKeyColumns = Collections.unmodifiableList(columnMetaDataList.stream().filter(PipelineColumnMetaData::isPrimaryKey)
66 .map(PipelineColumnMetaData::getName).collect(Collectors.toList()));
67 this.uniqueIndexes = Collections.unmodifiableCollection(uniqueIndexes);
68 }
69
70
71
72
73
74
75
76
77 public PipelineColumnMetaData getColumnMetaData(final int columnIndex) {
78 return getColumnMetaData(columnNames.get(columnIndex - 1));
79 }
80
81
82
83
84
85
86
87 public PipelineColumnMetaData getColumnMetaData(final String columnName) {
88 PipelineColumnMetaData result = columnMetaDataMap.get(new CaseInsensitiveIdentifier(columnName));
89 if (null == result) {
90 log.warn("Can not get column meta data for column name '{}', columnNames={}", columnName, columnNames);
91 }
92 return result;
93 }
94 }