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