Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ class NitriteMVRTreeMap<Key extends BoundingBox, Value> 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);
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,17 @@ public RocksDBRTree(RocksDBMap<SpatialKey, Key> 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);
}
}

@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);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ private static class NitriteIdSerializer extends ComparableKeySerializer<Nitrite

@Override
protected void writeKeyInternal(Kryo kryo, Output output, NitriteId object) {
output.writeString(object.getIdValue());
output.writeString(Long.toString(object.getIdValue()));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,20 +103,29 @@ public <T> T get(String field, Class<T> 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
if (!containsKey(DOC_ID)) {
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));
}
}
Expand Down
40 changes: 22 additions & 18 deletions nitrite/src/main/java/org/dizitart/no2/collection/NitriteId.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,18 +47,18 @@ public final class NitriteId implements Comparable<NitriteId>, Serializable {
private static final long serialVersionUID = 1477462375L;
private static final SnowflakeIdGenerator generator = new SnowflakeIdGenerator();

/**
* Gets the underlying value of the NitriteId.
* <p>
* 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;
}

Expand All @@ -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}.
* <p>
Expand All @@ -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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ private RecordStream<Pair<NitriteId, Document>> 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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,17 @@ 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);
}
}

@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);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,16 @@ public TransactionalRTree(NitriteRTree<Key, Value> 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);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
Expand Down