1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.database.core.type;
19
20 import lombok.Getter;
21 import org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
22 import org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
23 import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
24
25 import java.util.Collection;
26 import java.util.Map;
27 import java.util.concurrent.ConcurrentHashMap;
28 import java.util.stream.Collectors;
29
30
31
32
33 public final class DatabaseTypeRegistry {
34
35 private static final Map<DatabaseType, DialectDatabaseMetaData> REGISTERED_META_DATA = new ConcurrentHashMap<>();
36
37 private final DatabaseType databaseType;
38
39 @Getter
40 private final DialectDatabaseMetaData dialectDatabaseMetaData;
41
42 public DatabaseTypeRegistry(final DatabaseType databaseType) {
43 this.databaseType = databaseType;
44 if (!REGISTERED_META_DATA.containsKey(databaseType)) {
45 REGISTERED_META_DATA.put(databaseType, DatabaseTypedSPILoader.getService(DialectDatabaseMetaData.class, databaseType));
46 }
47 dialectDatabaseMetaData = REGISTERED_META_DATA.get(databaseType);
48 }
49
50
51
52
53
54
55 public Collection<DatabaseType> getAllBranchDatabaseTypes() {
56 return ShardingSphereServiceLoader.getServiceInstances(DatabaseType.class)
57 .stream().filter(each -> each.getTrunkDatabaseType().map(optional -> optional == databaseType).orElse(false)).collect(Collectors.toList());
58 }
59
60
61
62
63
64
65
66 public String getDefaultSchemaName(final String databaseName) {
67 return dialectDatabaseMetaData.getDefaultSchema().orElseGet(() -> null == databaseName ? null : databaseName.toLowerCase());
68 }
69 }