Files
secondo/bin/Scripts/DACinSecondo.sec
2026-01-23 17:03:45 +08:00

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