<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-AU link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal>Dear All,<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>I am trying to use BDB secondary DB indices stuff for my
project, where I want to use BDB as column table.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>If you run test.py from the attached source code, you will
be able to get different random search results with random input data.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>My situation is, when we do one cursor iteration use
Dbc.set_range() and Dbc.next(), we are able to iterate through first matched
item till the end of the cursor.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>But, when I join such different index(secondary db) cursors
using Db.join(cursorList), the cursor I get is very restricted.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Following is the detailed example.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Columns of my data:<o:p></o:p></p>

<p class=MsoNormal>Name: string &#8211; Random strings<o:p></o:p></p>

<p class=MsoNormal>Age: int &#8211; Random Range (10 to 20)<o:p></o:p></p>

<p class=MsoNormal>Marks: int &#8211; Random Range (50-60)<o:p></o:p></p>

<p class=MsoNormal>Hobby: string &#8211; Random Choice (charity, chess,
cricket, dancing, singing, somersaulting, tasting wine)<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>If I query for Age using .set_range(14), I get all items which
have Age&gt;=14 (<b>That&#8217;s what we expect. This is OK</b>)<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>If I query for Age using .set_range(14) and Marks using
.set_range(55), I get items matching exactly Age=14 and Marks=55. <b>(Here is
my doubt #1)</b><o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>If I query for Age using .set_range(14) and Marks using
.set_range(55) and hobby using .set_range(&#8220;c&#8221;),<o:p></o:p></p>

<p class=MsoNormal>I get records matching exactly Age=14, Marks=55 and hobby=&#8221;charity&#8221;
(charity is lexicographically first match for &#8220;c&#8221;) &#8211; <b>(This
is my doubt #2)<o:p></o:p></b></p>

<p class=MsoNormal><b><o:p>&nbsp;</o:p></b></p>

<p class=MsoNormal><b>So, I believe my doubt #1 and #2 are related and narrows
down to as follows:<o:p></o:p></b></p>

<p class=MsoNormal><b>When we use joined cursor, natural join behaves like first
match key among each cursor and unique primary keys available for each cursors
first match secondary duplicate keys. So, whats expected behaviour for joined
cursors?</b><o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>In my doubt #1 scenario, I would expect, I should get all
matches for Age&gt;=14 and Marks&gt;=55.<o:p></o:p></p>

<p class=MsoNormal>In my doubt # 2 scenario, I would expect, I should get all
matches for hobby starting with &#8220;c&#8221; and Age&gt;=14 and Marks&gt;=55.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Please correct my understading.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span style='font-size:9.0pt;font-family:"Arial","sans-serif";
color:silver'>____________________________________<br>
Sury Prakash Soni<br>
____________________________________</span><o:p></o:p></p>

</div>

</body>

</html>