summaryrefslogtreecommitdiff
path: root/src/include/cursor.i
diff options
context:
space:
mode:
authorDon Anderson <dda@ddanderson.com>2015-11-03 13:22:11 -0500
committerDon Anderson <dda@ddanderson.com>2015-11-03 13:22:11 -0500
commit4d204910b2cfbdb01a6d79be2a88cf04c3a58f44 (patch)
treec526552f509b25b92182ae59a62ebf731f7f81f0 /src/include/cursor.i
parent7b277f2b902f0117a10bf65dd739ef1b97dd2d3c (diff)
downloadmongo-4d204910b2cfbdb01a6d79be2a88cf04c3a58f44.tar.gz
WT-1315. Added support for join cursors:
- "join:" URI handling added to WT_SESSION::open_cursor, added WT_SESSION::join. - Added support for in-memory bloom filters. - Minor fix to cur_dump_close CURSOR_API_CALL. - Some refactoring in __wt_{curindex,curtable}_get_value() to allow them to be called internally. - Use new macro JOINABLE_CURSOR_API_CALL() instead of CURSOR_API_CALL() to trap illegal calls to joined cursor. - __wt_curtable_open now takes an owning cursor arg. - Added __wt_struct_unpack_size() and __wt_struct_repack()
Diffstat (limited to 'src/include/cursor.i')
-rw-r--r--src/include/cursor.i64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/include/cursor.i b/src/include/cursor.i
index c6ce04cab6f..7f90e43ed6c 100644
--- a/src/include/cursor.i
+++ b/src/include/cursor.i
@@ -139,6 +139,70 @@ __curfile_leave(WT_CURSOR_BTREE *cbt)
}
/*
+ * __wt_curindex_get_value_ap --
+ * Internal implementation of WT_CURSOR->get_value for index cursors
+ */
+static inline int
+__wt_curindex_get_value_ap(WT_CURSOR *cursor, va_list ap)
+{
+ WT_CURSOR_INDEX *cindex;
+ WT_DECL_RET;
+ WT_ITEM *item;
+ WT_SESSION_IMPL *session;
+
+ cindex = (WT_CURSOR_INDEX *)cursor;
+ session = (WT_SESSION_IMPL *)cursor->session;
+ WT_CURSOR_NEEDVALUE(cursor);
+
+ if (F_ISSET(cursor, WT_CURSOR_RAW_OK)) {
+ ret = __wt_schema_project_merge(session,
+ cindex->cg_cursors, cindex->value_plan,
+ cursor->value_format, &cursor->value);
+ if (ret == 0) {
+ item = va_arg(ap, WT_ITEM *);
+ item->data = cursor->value.data;
+ item->size = cursor->value.size;
+ }
+ } else
+ ret = __wt_schema_project_out(session,
+ cindex->cg_cursors, cindex->value_plan, ap);
+err: return (ret);
+}
+
+/*
+ * __wt_curtable_get_value_ap --
+ * Internal implementation of WT_CURSOR->get_value for table cursors.
+ */
+static inline int
+__wt_curtable_get_value_ap(WT_CURSOR *cursor, va_list ap)
+{
+ WT_CURSOR *primary;
+ WT_CURSOR_TABLE *ctable;
+ WT_DECL_RET;
+ WT_ITEM *item;
+ WT_SESSION_IMPL *session;
+
+ ctable = (WT_CURSOR_TABLE *)cursor;
+ session = (WT_SESSION_IMPL *)cursor->session;
+ primary = *ctable->cg_cursors;
+ WT_CURSOR_NEEDVALUE(primary);
+
+ if (F_ISSET(cursor, WT_CURSOR_RAW_OK)) {
+ ret = __wt_schema_project_merge(session,
+ ctable->cg_cursors, ctable->plan,
+ cursor->value_format, &cursor->value);
+ if (ret == 0) {
+ item = va_arg(ap, WT_ITEM *);
+ item->data = cursor->value.data;
+ item->size = cursor->value.size;
+ }
+ } else
+ ret = __wt_schema_project_out(session,
+ ctable->cg_cursors, ctable->plan, ap);
+err: return (ret);
+}
+
+/*
* __wt_cursor_dhandle_incr_use --
* Increment the in-use counter in cursor's data source.
*/