1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.db.protocol.mysql.constant;
19
20 import com.google.common.base.Preconditions;
21 import lombok.Getter;
22 import lombok.RequiredArgsConstructor;
23 import org.apache.shardingsphere.db.protocol.binary.BinaryColumnType;
24
25 import java.sql.Types;
26 import java.util.HashMap;
27 import java.util.Map;
28
29
30
31
32
33
34 @RequiredArgsConstructor
35 @Getter
36 public enum MySQLBinaryColumnType implements BinaryColumnType {
37
38 DECIMAL(0x00),
39
40 TINY(0x01),
41
42 SHORT(0x02),
43
44 LONG(0x03),
45
46 FLOAT(0x04),
47
48 DOUBLE(0x05),
49
50 NULL(0x06),
51
52 TIMESTAMP(0x07),
53
54 LONGLONG(0x08),
55
56 INT24(0x09),
57
58 DATE(0x0a),
59
60 TIME(0x0b),
61
62 DATETIME(0x0c),
63
64 YEAR(0x0d),
65
66 NEWDATE(0x0e),
67
68 VARCHAR(0x0f),
69
70 BIT(0x10),
71
72 TIMESTAMP2(0x11),
73
74 DATETIME2(0x12),
75
76 TIME2(0x13),
77
78
79
80
81
82
83 JSON(0xf5),
84
85 NEWDECIMAL(0xf6),
86
87 ENUM(0xf7),
88
89 SET(0xf8),
90
91 TINY_BLOB(0xf9),
92
93 MEDIUM_BLOB(0xfa),
94
95 LONG_BLOB(0xfb),
96
97 BLOB(0xfc),
98
99 VAR_STRING(0xfd),
100
101 STRING(0xfe),
102
103 GEOMETRY(0xff);
104
105 private static final Map<Integer, MySQLBinaryColumnType> JDBC_TYPE_AND_COLUMN_TYPE_MAP = new HashMap<>(values().length, 1F);
106
107 private static final Map<Integer, MySQLBinaryColumnType> VALUE_AND_COLUMN_TYPE_MAP = new HashMap<>(values().length, 1F);
108
109 private final int value;
110
111 static {
112 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.BIT, BIT);
113 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.TINYINT, TINY);
114 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.SMALLINT, SHORT);
115 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.INTEGER, LONG);
116 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.BIGINT, LONGLONG);
117 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.FLOAT, FLOAT);
118 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.REAL, FLOAT);
119 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.DOUBLE, DOUBLE);
120 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.NUMERIC, NEWDECIMAL);
121 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.DECIMAL, NEWDECIMAL);
122 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.CHAR, STRING);
123 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.VARCHAR, VAR_STRING);
124 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.LONGVARCHAR, VAR_STRING);
125 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.DATE, DATE);
126 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.TIME, TIME);
127 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.TIMESTAMP, TIMESTAMP);
128 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.BINARY, STRING);
129 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.VARBINARY, VAR_STRING);
130 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.LONGVARBINARY, VAR_STRING);
131 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.NULL, NULL);
132 JDBC_TYPE_AND_COLUMN_TYPE_MAP.put(Types.BLOB, BLOB);
133 for (MySQLBinaryColumnType each : values()) {
134 VALUE_AND_COLUMN_TYPE_MAP.put(each.value, each);
135 }
136 }
137
138
139
140
141
142
143
144 public static MySQLBinaryColumnType valueOfJDBCType(final int jdbcType) {
145 Preconditions.checkArgument(JDBC_TYPE_AND_COLUMN_TYPE_MAP.containsKey(jdbcType), "Can not find JDBC type `%s` in column type", jdbcType);
146 return JDBC_TYPE_AND_COLUMN_TYPE_MAP.get(jdbcType);
147 }
148
149
150
151
152
153
154
155 public static MySQLBinaryColumnType valueOf(final int value) {
156 Preconditions.checkArgument(VALUE_AND_COLUMN_TYPE_MAP.containsKey(value), "Can not find value `%s` in column type", value);
157 return VALUE_AND_COLUMN_TYPE_MAP.get(value);
158 }
159 }