43 lines
1.2 KiB
Plaintext
43 lines
1.2 KiB
Plaintext
# In this example, the order of tuples in relation Orte is reversed by a DAC algorithm. Initially, one task is created for each tuple in this relation. Then, in each step the number of tasks is halved, merging the tuple sets of two adjacent tasks, until just one task is left.
|
|
|
|
|
|
|
|
|
|
let Tasks = Orte feed addcounter[C, 1] nest[C; Tuples]
|
|
addcounter[D, 2] project[C, D, Tuples] consume
|
|
|
|
|
|
while (Tasks count) > 1 do
|
|
if ((Tasks count) mod 2) = 0 then
|
|
update Tasks :=
|
|
Tasks feed filter[(.C mod 2) = 1] remove[C]
|
|
Tasks feed remove[D] renameattr[Tuples2: Tuples]
|
|
mergejoin[D, C]
|
|
projectextend[; Tuples: .Tuples2 afeed .Tuples afeed concat aconsume]
|
|
addcounter[C, 1] addcounter[D, 2]
|
|
project[C, D, Tuples]
|
|
consume
|
|
else
|
|
update Tasks :=
|
|
Tasks feed head[1]
|
|
Tasks feed filter[(.D mod 2) = 1] remove[C]
|
|
Tasks feed remove[D] renameattr[Tuples2: Tuples]
|
|
mergejoin[D, C]
|
|
projectextend[; Tuples: .Tuples2 afeed .Tuples afeed concat aconsume]
|
|
addcounter[C, 2] addcounter[D, 3]
|
|
project[C, D, Tuples]
|
|
concat
|
|
consume
|
|
endif
|
|
endwhile
|
|
|
|
|
|
query Tasks feed unnest[Tuples] count
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|