提交 8d32fcd9 编写于 作者: S Serge Rider

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

上级 15c4fad9
...@@ -484,25 +484,29 @@ public class PostgreUtils { ...@@ -484,25 +484,29 @@ public class PostgreUtils {
if (CommonUtils.isEmpty(string)) { if (CommonUtils.isEmpty(string)) {
return convertStringToSimpleValue(session, itemType, string); return convertStringToSimpleValue(session, itemType, string);
} }
switch (itemType.getTypeID()) { try {
case Types.BOOLEAN: switch (itemType.getTypeID()) {
return string.length() > 0 && Character.toLowerCase(string.charAt(0)) == 't'; case Types.BOOLEAN:
case Types.TINYINT: return string.length() > 0 && Character.toLowerCase(string.charAt(0)) == 't';
return Byte.parseByte(string); case Types.TINYINT:
case Types.SMALLINT: return Byte.parseByte(string);
return Short.parseShort(string); case Types.SMALLINT:
case Types.INTEGER: return Short.parseShort(string);
return Integer.parseInt(string); case Types.INTEGER:
case Types.BIGINT: return Integer.parseInt(string);
return Long.parseLong(string); case Types.BIGINT:
case Types.FLOAT: return Long.parseLong(string);
return Float.parseFloat(string); case Types.FLOAT:
case Types.REAL: return Float.parseFloat(string);
case Types.DOUBLE: case Types.REAL:
return Double.parseDouble(string); case Types.DOUBLE:
default: { return Double.parseDouble(string);
return convertStringToSimpleValue(session, itemType, string); default: {
return convertStringToSimpleValue(session, itemType, string);
}
} }
} catch (NumberFormatException e) {
return string;
} }
} }
......
...@@ -873,9 +873,11 @@ public class PostgreDataType extends JDBCDataType<PostgreSchema> implements Post ...@@ -873,9 +873,11 @@ public class PostgreDataType extends JDBCDataType<PostgreSchema> implements Post
break; break;
case N: case N:
valueType = Types.NUMERIC; 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")) { if (name.equals("numeric")) {
valueType = Types.NUMERIC; valueType = Types.NUMERIC;
} else if (name.startsWith("float")) { } else if (outputF != null && outputF.startsWith("float")) {
switch (typeLength) { switch (typeLength) {
case 4: case 4:
valueType = Types.FLOAT; valueType = Types.FLOAT;
......
...@@ -77,7 +77,8 @@ public class PostgreStructValueHandler extends JDBCStructValueHandler { ...@@ -77,7 +77,8 @@ public class PostgreStructValueHandler extends JDBCStructValueHandler {
{ {
PostgreDataType structType = PostgreUtils.findDataType(session, (PostgreDataSource)session.getDataSource(), type); PostgreDataType structType = PostgreUtils.findDataType(session, (PostgreDataSource)session.getDataSource(), type);
if (structType == null) { 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 { try {
if (object == null) { if (object == null) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册