From 4e7b4f2b487b2ea254af0a0fe7485d6b7aea0630 Mon Sep 17 00:00:00 2001 From: seancarroll Date: Mon, 16 Jul 2018 23:41:40 -0500 Subject: [PATCH 1/6] add range search test --- src/test/java/org/lmdbjava/TxnTest.java | 44 +++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/test/java/org/lmdbjava/TxnTest.java b/src/test/java/org/lmdbjava/TxnTest.java index d29d385d..1bd6d433 100644 --- a/src/test/java/org/lmdbjava/TxnTest.java +++ b/src/test/java/org/lmdbjava/TxnTest.java @@ -25,18 +25,26 @@ import java.io.IOException; import java.nio.ByteBuffer; import static java.nio.ByteBuffer.allocateDirect; + +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.atomic.AtomicLong; + +import static java.nio.charset.StandardCharsets.UTF_8; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; + import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.lmdbjava.Dbi.BadValueSizeException; + +import static org.junit.Assert.assertEquals; import static org.lmdbjava.DbiFlags.MDB_CREATE; import org.lmdbjava.Env.AlreadyClosedException; import static org.lmdbjava.Env.create; @@ -262,4 +270,40 @@ public void zeroByteKeysRejected() throws IOException { dbi.put(key, bb(2)); } + + @Test + public void rangeSearch() { + final Dbi db = env.openDbi(DB_1, MDB_CREATE); + + final ByteBuffer key = allocateDirect(env.getMaxKeySize()); + key.put("cherry".getBytes(UTF_8)).flip(); + db.put(key, bb(1)); + + key.clear(); + key.put("strawberry".getBytes(UTF_8)).flip(); + db.put(key, bb(3)); + + key.clear(); + key.put("pineapple".getBytes(UTF_8)).flip(); + db.put(key, bb(2)); + + try (Txn txn = env.txnRead()) { + ByteBuffer start = allocateDirect(env.getMaxKeySize()); + start.put("a".getBytes(UTF_8)).flip(); + + ByteBuffer end = allocateDirect(env.getMaxKeySize()); + end.put("z".getBytes(UTF_8)).flip(); + + List keysFound = new ArrayList<>(); + CursorIterator ckr = db.iterate(txn, KeyRange.closed(start, end)); + for (final CursorIterator.KeyVal kv : ckr.iterable()) { + keysFound.add(UTF_8.decode(kv.key()).toString()); + } + + System.out.println(keysFound); + assertEquals(2, keysFound.size()); + + } + } + } From 114cb6d80b10f0bb1dc34e1938caeccefaeb6b01 Mon Sep 17 00:00:00 2001 From: seancarroll Date: Tue, 17 Jul 2018 18:21:13 -0500 Subject: [PATCH 2/6] fix assert --- src/test/java/org/lmdbjava/TxnTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/lmdbjava/TxnTest.java b/src/test/java/org/lmdbjava/TxnTest.java index 1bd6d433..924b4870 100644 --- a/src/test/java/org/lmdbjava/TxnTest.java +++ b/src/test/java/org/lmdbjava/TxnTest.java @@ -301,7 +301,7 @@ public void rangeSearch() { } System.out.println(keysFound); - assertEquals(2, keysFound.size()); + assertEquals(3, keysFound.size()); } } From 6ac551bebee6d7684483c8835f4fa339f3bc5b3f Mon Sep 17 00:00:00 2001 From: seancarroll Date: Sat, 21 Jul 2018 15:10:59 -0500 Subject: [PATCH 3/6] fixes key range search by using limit instead of capacity in ByteBufferProxy compare --- src/main/java/org/lmdbjava/ByteBufferProxy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/lmdbjava/ByteBufferProxy.java b/src/main/java/org/lmdbjava/ByteBufferProxy.java index 08b28081..a6f14d3d 100644 --- a/src/main/java/org/lmdbjava/ByteBufferProxy.java +++ b/src/main/java/org/lmdbjava/ByteBufferProxy.java @@ -128,7 +128,7 @@ public static int compareBuff(final ByteBuffer o1, final ByteBuffer o2) { if (o1.equals(o2)) { return 0; } - final int minLength = Math.min(o1.capacity(), o2.capacity()); + final int minLength = Math.min(o1.limit(), o2.limit()); final int minWords = minLength / Long.BYTES; final boolean reverse1 = o1.order() == LITTLE_ENDIAN; From 8c62676d3473070da7d79c7ecfff17935a3008b6 Mon Sep 17 00:00:00 2001 From: seancarroll Date: Tue, 24 Jul 2018 21:48:11 -0500 Subject: [PATCH 4/6] fix checkstyle build errors --- src/test/java/org/lmdbjava/TxnTest.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/test/java/org/lmdbjava/TxnTest.java b/src/test/java/org/lmdbjava/TxnTest.java index 924b4870..562ffd97 100644 --- a/src/test/java/org/lmdbjava/TxnTest.java +++ b/src/test/java/org/lmdbjava/TxnTest.java @@ -28,23 +28,20 @@ import java.util.ArrayList; import java.util.List; -import java.util.concurrent.atomic.AtomicLong; - import static java.nio.charset.StandardCharsets.UTF_8; +import java.util.concurrent.atomic.AtomicLong; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; - import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; -import org.lmdbjava.Dbi.BadValueSizeException; - import static org.junit.Assert.assertEquals; +import org.lmdbjava.Dbi.BadValueSizeException; import static org.lmdbjava.DbiFlags.MDB_CREATE; import org.lmdbjava.Env.AlreadyClosedException; import static org.lmdbjava.Env.create; @@ -288,14 +285,14 @@ public void rangeSearch() { db.put(key, bb(2)); try (Txn txn = env.txnRead()) { - ByteBuffer start = allocateDirect(env.getMaxKeySize()); + final ByteBuffer start = allocateDirect(env.getMaxKeySize()); start.put("a".getBytes(UTF_8)).flip(); - ByteBuffer end = allocateDirect(env.getMaxKeySize()); + final ByteBuffer end = allocateDirect(env.getMaxKeySize()); end.put("z".getBytes(UTF_8)).flip(); - List keysFound = new ArrayList<>(); - CursorIterator ckr = db.iterate(txn, KeyRange.closed(start, end)); + final List keysFound = new ArrayList<>(); + final CursorIterator ckr = db.iterate(txn, KeyRange.closed(start, end)); for (final CursorIterator.KeyVal kv : ckr.iterable()) { keysFound.add(UTF_8.decode(kv.key()).toString()); } From 9079124fbdfbcde8ddfc99447f8220dfa318e678 Mon Sep 17 00:00:00 2001 From: seancarroll Date: Tue, 24 Jul 2018 21:53:48 -0500 Subject: [PATCH 5/6] few more checkstyles changes --- src/test/java/org/lmdbjava/TxnTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/lmdbjava/TxnTest.java b/src/test/java/org/lmdbjava/TxnTest.java index 562ffd97..5a23a302 100644 --- a/src/test/java/org/lmdbjava/TxnTest.java +++ b/src/test/java/org/lmdbjava/TxnTest.java @@ -25,10 +25,9 @@ import java.io.IOException; import java.nio.ByteBuffer; import static java.nio.ByteBuffer.allocateDirect; - +import static java.nio.charset.StandardCharsets.UTF_8; import java.util.ArrayList; import java.util.List; -import static java.nio.charset.StandardCharsets.UTF_8; import java.util.concurrent.atomic.AtomicLong; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; @@ -36,11 +35,11 @@ import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import org.junit.After; +import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; -import static org.junit.Assert.assertEquals; import org.lmdbjava.Dbi.BadValueSizeException; import static org.lmdbjava.DbiFlags.MDB_CREATE; import org.lmdbjava.Env.AlreadyClosedException; From 8d072b8ecdd262ed04bc9f87d1da8fbfbfbeb87b Mon Sep 17 00:00:00 2001 From: seancarroll Date: Tue, 24 Jul 2018 22:00:11 -0500 Subject: [PATCH 6/6] remove pmd violate system.out.println which violates --- src/test/java/org/lmdbjava/TxnTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/org/lmdbjava/TxnTest.java b/src/test/java/org/lmdbjava/TxnTest.java index 5a23a302..a137e9d0 100644 --- a/src/test/java/org/lmdbjava/TxnTest.java +++ b/src/test/java/org/lmdbjava/TxnTest.java @@ -296,7 +296,6 @@ public void rangeSearch() { keysFound.add(UTF_8.decode(kv.key()).toString()); } - System.out.println(keysFound); assertEquals(3, keysFound.size()); }