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.metadata.database.datatype;
19
20 import com.cedarsoftware.util.CaseInsensitiveMap;
21 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
22 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
23
24 import java.sql.DatabaseMetaData;
25 import java.sql.ResultSet;
26 import java.sql.SQLException;
27 import java.util.Map;
28
29
30
31
32 public final class DataTypeLoader {
33
34
35
36
37
38
39
40
41
42 public Map<String, Integer> load(final DatabaseMetaData databaseMetaData, final DatabaseType databaseType) throws SQLException {
43 Map<String, Integer> result = loadStandardDataTypes(databaseMetaData);
44 result.putAll(new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getExtraDataTypes());
45 return result;
46 }
47
48 private Map<String, Integer> loadStandardDataTypes(final DatabaseMetaData databaseMetaData) throws SQLException {
49 Map<String, Integer> result = new CaseInsensitiveMap<>();
50 try (ResultSet resultSet = databaseMetaData.getTypeInfo()) {
51 while (resultSet.next()) {
52 result.put(resultSet.getString("TYPE_NAME"), resultSet.getInt("DATA_TYPE"));
53 }
54 }
55 return result;
56 }
57 }