diff options
author | Don Anderson <dda@ddanderson.com> | 2015-11-03 13:22:11 -0500 |
---|---|---|
committer | Don Anderson <dda@ddanderson.com> | 2015-11-03 13:22:11 -0500 |
commit | 4d204910b2cfbdb01a6d79be2a88cf04c3a58f44 (patch) | |
tree | c526552f509b25b92182ae59a62ebf731f7f81f0 /src/include/cursor.i | |
parent | 7b277f2b902f0117a10bf65dd739ef1b97dd2d3c (diff) | |
download | mongo-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.i | 64 |
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. */ |