summaryrefslogtreecommitdiff
path: root/src/cursor/cur_std.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cursor/cur_std.c')
-rw-r--r--src/cursor/cur_std.c102
1 files changed, 91 insertions, 11 deletions
diff --git a/src/cursor/cur_std.c b/src/cursor/cur_std.c
index 051f36c8854..7839971f975 100644
--- a/src/cursor/cur_std.c
+++ b/src/cursor/cur_std.c
@@ -9,27 +9,108 @@
#include "wt_internal.h"
/*
+ * __wt_cursor_noop --
+ * Cursor noop.
+ */
+int
+__wt_cursor_noop(WT_CURSOR *cursor)
+{
+ WT_UNUSED(cursor);
+
+ return (0);
+}
+
+/*
* __wt_cursor_notsup --
* Unsupported cursor actions.
*/
int
__wt_cursor_notsup(WT_CURSOR *cursor)
{
- WT_UNUSED(cursor);
+ WT_SESSION_IMPL *session;
- return (ENOTSUP);
+ session = (WT_SESSION_IMPL *)cursor->session;
+ WT_RET_MSG(session, ENOTSUP, "Unsupported cursor operation");
}
/*
- * __wt_cursor_noop --
- * Cursor noop.
+ * __wt_cursor_get_value_notsup --
+ * WT_CURSOR.get_value not-supported.
*/
int
-__wt_cursor_noop(WT_CURSOR *cursor)
+__wt_cursor_get_value_notsup(WT_CURSOR *cursor, ...)
{
- WT_UNUSED(cursor);
+ return (__wt_cursor_notsup(cursor));
+}
- return (0);
+/*
+ * __wt_cursor_set_key_notsup --
+ * WT_CURSOR.set_key not-supported.
+ */
+void
+__wt_cursor_set_key_notsup(WT_CURSOR *cursor, ...)
+{
+ (void)__wt_cursor_notsup(cursor);
+}
+
+/*
+ * __wt_cursor_set_value_notsup --
+ * WT_CURSOR.set_value not-supported.
+ */
+void
+__wt_cursor_set_value_notsup(WT_CURSOR *cursor, ...)
+{
+ (void)__wt_cursor_notsup(cursor);
+}
+
+/*
+ * __wt_cursor_compare_notsup --
+ * Unsupported cursor comparison.
+ */
+int
+__wt_cursor_compare_notsup(WT_CURSOR *a, WT_CURSOR *b, int *cmpp)
+{
+ WT_UNUSED(b);
+ WT_UNUSED(cmpp);
+
+ return (__wt_cursor_notsup(a));
+}
+
+/*
+ * __wt_cursor_equals_notsup --
+ * Unsupported cursor equality.
+ */
+int
+__wt_cursor_equals_notsup(WT_CURSOR *cursor, WT_CURSOR *other, int *equalp)
+{
+ WT_UNUSED(other);
+ WT_UNUSED(equalp);
+
+ return (__wt_cursor_notsup(cursor));
+}
+
+/*
+ * __wt_cursor_search_near_notsup --
+ * Unsupported cursor search-near.
+ */
+int
+__wt_cursor_search_near_notsup(WT_CURSOR *cursor, int *exact)
+{
+ WT_UNUSED(exact);
+
+ return (__wt_cursor_notsup(cursor));
+}
+
+/*
+ * __wt_cursor_reconfigure_notsup --
+ * Unsupported cursor reconfiguration.
+ */
+int
+__wt_cursor_reconfigure_notsup(WT_CURSOR *cursor, const char *config)
+{
+ WT_UNUSED(config);
+
+ return (__wt_cursor_notsup(cursor));
}
/*
@@ -46,13 +127,12 @@ __wt_cursor_set_notsup(WT_CURSOR *cursor)
* cursors in a session. Reconfigure is left open in case it's possible
* in the future to change these configurations.
*/
- cursor->compare =
- (int (*)(WT_CURSOR *, WT_CURSOR *, int *))__wt_cursor_notsup;
+ cursor->compare = __wt_cursor_compare_notsup;
cursor->next = __wt_cursor_notsup;
cursor->prev = __wt_cursor_notsup;
cursor->reset = __wt_cursor_noop;
cursor->search = __wt_cursor_notsup;
- cursor->search_near = (int (*)(WT_CURSOR *, int *))__wt_cursor_notsup;
+ cursor->search_near = __wt_cursor_search_near_notsup;
cursor->insert = __wt_cursor_notsup;
cursor->update = __wt_cursor_notsup;
cursor->remove = __wt_cursor_notsup;
@@ -628,7 +708,7 @@ __wt_cursor_init(WT_CURSOR *cursor,
} else {
WT_RET(
__wt_config_gets_def(session, cfg, "readonly", 0, &cval));
- if (cval.val != 0) {
+ if (cval.val != 0 || F_ISSET(S2C(session), WT_CONN_READONLY)) {
cursor->insert = __wt_cursor_notsup;
cursor->update = __wt_cursor_notsup;
cursor->remove = __wt_cursor_notsup;