~/bend-docscommunity

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

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.