Coverage Summary for Class: Types (net.sf.persism)
Class |
Class, %
|
Method, %
|
Line, %
|
Types |
100%
(1/1)
|
100%
(9/9)
|
98.9%
(87/88)
|
1 package net.sf.persism;
2
3 import java.lang.reflect.Array;
4 import java.math.BigDecimal;
5 import java.math.BigInteger;
6 import java.sql.Blob;
7 import java.sql.Clob;
8 import java.sql.Time;
9 import java.sql.Timestamp;
10 import java.time.LocalTime;
11 import java.util.UUID;
12
13 /**
14 * Type mapper used for fast switch statements
15 *
16 * @author Dan Howard
17 * @since 10/8/11 5:36 PM
18 */
19 enum Types {
20
21 booleanType(boolean.class),
22 BooleanType(Boolean.class),
23 byteType(byte.class),
24 ByteType(Byte.class),
25 shortType(short.class),
26 ShortType(Short.class),
27 integerType(int.class),
28 IntegerType(Integer.class),
29 longType(long.class),
30 LongType(Long.class),
31 floatType(float.class),
32 FloatType(Float.class),
33 doubleType(double.class),
34 DoubleType(Double.class),
35 BigDecimalType(BigDecimal.class),
36 BigIntegerType(BigInteger.class),
37 StringType(String.class),
38 characterType(char.class),
39 CharacterType(Character.class),
40 UtilDateType(java.util.Date.class),
41 SQLDateType(java.sql.Date.class),
42 TimeType(Time.class),
43 LocalTimeType(LocalTime.class),
44 TimestampType(Timestamp.class),
45 LocalDateType(java.time.LocalDate.class),
46 LocalDateTimeType(java.time.LocalDateTime.class),
47 InstantType(java.time.Instant.class),
48 OffsetDateTimeType(java.time.OffsetDateTime.class),
49 ZonedDateTimeType(java.time.ZonedDateTime.class),
50 byteArrayType(byte[].class),
51 ByteArrayType(Byte[].class),
52 ClobType(Clob.class),
53 BlobType(Blob.class),
54 EnumType(Enum.class),
55 UUIDType(UUID.class),
56 ObjectType(Object.class);
57
58 private static final Log log = Log.getLogger(Types.class);
59
60 private Class<?> type;
61
62 <T> Types(Class<T> type) {
63 init(type);
64 }
65
66 private <T> void init(Class<T> type) {
67 this.type = type;
68 }
69
70 public static <T> Types getType(Class<T> type) {
71 if (type.isEnum()) {
72 return EnumType;
73 }
74
75 for (Types t : values()) {
76 if (t.type.equals(type)) {
77 return t;
78 }
79 }
80 return null;
81 }
82
83 public static Types convert(int sqlType) {
84 Types result = null;
85
86 switch (sqlType) {
87 case java.sql.Types.CHAR:
88 case java.sql.Types.NCHAR:
89 case java.sql.Types.VARCHAR:
90 case java.sql.Types.NVARCHAR:
91 case java.sql.Types.LONGVARCHAR:
92 case java.sql.Types.LONGNVARCHAR:
93 result = StringType;
94 break;
95
96 case java.sql.Types.NUMERIC:
97 case java.sql.Types.DECIMAL:
98 result = BigDecimalType;
99 break;
100
101 case java.sql.Types.BIT:
102 case java.sql.Types.BOOLEAN:
103 result = BooleanType;
104 break;
105
106 case java.sql.Types.TINYINT:
107 result = ByteType;
108 break;
109
110 case java.sql.Types.SMALLINT:
111 result = ShortType;
112 break;
113
114 case java.sql.Types.INTEGER:
115 result = IntegerType;
116 break;
117
118 case java.sql.Types.BIGINT:
119 result = LongType;
120 break;
121
122 case java.sql.Types.FLOAT:
123 result = FloatType;
124 break;
125
126 case java.sql.Types.DOUBLE:
127 case java.sql.Types.REAL:
128 result = DoubleType;
129 break;
130
131 case java.sql.Types.BINARY:
132 case java.sql.Types.VARBINARY:
133 result = ByteArrayType;
134 break;
135
136 case java.sql.Types.LONGVARBINARY:
137 case java.sql.Types.BLOB:
138 result = BlobType;
139 break;
140
141 case java.sql.Types.DATE:
142 result = SQLDateType;
143 break;
144
145 case java.sql.Types.TIME:
146 result = TimeType;
147 break;
148
149 case java.sql.Types.TIMESTAMP:
150 result = TimestampType;
151 break;
152
153 case java.sql.Types.CLOB:
154 case java.sql.Types.NCLOB:
155 result = ClobType;
156 break;
157
158 case java.sql.Types.OTHER:
159 result = ObjectType;
160 }
161
162 if (result == null) {
163 // Need this for converter
164 // https://stackoverflow.com/questions/36405320/using-the-datetimeoffset-datatype-with-jtds
165 if (sqlType == -155) {
166 // MSSQL type for DateTimeOffset
167 result = TimestampType;
168 } else {
169 log.warn(Messages.UnknownSQLType.message(sqlType), new Throwable());
170 }
171 }
172
173 return result;
174 }
175
176 public Class<?> getJavaType() {
177 return type;
178 }
179
180 public boolean isEligibleForAutoinc() {
181 // Oracle returns BigDecimalType for INT
182 // PUBS has SmallInt -> short
183 return this == IntegerType || this == integerType || this == LongType || this == longType
184 || this == ShortType || this == shortType || this == BigDecimalType || this == BigIntegerType;
185 }
186
187 // https://stackoverflow.com/questions/2891970/getting-default-value-for-primitive-types
188 public static <T> T getDefaultValue(Class<T> clazz) {
189 return (T) Array.get(Array.newInstance(clazz, 1), 0);
190 }
191 }
192
193