/*
 * Description    : Fuzzy self joins a dataset, Customers, based on ~= using Jaccard of its interest sets.
 *                  Customers has a keyword index on interests, and we expect the join to be transformed into an indexed nested-loop join.
 * Success        : Yes
 */

drop dataverse test if exists;
create dataverse test;
use dataverse test;

create type AddressType as closed {
  number: int32, 
  street: string,
  city: string
}

create type CustomerType as closed {
  cid: int32, 
  name: string,
  age: int32?,
  address: AddressType?,
  interests: {{string}},
  children: [ { name: string, age: int32? } ]
}

create dataset Customers(CustomerType) partitioned by key cid;
  
create index interests_index on Customers(interests) type keyword;

write output to nc1:"rttest/inverted-index-join_ulist-fuzzyeq-jaccard_03.adm";

set simfunction 'jaccard';
set simthreshold '0.7f';

for $a in dataset('Customers')
for $b in dataset('Customers')
where $a.interests /*+ indexnl */ ~= $b.interests and $a.cid < $b.cid
return {"arec": $a, "brec": $b }
