-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathcursor_join.html
116 lines (116 loc) · 8.48 KB
/
cursor_join.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>WiredTiger: Join cursors</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="wiredtiger.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><a href="http://wiredtiger.com/"><img alt="Logo" src="LogoFinal-header.png" alt="WiredTiger" /></a></td>
<td style="padding-left: 0.5em;">
<div id="projectname">
 <span id="projectnumber">Version 2.8.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="banner">
<a href="https://github.com/wiredtiger/wiredtiger">Fork me on GitHub</a>
<a class="last" href="http://groups.google.com/group/wiredtiger-users">Join my user group</a>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.9.1 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="examples.html"><span>Examples</span></a></li>
<li><a href="community.html"><span>Community</span></a></li>
<li><a href="license.html"><span>License</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('cursor_join.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Join cursors </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Join cursors provide a way to iterate over a subset of a table, where the subset is specified by relationships with reference cursors.</p>
<p>A join cursor is created with <a class="el" href="struct_w_t___s_e_s_s_i_o_n.html#afb5b4a69c2c5cafe411b2b04fdc1c75d" title="Open a new cursor on a data source or duplicate an existing cursor. ">WT_SESSION::open_cursor</a> using a <code>"join:table:<name>"</code> URI prefix. Then reference cursors are positioned to keys on indices and joined to the join cursor using <a class="el" href="struct_w_t___s_e_s_s_i_o_n.html#ae0ab118df83d173c6a20eb1ea3f3fd84" title="Join a join cursor with a reference cursor. ">WT_SESSION::join</a> calls. The result is a join cursor that can be iterated to satisfy the join equation.</p>
<p>Here is an example using join cursors:</p>
<div class="fragment"><div class="line"> <span class="comment">/* Open cursors needed by the join. */</span></div>
<div class="line"> ret = session-><a class="code" href="struct_w_t___s_e_s_s_i_o_n.html#afb5b4a69c2c5cafe411b2b04fdc1c75d">open_cursor</a>(session,</div>
<div class="line"> <span class="stringliteral">"join:table:poptable"</span>, NULL, NULL, &join_cursor);</div>
<div class="line"> ret = session-><a class="code" href="struct_w_t___s_e_s_s_i_o_n.html#afb5b4a69c2c5cafe411b2b04fdc1c75d">open_cursor</a>(session,</div>
<div class="line"> <span class="stringliteral">"index:poptable:country"</span>, NULL, NULL, &cursor);</div>
<div class="line"> ret = session-><a class="code" href="struct_w_t___s_e_s_s_i_o_n.html#afb5b4a69c2c5cafe411b2b04fdc1c75d">open_cursor</a>(session,</div>
<div class="line"> <span class="stringliteral">"index:poptable:immutable_year"</span>, NULL, NULL, &cursor2);</div>
<div class="line"></div>
<div class="line"> <span class="comment">/* select values WHERE country == "AU" AND year > 1900 */</span></div>
<div class="line"> cursor-><a class="code" href="struct_w_t___c_u_r_s_o_r.html#ad1088d719df40babc1f57d086691ebdc">set_key</a>(cursor, <span class="stringliteral">"AU\0\0\0"</span>);</div>
<div class="line"> ret = cursor-><a class="code" href="struct_w_t___c_u_r_s_o_r.html#a7e25b2ced2cf3ec68bd5429bf921c79f">search</a>(cursor);</div>
<div class="line"> ret = session-><a class="code" href="struct_w_t___s_e_s_s_i_o_n.html#ae0ab118df83d173c6a20eb1ea3f3fd84">join</a>(session, join_cursor, cursor,</div>
<div class="line"> <span class="stringliteral">"compare=eq,count=10"</span>);</div>
<div class="line"> cursor2->set_key(cursor2, (uint16_t)1900);</div>
<div class="line"> ret = cursor2->search(cursor2);</div>
<div class="line"> ret = session-><a class="code" href="struct_w_t___s_e_s_s_i_o_n.html#ae0ab118df83d173c6a20eb1ea3f3fd84">join</a>(session, join_cursor, cursor2,</div>
<div class="line"> <span class="stringliteral">"compare=gt,count=10,strategy=bloom"</span>);</div>
<div class="line"></div>
<div class="line"> <span class="comment">/* List the values that are joined */</span></div>
<div class="line"> <span class="keywordflow">while</span> ((ret = join_cursor->next(join_cursor)) == 0) {</div>
<div class="line"> ret = join_cursor->get_key(join_cursor, &recno);</div>
<div class="line"> ret = join_cursor->get_value(join_cursor, &country, &year,</div>
<div class="line"> &population);</div>
<div class="line"> printf(<span class="stringliteral">"ID %"</span> PRIu64, recno);</div>
<div class="line"> printf(</div>
<div class="line"> <span class="stringliteral">": country %s, year %"</span> PRIu16 <span class="stringliteral">", population %"</span> PRIu64 <span class="stringliteral">"\n"</span>,</div>
<div class="line"> country, year, population);</div>
<div class="line"> }</div>
</div><!-- fragment --><p> Joins support various comparison operators: <code>"eq"</code>, <code>"gt"</code>, <code>"ge"</code>, <code>"lt"</code>, <code>"le"</code>. Ranges with lower and upper bounds can also be specified, by joining two cursors on the same index, for example, one with <code>"compare=ge"</code> and another <code>"compare=lt"</code>. In addition to joining indices, the main table can be joined so that a range of primary keys can be specified.</p>
<p>All the joins should be done on the join cursor before <a class="el" href="struct_w_t___c_u_r_s_o_r.html#a0503f16bd8f3d05aa3552f229b3a8e1b" title="Return the next record. ">WT_CURSOR::next</a> is called. Calling <a class="el" href="struct_w_t___c_u_r_s_o_r.html#a0503f16bd8f3d05aa3552f229b3a8e1b" title="Return the next record. ">WT_CURSOR::next</a> on a join cursor for the first time populates any bloom filters and performs other initialization. The join cursor's key is the primary key (the key for the main table), and its value is the entire set of values of the main table. A join cursor can be created with a projection by appending <code>"(col1,col2,...)"</code> to the URI if a different set of values is needed. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="index.html">Reference Guide</a></li><li class="navelem"><a class="el" href="programming.html">Writing WiredTiger applications</a></li>
<li class="footer">Copyright (c) 2008-2016 MongoDB, Inc. All rights reserved. Contact <a href="mailto:[email protected]">[email protected]</a> for more information.</li>
</ul>
</div>
</body>
</html>