📄 datatype.java
字号:
}
public static DataType getDataType(int type) {
DataType dt = typesByValueType[type];
if (dt == null) {
dt = typesByValueType[Value.NULL];
}
return dt;
}
public static int convertTypeToSQLType(int type) {
return getDataType(type).sqlType;
}
public static int convertSQLTypeToValueType(int sqlType) throws SQLException {
switch(sqlType) {
case Types.CHAR:
return Value.STRING_FIXED;
case Types.VARCHAR:
case Types.LONGVARCHAR:
return Value.STRING;
case Types.NUMERIC:
case Types.DECIMAL:
return Value.DECIMAL;
case Types.BIT:
case DataType.TYPE_BOOLEAN:
return Value.BOOLEAN;
case Types.INTEGER:
return Value.INT;
case Types.SMALLINT:
return Value.SHORT;
case Types.TINYINT:
return Value.BYTE;
case Types.BIGINT:
return Value.LONG;
case Types.REAL:
return Value.FLOAT;
case Types.DOUBLE:
case Types.FLOAT:
return Value.DOUBLE;
case Types.BINARY:
case Types.VARBINARY:
case Types.LONGVARBINARY:
return Value.BYTES;
case Types.OTHER:
case Types.JAVA_OBJECT:
return Value.JAVA_OBJECT;
case Types.DATE:
return Value.DATE;
case Types.TIME:
return Value.TIME;
case Types.TIMESTAMP:
return Value.TIMESTAMP;
case Types.BLOB:
return Value.BLOB;
case Types.CLOB:
return Value.CLOB;
case Types.NULL:
return Value.NULL;
case Types.ARRAY:
return Value.ARRAY;
default:
throw Message.getSQLException(ErrorCode.UNKNOWN_DATA_TYPE_1, ""+sqlType);
}
}
public static int getTypeFromClass(Class x) throws SQLException {
// TODO refactor: too many if/else in functions, can reduce!
if (x == null) {
return Value.NULL;
}
if (ResultSet.class.isAssignableFrom(x)) {
return Value.RESULT_SET;
} else if (String.class.isAssignableFrom(x)) {
return Value.STRING;
} else if (BigDecimal.class.isAssignableFrom(x)) {
return Value.DECIMAL;
} else if (Boolean.class.isAssignableFrom(x) || boolean.class.isAssignableFrom(x)) {
return Value.BOOLEAN;
} else if (Byte.class.isAssignableFrom(x) || byte.class.isAssignableFrom(x)) {
return Value.BYTE;
} else if (Short.class.isAssignableFrom(x) || short.class.isAssignableFrom(x)) {
return Value.SHORT;
} else if (Integer.class.isAssignableFrom(x) || int.class.isAssignableFrom(x)) {
return Value.INT;
} else if (Character.class.isAssignableFrom(x) || char.class.isAssignableFrom(x)) {
throw Message.getSQLException(ErrorCode.DATA_CONVERSION_ERROR_1, "char (not supported)");
} else if (Long.class.isAssignableFrom(x) || long.class.isAssignableFrom(x)) {
return Value.LONG;
} else if (Float.class.isAssignableFrom(x) || float.class.isAssignableFrom(x)) {
return Value.FLOAT;
} else if (Double.class.isAssignableFrom(x) || double.class.isAssignableFrom(x)) {
return Value.DOUBLE;
} else if (byte[].class.isAssignableFrom(x)) {
return Value.BYTES;
} else if (Date.class.isAssignableFrom(x)) {
return Value.DATE;
} else if (Time.class.isAssignableFrom(x)) {
return Value.TIME;
} else if (Timestamp.class.isAssignableFrom(x)) {
return Value.TIMESTAMP;
} else if (java.util.Date.class.isAssignableFrom(x)) {
return Value.TIMESTAMP;
} else if (java.io.Reader.class.isAssignableFrom(x)) {
return Value.CLOB;
} else if (java.sql.Clob.class.isAssignableFrom(x)) {
return Value.CLOB;
} else if (java.io.InputStream.class.isAssignableFrom(x)) {
return Value.BLOB;
} else if (java.sql.Blob.class.isAssignableFrom(x)) {
return Value.BLOB;
} else if (Object[].class.isAssignableFrom(x)) {
return Value.ARRAY;
} else if (Void.TYPE == x) {
return Value.NULL;
} else {
return Value.JAVA_OBJECT;
}
}
public static Value convertToValue(SessionInterface session, Object x, int type) throws SQLException {
if (x == null) {
return ValueNull.INSTANCE;
}
if (type == Value.JAVA_OBJECT) {
// serialize JAVA_OBJECT, even if the type is known
if (Constants.SERIALIZE_JAVA_OBJECTS) {
return ValueJavaObject.getNoCopy(ObjectUtils.serialize(x));
}
}
if (x instanceof String) {
return ValueString.get((String) x);
} else if (x instanceof BigDecimal) {
return ValueDecimal.get((BigDecimal) x);
} else if (x instanceof Boolean) {
return ValueBoolean.get(((Boolean) x).booleanValue());
} else if (x instanceof Byte) {
return ValueByte.get(((Byte) x).byteValue());
} else if (x instanceof Short) {
return ValueShort.get(((Short) x).shortValue());
} else if (x instanceof Integer) {
return ValueInt.get(((Integer) x).intValue());
} else if (x instanceof Long) {
return ValueLong.get(((Long) x).longValue());
} else if (x instanceof Float) {
return ValueFloat.get(((Float) x).floatValue());
} else if (x instanceof Double) {
return ValueDouble.get(((Double) x).doubleValue());
} else if (x instanceof byte[]) {
return ValueBytes.get((byte[]) x);
} else if (x instanceof Date) {
return ValueDate.get((Date) x);
} else if (x instanceof Time) {
return ValueTime.get((Time) x);
} else if (x instanceof Timestamp) {
return ValueTimestamp.get((Timestamp) x);
} else if (x instanceof java.util.Date) {
return ValueTimestamp.get(new Timestamp(((java.util.Date) x).getTime()));
} else if (x instanceof java.io.Reader) {
Reader r = new BufferedReader((java.io.Reader) x);
return ValueLob.createClob(r, -1, session.getDataHandler());
} else if (x instanceof java.sql.Clob) {
Reader r = new BufferedReader(((java.sql.Clob) x).getCharacterStream());
return ValueLob.createClob(r, -1, session.getDataHandler());
} else if (x instanceof java.io.InputStream) {
return ValueLob.createBlob((java.io.InputStream) x, -1, session.getDataHandler());
} else if (x instanceof java.sql.Blob) {
return ValueLob.createBlob(((java.sql.Blob) x).getBinaryStream(), -1, session.getDataHandler());
} else if (x instanceof ResultSet) {
return ValueResultSet.get((ResultSet) x);
} else if (x instanceof Object[]) {
// (a.getClass().isArray());
// (a.getClass().getComponentType().isPrimitive());
Object[] o = (Object[]) x;
int len = o.length;
Value[] v = new Value[len];
for (int i = 0; i < len; i++) {
v[i] = convertToValue(session, o[i], type);
}
return ValueArray.get(v);
} else {
if (Constants.SERIALIZE_JAVA_OBJECTS) {
return ValueJavaObject.getNoCopy(ObjectUtils.serialize(x));
} else {
throw Message.getSQLException(ErrorCode.UNKNOWN_DATA_TYPE_1, x.getClass().getName());
}
}
}
public static DataType getTypeByName(String s) {
return (DataType) typesByName.get(s);
}
public static boolean isLargeObject(int type) {
if (type == Value.BLOB || type == Value.CLOB) {
return true;
}
return false;
}
public static boolean supportsAdd(int type) {
switch (type) {
case Value.BYTE:
case Value.DECIMAL:
case Value.DOUBLE:
case Value.FLOAT:
case Value.INT:
case Value.LONG:
case Value.SHORT:
return true;
default:
return false;
}
}
public static Object getDefaultForPrimitiveType(Class clazz) {
if (clazz == Boolean.TYPE) {
return Boolean.FALSE;
} else if (clazz == Byte.TYPE) {
return ObjectUtils.getByte((byte) 0);
} else if (clazz == Character.TYPE) {
return ObjectUtils.getCharacter((char) 0);
} else if (clazz == Short.TYPE) {
return ObjectUtils.getShort((short) 0);
} else if (clazz == Integer.TYPE) {
return ObjectUtils.getInteger(0);
} else if (clazz == Long.TYPE) {
return ObjectUtils.getLong(0);
} else if (clazz == Float.TYPE) {
return ObjectUtils.getFloat(0);
} else if (clazz == Double.TYPE) {
return ObjectUtils.getDouble(0);
} else {
throw Message.getInternalError("primitive=" + clazz.toString());
}
}
/**
* Convert a value to the specified class.
*
* @param session the session
* @param conn the database connection
* @param v the value
* @param paramClass the target class
* @return the converted object
*/
public static Object convertTo(SessionInterface session, JdbcConnection conn, Value v, Class paramClass)
throws SQLException {
if (paramClass == java.sql.Blob.class) {
return new JdbcBlob(session, conn, v, 0);
} else if (paramClass == Clob.class) {
return new JdbcClob(session, conn, v, 0);
} else {
throw Message.getUnsupportedException();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -