diff --git a/nitrite-jackson-mapper/src/main/java/org/dizitart/no2/mapper/jackson/modules/NitriteIdSerializer.java b/nitrite-jackson-mapper/src/main/java/org/dizitart/no2/mapper/jackson/modules/NitriteIdSerializer.java index 36616de79..ce7571158 100644 --- a/nitrite-jackson-mapper/src/main/java/org/dizitart/no2/mapper/jackson/modules/NitriteIdSerializer.java +++ b/nitrite-jackson-mapper/src/main/java/org/dizitart/no2/mapper/jackson/modules/NitriteIdSerializer.java @@ -35,8 +35,6 @@ protected NitriteIdSerializer() { @Override public void serialize(NitriteId value, JsonGenerator gen, SerializerProvider provider) throws IOException { - if (value.getIdValue() != null) { - gen.writeString(value.getIdValue()); - } + gen.writeString(Long.toString(value.getIdValue())); } } diff --git a/nitrite-mvstore-adapter/src/main/java/org/dizitart/no2/mvstore/NitriteMVRTreeMap.java b/nitrite-mvstore-adapter/src/main/java/org/dizitart/no2/mvstore/NitriteMVRTreeMap.java index 3206efbb1..219d22cd1 100644 --- a/nitrite-mvstore-adapter/src/main/java/org/dizitart/no2/mvstore/NitriteMVRTreeMap.java +++ b/nitrite-mvstore-adapter/src/main/java/org/dizitart/no2/mvstore/NitriteMVRTreeMap.java @@ -43,8 +43,8 @@ class NitriteMVRTreeMap implements NitriteRTree< @Override public void add(Key key, NitriteId nitriteId) { - if (nitriteId != null && nitriteId.getIdValue() != null) { - MVSpatialKey spatialKey = getKey(key, Long.parseLong(nitriteId.getIdValue())); + if (nitriteId != null) { + MVSpatialKey spatialKey = getKey(key, nitriteId.getIdValue()); MVStore.TxCounter txCounter = mvStore.registerVersionUsage(); try { mvMap.add(spatialKey, key); @@ -56,8 +56,8 @@ public void add(Key key, NitriteId nitriteId) { @Override public void remove(Key key, NitriteId nitriteId) { - if (nitriteId != null && nitriteId.getIdValue() != null) { - MVSpatialKey spatialKey = getKey(key, Long.parseLong(nitriteId.getIdValue())); + if (nitriteId != null) { + MVSpatialKey spatialKey = getKey(key, nitriteId.getIdValue()); MVStore.TxCounter txCounter = mvStore.registerVersionUsage(); try { mvMap.remove(spatialKey); diff --git a/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/RocksDBRTree.java b/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/RocksDBRTree.java index 776768cc2..61de9ccb0 100644 --- a/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/RocksDBRTree.java +++ b/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/RocksDBRTree.java @@ -46,8 +46,8 @@ public RocksDBRTree(RocksDBMap backingMap) { @Override public void add(Key key, NitriteId nitriteId) { checkOpened(); - if (nitriteId != null && nitriteId.getIdValue() != null) { - SpatialKey spatialKey = getKey(key, Long.parseLong(nitriteId.getIdValue())); + if (nitriteId != null) { + SpatialKey spatialKey = getKey(key, nitriteId.getIdValue()); backingMap.put(spatialKey, key); } } @@ -55,8 +55,8 @@ public void add(Key key, NitriteId nitriteId) { @Override public void remove(Key key, NitriteId nitriteId) { checkOpened(); - if (nitriteId != null && nitriteId.getIdValue() != null) { - SpatialKey spatialKey = getKey(key, Long.parseLong(nitriteId.getIdValue())); + if (nitriteId != null) { + SpatialKey spatialKey = getKey(key, nitriteId.getIdValue()); backingMap.remove(spatialKey); } } diff --git a/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/formatter/NitriteSerializers.java b/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/formatter/NitriteSerializers.java index 65bde0b9a..f059b432f 100644 --- a/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/formatter/NitriteSerializers.java +++ b/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/formatter/NitriteSerializers.java @@ -34,7 +34,7 @@ private static class NitriteIdSerializer extends ComparableKeySerializer T get(String field, Class type) { @Override public NitriteId getId() { - String id; + long id; + Object retrievedId = null; try { // if _id field is not populated already, create a new id // and set, otherwise return the existing id @@ -111,12 +112,20 @@ public NitriteId getId() { id = newId().getIdValue(); super.put(DOC_ID, id); } else { - id = (String) get(DOC_ID); + retrievedId = get(DOC_ID); + id = (long) get(DOC_ID); } // create a nitrite id instance from the string value return createId(id); } catch (ClassCastException cce) { + if (retrievedId != null && retrievedId instanceof String) { + try { + return createId((String) retrievedId); + } catch (InvalidIdException ide) { + // fall through to throw InvalidIdException below + } + } throw new InvalidIdException("Invalid _id found " + get(DOC_ID)); } } diff --git a/nitrite/src/main/java/org/dizitart/no2/collection/NitriteId.java b/nitrite/src/main/java/org/dizitart/no2/collection/NitriteId.java index ad9869f3b..1a13b5352 100644 --- a/nitrite/src/main/java/org/dizitart/no2/collection/NitriteId.java +++ b/nitrite/src/main/java/org/dizitart/no2/collection/NitriteId.java @@ -47,18 +47,18 @@ public final class NitriteId implements Comparable, Serializable { private static final long serialVersionUID = 1477462375L; private static final SnowflakeIdGenerator generator = new SnowflakeIdGenerator(); - /** - * Gets the underlying value of the NitriteId. - *

- * The value is a string representation of a 64bit integer number. - */ - private String idValue; + /** The underlying value of the NitriteId. */ + private long idValue; private NitriteId() { - this.idValue = Long.toString(generator.getId()); + this.idValue = generator.getId(); } private NitriteId(String value) { + this.idValue = Long.parseLong(value); + } + + private NitriteId(long value) { this.idValue = value; } @@ -84,6 +84,17 @@ public static NitriteId createId(String value) { return new NitriteId(value); } + /** + * Creates a {@link NitriteId} from a {@code long} value. + * + * @param value the value + * @return the {@link NitriteId} + */ + public static NitriteId createId(long value) { + validId(value); + return new NitriteId(value); + } + /** * Validates a value to be used as {@link NitriteId}. *

@@ -106,26 +117,19 @@ public static boolean validId(Object value) { @Override public int compareTo(NitriteId other) { - if (other.idValue == null) { - throw new InvalidIdException("Cannot compare with null id"); - } - - return Long.compare(Long.parseLong(idValue), Long.parseLong(other.idValue)); + return Long.compare(idValue, other.idValue); } @Override public String toString() { - if (idValue != null) { - return ID_PREFIX + idValue + ID_SUFFIX; - } - return ""; + return ID_PREFIX + idValue + ID_SUFFIX; } private void writeObject(ObjectOutputStream stream) throws IOException { - stream.writeUTF(idValue); + stream.writeUTF(Long.toString(idValue)); } private void readObject(ObjectInputStream stream) throws IOException { - idValue = stream.readUTF(); + idValue = Long.parseLong(stream.readUTF()); } } diff --git a/nitrite/src/main/java/org/dizitart/no2/collection/operation/ReadOperations.java b/nitrite/src/main/java/org/dizitart/no2/collection/operation/ReadOperations.java index 3cf02c575..90a85b3c9 100644 --- a/nitrite/src/main/java/org/dizitart/no2/collection/operation/ReadOperations.java +++ b/nitrite/src/main/java/org/dizitart/no2/collection/operation/ReadOperations.java @@ -135,7 +135,7 @@ private RecordStream> findSuitableStream(FindPlan find // and or single filter if (findPlan.getByIdFilter() != null) { FieldBasedFilter byIdFilter = findPlan.getByIdFilter(); - NitriteId nitriteId = NitriteId.createId((String) byIdFilter.getValue()); + NitriteId nitriteId = NitriteId.createId((long) byIdFilter.getValue()); if (nitriteMap.containsKey(nitriteId)) { Document document = nitriteMap.get(nitriteId); rawStream = RecordStream.single(pair(nitriteId, document)); diff --git a/nitrite/src/main/java/org/dizitart/no2/store/memory/InMemoryRTree.java b/nitrite/src/main/java/org/dizitart/no2/store/memory/InMemoryRTree.java index 8637b3769..974da703d 100644 --- a/nitrite/src/main/java/org/dizitart/no2/store/memory/InMemoryRTree.java +++ b/nitrite/src/main/java/org/dizitart/no2/store/memory/InMemoryRTree.java @@ -39,8 +39,8 @@ public InMemoryRTree(String mapName, NitriteStore nitriteStore) { @Override public void add(Key key, NitriteId nitriteId) { checkOpened(); - if (nitriteId != null && nitriteId.getIdValue() != null) { - SpatialKey spatialKey = getKey(key, Long.parseLong(nitriteId.getIdValue())); + if (nitriteId != null) { + SpatialKey spatialKey = getKey(key, nitriteId.getIdValue()); backingMap.put(spatialKey, key); } } @@ -48,8 +48,8 @@ public void add(Key key, NitriteId nitriteId) { @Override public void remove(Key key, NitriteId nitriteId) { checkOpened(); - if (nitriteId != null && nitriteId.getIdValue() != null) { - SpatialKey spatialKey = getKey(key, Long.parseLong(nitriteId.getIdValue())); + if (nitriteId != null) { + SpatialKey spatialKey = getKey(key, nitriteId.getIdValue()); backingMap.remove(spatialKey); } } diff --git a/nitrite/src/main/java/org/dizitart/no2/transaction/TransactionalRTree.java b/nitrite/src/main/java/org/dizitart/no2/transaction/TransactionalRTree.java index 05bcd74b3..a1d97d717 100644 --- a/nitrite/src/main/java/org/dizitart/no2/transaction/TransactionalRTree.java +++ b/nitrite/src/main/java/org/dizitart/no2/transaction/TransactionalRTree.java @@ -26,16 +26,16 @@ public TransactionalRTree(NitriteRTree primary) { @Override public void add(Key key, NitriteId nitriteId) { - if (nitriteId != null && nitriteId.getIdValue() != null) { - SpatialKey spatialKey = getKey(key, Long.parseLong(nitriteId.getIdValue())); + if (nitriteId != null) { + SpatialKey spatialKey = getKey(key, nitriteId.getIdValue()); map.put(spatialKey, key); } } @Override public void remove(Key key, NitriteId nitriteId) { - if (nitriteId != null && nitriteId.getIdValue() != null) { - SpatialKey spatialKey = getKey(key, Long.parseLong(nitriteId.getIdValue())); + if (nitriteId != null) { + SpatialKey spatialKey = getKey(key, nitriteId.getIdValue()); map.remove(spatialKey); } } diff --git a/nitrite/src/test/java/org/dizitart/no2/collection/NitriteDocumentTest.java b/nitrite/src/test/java/org/dizitart/no2/collection/NitriteDocumentTest.java index 6b5d90999..f0b49379d 100644 --- a/nitrite/src/test/java/org/dizitart/no2/collection/NitriteDocumentTest.java +++ b/nitrite/src/test/java/org/dizitart/no2/collection/NitriteDocumentTest.java @@ -56,8 +56,8 @@ public void testGet4() { @Test public void testGetId() { NitriteDocument nitriteDocument = new NitriteDocument(); - nitriteDocument.putIfAbsent("_id", "42"); - assertEquals("42", nitriteDocument.getId().getIdValue()); + nitriteDocument.putIfAbsent("_id", 42L); + assertEquals(42L, nitriteDocument.getId().getIdValue()); } @Test diff --git a/nitrite/src/test/java/org/dizitart/no2/collection/NitriteIdTest.java b/nitrite/src/test/java/org/dizitart/no2/collection/NitriteIdTest.java index 6ff816554..4a215ae4a 100644 --- a/nitrite/src/test/java/org/dizitart/no2/collection/NitriteIdTest.java +++ b/nitrite/src/test/java/org/dizitart/no2/collection/NitriteIdTest.java @@ -60,7 +60,7 @@ public void testCompareNull() { @Test public void testCreateId() { - assertEquals("42", NitriteId.createId("42").getIdValue()); + assertEquals(42L, NitriteId.createId("42").getIdValue()); assertThrows(InvalidIdException.class, () -> NitriteId.createId(null)); assertThrows(InvalidIdException.class, () -> NitriteId.createId("Value")); } diff --git a/nitrite/src/test/java/org/dizitart/no2/filters/FilterTest.java b/nitrite/src/test/java/org/dizitart/no2/filters/FilterTest.java index 49256af76..c774eff41 100644 --- a/nitrite/src/test/java/org/dizitart/no2/filters/FilterTest.java +++ b/nitrite/src/test/java/org/dizitart/no2/filters/FilterTest.java @@ -25,7 +25,7 @@ public class FilterTest { @Test public void testById() { - assertTrue(((EqualsFilter) Filter.byId(NitriteId.newId())).getValue() instanceof String); + assertTrue(((EqualsFilter) Filter.byId(NitriteId.newId())).getValue() instanceof Long); assertFalse(((EqualsFilter) Filter.byId(NitriteId.newId())).getObjectFilter()); assertEquals("_id", ((EqualsFilter) Filter.byId(NitriteId.newId())).getField()); }