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}})

Uses (11)

Used by (1)