/*
 * Description  : Notice the query hint to use an indexed nested-loops join plan. 
 *              : We expect a plan that broadcasts internal dataset DsTwo, then probes internal dataset DsOne’s primary index. 
 * Expected Res : Success
 * Date         : 29th November 2012
 */

drop dataverse test1 if exists;
create dataverse test1;

create type test1.TestType as open {
          key1: int32,
          key2: int32,
          fname : string,
          lname : string
}

create dataset test1.DsOne(TestType) partitioned by key key1;
create dataset test1.DsTwo(TestType) partitioned by key key1;

// Please note content enclosed in the comment in the predicate is the HINT to the optimizer

write output to nc1:"rttest/btree-index-join_primary-ge-join_02.adm";

for $x in dataset('test1.DsOne')
for $y in dataset('test1.DsTwo')
where $x.key2 /*+ indexnl */ <= $y.key1
return $x

