fix[orm]: map null value support

This commit is contained in:
godotg committed 2024-06-17 10:30:59 +08:00
1 parent 5652fdd3f9
commit cca1a95b5a
3 files changed
+25 -6

No files matched your search

@@ -32,8 +32,14 @@ public class IntMapCodec<V> implements Codec<Map<Integer, V>> {
public void encode(final BsonWriter writer, final Map<Integer, V> map, final EncoderContext encoderContext) {
writer.writeStartDocument();
for (var entry : map.entrySet()) {
writer.writeName(entry.getKey().toString());
valueCodec.encode(writer, entry.getValue(), encoderContext);
var key = entry.getKey();
var value = entry.getValue();
writer.writeName(key.toString());
if (value == null) {
writer.writeNull();
} else {
valueCodec.encode(writer, entry.getValue(), encoderContext);
}
}
writer.writeEndDocument();
}
@@ -31,9 +31,15 @@ public class LongMapCodec<V> implements Codec<Map<Long, V>> {
@Override
public void encode(final BsonWriter writer, final Map<Long, V> map, final EncoderContext encoderContext) {
writer.writeStartDocument();
for (final Map.Entry<Long, V> entry : map.entrySet()) {
writer.writeName(entry.getKey().toString());
valueCodec.encode(writer, entry.getValue(), encoderContext);
for (var entry : map.entrySet()) {
var key = entry.getKey();
var value = entry.getValue();
writer.writeName(key.toString());
if (value == null) {
writer.writeNull();
} else {
valueCodec.encode(writer, entry.getValue(), encoderContext);
}
}
writer.writeEndDocument();
}
@@ -44,7 +50,12 @@ public class LongMapCodec<V> implements Codec<Map<Long, V>> {
var map = new HashMap<Long, V>();
while (!BsonType.END_OF_DOCUMENT.equals(reader.readBsonType())) {
long key = Long.parseLong(reader.readName());
V value = BsonType.NULL.equals(reader.getCurrentBsonType()) ? null : valueCodec.decode(reader, context);
V value = null;
if (BsonType.NULL.equals(reader.getCurrentBsonType())) {
reader.readNull();
} else {
value = valueCodec.decode(reader, context);
}
map.put(key, value);
}
reader.readEndDocument();
@@ -55,6 +55,7 @@ public class MapTest {
bagMap.put("bag1", bagItem1);
bagMap.put("bag2", bagItem2);
bagMap.put("bag3", bagItem3);
bagMap.put("bag4", null);
var map = new HashMap<String, Map<String, String>>();
map.put("a", Map.of("b", "b"));
@@ -63,6 +64,7 @@ public class MapTest {
var longStringHashMap = new HashMap<Long, String>();
longStringHashMap.put(100L, "hello map1");
longStringHashMap.put(101L, "hello map2");
longStringHashMap.put(102L, null);
entity.setLongStringMap(longStringHashMap);
var intStringHashMap = new HashMap<Integer, String>();