# static joins on arrays # 1. hashjoin query LINEITEM_25 loop[. feed LINEITEM2 feed {x} hashjoin[L_PARTKEY, L_PARTKEY_x, 997] count] tie[. + ..]; # 2. product filter query LINEITEM_25 loop[. feed LINEITEM2 feed {x} symmproduct[.L_PARTKEY = ..L_PARTKEY_x] count] tie[. + ..]; query LINEITEM_25 loop[. feed LINEITEM2 feed {x} product filter[.L_PARTKEY = .L_PARTKEY_x] count] tie[. + ..]; # 2a. Non Equi Joins query LINEITEM_25 loop[. feed LINEITEM2 feed {x} symmproduct[.L_PARTKEY >= ..L_PARTKEY_x] count] tie[. + ..]; query LINEITEM_25 loop[. feed LINEITEM2 feed {x} product filter[.L_PARTKEY >= .L_PARTKEY_x] count] tie[. + ..]; # 3. sortmergejoin query LINEITEM_25 loop[. feed LINEITEM2 feed {x} sortmergejoin[L_PARTKEY, L_PARTKEY_x] count] tie[. + ..]; # 4. loopjoin query LINEITEM_25 loop[. feed {x} loopjoin[fun(t1: TUPLE) LINEITEM2 feed filter[.L_PARTKEY = attr(t1, L_PARTKEY_x)]] count] tie[. + ..]; # 5. index loop join variant 1: Probe every tuple in the array with the btree query LINEITEM_25 loop[. feed {x} loopjoin[fun(t1: TUPLE) LINEITEM_L_PARTKEY LINEITEM exactmatch[attr(t1, L_PARTKEY_x)]] count] tie[. + ..]; query LINEITEM_25 loop[. feed {x} loopjoin[fun(t1: TUPLE) LINEITEM_L_PARTKEY LINEITEM rightrange[attr(t1, L_PARTKEY_x)]] count] tie[. + ..]; # 6. index loop join variant 2: Probe every tuple of a single relation with the array of indexes #query LINEITEM_L_PARTKEY_25 LINEITEM_25 loopa[fun(e1: ELEMENT, e2:ELEMENT2) e1 e2 exactmatch[20] count] tie[. + ..]; #query LINEITEM_L_PARTKEY_25 LINEITEM_25 loopa[fun(e1: ELEMENT, e2:ELEMENT2) LINEITEM2 feed fun(t1: TUPLE) e1 e2 exactmatch[attr(t1,L_PARTKEY)] count] tie[. + ..]; #(query (loopa LINEITEM_L_PARTKEY_25 LINEITEM_25 (fun (e1 ELEMENT) (e2 ELEMENT2) (count ((feed LINEITEM2) (fun (tuple1 TUPLE) (exactmatch e1 e2 (attr tuple1 L_PARTKEY) ))))))) # Overhead with materialization !!!! # Not possible with LINEITEM_100: too many open files! query LINEITEM_25 loop[. feed LINEITEM2 feed {x} hashjoin[L_PARTKEY, L_PARTKEY_x, 997] consume] loop[. count] tie[. + ..];