📄 datatype.java
字号:
dt.defaultDisplaySize = dataType.defaultDisplaySize;
dt.caseSensitive = dataType.caseSensitive;
dt.hidden = i > 0;
dt.memory = memory;
for (int j = 0; j < types.size(); j++) {
DataType t2 = (DataType) types.get(j);
if (t2.sqlType == dt.sqlType) {
dt.sqlTypePos++;
}
}
typesByName.put(dt.name, dt);
if (typesByValueType[type] == null) {
typesByValueType[type] = dt;
}
types.add(dt);
}
}
public static String getJdbcString(int type) {
return typesByValueType[type].jdbc;
}
private static DataType createDecimal(int maxPrecision, int defaultPrecision, int defaultScale, int defaultDisplaySize, boolean needsPrecisionAndScale, boolean autoInc) {
DataType dataType = new DataType();
dataType.maxPrecision = maxPrecision;
dataType.defaultPrecision = defaultPrecision;
dataType.defaultScale = defaultScale;
dataType.defaultDisplaySize = defaultDisplaySize;
if (needsPrecisionAndScale) {
dataType.params = "PRECISION,SCALE";
dataType.supportsPrecision = true;
dataType.supportsScale = true;
}
dataType.decimal = true;
dataType.autoInc = autoInc;
return dataType;
}
private static DataType createDate(int precision, String prefix, int scale, int displaySize) {
DataType dataType = new DataType();
dataType.prefix = prefix + " '";
dataType.suffix = "'";
dataType.maxPrecision = precision;
dataType.supportsScale = scale != 0;
dataType.maxScale = scale;
dataType.defaultPrecision = precision;
dataType.defaultScale = scale;
dataType.defaultDisplaySize = displaySize;
return dataType;
}
private static DataType createString(boolean caseSensitive) {
DataType dataType = new DataType();
dataType.prefix = "'";
dataType.suffix = "'";
dataType.params = "LENGTH";
dataType.caseSensitive = caseSensitive;
dataType.supportsPrecision = true;
dataType.maxPrecision = Integer.MAX_VALUE;
dataType.defaultPrecision = Integer.MAX_VALUE;
dataType.defaultDisplaySize = Integer.MAX_VALUE;
return dataType;
}
public static ObjectArray getTypes() {
return types;
}
/**
* Read a value from the given result set.
*
* @param session the session
* @param rs the result set
* @param columnIndex the column index (1 based)
* @param type the data type
* @return the value
*/
public static Value readValue(SessionInterface session, ResultSet rs, int columnIndex, int type) throws SQLException {
Value v;
switch(type) {
case Value.NULL: {
return ValueNull.INSTANCE;
}
case Value.BYTES: {
byte[] buff = rs.getBytes(columnIndex);
v = buff == null ? (Value) ValueNull.INSTANCE : ValueBytes.getNoCopy(buff);
break;
}
case Value.UUID: {
byte[] buff = rs.getBytes(columnIndex);
v = buff == null ? (Value) ValueNull.INSTANCE : ValueUuid.get(buff);
break;
}
case Value.BOOLEAN: {
boolean value = rs.getBoolean(columnIndex);
v = rs.wasNull() ? (Value) ValueNull.INSTANCE : ValueBoolean.get(value);
break;
}
case Value.BYTE: {
byte value = rs.getByte(columnIndex);
v = rs.wasNull() ? (Value) ValueNull.INSTANCE : ValueByte.get(value);
break;
}
case Value.DATE: {
Date value = rs.getDate(columnIndex);
v = value == null ? (Value) ValueNull.INSTANCE : ValueDate.get(value);
break;
}
case Value.TIME: {
Time value = rs.getTime(columnIndex);
v = value == null ? (Value) ValueNull.INSTANCE : ValueTime.get(value);
break;
}
case Value.TIMESTAMP: {
Timestamp value = rs.getTimestamp(columnIndex);
v = value == null ? (Value) ValueNull.INSTANCE : ValueTimestamp.get(value);
break;
}
case Value.DECIMAL: {
BigDecimal value = rs.getBigDecimal(columnIndex);
v = value == null ? (Value) ValueNull.INSTANCE : ValueDecimal.get(value);
break;
}
case Value.DOUBLE: {
double value = rs.getDouble(columnIndex);
v = rs.wasNull() ? (Value) ValueNull.INSTANCE : ValueDouble.get(value);
break;
}
case Value.FLOAT: {
float value = rs.getFloat(columnIndex);
v = rs.wasNull() ? (Value) ValueNull.INSTANCE : ValueFloat.get(value);
break;
}
case Value.INT: {
int value = rs.getInt(columnIndex);
v = rs.wasNull() ? (Value) ValueNull.INSTANCE : ValueInt.get(value);
break;
}
case Value.LONG: {
long value = rs.getLong(columnIndex);
v = rs.wasNull() ? (Value) ValueNull.INSTANCE : ValueLong.get(value);
break;
}
case Value.SHORT: {
short value = rs.getShort(columnIndex);
v = rs.wasNull() ? (Value) ValueNull.INSTANCE : ValueShort.get(value);
break;
}
case Value.STRING_IGNORECASE: {
String s = rs.getString(columnIndex);
v = (s == null) ? (Value) ValueNull.INSTANCE : ValueStringIgnoreCase.get(s);
break;
}
case Value.STRING_FIXED: {
String s = rs.getString(columnIndex);
v = (s == null) ? (Value) ValueNull.INSTANCE : ValueStringFixed.get(s);
break;
}
case Value.STRING: {
String s = rs.getString(columnIndex);
v = (s == null) ? (Value) ValueNull.INSTANCE : ValueString.get(s);
break;
}
case Value.CLOB: {
if (session == null) {
v = ValueLob.createSmallLob(Value.CLOB, StringUtils.utf8Encode(rs.getString(columnIndex)));
} else {
Reader in = rs.getCharacterStream(columnIndex);
if (in == null) {
v = ValueNull.INSTANCE;
} else {
v = ValueLob.createClob(new BufferedReader(in), -1, session.getDataHandler());
}
}
break;
}
case Value.BLOB: {
if (session == null) {
v = ValueLob.createSmallLob(Value.BLOB, rs.getBytes(columnIndex));
} else {
InputStream in = rs.getBinaryStream(columnIndex);
v = (in == null) ? (Value) ValueNull.INSTANCE : ValueLob.createBlob(in, -1, session.getDataHandler());
}
break;
}
case Value.JAVA_OBJECT: {
byte[] buff = rs.getBytes(columnIndex);
v = buff == null ? (Value) ValueNull.INSTANCE : ValueJavaObject.getNoCopy(buff);
break;
}
case Value.ARRAY: {
Array array = rs.getArray(columnIndex);
if (array == null) {
return ValueNull.INSTANCE;
}
Object[] list = (Object[]) array.getArray();
if (list == null) {
return ValueNull.INSTANCE;
}
Value[] values = new Value[list.length];
for (int i = 0; i < list.length; i++) {
values[i] = DataType.convertToValue(session, list[i], Value.NULL);
}
v = ValueArray.get(values);
break;
}
default:
throw Message.getInternalError("type="+type);
}
return v;
}
public static String getTypeClassName(int type) {
switch(type) {
case Value.BOOLEAN:
return Boolean.class.getName(); // "java.lang.Boolean";
case Value.BYTE:
return Byte.class.getName(); // "java.lang.Byte";
case Value.SHORT:
return Short.class.getName(); // "java.lang.Short";
case Value.INT:
return Integer.class.getName(); // "java.lang.Integer";
case Value.LONG:
return Long.class.getName(); // "java.lang.Long";
case Value.DECIMAL:
return BigDecimal.class.getName(); // "java.math.BigDecimal";
case Value.TIME:
return Time.class.getName(); // "java.sql.Time";
case Value.DATE:
return Date.class.getName(); // "java.sql.Date";
case Value.TIMESTAMP:
return Timestamp.class.getName(); // "java.sql.Timestamp";
case Value.BYTES:
case Value.UUID:
return byte[].class.getName(); // "[B", not "byte[]";
case Value.STRING:
case Value.STRING_IGNORECASE:
case Value.STRING_FIXED:
return String.class.getName(); // "java.lang.String";
case Value.BLOB:
return java.sql.Blob.class.getName(); // "java.sql.Blob";
case Value.CLOB:
return java.sql.Clob.class.getName(); // "java.sql.Clob";
case Value.DOUBLE:
return Double.class.getName(); // "java.lang.Double";
case Value.FLOAT:
return Float.class.getName(); // "java.lang.Float";
case Value.NULL:
return null;
case Value.JAVA_OBJECT:
return Object.class.getName(); // "java.lang.Object";
case Value.UNKNOWN:
return Object.class.getName(); // anything
case Value.ARRAY:
return Array.class.getName();
case Value.RESULT_SET:
return ResultSet.class.getName();
default:
throw Message.getInternalError("type="+type);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -