diff --git a/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/PhType.java b/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/PhType.java index 662f9348..0a6a74d5 100644 --- a/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/PhType.java +++ b/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/PhType.java @@ -1,5 +1,8 @@ package com.alibaba.otter.canal.client.adapter.hbase.support; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.math.BigDecimal; import java.math.BigInteger; import java.sql.Time; @@ -13,65 +16,44 @@ import java.util.Date; * @version 1.0.0 */ public enum PhType { - DEFAULT(-1, "VARCHAR"), UNSIGNED_INT(4, "UNSIGNED_INT"), UNSIGNED_LONG(8, "UNSIGNED_LONG"), - UNSIGNED_TINYINT(1, "UNSIGNED_TINYINT"), UNSIGNED_SMALLINT(2, "UNSIGNED_SMALLINT"), - UNSIGNED_FLOAT(4, "UNSIGNED_FLOAT"), UNSIGNED_DOUBLE(8, "UNSIGNED_DOUBLE"), INTEGER(4, "INTEGER"), - BIGINT(8, "BIGINT"), TINYINT(1, "TINYINT"), SMALLINT(2, "SMALLINT"), FLOAT(4, "FLOAT"), DOUBLE(8, "DOUBLE"), - DECIMAL(-1, "DECIMAL"), BOOLEAN(1, "BOOLEAN"), UNSIGNED_TIME(8, "UNSIGNED_TIME"), - UNSIGNED_DATE(8, "UNSIGNED_DATE"), UNSIGNED_TIMESTAMP(12, "UNSIGNED_TIMESTAMP"), TIME(8, "TIME"), DATE(8, "DATE"), - TIMESTAMP(12, "TIMESTAMP"), VARCHAR(-1, "VARCHAR"), VARBINARY(-1, "VARBINARY"); + DEFAULT, UNSIGNED_INT, UNSIGNED_LONG, UNSIGNED_TINYINT, UNSIGNED_SMALLINT, UNSIGNED_FLOAT, + UNSIGNED_DOUBLE, INTEGER, BIGINT, TINYINT, SMALLINT, FLOAT, DOUBLE, DECIMAL, BOOLEAN, UNSIGNED_TIME, + UNSIGNED_DATE, UNSIGNED_TIMESTAMP, TIME, DATE, TIMESTAMP, VARCHAR, VARBINARY; - /** - * -1:长度可变 - */ - private int len; - private String type; - - PhType(int len, String type){ - this.len = len; - this.type = type; - } - - public int getLen() { - return len; - } - - public String getType() { - return this.type; - } + private static Logger logger = LoggerFactory.getLogger(PhType.class); public static PhType getType(Class javaType) { if (javaType == null) return DEFAULT; PhType phType; - if (Integer.class.isAssignableFrom(javaType) || int.class.isAssignableFrom(javaType)) { + if (Integer.class == javaType || int.class == javaType) { phType = INTEGER; - } else if (Long.class.isAssignableFrom(javaType) || long.class.isAssignableFrom(javaType)) { + } else if (Long.class == javaType || long.class == javaType) { phType = BIGINT; - } else if (Byte.class.isAssignableFrom(javaType) || byte.class.isAssignableFrom(javaType)) { + } else if (Byte.class == javaType || byte.class == javaType) { phType = TINYINT; - } else if (Short.class.isAssignableFrom(javaType) || short.class.isAssignableFrom(javaType)) { + } else if (Short.class == javaType || short.class == javaType) { phType = SMALLINT; - } else if (Float.class.isAssignableFrom(javaType) || float.class.isAssignableFrom(javaType)) { + } else if (Float.class == javaType || float.class == javaType) { phType = FLOAT; - } else if (Double.class.isAssignableFrom(javaType) || double.class.isAssignableFrom(javaType)) { + } else if (Double.class == javaType || double.class == javaType) { phType = DOUBLE; - } else if (Boolean.class.isAssignableFrom(javaType) || boolean.class.isAssignableFrom(javaType)) { + } else if (Boolean.class == javaType || boolean.class == javaType) { phType = BOOLEAN; - } else if (java.sql.Date.class.isAssignableFrom(javaType)) { + } else if (java.sql.Date.class == javaType) { phType = DATE; - } else if (Time.class.isAssignableFrom(javaType)) { + } else if (Time.class == javaType) { phType = DATE; - } else if (Timestamp.class.isAssignableFrom(javaType)) { + } else if (Timestamp.class == javaType) { phType = TIMESTAMP; - } else if (Date.class.isAssignableFrom(javaType)) { + } else if (Date.class == javaType) { phType = DATE; - } else if (byte[].class.isAssignableFrom(javaType)) { + } else if (byte[].class == javaType) { phType = VARBINARY; - } else if (String.class.isAssignableFrom(javaType)) { + } else if (String.class == javaType) { phType = VARCHAR; - } else if (BigDecimal.class.isAssignableFrom(javaType)) { + } else if (BigDecimal.class == javaType) { phType = DECIMAL; - } else if (BigInteger.class.isAssignableFrom(javaType)) { + } else if (BigInteger.class == javaType) { phType = UNSIGNED_LONG; } else { phType = DEFAULT; @@ -81,54 +63,11 @@ public enum PhType { public static PhType getType(String type) { if (type == null) return DEFAULT; - PhType phType; - if (type.equalsIgnoreCase(UNSIGNED_INT.type)) { - phType = UNSIGNED_INT; - } else if (type.equalsIgnoreCase(UNSIGNED_LONG.type)) { - phType = UNSIGNED_LONG; - } else if (type.equalsIgnoreCase(UNSIGNED_TINYINT.type)) { - phType = UNSIGNED_TINYINT; - } else if (type.equalsIgnoreCase(UNSIGNED_SMALLINT.type)) { - phType = UNSIGNED_SMALLINT; - } else if (type.equalsIgnoreCase(UNSIGNED_FLOAT.type)) { - phType = UNSIGNED_FLOAT; - } else if (type.equalsIgnoreCase(UNSIGNED_DOUBLE.type)) { - phType = UNSIGNED_DOUBLE; - } else if (type.equalsIgnoreCase(INTEGER.type)) { - phType = INTEGER; - } else if (type.equalsIgnoreCase(BIGINT.type)) { - phType = BIGINT; - } else if (type.equalsIgnoreCase(TINYINT.type)) { - phType = TINYINT; - } else if (type.equalsIgnoreCase(SMALLINT.type)) { - phType = SMALLINT; - } else if (type.equalsIgnoreCase(FLOAT.type)) { - phType = FLOAT; - } else if (type.equalsIgnoreCase(DOUBLE.type)) { - phType = DOUBLE; - } else if (type.equalsIgnoreCase(BOOLEAN.type)) { - phType = BOOLEAN; - } else if (type.equalsIgnoreCase(UNSIGNED_TIME.type)) { - phType = UNSIGNED_TIME; - } else if (type.equalsIgnoreCase(UNSIGNED_DATE.type)) { - phType = UNSIGNED_DATE; - } else if (type.equalsIgnoreCase(UNSIGNED_TIMESTAMP.type)) { - phType = UNSIGNED_TIMESTAMP; - } else if (type.equalsIgnoreCase(TIME.type)) { - phType = TIME; - } else if (type.equalsIgnoreCase(DATE.type)) { - phType = DATE; - } else if (type.equalsIgnoreCase(TIMESTAMP.type)) { - phType = TIMESTAMP; - } else if (type.equalsIgnoreCase(VARCHAR.type)) { - phType = VARCHAR; - } else if (type.equalsIgnoreCase(VARBINARY.type)) { - phType = VARBINARY; - } else if (type.equalsIgnoreCase(DECIMAL.type)) { - phType = DECIMAL; - } else { - phType = DEFAULT; + try { + return PhType.valueOf(type.toUpperCase()); + } catch (Exception e) { + logger.error(e.getMessage(), e); + return DEFAULT; } - return phType; } } diff --git a/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/Type.java b/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/Type.java index 2a44cb30..bbe3f879 100644 --- a/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/Type.java +++ b/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/Type.java @@ -1,5 +1,8 @@ package com.alibaba.otter.canal.client.adapter.hbase.support; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.math.BigDecimal; import java.math.BigInteger; import java.util.Date; @@ -11,50 +14,20 @@ import java.util.Date; * @version 1.0.0 */ public enum Type { - DEFAULT("STRING"), STRING("STRING"), INTEGER("INTEGER"), LONG("LONG"), SHORT("SHORT"), BOOLEAN("BOOLEAN"), - FLOAT("FLOAT"), DOUBLE("DOUBLE"), BIGDECIMAL("BIGDECIMAL"), DATE("DATE"), BYTE("BYTE"), BYTES("BYTES"); + DEFAULT, STRING, INTEGER, LONG, SHORT, BOOLEAN, FLOAT, DOUBLE, BIGDECIMAL, DATE, BYTE, BYTES; - private String type; - - Type(String type){ - this.type = type; - } - - public String getType() { - return type; - } + private static Logger logger = LoggerFactory.getLogger(Type.class); public static Type getType(String type) { if (type == null) { return DEFAULT; } - Type res; - if (type.equalsIgnoreCase("STRING")) { - res = STRING; - } else if (type.equalsIgnoreCase("INTEGER")) { - res = INTEGER; - } else if (type.equalsIgnoreCase("LONG")) { - res = LONG; - } else if (type.equalsIgnoreCase("SHORT")) { - res = SHORT; - } else if (type.equalsIgnoreCase("BOOLEAN")) { - res = BOOLEAN; - } else if (type.equalsIgnoreCase("FLOAT")) { - res = FLOAT; - } else if (type.equalsIgnoreCase("DOUBLE")) { - res = DOUBLE; - } else if (type.equalsIgnoreCase("BIGDECIMAL")) { - res = BIGDECIMAL; - } else if (type.equalsIgnoreCase("DATE")) { - res = DATE; - } else if (type.equalsIgnoreCase("BYTE")) { - res = BYTE; - } else if (type.equalsIgnoreCase("BYTES")) { - res = BYTES; - } else { - res = DEFAULT; + try { + return Type.valueOf(type); + } catch (Exception e) { + logger.error(e.getMessage(), e); + return DEFAULT; } - return res; } public static Type getType(Class javaType) { @@ -62,29 +35,29 @@ public enum Type { return DEFAULT; } Type type; - if (Integer.class.isAssignableFrom(javaType) || int.class.isAssignableFrom(javaType)) { + if (Integer.class == javaType || int.class == javaType) { type = INTEGER; - } else if (Long.class.isAssignableFrom(javaType) || long.class.isAssignableFrom(javaType)) { + } else if (Long.class == javaType || long.class == javaType) { type = LONG; - } else if (Byte.class.isAssignableFrom(javaType) || byte.class.isAssignableFrom(javaType)) { + } else if (Byte.class == javaType || byte.class == javaType) { type = BYTE; - } else if (Short.class.isAssignableFrom(javaType) || short.class.isAssignableFrom(javaType)) { + } else if (Short.class == javaType || short.class == javaType) { type = SHORT; - } else if (Float.class.isAssignableFrom(javaType) || float.class.isAssignableFrom(javaType)) { + } else if (Float.class == javaType || float.class == javaType) { type = FLOAT; - } else if (Double.class.isAssignableFrom(javaType) || double.class.isAssignableFrom(javaType)) { + } else if (Double.class == javaType || double.class == javaType) { type = DOUBLE; - } else if (Boolean.class.isAssignableFrom(javaType) || boolean.class.isAssignableFrom(javaType)) { + } else if (Boolean.class == javaType || boolean.class == javaType) { type = BOOLEAN; - } else if (Date.class.isAssignableFrom(javaType)) { + } else if (Date.class == javaType) { type = DATE; - } else if (byte[].class.isAssignableFrom(javaType)) { + } else if (byte[].class == javaType) { type = BYTES; - } else if (String.class.isAssignableFrom(javaType)) { + } else if (String.class == javaType) { type = STRING; - } else if (BigDecimal.class.isAssignableFrom(javaType)) { + } else if (BigDecimal.class == javaType) { type = BIGDECIMAL; - } else if (BigInteger.class.isAssignableFrom(javaType)) { + } else if (BigInteger.class == javaType) { type = LONG; } else { type = DEFAULT; diff --git a/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/TypeUtil.java b/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/TypeUtil.java index f90e5bd8..22500a47 100644 --- a/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/TypeUtil.java +++ b/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/TypeUtil.java @@ -21,29 +21,30 @@ public class TypeUtil { return null; } byte[] bytes; - if (obj instanceof String) { + Class clazz = obj.getClass(); + if (clazz == String.class) { bytes = Bytes.toBytes((String) obj); - } else if (obj instanceof Integer) { + } else if (clazz == Integer.class || clazz == int.class) { bytes = Bytes.toBytes((Integer) obj); - } else if (obj instanceof Long) { + } else if (clazz == Long.class || clazz == long.class) { bytes = Bytes.toBytes((Long) obj); - } else if (obj instanceof Short) { + } else if (clazz == Short.class || clazz == short.class) { bytes = Bytes.toBytes((Short) obj); - } else if (obj instanceof Boolean) { + } else if (clazz == Boolean.class || clazz == boolean.class) { bytes = Bytes.toBytes((Boolean) obj); - } else if (obj instanceof Float) { + } else if (clazz == Float.class || clazz == float.class) { bytes = Bytes.toBytes((Float) obj); - } else if (obj instanceof Double) { + } else if (clazz == Double.class || clazz == double.class) { bytes = Bytes.toBytes((Double) obj); - } else if (obj instanceof BigDecimal) { - bytes = Bytes.toBytes((BigDecimal) obj); - } else if (obj instanceof BigInteger) { - bytes = Bytes.toBytes(((BigInteger) obj).longValue()); - } else if (obj instanceof Date) { - bytes = Bytes.toBytes(((Date) obj).getTime()); - } else if (obj instanceof Byte) { + } else if (clazz == Byte.class || clazz == byte.class) { bytes = new byte[] { (byte) obj }; - } else if (obj instanceof byte[]) { + } else if (clazz == BigDecimal.class) { + bytes = Bytes.toBytes((BigDecimal) obj); + } else if (clazz == BigInteger.class) { + bytes = Bytes.toBytes(((BigInteger) obj).longValue()); + } else if (clazz == Date.class) { + bytes = Bytes.toBytes(((Date) obj).getTime()); + } else if (clazz == byte[].class) { bytes = (byte[]) obj; } else { // 其余类型统一转换为string @@ -98,38 +99,38 @@ public class TypeUtil { return null; } Object res; - if (String.class.isAssignableFrom(clazz)) { + if (String.class == clazz) { res = Bytes.toString(bytes); - } else if (Integer.class.isAssignableFrom(clazz)) { + } else if (Integer.class == clazz || int.class == clazz) { res = Bytes.toInt(bytes); - } else if (Long.class.isAssignableFrom(clazz)) { + } else if (Long.class == clazz || long.class == clazz) { res = Bytes.toLong(bytes); - } else if (Short.class.isAssignableFrom(clazz)) { + } else if (Short.class == clazz || short.class == clazz) { res = Bytes.toShort(bytes); - } else if (Boolean.class.isAssignableFrom(clazz)) { + } else if (Boolean.class == clazz || boolean.class == clazz) { res = Bytes.toBoolean(bytes); - } else if (Float.class.isAssignableFrom(clazz)) { + } else if (Float.class == clazz || float.class == clazz) { res = Bytes.toFloat(bytes); - } else if (Double.class.isAssignableFrom(clazz)) { + } else if (Double.class == clazz || double.class == clazz) { res = Bytes.toDouble(bytes); - } else if (BigDecimal.class.isAssignableFrom(clazz)) { + } else if (Byte.class == clazz || byte.class == clazz) { + res = bytes[0]; + } else if (BigDecimal.class == clazz) { res = Bytes.toBigDecimal(bytes); - } else if (BigInteger.class.isAssignableFrom(clazz)) { + } else if (BigInteger.class == clazz) { res = Bytes.toLong(bytes); - } else if (java.sql.Date.class.isAssignableFrom(clazz)) { + } else if (java.sql.Date.class == clazz) { long ts = Bytes.toLong(bytes); res = new java.sql.Date(ts); - } else if (Time.class.isAssignableFrom(clazz)) { + } else if (Time.class == clazz) { long ts = Bytes.toLong(bytes); res = new Time(ts); - } else if (Timestamp.class.isAssignableFrom(clazz)) { + } else if (Timestamp.class == clazz) { long ts = Bytes.toLong(bytes); res = new Timestamp(ts); - } else if (Date.class.isAssignableFrom(clazz)) { + } else if (Date.class == clazz) { long ts = Bytes.toLong(bytes); res = new Date(ts); - } else if (Byte.class.isAssignableFrom(clazz)) { - res = bytes[0]; } else { throw new IllegalArgumentException("mismatch class type"); }