def batch.build
mylsm-lsm-store@0.6.0.1 · src/ByteDurableDb.bend:1603
import mylsm-lsm-store@0.6.0.1/src/ByteDurableDb.bend as ByteDurableDb
import Base
import mylsm-lsm-store@0.6.0.1/src/ByteMemTable.bend as ByteMemTable
import mylsm-lsm-store@0.6.0.1/src/ByteWal.bend as ByteWal
1603def batch.build(fuel: Nat, state: BatchBuildState) -> ByteMemTable.Table & List<&1, ByteWal.Mutation>:
1604 match fuel:
1605 case 0n:
1606 match state:
1607 case BatchBuild{_, table, reversed}:
1608 (table, List.reverse(&1, ByteWal.Mutation, reversed))
1609 case BatchBuildPut{_, _, _, table, reversed}:
1610 (table, List.reverse(&1, ByteWal.Mutation, reversed))
1611 case BatchBuildDelete{_, _, table, reversed}:
1612 (table, List.reverse(&1, ByteWal.Mutation, reversed))
1613 case 1n+rest:
1614 match state:
1615 case BatchBuild{mutations, table, reversed}:
1616 match mutations:
1617 case Nil{}:
1618 (table, List.reverse(&1, ByteWal.Mutation, reversed))
1619 case Con{ByteWal.Put{key, value}, tail}:
1620 batch.build(rest, BatchBuildPut{ByteMemTable.bytes.clone(key),
1621 ByteMemTable.bytes.clone(value), tail, table, reversed})
1622 case Con{ByteWal.Delete{key}, tail}:
1623 batch.build(rest, BatchBuildDelete{ByteMemTable.bytes.clone(key),
1624 tail, table, reversed})
1625 case BatchBuildPut{keys, values, tail, table, reversed}:
1626 match keys:
1627 case (candidate_key, wal_key):
1628 match values:
1629 case (candidate_value, wal_value):
1630 batch.build(rest, BatchBuild{tail,
1631 ByteMemTable.put(table, candidate_key, candidate_value),
1632 Con{ByteWal.Put{wal_key, wal_value}, reversed}})
1633 case BatchBuildDelete{keys, tail, table, reversed}:
1634 match keys:
1635 case (candidate_key, wal_key):
1636 batch.build(rest, BatchBuild{tail, ByteMemTable.del(table, candidate_key),
1637 Con{ByteWal.Delete{wal_key}, reversed}})