提交 30bb27bd 编写于 作者: S Serge Rider

#7459 PG: data type meta info reading fix (floats vs integers)


Former-commit-id: 8d32fcd9
上级 ce1948fe
......@@ -484,25 +484,29 @@ public class PostgreUtils {
if (CommonUtils.isEmpty(string)) {
return convertStringToSimpleValue(session, itemType, string);
}
switch (itemType.getTypeID()) {
case Types.BOOLEAN:
return string.length() > 0 && Character.toLowerCase(string.charAt(0)) == 't';
case Types.TINYINT:
return Byte.parseByte(string);
case Types.SMALLINT:
return Short.parseShort(string);
case Types.INTEGER:
return Integer.parseInt(string);
case Types.BIGINT:
return Long.parseLong(string);
case Types.FLOAT:
return Float.parseFloat(string);
case Types.REAL:
case Types.DOUBLE:
return Double.parseDouble(string);
default: {
return convertStringToSimpleValue(session, itemType, string);
try {
switch (itemType.getTypeID()) {
case Types.BOOLEAN:
return string.length() > 0 && Character.toLowerCase(string.charAt(0)) == 't';
case Types.TINYINT:
return Byte.parseByte(string);
case Types.SMALLINT:
return Short.parseShort(string);
case Types.INTEGER:
return Integer.parseInt(string);
case Types.BIGINT:
return Long.parseLong(string);
case Types.FLOAT:
return Float.parseFloat(string);
case Types.REAL:
case Types.DOUBLE:
return Double.parseDouble(string);
default: {
return convertStringToSimpleValue(session, itemType, string);
}
}
} catch (NumberFormatException e) {
return string;
}
}
......
......@@ -873,9 +873,11 @@ public class PostgreDataType extends JDBCDataType<PostgreSchema> implements Post
break;
case N:
valueType = Types.NUMERIC;
// Kind of a hack (#7459). Don't know any better way to distinguish floats from integers
String outputF = JDBCUtils.safeGetString(dbResult, "typoutput");
if (name.equals("numeric")) {
valueType = Types.NUMERIC;
} else if (name.startsWith("float")) {
} else if (outputF != null && outputF.startsWith("float")) {
switch (typeLength) {
case 4:
valueType = Types.FLOAT;
......
......@@ -77,7 +77,8 @@ public class PostgreStructValueHandler extends JDBCStructValueHandler {
{
PostgreDataType structType = PostgreUtils.findDataType(session, (PostgreDataSource)session.getDataSource(), type);
if (structType == null) {
throw new DBCException("Can't resolve struct type '" + type.getTypeName() + "'");
log.debug("Can't resolve struct type '" + type.getTypeName() + "'");
return object;
}
try {
if (object == null) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册