mylsm.bend relies on unsafe/foreign
raw source on the hub · import mylsm-lsm-store@0.4.0.0/mylsm.bend as Mylsm
12 imports
import Base import ./src/Keys.bend as Keys import ./src/MemTable.bend as MemTable import ./src/SortedRun.bend as SortedRun import ./src/Sstable.bend as Sstable import ./src/SstFile.bend as SstFile import ./src/Wal.bend as Wal import ./src/Manifest.bend as Manifest import ./src/MergeIter.bend as MergeIter import ./src/Db.bend as Db import ./src/Recover.bend as Recover import bend-kit-bytes@0.3.2.0/bytes.bend as Bytes
Types
type Sess source · line 92 · raw
@-a:Quant -> @-A:Kind(a) -> Kind(a <&> &1)
--- Level 1: Sess session monad (primary API) ---
Sess@-a:Quant -> @-A:Kind(a) -> @run:(@_:0x571fd57004366c423dfd4b51196743b5/src/Db.Db -> Pair(0x571fd57004366c423dfd4b51196743b5/src/Db.Db, A)) -> Sess<a, A>
Definitions
def cmp source · line 15 · raw
@+s1:String -> @+s2:String -> Cmp
--- Level 2: part control (1:1 delegates) ---
def eq source · line 19 · raw
@+s1:String -> @+s2:String -> Bool
Key equality: true exactly for identical strings.
def mem_empty source · line 23 · raw
0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable
Empty MemTable: no entries, count zero.
def mem_put source · line 27 · raw
@tab:0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable -> @key:String -> @val:String -> 0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable
MemTable with one live version prepended (newest-first log).
def mem_del source · line 31 · raw
@tab:0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable -> @key:String -> 0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable
MemTable with one tombstone prepended; hides older versions on read.
def mem_get source · line 35 · raw
@tab:0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable -> @+key:String -> Maybe<&2, String>
Newest-first read; a tombstone answers None and hides older versions.
def mem_count source · line 39 · raw
@tab:0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable -> Nat
Number of log entries, live and tombstoned.
def sort_newest source · line 43 · raw
@entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry>
Canonicalize newest-first entries into a strict ordered run.
def range_scan source · line 47 · raw
@+merged:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @lo:String -> @hi:String -> List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry>
Range scan over a merged run: lo <= key < hi, tombstones dropped.
def sst_build source · line 51 · raw
@+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @level:Nat -> @est_keys:Nat -> 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table
Build an SSTable, canonicalizing entries newest-first.
def sst_from_sorted_unique source · line 55 · raw
@+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @level:Nat -> 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table
Build an SSTable trusting an already strict, unique run (no sorting).
def sst_build_sorted source · line 59 · raw
@+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @level:Nat -> @est_keys:Nat -> 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table
Build an SSTable from a sorted run with an explicit key estimate.
def wal_encode source · line 63 · raw
@batch:0x571fd57004366c423dfd4b51196743b5/src/Wal.Batch -> Result<&1, &1, 0x571fd57004366c423dfd4b51196743b5/src/Wal.Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
Handle wal encode in the public module exports.
def wal_decode source · line 67 · raw
@encoded:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Result<&1, &1, 0x571fd57004366c423dfd4b51196743b5/src/Wal.Error, 0x571fd57004366c423dfd4b51196743b5/src/Wal.Batch>
Handle wal decode in the public module exports.
def sst_encode source · line 71 · raw
@+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @+level:U32 -> Result<&1, &1, 0x571fd57004366c423dfd4b51196743b5/src/SstFile.Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
Encode an SST as packed v3 bytes.
def sst_parse source · line 78 · raw
@encoded:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Result<&1, &1, 0x571fd57004366c423dfd4b51196743b5/src/SstFile.Error, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>
Parse packed v3 bytes with strict bounds and checksum verification.
def mfst_serialize source · line 84 · raw
@mfst:0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest -> Result<&1, &1, 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>
Serialize a Manifest to its exact on-disk bytes.
def mfst_parse source · line 88 · raw
@encoded:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Maybe<&2, 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest>
Handle mfst parse in the public module exports.
def Sess.pure source · line 95 · raw
@-a:Quant -> @-A:Kind(a) -> @val:A -> Sess<a, A>
def Sess.run_go source · line 98 · raw
@-b:Quant -> @-B:Kind(b) -> @sess:Sess<b, B> -> @st:0x571fd57004366c423dfd4b51196743b5/src/Db.Db -> Pair(0x571fd57004366c423dfd4b51196743b5/src/Db.Db, B)
def Sess.apply source · line 102 · raw
@-a:Quant -> @-A:Kind(a) -> @-b:Quant -> @-B:Kind(b) -> @pair:Pair(0x571fd57004366c423dfd4b51196743b5/src/Db.Db, A) -> @fun:(@_:A -> Sess<b, B>) -> Pair(0x571fd57004366c423dfd4b51196743b5/src/Db.Db, B)
def Sess.bind source · line 106 · raw
@-a:Quant -> @-A:Kind(a) -> @-B:Kind(a) -> @sess:Sess<a, A> -> @fun:(@_:A -> Sess<a, B>) -> Sess<a, B>
def open source · line 110 · raw
@+dir:String -> 0x571fd57004366c423dfd4b51196743b5/src/Db.Db
Open a database handle over a directory label (pure; no IO touched).
def open_recovering source · line 114 · raw
@+dir:String -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Db.Db>)
Recover a persisted database from its directory.
def put_go source · line 118 · raw
@+db:0x571fd57004366c423dfd4b51196743b5/src/Db.Db -> @+key:String -> @+val:String -> 0x571fd57004366c423dfd4b51196743b5/src/Db.Db
Pure put transition used by the session action.
def del_go source · line 124 · raw
@+db:0x571fd57004366c423dfd4b51196743b5/src/Db.Db -> @+key:String -> 0x571fd57004366c423dfd4b51196743b5/src/Db.Db
Pure delete transition used by the session action.
def batch_go source · line 130 · raw
@+db:0x571fd57004366c423dfd4b51196743b5/src/Db.Db -> @+muts:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/Wal.Mut> -> 0x571fd57004366c423dfd4b51196743b5/src/Db.Db
Pure batch transition used by the session action.
def sget_go source · line 136 · raw
@+db:0x571fd57004366c423dfd4b51196743b5/src/Db.Db -> @+key:String -> Pair(0x571fd57004366c423dfd4b51196743b5/src/Db.Db, Maybe<&2, String>)
Pure point-read transition used by the session action (cache-backed).
def sput source · line 140 · raw
@+key:String -> @+val:String -> Sess<&2, Unit>
Session step writing one key.
def sdel source · line 144 · raw
@+key:String -> Sess<&2, Unit>
Session step deleting one key.
def sbatch source · line 148 · raw
@+muts:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/Wal.Mut> -> Sess<&2, Unit>
Session step applying a whole mutation batch at once.
def sget source · line 152 · raw
@+key:String -> Sess<&2, Maybe<&2, String>>
Session step reading one key.
def run_sess source · line 156 · raw
@-a:Quant -> @-A:Kind(a) -> @st:0x571fd57004366c423dfd4b51196743b5/src/Db.Db -> @sess:Sess<a, A> -> Pair(0x571fd57004366c423dfd4b51196743b5/src/Db.Db, A)
Execute a whole session against a handle.
def value_of source · line 160 · raw
@-a:Quant -> @-A:Kind(a) -> @pair:Pair(0x571fd57004366c423dfd4b51196743b5/src/Db.Db, A) -> A
Project the answer out of a runner pair.