|
32 | 32 | import com.clickhouse.client.api.metrics.ClientMetrics; |
33 | 33 | import com.clickhouse.client.api.metrics.OperationMetrics; |
34 | 34 | import com.clickhouse.client.api.query.GenericRecord; |
35 | | -import com.clickhouse.client.api.query.POJODeserializer; |
| 35 | +import com.clickhouse.client.api.query.POJOSetter; |
36 | 36 | import com.clickhouse.client.api.query.QueryResponse; |
37 | 37 | import com.clickhouse.client.api.query.QuerySettings; |
38 | 38 | import com.clickhouse.client.api.query.Records; |
@@ -126,7 +126,7 @@ public class Client implements AutoCloseable { |
126 | 126 | private final Map<Class<?>, List<POJOSerializer>> serializers; //Order is important to preserve for RowBinary |
127 | 127 | private final Map<Class<?>, Map<String, Method>> getterMethods; |
128 | 128 |
|
129 | | - private final Map<Class<?>, Map<String, POJODeserializer>> deserializers; |
| 129 | + private final Map<Class<?>, Map<String, POJOSetter>> deserializers; |
130 | 130 | private final Map<Class<?>, Map<String, Method>> setterMethods; |
131 | 131 |
|
132 | 132 | private final Map<Class<?>, Boolean> hasDefaults; // Whether the POJO has defaults |
@@ -938,7 +938,7 @@ public synchronized void register(Class<?> clazz, TableSchema schema) { |
938 | 938 | this.hasDefaults.put(clazz, schema.hasDefaults()); |
939 | 939 |
|
940 | 940 | List<POJOSerializer> classSerializers = new ArrayList<>(); |
941 | | - Map<String, POJODeserializer> classDeserializers = new ConcurrentHashMap<>(); |
| 941 | + Map<String, POJOSetter> classDeserializers = new ConcurrentHashMap<>(); |
942 | 942 | for (ClickHouseColumn column : schema.getColumns()) { |
943 | 943 | String propertyName = column.getColumnName().toLowerCase().replace("_", "").replace(".", ""); |
944 | 944 |
|
@@ -977,34 +977,7 @@ public synchronized void register(Class<?> clazz, TableSchema schema) { |
977 | 977 | Method setterMethod = classSetters.get(propertyName); |
978 | 978 | String columnName = column.getColumnName(); |
979 | 979 | if (setterMethod != null) { |
980 | | - Class<?> argType = setterMethod.getParameterTypes()[0]; |
981 | | - if (argType.isPrimitive()) { |
982 | | - if (argType.getName().equalsIgnoreCase("boolean")) { |
983 | | - classDeserializers.put(columnName, SerializerUtils.booleanDeserializer(setterMethod)); |
984 | | - } else if (argType.getName().equalsIgnoreCase("byte")) { |
985 | | - classDeserializers.put(columnName, SerializerUtils.byteDeserializer(setterMethod)); |
986 | | - } else if (argType.getName().equalsIgnoreCase("short")) { |
987 | | - classDeserializers.put(columnName, SerializerUtils.shortDeserializer(setterMethod)); |
988 | | - } else if (argType.getName().equalsIgnoreCase("int")) { |
989 | | - classDeserializers.put(columnName, SerializerUtils.intDeserializer(setterMethod)); |
990 | | - } else if (argType.getName().equalsIgnoreCase("long")) { |
991 | | - classDeserializers.put(columnName, SerializerUtils.longDeserializer(setterMethod)); |
992 | | - } else if (argType.getName().equalsIgnoreCase("float")) { |
993 | | - classDeserializers.put(columnName, SerializerUtils.floatDeserializer(setterMethod)); |
994 | | - } else if (argType.getName().equalsIgnoreCase("double")) { |
995 | | - classDeserializers.put(columnName, SerializerUtils.doubleDeserializer(setterMethod)); |
996 | | - } else { |
997 | | - throw new IllegalArgumentException("Unsupported primitive type: " + argType.getName() + " " + argType); |
998 | | - } |
999 | | - } else if (argType.isAssignableFrom(LocalDateTime.class)) { |
1000 | | - classDeserializers.put(columnName, SerializerUtils.localDateTimeDeserializer(setterMethod)); |
1001 | | - } else if (argType.isAssignableFrom(LocalDate.class)) { |
1002 | | - classDeserializers.put(columnName, SerializerUtils.localDateDeserializer(setterMethod)); |
1003 | | - } else if (argType.isAssignableFrom(List.class)) { |
1004 | | - classDeserializers.put(columnName, SerializerUtils.listDeserializer(setterMethod)); |
1005 | | - } else { |
1006 | | - classDeserializers.put(columnName, SerializerUtils.defaultPOJODeserializer(setterMethod)); |
1007 | | - } |
| 980 | + classDeserializers.put(columnName, SerializerUtils.compilePOJOSetter(setterMethod)); |
1008 | 981 | } else { |
1009 | 982 | LOG.warn("No setter method found for column: {}", propertyName); |
1010 | 983 | } |
@@ -1554,7 +1527,7 @@ public <T> List<T> queryAll(String sqlQuery, Class<T> clazz) { |
1554 | 1527 | * @param <T> |
1555 | 1528 | */ |
1556 | 1529 | public <T> List<T> queryAll(String sqlQuery, Class<T> clazz, Supplier<T> allocator) { |
1557 | | - Map<String, POJODeserializer> classDeserializers = deserializers.get(clazz); |
| 1530 | + Map<String, POJOSetter> classDeserializers = deserializers.get(clazz); |
1558 | 1531 |
|
1559 | 1532 | if (classDeserializers == null || classDeserializers.isEmpty()) { |
1560 | 1533 | throw new IllegalArgumentException("No deserializers found for class '" + clazz + "'. Did you forget to register it?"); |
|
0 commit comments