summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDon Anderson <dda@ddanderson.com>2015-06-12 13:52:01 -0400
committerDon Anderson <dda@ddanderson.com>2015-06-12 13:52:01 -0400
commite038dc447eab3234168a3f76911b6a25b4bf4992 (patch)
treedd9632d5eed17617865078e98a14348a763acc61
parentd57dc26729bbc59c5bc3928aa90bb2ac3cd15d6d (diff)
downloadmongo-e038dc447eab3234168a3f76911b6a25b4bf4992.tar.gz
WT-1963. Refactored Java's next/prev/search/search_near, and modified
so they do not get the key/value when there is no format.
-rw-r--r--lang/java/Makefile.am1
-rw-r--r--lang/java/wiredtiger.i55
-rw-r--r--test/java/com/wiredtiger/test/BackupCursorTest.java85
-rw-r--r--test/java/com/wiredtiger/test/WiredTigerSuite.java1
4 files changed, 126 insertions, 16 deletions
diff --git a/lang/java/Makefile.am b/lang/java/Makefile.am
index e6e6f748837..cf18f2ff3dd 100644
--- a/lang/java/Makefile.am
+++ b/lang/java/Makefile.am
@@ -44,6 +44,7 @@ JAVA_SRC = \
JAVA_JUNIT = \
$(JAVATEST)/AutoCloseTest.java \
$(JAVATEST)/AsyncTest.java \
+ $(JAVATEST)/BackupCursorTest.java \
$(JAVATEST)/CursorTest.java \
$(JAVATEST)/CursorTest02.java \
$(JAVATEST)/ExceptionTest.java \
diff --git a/lang/java/wiredtiger.i b/lang/java/wiredtiger.i
index 2d66a4e9e13..fbdfbb32212 100644
--- a/lang/java/wiredtiger.i
+++ b/lang/java/wiredtiger.i
@@ -1650,10 +1650,8 @@ WT_ASYNC_CALLBACK javaApiAsyncHandler = {javaAsyncHandler};
int ret = next_wrap();
keyPacker.reset();
valuePacker.reset();
- keyUnpacker = (ret == 0) ?
- new PackInputStream(keyFormat, get_key_wrap()) : null;
- valueUnpacker = (ret == 0) ?
- new PackInputStream(valueFormat, get_value_wrap()) : null;
+ keyUnpacker = initKeyUnpacker(ret == 0);
+ valueUnpacker = initValueUnpacker(ret == 0);
return ret;
}
@@ -1667,10 +1665,8 @@ WT_ASYNC_CALLBACK javaApiAsyncHandler = {javaAsyncHandler};
int ret = prev_wrap();
keyPacker.reset();
valuePacker.reset();
- keyUnpacker = (ret == 0) ?
- new PackInputStream(keyFormat, get_key_wrap()) : null;
- valueUnpacker = (ret == 0) ?
- new PackInputStream(valueFormat, get_value_wrap()) : null;
+ keyUnpacker = initKeyUnpacker(ret == 0);
+ valueUnpacker = initValueUnpacker(ret == 0);
return ret;
}
@@ -1684,10 +1680,8 @@ WT_ASYNC_CALLBACK javaApiAsyncHandler = {javaAsyncHandler};
int ret = search_wrap(keyPacker.getValue());
keyPacker.reset();
valuePacker.reset();
- keyUnpacker = (ret == 0) ?
- new PackInputStream(keyFormat, get_key_wrap()) : null;
- valueUnpacker = (ret == 0) ?
- new PackInputStream(valueFormat, get_value_wrap()) : null;
+ keyUnpacker = initKeyUnpacker(ret == 0);
+ valueUnpacker = initValueUnpacker(ret == 0);
return ret;
}
@@ -1701,12 +1695,41 @@ WT_ASYNC_CALLBACK javaApiAsyncHandler = {javaAsyncHandler};
SearchStatus ret = search_near_wrap(keyPacker.getValue());
keyPacker.reset();
valuePacker.reset();
- keyUnpacker = (ret != SearchStatus.NOTFOUND) ?
- new PackInputStream(keyFormat, get_key_wrap()) : null;
- valueUnpacker = (ret != SearchStatus.NOTFOUND) ?
- new PackInputStream(valueFormat, get_value_wrap()) : null;
+ keyUnpacker = initKeyUnpacker(ret != SearchStatus.NOTFOUND);
+ valueUnpacker = initValueUnpacker(ret != SearchStatus.NOTFOUND);
return ret;
}
+
+ /**
+ * Initialize a key unpacker after an operation that changes
+ * the cursor position.
+ *
+ * \param success Whether the associated operation succeeded.
+ * \return The key unpacker.
+ */
+ private PackInputStream initKeyUnpacker(boolean success)
+ throws WiredTigerException {
+ if (!success || keyFormat.equals(""))
+ return null;
+ else
+ return new PackInputStream(keyFormat, get_key_wrap());
+ }
+
+ /**
+ * Initialize a value unpacker after an operation that changes
+ * the cursor position.
+ *
+ * \param success Whether the associated operation succeeded.
+ * \return The value unpacker.
+ */
+ private PackInputStream initValueUnpacker(boolean success)
+ throws WiredTigerException {
+ if (!success || valueFormat.equals(""))
+ return null;
+ else
+ return new PackInputStream(valueFormat,
+ get_value_wrap());
+ }
%}
/* Put a WiredTigerException on all wrapped methods. We'd like this
diff --git a/test/java/com/wiredtiger/test/BackupCursorTest.java b/test/java/com/wiredtiger/test/BackupCursorTest.java
new file mode 100644
index 00000000000..c27b85619fc
--- /dev/null
+++ b/test/java/com/wiredtiger/test/BackupCursorTest.java
@@ -0,0 +1,85 @@
+/*-
+ * Public Domain 2014-2015 MongoDB, Inc.
+ * Public Domain 2008-2014 WiredTiger, Inc.
+ *
+ * This is free and unencumbered software released into the public domain.
+ *
+ * Anyone is free to copy, modify, publish, use, compile, sell, or
+ * distribute this software, either in source code form or as a compiled
+ * binary, for any purpose, commercial or non-commercial, and by any
+ * means.
+ *
+ * In jurisdictions that recognize copyright laws, the author or authors
+ * of this software dedicate any and all copyright interest in the
+ * software to the public domain. We make this dedication for the benefit
+ * of the public at large and to the detriment of our heirs and
+ * successors. We intend this dedication to be an overt act of
+ * relinquishment in perpetuity of all present and future rights to this
+ * software under copyright law.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+package com.wiredtiger.test;
+
+import com.wiredtiger.db.Connection;
+import com.wiredtiger.db.Cursor;
+import com.wiredtiger.db.Session;
+import com.wiredtiger.db.WiredTigerPackingException;
+import com.wiredtiger.db.wiredtiger;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.junit.Assert;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+public class BackupCursorTest {
+ Connection conn;
+ Session s;
+ public final static int N_TABLES = 10;
+
+ @Test
+ public void backupCursor01()
+ throws WiredTigerPackingException {
+ setup();
+
+ Cursor c = s.open_cursor("backup:", null, null);
+ int ntables = 0;
+
+ /*
+ * Note: there may be additional files left over from
+ * other tests in the suite, ignore them.
+ */
+ while (c.next() == 0) {
+ String backupFile = c.getKeyString();
+ if (backupFile.startsWith("backupc"))
+ ntables++;
+ }
+
+ Assert.assertEquals(N_TABLES, ntables);
+ c.close();
+ teardown();
+ }
+
+ private void setup() {
+ conn = wiredtiger.open("WT_HOME", "create");
+ s = conn.open_session(null);
+ for (int i = 0; i < N_TABLES; i++)
+ s.create("table:backupc" + i, "key_format=S,value_format=S");
+ }
+
+ private void teardown() {
+ for (int i = 0; i < N_TABLES; i++)
+ s.drop("table:backupc" + i, "");
+ s.close("");
+ conn.close("");
+ }
+
+}
diff --git a/test/java/com/wiredtiger/test/WiredTigerSuite.java b/test/java/com/wiredtiger/test/WiredTigerSuite.java
index b393237aac3..a62908a2c5f 100644
--- a/test/java/com/wiredtiger/test/WiredTigerSuite.java
+++ b/test/java/com/wiredtiger/test/WiredTigerSuite.java
@@ -34,6 +34,7 @@ import org.junit.runners.Suite;
@Suite.SuiteClasses( {
AsyncTest.class,
AutoCloseTest.class,
+ BackupCursorTest.class,
CursorTest.class,
CursorTest02.class,
ExceptionTest.class,