/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
/*
 * Description    : Fuzzy joins two datasets, DBLP and CSX, based on ~= using Jaccard of their titles' 3-gram tokens.
 *                  DBLP has a 3-gram index on title, 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;
set import-private-functions 'true';

create type DBLPTypetmp as open {
  id: int32,
  dblpid: string,
  authors: string,
  misc: string
}

create type CSXTypetmp as open {
  id: int32,
  csxid: string,
  authors: string,
  misc: string
}

create type DBLPType as closed {
  nested : DBLPTypetmp
}

create type CSXType as closed {
  nested : CSXTypetmp
}

create dataset DBLP(DBLPType) primary key nested.id;

create dataset CSX(CSXType) primary key nested.id;

create index ngram_index_DBLP on DBLP(nested.title: string?) type ngram(3) enforced;

create index ngram_index_CSX on CSX(nested.title: string?) type ngram(3) enforced;

write output to asterix_nc1:"rttest/inverted-index-join_ngram-fuzzyeq-jaccard_01.adm";

set simfunction 'jaccard';
set simthreshold '0.5f';

for $a in dataset('DBLP')
for $b in dataset('CSX')
where gram-tokens($a.nested.title, 3, false) ~= gram-tokens($b.nested.title, 3, false) and $a.nested.id < $b.nested.id
return {"arec": $a, "brec": $b }
