diff options
author | Don Anderson <dda@ddanderson.com> | 2015-06-12 13:52:01 -0400 |
---|---|---|
committer | Don Anderson <dda@ddanderson.com> | 2015-06-12 13:52:01 -0400 |
commit | e038dc447eab3234168a3f76911b6a25b4bf4992 (patch) | |
tree | dd9632d5eed17617865078e98a14348a763acc61 | |
parent | d57dc26729bbc59c5bc3928aa90bb2ac3cd15d6d (diff) | |
download | mongo-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.am | 1 | ||||
-rw-r--r-- | lang/java/wiredtiger.i | 55 | ||||
-rw-r--r-- | test/java/com/wiredtiger/test/BackupCursorTest.java | 85 | ||||
-rw-r--r-- | test/java/com/wiredtiger/test/WiredTigerSuite.java | 1 |
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, |