Skip to content

Commit 78f37f1

Browse files
committed
Fixed wrong type conversion for class types of primitives. (null has been converted to 0 before)
1 parent bb1ad4a commit 78f37f1

File tree

2 files changed

+21
-23
lines changed

2 files changed

+21
-23
lines changed

src/main/java/org/javawebstack/orm/SQLMapper.java

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.javawebstack.injector.Injector;
44
import org.javawebstack.orm.exception.ORMQueryException;
5+
import org.javawebstack.orm.mapper.DefaultMapper;
56
import org.javawebstack.orm.mapper.TypeMapper;
67

78
import java.lang.reflect.InvocationTargetException;
@@ -96,30 +97,10 @@ private static Object getValue(ResultSet rs, Class<?> sqlType, String tableName,
9697
} catch (SQLException ex) {
9798
return null;
9899
}
99-
if (sqlType.equals(String.class))
100-
return rs.getString(columnName);
101-
if (sqlType.equals(Short.class))
102-
return rs.getShort(columnName);
103-
if (sqlType.equals(Integer.class))
104-
return rs.getInt(columnName);
105-
if (sqlType.equals(Boolean.class))
106-
return rs.getBoolean(columnName);
107-
if (sqlType.equals(Long.class))
108-
return rs.getLong(columnName);
109-
if (sqlType.equals(Double.class))
110-
return rs.getDouble(columnName);
111-
if (sqlType.equals(Float.class))
112-
return rs.getFloat(columnName);
113-
if (sqlType.equals(Timestamp.class))
114-
return rs.getTimestamp(columnName);
115-
if (sqlType.equals(Date.class))
116-
return rs.getDate(columnName);
117-
if (sqlType.equals(byte[].class))
118-
return rs.getBytes(columnName);
100+
return rs.getObject(columnName, DefaultMapper.TYPE_MAPPING);
119101
} catch (SQLException e) {
120102
throw new ORMQueryException(e);
121103
}
122-
return null;
123104
}
124105

125106
private static <T extends Model> void setValue(Repo<T> repo, String fieldName, T entry, Object value) {

src/main/java/org/javawebstack/orm/mapper/DefaultMapper.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import java.sql.Date;
66
import java.sql.Timestamp;
77
import java.util.Arrays;
8+
import java.util.HashMap;
9+
import java.util.Map;
810
import java.util.UUID;
911
import java.util.stream.Collectors;
1012

@@ -25,6 +27,21 @@ public class DefaultMapper implements TypeMapper {
2527
private static final long MAX_SIZE_MEDIUMTEXT = (long) Math.floor((16777215 - BYTES_OVERHEAD_MEDIUMTEXT) / 4);
2628
private static final long MAX_SIZE_LONGTEXT = (long) Math.floor((4294967295L - BYTES_OVERHEAD_LONGTEXT) / 4);
2729

30+
public static final Map<String, Class<?>> TYPE_MAPPING = new HashMap<String, Class<?>>(){{
31+
put("FLOAT", Float.class);
32+
put("DOUBLE", Double.class);
33+
put("INT", Integer.class);
34+
put("BIGINT", Long.class);
35+
put("VARCHAR", String.class);
36+
put("TEXT", String.class);
37+
put("SHORTTEXT", String.class);
38+
put("LONGTEXT", String.class);
39+
put("TIMESTAMP", Timestamp.class);
40+
put("DATE", Date.class);
41+
put("VARBINARY", byte[].class);
42+
put("CHARARRAY", char[].class);
43+
put("TINYINT", Short.class);
44+
}};
2845

2946
public Object mapToSQL(Object source, Class<?> type) {
3047
if (source == null)
@@ -64,8 +81,8 @@ public Object mapToJava(Object source, Class<?> type) {
6481
return Enum.valueOf((Class<Enum>) type, (String) source);
6582
if (type.equals(UUID.class))
6683
return UUID.fromString((String) source);
67-
if (type.equals(boolean.class))
68-
return ((Boolean) source).booleanValue();
84+
if (type.equals(boolean.class) || type.equals(Boolean.class))
85+
return ((Short) source) == 1;
6986
if (type.equals(byte.class))
7087
return ((Byte) source).byteValue();
7188
if (type.equals(short.class))

0 commit comments

Comments
 (0)