def read.loop

mylsm-lsm-store@0.6.0.1 · src/ByteSstIo.bend:184

import mylsm-lsm-store@0.6.0.1/src/ByteSstIo.bend as ByteSstIo
import Base
import mylsm-lsm-store@0.6.0.1/src/ByteMemTable.bend as ByteMemTable
import mylsm-lsm-store@0.6.0.1/src/scan/ByteBlockReader.bend as ByteBlockReader

184def read.loop(fuel: Nat, state: ReadState) -> IO(Result<&1, &1, U32 & String, ByteMemTable.Table>):
185  match fuel:
186    case 0n:
187      match state:
188        case ReadNeed{reader, _}:
189          do IO<Result<&1, &1, U32 & String, ByteMemTable.Table>>:
190            _closed : Result<&1, &1, U32 & String, Unit> <- ByteBlockReader.close(reader)
191            return Fail{corruption("byte SST block count exceeded reader limit")}
192        case ReadStep{result, _}:
193          match result:
194            case Done{ByteBlockReader.Block{reader, _}}:
195              do IO<Result<&1, &1, U32 & String, ByteMemTable.Table>>:
196                _closed : Result<&1, &1, U32 & String, Unit> <- ByteBlockReader.close(reader)
197                return Fail{corruption("byte SST block count exceeded reader limit")}
198            case _: IO.pure(Result<&1, &1, U32 & String, ByteMemTable.Table>,
199              Fail{corruption("byte SST reader exhausted its transition limit")})
200    case 1n+rest:
201      match state:
202        case ReadNeed{reader, table}:
203          do IO<Result<&1, &1, U32 & String, ByteMemTable.Table>>:
204            result : Result<&1, &1, U32 & String, ByteBlockReader.Step> <-
205              ByteBlockReader.next(reader)
206            read.loop(rest, ReadStep{result, table})
207        case ReadStep{result, table}:
208          match result:
209            case Fail{error}:
210              IO.pure(Result<&1, &1, U32 & String, ByteMemTable.Table>, Fail{error})
211            case Done{ByteBlockReader.End{}}:
212              IO.pure(Result<&1, &1, U32 & String, ByteMemTable.Table>, Done{table})
213            case Done{ByteBlockReader.Block{reader, entries}}:
214              read.loop(rest, ReadNeed{reader, read.fold(entries, table)})

Uses (16)

Used by (1)