
Андрей Платов
Итак, из вчерашнего мы узнали, что сердце моего движка запросов - Leapfrog Triejoin алгоритм. Надо закончить с выбором плана и построением соответствующих итераторов.
В общем, после всей ебаты на 300 строк, оно заработало. Сам join проще простого:
var join: TrieJoin[TrieIter]
join.init(plan)
proc joinOn(v: int) =
var leapfrog = join.open
while not leapfrog.atEnd:
echo q.vars[v].name, " <- ", leapfrog.key.key
if v < q.vars.len - 1:
joinOn(v + 1)
leapfrog.next
join.up
joinOn(0)
Результат под тегом day-170103
.