diff options
author | Michael Cahill <michael.cahill@wiredtiger.com> | 2015-01-17 05:15:04 +1100 |
---|---|---|
committer | Michael Cahill <michael.cahill@wiredtiger.com> | 2015-01-17 05:15:04 +1100 |
commit | 1b033e5b2b4caba973f24a85c3591eb45e991538 (patch) | |
tree | 5f67f7dfc5f81b1df997b43492dba89e21fb2544 | |
parent | eb1511f3f1fb3be31cce7c4b288608997dd77c3e (diff) | |
download | mongo-1b033e5b2b4caba973f24a85c3591eb45e991538.tar.gz |
Don't allow "readonly" to be reconfigured on cursors.
refs #1467
-rw-r--r-- | dist/api_data.py | 18 | ||||
-rw-r--r-- | lang/java/java_doc.i | 3 | ||||
-rw-r--r-- | src/config/config_def.c | 3 | ||||
-rw-r--r-- | src/cursor/cur_metadata.c | 6 | ||||
-rw-r--r-- | src/cursor/cur_std.c | 31 | ||||
-rw-r--r-- | src/include/cursor.h | 3 | ||||
-rw-r--r-- | src/include/wiredtiger.in | 3 | ||||
-rw-r--r-- | test/suite/test_cursor06.py | 1 |
8 files changed, 17 insertions, 51 deletions
diff --git a/dist/api_data.py b/dist/api_data.py index d356ee27ed4..0141526285c 100644 --- a/dist/api_data.py +++ b/dist/api_data.py @@ -559,7 +559,7 @@ common_wiredtiger_open = [ ]), ] -cursor_config = [ +cursor_runtime_config = [ Config('append', 'false', r''' append the value as a new record, creating a new record number key; valid only for cursors with record number keys''', @@ -571,12 +571,6 @@ cursor_config = [ if the record exists, WT_CURSOR::update and WT_CURSOR::remove fail with ::WT_NOTFOUND if the record does not exist''', type='boolean'), - Config('readonly', 'false', r''' - only query operations are supported by this cursor. An error is - returned if a modification is attempted using the cursor. The - default is false for all cursor types except for log and metadata - cursors''', - type='boolean'), ] methods = { @@ -590,7 +584,7 @@ methods = { 'cursor.close' : Method([]), -'cursor.reconfigure' : Method(cursor_config), +'cursor.reconfigure' : Method(cursor_runtime_config), 'session.close' : Method([]), @@ -622,7 +616,7 @@ methods = { 'session.log_printf' : Method([]), -'session.open_cursor' : Method(cursor_config + [ +'session.open_cursor' : Method(cursor_runtime_config + [ Config('bulk', 'false', r''' configure the cursor for bulk-loading, a fast, initial load path (see @ref tune_bulk_load for more information). Bulk-load @@ -663,6 +657,12 @@ methods = { ignore the encodings for the key and value, manage data as if the formats were \c "u". See @ref cursor_raw for details''', type='boolean'), + Config('readonly', 'false', r''' + only query operations are supported by this cursor. An error is + returned if a modification is attempted using the cursor. The + default is false for all cursor types except for log and metadata + cursors''', + type='boolean'), Config('skip_sort_check', 'false', r''' skip the check of the sort order of each bulk-loaded key''', type='boolean', undoc=True), diff --git a/lang/java/java_doc.i b/lang/java/java_doc.i index a6973e7fa54..07910687cf5 100644 --- a/lang/java/java_doc.i +++ b/lang/java/java_doc.i @@ -15,9 +15,6 @@ COPYDOC(__wt_cursor, WT_CURSOR, update) COPYDOC(__wt_cursor, WT_CURSOR, remove) COPYDOC(__wt_cursor, WT_CURSOR, reconfigure) COPYDOC(__wt_cursor, WT_CURSOR, close) -COPYDOC(__wt_cursor, WT_CURSOR, insert_orig) -COPYDOC(__wt_cursor, WT_CURSOR, update_orig) -COPYDOC(__wt_cursor, WT_CURSOR, remove_orig) COPYDOC(__wt_async_op, WT_ASYNC_OP, get_key) COPYDOC(__wt_async_op, WT_ASYNC_OP, get_value) COPYDOC(__wt_async_op, WT_ASYNC_OP, set_key) diff --git a/src/config/config_def.c b/src/config/config_def.c index bf806ea6101..ec44e8839b0 100644 --- a/src/config/config_def.c +++ b/src/config/config_def.c @@ -113,7 +113,6 @@ static const WT_CONFIG_CHECK confchk_connection_reconfigure[] = { static const WT_CONFIG_CHECK confchk_cursor_reconfigure[] = { { "append", "boolean", NULL, NULL }, { "overwrite", "boolean", NULL, NULL }, - { "readonly", "boolean", NULL, NULL }, { NULL, NULL, NULL, NULL } }; @@ -569,7 +568,7 @@ static const WT_CONFIG_ENTRY config_entries[] = { NULL }, { "cursor.reconfigure", - "append=0,overwrite=,readonly=0", + "append=0,overwrite=", confchk_cursor_reconfigure }, { "file.meta", diff --git a/src/cursor/cur_metadata.c b/src/cursor/cur_metadata.c index ae92a6ee371..562ac51d8ea 100644 --- a/src/cursor/cur_metadata.c +++ b/src/cursor/cur_metadata.c @@ -443,9 +443,9 @@ __wt_curmetadata_open(WT_SESSION_IMPL *session, */ WT_ERR(__wt_config_gets_def(session, cfg, "readonly", 1, &cval)); if (cval.val != 0) { - cursor->insert = cursor->insert_orig = __wt_cursor_notsup; - cursor->update = cursor->update_orig = __wt_cursor_notsup; - cursor->remove = cursor->remove_orig = __wt_cursor_notsup; + cursor->insert = __wt_cursor_notsup; + cursor->update = __wt_cursor_notsup; + cursor->remove = __wt_cursor_notsup; } if (0) { diff --git a/src/cursor/cur_std.c b/src/cursor/cur_std.c index 176e9d9efdf..7d6876361ac 100644 --- a/src/cursor/cur_std.c +++ b/src/cursor/cur_std.c @@ -522,31 +522,6 @@ __wt_cursor_reconfigure(WT_CURSOR *cursor, const char *config) } else WT_RET_NOTFOUND_OK(ret); - /* - * readonly - */ - if ((ret = __wt_config_getones( - session, config, "readonly", &cval)) == 0) { - if (cval.val == 0) { - /* - * Fail if the user is turning readonly off and the - * cursor never supported writing in the first place. - */ - if (cursor->insert_orig == - (int (*)(WT_CURSOR *))__wt_cursor_set_notsup) - WT_RET_MSG(session, EINVAL, - "cursor cannot be used for data update"); - cursor->insert = cursor->insert_orig; - cursor->remove = cursor->remove_orig; - cursor->update = cursor->update_orig; - } else { - cursor->insert = __wt_cursor_notsup; - cursor->remove = __wt_cursor_notsup; - cursor->update = __wt_cursor_notsup; - } - } else - WT_RET_NOTFOUND_OK(ret); - return (0); } @@ -625,9 +600,9 @@ __wt_cursor_init(WT_CURSOR *cursor, */ WT_RET(__wt_config_gets_def(session, cfg, "checkpoint", 0, &cval)); if (cval.len != 0) { - cursor->insert = cursor->insert_orig = __wt_cursor_notsup; - cursor->update = cursor->update_orig = __wt_cursor_notsup; - cursor->remove = cursor->remove_orig = __wt_cursor_notsup; + cursor->insert = __wt_cursor_notsup; + cursor->update = __wt_cursor_notsup; + cursor->remove = __wt_cursor_notsup; } else { WT_RET( __wt_config_gets_def(session, cfg, "readonly", 0, &cval)); diff --git a/src/include/cursor.h b/src/include/cursor.h index 0a563b879c9..eceeb9216e7 100644 --- a/src/include/cursor.h +++ b/src/include/cursor.h @@ -54,9 +54,6 @@ { NULL, 0, 0, NULL, 0 }, /* WT_ITEM value */ \ 0, /* int saved_err */ \ NULL, /* internal_uri */ \ - insert, /* original insert */ \ - update, /* original update */ \ - remove, /* original remove */ \ 0 /* uint32_t flags */ \ } diff --git a/src/include/wiredtiger.in b/src/include/wiredtiger.in index f582186f54c..0db347c1413 100644 --- a/src/include/wiredtiger.in +++ b/src/include/wiredtiger.in @@ -536,9 +536,6 @@ struct __wt_cursor { */ const char *internal_uri; /* Saved modification methods. */ - int __F(insert_orig)(WT_CURSOR *cursor); - int __F(update_orig)(WT_CURSOR *cursor); - int __F(remove_orig)(WT_CURSOR *cursor); #define WT_CURSTD_APPEND 0x0001 #define WT_CURSTD_BULK 0x0002 diff --git a/test/suite/test_cursor06.py b/test/suite/test_cursor06.py index c713957f624..e5f500052a9 100644 --- a/test/suite/test_cursor06.py +++ b/test/suite/test_cursor06.py @@ -1,5 +1,6 @@ #!/usr/bin/env python # +# Public Domain 2014-2015 MongoDB, Inc. # Public Domain 2008-2014 WiredTiger, Inc. # # This is free and unencumbered software released into the public domain. |